From f8c8703595236ae70fdf8789ecb656ea0bcdcf46 Mon Sep 17 00:00:00 2001
From: Michael Darakananda <pongad@google.com>
Date: Fri, 16 Mar 2018 17:48:09 +1100
Subject: [PATCH] update from googleapis (#56)

googleapis: b12480746ea88ceb84bbdd1df336deef831dd9bb
---
 .../api/servicemanagement/v1/resources.pb.go  |  185 +-
 .../servicemanagement/v1/servicemanager.pb.go |  181 +-
 .../cloud/speech/v1p1beta1/cloud_speech.pb.go |  345 +-
 .../texttospeech/v1beta1/cloud_tts.pb.go      |  122 +-
 .../v1p1beta1/video_intelligence.pb.go        | 1551 +++
 googleapis/devtools/cloudtrace/v1/trace.pb.go |    2 +
 googleapis/privacy/dlp/v2/dlp.pb.go           | 9624 +++++++++++++++++
 googleapis/privacy/dlp/v2/storage.pb.go       | 1614 +++
 8 files changed, 13285 insertions(+), 339 deletions(-)
 create mode 100644 googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go
 create mode 100644 googleapis/privacy/dlp/v2/dlp.pb.go
 create mode 100644 googleapis/privacy/dlp/v2/storage.pb.go

diff --git a/googleapis/api/servicemanagement/v1/resources.pb.go b/googleapis/api/servicemanagement/v1/resources.pb.go
index 94906476..8b303764 100644
--- a/googleapis/api/servicemanagement/v1/resources.pb.go
+++ b/googleapis/api/servicemanagement/v1/resources.pb.go
@@ -46,6 +46,7 @@ import fmt "fmt"
 import math "math"
 import _ "google.golang.org/genproto/googleapis/api/annotations"
 import google_api2 "google.golang.org/genproto/googleapis/api/configchange"
+import _ "google.golang.org/genproto/googleapis/api/metric"
 import _ "google.golang.org/genproto/googleapis/api/serviceconfig"
 import _ "google.golang.org/genproto/googleapis/longrunning"
 import _ "github.com/golang/protobuf/ptypes/any"
@@ -65,21 +66,22 @@ var _ = math.Inf
 // proto package needs to be updated.
 const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
-// Code describes the status of one operation step.
+// Code describes the status of the operation (or one of its steps).
 type OperationMetadata_Status int32
 
 const (
 	// Unspecifed code.
 	OperationMetadata_STATUS_UNSPECIFIED OperationMetadata_Status = 0
-	// The step has completed without errors.
+	// The operation or step has completed without errors.
 	OperationMetadata_DONE OperationMetadata_Status = 1
-	// The step has not started yet.
+	// The operation or step has not started yet.
 	OperationMetadata_NOT_STARTED OperationMetadata_Status = 2
-	// The step is in progress.
+	// The operation or step is in progress.
 	OperationMetadata_IN_PROGRESS OperationMetadata_Status = 3
-	// The step has completed with errors.
+	// The operation or step has completed with errors. If the operation is
+	// rollbackable, the rollback completed with errors too.
 	OperationMetadata_FAILED OperationMetadata_Status = 4
-	// The step has completed with cancellation.
+	// The operation or step has completed with cancellation.
 	OperationMetadata_CANCELLED OperationMetadata_Status = 5
 )
 
@@ -148,6 +150,12 @@ const (
 	//
 	// $protoc --include_imports --include_source_info test.proto -o out.pb
 	ConfigFile_FILE_DESCRIPTOR_SET_PROTO ConfigFile_FileType = 4
+	// Uncompiled Proto file. Used for storage and display purposes only,
+	// currently server-side compilation is not supported. Should match the
+	// inputs to 'protoc' command used to generated FILE_DESCRIPTOR_SET_PROTO. A
+	// file of this type can only be included if at least one file of type
+	// FILE_DESCRIPTOR_SET_PROTO is included.
+	ConfigFile_PROTO_FILE ConfigFile_FileType = 6
 )
 
 var ConfigFile_FileType_name = map[int32]string{
@@ -156,6 +164,7 @@ var ConfigFile_FileType_name = map[int32]string{
 	2: "OPEN_API_JSON",
 	3: "OPEN_API_YAML",
 	4: "FILE_DESCRIPTOR_SET_PROTO",
+	6: "PROTO_FILE",
 }
 var ConfigFile_FileType_value = map[string]int32{
 	"FILE_TYPE_UNSPECIFIED":     0,
@@ -163,6 +172,7 @@ var ConfigFile_FileType_value = map[string]int32{
 	"OPEN_API_JSON":             2,
 	"OPEN_API_YAML":             3,
 	"FILE_DESCRIPTOR_SET_PROTO": 4,
+	"PROTO_FILE":                6,
 }
 
 func (x ConfigFile_FileType) String() string {
@@ -183,10 +193,13 @@ const (
 	// The Rollout has been cancelled. This can happen if you have overlapping
 	// Rollout pushes, and the previous ones will be cancelled.
 	Rollout_CANCELLED Rollout_RolloutStatus = 3
-	// The Rollout has failed. It is typically caused by configuration errors.
+	// The Rollout has failed and the rollback attempt has failed too.
 	Rollout_FAILED Rollout_RolloutStatus = 4
 	// The Rollout has not started yet and is pending for execution.
 	Rollout_PENDING Rollout_RolloutStatus = 5
+	// The Rollout has failed and rolled back to the previous successful
+	// Rollout.
+	Rollout_FAILED_ROLLED_BACK Rollout_RolloutStatus = 6
 )
 
 var Rollout_RolloutStatus_name = map[int32]string{
@@ -196,6 +209,7 @@ var Rollout_RolloutStatus_name = map[int32]string{
 	3: "CANCELLED",
 	4: "FAILED",
 	5: "PENDING",
+	6: "FAILED_ROLLED_BACK",
 }
 var Rollout_RolloutStatus_value = map[string]int32{
 	"ROLLOUT_STATUS_UNSPECIFIED": 0,
@@ -204,6 +218,7 @@ var Rollout_RolloutStatus_value = map[string]int32{
 	"CANCELLED":                  3,
 	"FAILED":                     4,
 	"PENDING":                    5,
+	"FAILED_ROLLED_BACK":         6,
 }
 
 func (x Rollout_RolloutStatus) String() string {
@@ -642,9 +657,10 @@ func _Rollout_OneofSizer(msg proto.Message) (n int) {
 	return n
 }
 
-// Strategy that specifies how Google Service Control should select
-// different
-// versions of service configurations based on traffic percentage.
+// Strategy that specifies how clients of Google Service Controller want to
+// send traffic to use different config versions. This is generally
+// used by API proxy to split traffic based on your configured precentage for
+// each config version.
 //
 // One example of how to gradually rollout a new service configuration using
 // this
@@ -725,78 +741,81 @@ func init() {
 func init() { proto.RegisterFile("google/api/servicemanagement/v1/resources.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 1166 bytes of a gzipped FileDescriptorProto
+	// 1201 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x8e, 0xdb, 0x44,
-	0x10, 0xaf, 0xf3, 0xe7, 0xee, 0x32, 0xb9, 0x0b, 0xee, 0x96, 0xf6, 0xd2, 0xd0, 0x3f, 0xc1, 0x15,
-	0xd2, 0x49, 0x48, 0x0e, 0x0d, 0x08, 0x28, 0x95, 0x5a, 0xe5, 0x12, 0xdf, 0x61, 0xc8, 0xd9, 0xee,
-	0xda, 0x07, 0x2a, 0x5f, 0xac, 0xad, 0xbd, 0x71, 0x4d, 0x13, 0xdb, 0xb2, 0x37, 0x27, 0x45, 0xfd,
-	0xc8, 0x0b, 0xf0, 0x0c, 0x7c, 0x81, 0x47, 0xe1, 0x03, 0x4f, 0x00, 0x2f, 0x83, 0xbc, 0x5e, 0xdf,
-	0xe5, 0xcf, 0xa1, 0x14, 0xf8, 0x92, 0xec, 0xfc, 0x66, 0xf6, 0x37, 0xb3, 0xb3, 0x33, 0xb3, 0x86,
-	0x5e, 0x10, 0xc7, 0xc1, 0x94, 0xf6, 0x48, 0x12, 0xf6, 0x32, 0x9a, 0x5e, 0x84, 0x1e, 0x9d, 0x91,
-	0x88, 0x04, 0x74, 0x46, 0x23, 0xd6, 0xbb, 0x78, 0xdc, 0x4b, 0x69, 0x16, 0xcf, 0x53, 0x8f, 0x66,
-	0x6a, 0x92, 0xc6, 0x2c, 0x46, 0x0f, 0x8b, 0x0d, 0x2a, 0x49, 0x42, 0x75, 0x63, 0x83, 0x7a, 0xf1,
-	0xb8, 0x73, 0x6f, 0x89, 0x91, 0x44, 0x51, 0xcc, 0x08, 0x0b, 0xe3, 0x48, 0x6c, 0xef, 0x3c, 0x58,
-	0xd2, 0x7a, 0x71, 0x34, 0x09, 0x03, 0xd7, 0x7b, 0x4d, 0xa2, 0x80, 0x0a, 0x7d, 0x7b, 0x33, 0x1e,
-	0xa1, 0x79, 0x24, 0x34, 0xd3, 0x38, 0x0a, 0xd2, 0x79, 0x14, 0x85, 0x51, 0xd0, 0x8b, 0x13, 0x9a,
-	0xae, 0xd0, 0xdf, 0x15, 0x46, 0x5c, 0x7a, 0x35, 0x9f, 0xf4, 0x48, 0xb4, 0x10, 0xaa, 0xee, 0xba,
-	0x6a, 0x12, 0xd2, 0xa9, 0xef, 0xce, 0x48, 0xf6, 0x46, 0x58, 0xdc, 0x5b, 0xb7, 0xc8, 0x58, 0x3a,
-	0xf7, 0x98, 0xd0, 0x3e, 0x5c, 0xd7, 0xb2, 0x70, 0x46, 0x33, 0x46, 0x66, 0x89, 0x30, 0x38, 0x14,
-	0x06, 0x69, 0xe2, 0xf5, 0x32, 0x46, 0xd8, 0x5c, 0x04, 0xa5, 0x78, 0xd0, 0x3a, 0xe3, 0x29, 0xf2,
-	0xed, 0xe2, 0x44, 0xe8, 0x43, 0xd8, 0x17, 0x87, 0x73, 0x23, 0x32, 0xa3, 0xed, 0x4a, 0x57, 0x3a,
-	0x6a, 0xe0, 0xa6, 0xc0, 0x0c, 0x32, 0xa3, 0x48, 0x85, 0x5b, 0x49, 0x1a, 0xfb, 0x73, 0x8f, 0xa6,
-	0x6e, 0x92, 0xc6, 0x3f, 0x52, 0x8f, 0xb9, 0xa1, 0xdf, 0xae, 0x72, 0xcb, 0x9b, 0xa5, 0xca, 0x2a,
-	0x34, 0xba, 0xaf, 0xfc, 0x55, 0x85, 0x9b, 0x66, 0x99, 0x8e, 0x33, 0xca, 0x88, 0x4f, 0x18, 0x41,
-	0x1f, 0x41, 0xab, 0xbc, 0x40, 0xee, 0x29, 0x6b, 0x4b, 0xdd, 0xea, 0x51, 0x03, 0x1f, 0x94, 0x68,
-	0xee, 0x2b, 0x43, 0x67, 0x50, 0xcf, 0x18, 0x4d, 0xb2, 0x76, 0xa5, 0x5b, 0x3d, 0x6a, 0xf6, 0xbf,
-	0x50, 0xb7, 0x5c, 0xb2, 0xba, 0xe1, 0x49, 0xb5, 0x19, 0x4d, 0x70, 0xc1, 0x82, 0x7a, 0x3c, 0xf6,
-	0x20, 0xa5, 0x59, 0xe6, 0x26, 0x34, 0xf5, 0x68, 0xc4, 0x48, 0x40, 0x79, 0xec, 0x75, 0x8c, 0x4a,
-	0x95, 0x75, 0xa9, 0x41, 0x4f, 0x00, 0x32, 0x46, 0x52, 0xe6, 0xe6, 0x39, 0x6d, 0xd7, 0xba, 0xd2,
-	0x51, 0xb3, 0xdf, 0x29, 0x83, 0x28, 0x13, 0xae, 0x3a, 0x65, 0xc2, 0x71, 0x83, 0x5b, 0xe7, 0x72,
-	0xe7, 0x2d, 0xd4, 0x72, 0xd7, 0xa8, 0x0b, 0x4d, 0x9f, 0x66, 0x5e, 0x1a, 0x26, 0x79, 0x58, 0x65,
-	0x46, 0x97, 0x20, 0xf4, 0x02, 0x76, 0x8a, 0x6b, 0xe1, 0x0e, 0x5a, 0xfd, 0x27, 0xff, 0xe9, 0x94,
-	0x39, 0x01, 0x16, 0x44, 0x4a, 0x00, 0x3b, 0x05, 0x82, 0xee, 0x00, 0xb2, 0x9d, 0x81, 0x73, 0x6e,
-	0xbb, 0xe7, 0x86, 0x6d, 0x69, 0x43, 0xfd, 0x44, 0xd7, 0x46, 0xf2, 0x0d, 0xb4, 0x07, 0xb5, 0x91,
-	0x69, 0x68, 0xb2, 0x84, 0xde, 0x83, 0xa6, 0x61, 0x3a, 0xae, 0xed, 0x0c, 0xb0, 0xa3, 0x8d, 0xe4,
-	0x4a, 0x0e, 0xe8, 0x86, 0x6b, 0x61, 0xf3, 0x14, 0x6b, 0xb6, 0x2d, 0x57, 0x11, 0xc0, 0xce, 0xc9,
-	0x40, 0x1f, 0x6b, 0x23, 0xb9, 0x86, 0x0e, 0xa0, 0x31, 0x1c, 0x18, 0x43, 0x6d, 0x9c, 0x8b, 0x75,
-	0xe5, 0x37, 0x09, 0x60, 0x14, 0x92, 0x20, 0x8a, 0x33, 0x16, 0x7a, 0xa8, 0x03, 0x7b, 0xd3, 0xd8,
-	0xe3, 0xa1, 0xb5, 0x25, 0x7e, 0xd2, 0x4b, 0x19, 0x8d, 0xa0, 0xf6, 0x26, 0x8c, 0x7c, 0x9e, 0x81,
-	0x56, 0xff, 0x93, 0xad, 0x87, 0xbc, 0xa2, 0x55, 0xbf, 0x0d, 0x23, 0x1f, 0xf3, 0xdd, 0xa8, 0x0d,
-	0xbb, 0x33, 0x9a, 0x65, 0xe5, 0xb5, 0x35, 0x70, 0x29, 0x2a, 0x0f, 0xa0, 0x96, 0xdb, 0xa1, 0x26,
-	0xec, 0x7e, 0x3f, 0xc0, 0x86, 0x6e, 0x9c, 0xca, 0x37, 0x50, 0x03, 0xea, 0x1a, 0xc6, 0x26, 0x96,
-	0x25, 0x85, 0xc0, 0xfe, 0x90, 0x37, 0xb6, 0xcd, 0x0b, 0x0c, 0xb5, 0xa0, 0x12, 0xfa, 0xed, 0x3a,
-	0x27, 0xa9, 0x84, 0x3e, 0x1a, 0x40, 0x7d, 0x12, 0x4e, 0x69, 0x59, 0x6b, 0x1f, 0x6f, 0x0d, 0xb0,
-	0x60, 0x3b, 0x09, 0xa7, 0x14, 0x17, 0x3b, 0x95, 0x5f, 0x2b, 0x00, 0x57, 0x28, 0xfa, 0x00, 0x1a,
-	0x39, 0xee, 0x26, 0x84, 0xbd, 0x2e, 0xd3, 0x91, 0x03, 0x16, 0x61, 0xaf, 0xd1, 0x23, 0x38, 0xe0,
-	0x4a, 0x2f, 0x8e, 0x18, 0x8d, 0x58, 0xc6, 0x8f, 0xb3, 0x8f, 0xf7, 0x73, 0x70, 0x28, 0x30, 0xf4,
-	0x42, 0x30, 0xb0, 0x45, 0x42, 0x45, 0x75, 0x7c, 0xf6, 0x2f, 0xe2, 0x52, 0xf3, 0x1f, 0x67, 0x91,
-	0xd0, 0xc2, 0x6f, 0xbe, 0x52, 0x7e, 0x92, 0x60, 0xaf, 0x84, 0xd1, 0x5d, 0xb8, 0x7d, 0xa2, 0x8f,
-	0x35, 0xd7, 0x79, 0x69, 0x69, 0x6b, 0x05, 0x72, 0x08, 0xb7, 0x6c, 0x0d, 0x7f, 0xa7, 0x0f, 0x35,
-	0x77, 0x68, 0x1a, 0x27, 0xfa, 0xa9, 0xfb, 0x72, 0x70, 0x36, 0x96, 0x25, 0x74, 0x13, 0x0e, 0x4c,
-	0x4b, 0x33, 0xdc, 0x81, 0xa5, 0xbb, 0xdf, 0xd8, 0xa6, 0x21, 0x57, 0x56, 0x20, 0x6e, 0x55, 0x45,
-	0xf7, 0xe1, 0x2e, 0x67, 0x1e, 0x69, 0xf6, 0x10, 0xeb, 0x96, 0x63, 0x62, 0xd7, 0xd6, 0x9c, 0xbc,
-	0xaa, 0x1c, 0x53, 0xae, 0x29, 0x0f, 0xa1, 0x51, 0x84, 0x89, 0xe9, 0x04, 0x21, 0xa8, 0xf1, 0x69,
-	0x53, 0xa4, 0x88, 0xaf, 0x15, 0x13, 0xf6, 0x87, 0x7c, 0xfe, 0x62, 0x9a, 0xc4, 0x29, 0x43, 0xcf,
-	0xa1, 0xb5, 0x32, 0x96, 0x8b, 0x81, 0xd1, 0xec, 0xb7, 0x97, 0xd3, 0x51, 0x50, 0x8a, 0x7d, 0x07,
-	0xde, 0x92, 0x94, 0x29, 0x7f, 0xee, 0xc0, 0x2e, 0x8e, 0xa7, 0xd3, 0x78, 0xce, 0xd0, 0x7d, 0x80,
-	0xb4, 0x58, 0xe6, 0xa3, 0xab, 0x70, 0xdb, 0x10, 0x88, 0xee, 0xa3, 0xa7, 0xd0, 0xf4, 0x52, 0x4a,
-	0x18, 0x2d, 0xda, 0xbe, 0xb2, 0xb5, 0xed, 0xa1, 0x30, 0xcf, 0x81, 0x9c, 0xbb, 0x90, 0x7c, 0xf7,
-	0xd5, 0x42, 0xd4, 0x68, 0x43, 0x20, 0xc7, 0x0b, 0x64, 0xac, 0x35, 0xfb, 0xe7, 0x5b, 0xaf, 0x53,
-	0x04, 0x5d, 0xfe, 0xaf, 0x76, 0x3a, 0x7a, 0x0b, 0x6d, 0x96, 0x92, 0xc9, 0x24, 0xf4, 0xca, 0x89,
-	0xe6, 0x66, 0x2c, 0x25, 0x8c, 0x06, 0x0b, 0x5e, 0xdb, 0xcd, 0xfe, 0xf3, 0x77, 0xf6, 0xe0, 0x14,
-	0x44, 0x62, 0xfe, 0xd9, 0x82, 0xe6, 0xeb, 0x1b, 0xf8, 0x0e, 0xbb, 0x56, 0x83, 0x16, 0x70, 0xe8,
-	0xd3, 0x29, 0x65, 0xd4, 0x2d, 0x5f, 0x8d, 0x4b, 0xdf, 0xbf, 0x4b, 0xdc, 0xf9, 0xb3, 0x77, 0x76,
-	0x3e, 0xe2, 0x44, 0xe2, 0x21, 0x5a, 0xf2, 0x7d, 0xdb, 0xbf, 0x4e, 0xb1, 0xf1, 0x52, 0xed, 0x6d,
-	0xbc, 0x54, 0x9d, 0x3f, 0x24, 0xb8, 0x73, 0xfd, 0x91, 0x50, 0x0a, 0xcd, 0xab, 0xf9, 0x5f, 0x96,
-	0x92, 0xf5, 0x3f, 0x13, 0xa5, 0x5e, 0x3d, 0x1c, 0x99, 0x16, 0xb1, 0x74, 0x81, 0x97, 0x9d, 0x74,
-	0x9e, 0x81, 0xbc, 0x6e, 0x80, 0x64, 0xa8, 0xbe, 0xa1, 0x0b, 0x51, 0x81, 0xf9, 0x12, 0xbd, 0x0f,
-	0xf5, 0x0b, 0x32, 0x9d, 0x17, 0x55, 0x27, 0xe1, 0x42, 0xf8, 0xaa, 0xf2, 0xa5, 0xd4, 0x39, 0x84,
-	0xdb, 0xd7, 0xe6, 0x48, 0x99, 0xc3, 0xc1, 0x4a, 0x6d, 0xa0, 0x07, 0xd0, 0xc1, 0xe6, 0x78, 0x6c,
-	0x9e, 0xf3, 0xa9, 0xbe, 0x39, 0xfb, 0xd7, 0x06, 0xbc, 0x94, 0x8f, 0x4c, 0xfb, 0x7c, 0x38, 0xcc,
-	0x85, 0xca, 0xea, 0x84, 0x5f, 0x1d, 0xfe, 0x4d, 0xd8, 0xb5, 0x34, 0x63, 0x94, 0x8f, 0xd6, 0xfa,
-	0x31, 0xc0, 0x5e, 0x79, 0xdb, 0xc7, 0x3f, 0x4b, 0xf0, 0xc8, 0x8b, 0x67, 0xdb, 0x12, 0x78, 0xdc,
-	0xc2, 0xe5, 0x57, 0x9b, 0x95, 0x77, 0x91, 0x25, 0xfd, 0x60, 0x89, 0x2d, 0x41, 0x3c, 0x25, 0x51,
-	0xa0, 0xc6, 0x69, 0xd0, 0x0b, 0x68, 0xc4, 0x7b, 0x4c, 0x7c, 0x02, 0x92, 0x24, 0xcc, 0xfe, 0xf1,
-	0x33, 0xf0, 0xe9, 0x06, 0xf8, 0x4b, 0xa5, 0x76, 0x3a, 0xb0, 0xcf, 0x5e, 0xed, 0x70, 0x8e, 0x4f,
-	0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x64, 0x4d, 0x1e, 0x49, 0x0a, 0x00, 0x00,
+	0x10, 0xaf, 0xf3, 0xef, 0x2e, 0x93, 0xbb, 0xe0, 0x6e, 0x69, 0x2f, 0x0d, 0xfd, 0x73, 0xa4, 0x42,
+	0x3a, 0x09, 0xc9, 0xa1, 0x07, 0x02, 0x4a, 0xa5, 0x56, 0xb9, 0xc4, 0x77, 0x84, 0xde, 0xd9, 0xee,
+	0x3a, 0x07, 0x2a, 0x5f, 0xac, 0xad, 0xbd, 0x71, 0x4d, 0x13, 0xdb, 0x5a, 0x6f, 0x4e, 0x8a, 0xfa,
+	0x0c, 0x48, 0x48, 0xbc, 0x01, 0x9f, 0x78, 0x03, 0x5e, 0x81, 0x0f, 0xbc, 0x01, 0x8f, 0xc1, 0x0b,
+	0xa0, 0x5d, 0xaf, 0x7b, 0xf9, 0x73, 0x28, 0x05, 0xbe, 0x24, 0x3b, 0xbf, 0xdf, 0xec, 0xcc, 0xec,
+	0xec, 0xec, 0x8c, 0xa1, 0x1b, 0x26, 0x49, 0x38, 0xa1, 0x5d, 0x92, 0x46, 0xdd, 0x8c, 0xb2, 0x8b,
+	0xc8, 0xa7, 0x53, 0x12, 0x93, 0x90, 0x4e, 0x69, 0xcc, 0xbb, 0x17, 0x0f, 0xbb, 0x8c, 0x66, 0xc9,
+	0x8c, 0xf9, 0x34, 0x33, 0x52, 0x96, 0xf0, 0x04, 0xdd, 0xcf, 0x37, 0x18, 0x24, 0x8d, 0x8c, 0xb5,
+	0x0d, 0xc6, 0xc5, 0xc3, 0xf6, 0x9d, 0x05, 0x8b, 0x24, 0x8e, 0x13, 0x4e, 0x78, 0x94, 0xc4, 0x6a,
+	0x7b, 0xfb, 0xde, 0x02, 0xeb, 0x27, 0xf1, 0x38, 0x0a, 0x3d, 0xff, 0x15, 0x89, 0x43, 0xaa, 0xf8,
+	0xbd, 0x05, 0x7e, 0x4a, 0x39, 0x8b, 0x7c, 0x45, 0xb4, 0xd6, 0x03, 0x55, 0xcc, 0x03, 0xc5, 0x4c,
+	0x92, 0x38, 0x64, 0xb3, 0x38, 0x8e, 0xe2, 0xb0, 0x9b, 0xa4, 0x94, 0x2d, 0xf9, 0xbd, 0xad, 0x94,
+	0xa4, 0xf4, 0x72, 0x36, 0xee, 0x92, 0x78, 0xae, 0xa8, 0xfd, 0x55, 0x6a, 0x1c, 0xd1, 0x49, 0xe0,
+	0x4d, 0x49, 0xf6, 0x5a, 0x69, 0xdc, 0x59, 0xd5, 0xc8, 0x38, 0x9b, 0xf9, 0x5c, 0xb1, 0xf7, 0x57,
+	0x59, 0x1e, 0x4d, 0x69, 0xc6, 0xc9, 0x34, 0x5d, 0x39, 0x13, 0x4b, 0xfd, 0x6e, 0xc6, 0x09, 0x9f,
+	0xa9, 0xa0, 0x3a, 0x3e, 0x34, 0xcf, 0x64, 0xee, 0x02, 0x37, 0x3f, 0x11, 0xfa, 0x10, 0x76, 0xd4,
+	0xe1, 0xbc, 0x98, 0x4c, 0x69, 0xab, 0xb4, 0xaf, 0x1d, 0xd4, 0x71, 0x43, 0x61, 0x16, 0x99, 0x52,
+	0x64, 0xc0, 0x8d, 0x94, 0x25, 0xc1, 0xcc, 0xa7, 0xcc, 0x4b, 0x59, 0xf2, 0x03, 0xf5, 0xb9, 0x17,
+	0x05, 0xad, 0xb2, 0xd4, 0xbc, 0x5e, 0x50, 0x4e, 0xce, 0x0c, 0x83, 0xce, 0x9f, 0x65, 0xb8, 0x6e,
+	0x17, 0xe9, 0x38, 0xa3, 0x9c, 0x04, 0x84, 0x13, 0xf4, 0x11, 0x34, 0x8b, 0x9b, 0x95, 0x9e, 0xb2,
+	0x96, 0xb6, 0x5f, 0x3e, 0xa8, 0xe3, 0xdd, 0x02, 0x15, 0xbe, 0x32, 0x74, 0x06, 0xd5, 0x8c, 0xd3,
+	0x34, 0x6b, 0x95, 0xf6, 0xcb, 0x07, 0x8d, 0xc3, 0x2f, 0x8c, 0x0d, 0xb7, 0x6f, 0xac, 0x79, 0x32,
+	0x5c, 0x4e, 0x53, 0x9c, 0x5b, 0x41, 0x5d, 0x19, 0x7b, 0xc8, 0x68, 0x96, 0x79, 0x29, 0x65, 0x3e,
+	0x8d, 0x39, 0x09, 0xa9, 0x8c, 0xbd, 0x8a, 0x51, 0x41, 0x39, 0x6f, 0x19, 0xf4, 0x08, 0x20, 0xe3,
+	0x84, 0x71, 0x4f, 0xe4, 0xb4, 0x55, 0xd9, 0xd7, 0x0e, 0x1a, 0x87, 0xed, 0x22, 0x88, 0x22, 0xe1,
+	0xc6, 0xa8, 0x48, 0x38, 0xae, 0x4b, 0x6d, 0x21, 0xb7, 0xdf, 0x40, 0x45, 0xb8, 0x46, 0xfb, 0xd0,
+	0x08, 0x68, 0xe6, 0xb3, 0x28, 0x15, 0x61, 0x15, 0x19, 0x5d, 0x80, 0xd0, 0x73, 0xa8, 0xe5, 0xd7,
+	0x22, 0x1d, 0x34, 0x0f, 0x1f, 0xfd, 0xa7, 0x53, 0x0a, 0x03, 0x58, 0x19, 0xea, 0x84, 0x50, 0xcb,
+	0x11, 0x74, 0x0b, 0x90, 0x3b, 0xea, 0x8d, 0xce, 0x5d, 0xef, 0xdc, 0x72, 0x1d, 0xb3, 0x3f, 0x3c,
+	0x1e, 0x9a, 0x03, 0xfd, 0x1a, 0xda, 0x86, 0xca, 0xc0, 0xb6, 0x4c, 0x5d, 0x43, 0xef, 0x41, 0xc3,
+	0xb2, 0x47, 0x9e, 0x3b, 0xea, 0xe1, 0x91, 0x39, 0xd0, 0x4b, 0x02, 0x18, 0x5a, 0x9e, 0x83, 0xed,
+	0x13, 0x6c, 0xba, 0xae, 0x5e, 0x46, 0x00, 0xb5, 0xe3, 0xde, 0xf0, 0xd4, 0x1c, 0xe8, 0x15, 0xb4,
+	0x0b, 0xf5, 0x7e, 0xcf, 0xea, 0x9b, 0xa7, 0x42, 0xac, 0x76, 0x7e, 0xd5, 0x00, 0x06, 0x11, 0x09,
+	0xe3, 0x24, 0xe3, 0x91, 0x8f, 0xda, 0xb0, 0x3d, 0x49, 0x7c, 0x19, 0x5a, 0x4b, 0x93, 0x27, 0x7d,
+	0x2b, 0xa3, 0x01, 0x54, 0x5e, 0x47, 0x71, 0x20, 0x33, 0xd0, 0x3c, 0xfc, 0x64, 0xe3, 0x21, 0x2f,
+	0xcd, 0x1a, 0xcf, 0xa2, 0x38, 0xc0, 0x72, 0x37, 0x6a, 0xc1, 0xd6, 0x94, 0x66, 0x59, 0x71, 0x6d,
+	0x75, 0x5c, 0x88, 0x9d, 0x7b, 0x50, 0x11, 0x7a, 0xa8, 0x01, 0x5b, 0xdf, 0xf5, 0xb0, 0x35, 0xb4,
+	0x4e, 0xf4, 0x6b, 0xa8, 0x0e, 0x55, 0x13, 0x63, 0x1b, 0xeb, 0x5a, 0x87, 0xc0, 0x4e, 0x5f, 0xbe,
+	0x78, 0x57, 0x16, 0x18, 0x6a, 0x42, 0x29, 0x0a, 0x5a, 0x55, 0x69, 0xa4, 0x14, 0x05, 0xa8, 0x07,
+	0xd5, 0x71, 0x34, 0xa1, 0x45, 0xad, 0x7d, 0xbc, 0x31, 0xc0, 0xdc, 0xda, 0x71, 0x34, 0xa1, 0x38,
+	0xdf, 0xd9, 0xf9, 0xad, 0x04, 0x70, 0x89, 0xa2, 0x0f, 0xa0, 0x2e, 0x70, 0x2f, 0x25, 0xfc, 0x55,
+	0x91, 0x0e, 0x01, 0x38, 0x84, 0xbf, 0x42, 0x0f, 0x60, 0x57, 0x92, 0x7e, 0x12, 0x73, 0x1a, 0xf3,
+	0x4c, 0x1e, 0x67, 0x07, 0xef, 0x08, 0xb0, 0xaf, 0x30, 0xf4, 0x5c, 0x59, 0xe0, 0xf3, 0x94, 0xaa,
+	0xea, 0xf8, 0xec, 0x5f, 0xc4, 0x65, 0x88, 0x9f, 0xd1, 0x3c, 0xa5, 0xb9, 0x5f, 0xb1, 0xea, 0xfc,
+	0xac, 0xc1, 0x76, 0x01, 0xa3, 0xdb, 0x70, 0xf3, 0x78, 0x78, 0x6a, 0x7a, 0xa3, 0x17, 0x8e, 0xb9,
+	0x52, 0x20, 0x7b, 0x70, 0xc3, 0x35, 0xf1, 0xb7, 0xc3, 0xbe, 0xe9, 0xf5, 0x6d, 0xeb, 0x78, 0x78,
+	0xe2, 0xbd, 0xe8, 0x9d, 0x9d, 0xea, 0x1a, 0xba, 0x0e, 0xbb, 0xb6, 0x63, 0x5a, 0x5e, 0xcf, 0x19,
+	0x7a, 0xdf, 0xb8, 0xb6, 0xa5, 0x97, 0x96, 0x20, 0xa9, 0x55, 0x46, 0x77, 0xe1, 0xb6, 0xb4, 0x3c,
+	0x30, 0xdd, 0x3e, 0x1e, 0x3a, 0x23, 0x1b, 0x7b, 0xae, 0x39, 0x12, 0x55, 0x35, 0xb2, 0xf5, 0x0a,
+	0x6a, 0x02, 0xc8, 0xa5, 0x27, 0x94, 0xf4, 0x5a, 0xe7, 0x3e, 0xd4, 0xf3, 0xb0, 0x31, 0x1d, 0x23,
+	0x04, 0x15, 0xd9, 0x7d, 0xf2, 0x94, 0xc9, 0x75, 0xc7, 0x86, 0x9d, 0xbe, 0x6c, 0xd4, 0x98, 0xa6,
+	0x09, 0xe3, 0xe8, 0x29, 0x34, 0x97, 0xfa, 0x77, 0xde, 0x40, 0x1a, 0x87, 0xad, 0xc5, 0xf4, 0xe4,
+	0x26, 0xd5, 0xbe, 0x5d, 0x7f, 0x41, 0xca, 0x3a, 0x7f, 0xd5, 0x60, 0x0b, 0x27, 0x93, 0x49, 0x32,
+	0xe3, 0xe8, 0x2e, 0x00, 0xcb, 0x97, 0xa2, 0x95, 0xe5, 0x6e, 0xeb, 0x0a, 0x19, 0x06, 0xe8, 0x31,
+	0x34, 0x7c, 0x46, 0x09, 0xa7, 0x79, 0x1b, 0x28, 0x6d, 0x6c, 0x03, 0x90, 0xab, 0x0b, 0x40, 0xd8,
+	0xce, 0xa5, 0xc0, 0x7b, 0x39, 0x57, 0x35, 0x5b, 0x57, 0xc8, 0xd1, 0x1c, 0x59, 0x2b, 0x8f, 0xff,
+	0xf3, 0x8d, 0xd7, 0xab, 0x82, 0x2e, 0xfe, 0x97, 0x5f, 0x3e, 0x7a, 0x03, 0x2d, 0xce, 0xc8, 0x78,
+	0x1c, 0xf9, 0x45, 0x87, 0xf3, 0x32, 0xce, 0x08, 0xa7, 0xe1, 0x5c, 0xd6, 0x7a, 0xe3, 0xf0, 0xe9,
+	0x3b, 0x7b, 0x18, 0xe5, 0x86, 0x54, 0x3f, 0x74, 0x95, 0x99, 0xaf, 0xaf, 0xe1, 0x5b, 0xfc, 0x4a,
+	0x06, 0xcd, 0x61, 0x2f, 0xa0, 0x13, 0xca, 0xa9, 0x57, 0x4c, 0x91, 0xb7, 0xbe, 0x7f, 0xd7, 0xa4,
+	0xf3, 0x27, 0xef, 0xec, 0x7c, 0x20, 0x0d, 0xa9, 0xc1, 0xb4, 0xe0, 0xfb, 0x66, 0x70, 0x15, 0xb1,
+	0x36, 0xb9, 0xb6, 0xd7, 0x26, 0x57, 0xfb, 0x0f, 0x0d, 0x6e, 0x5d, 0x7d, 0x24, 0xc4, 0xa0, 0x71,
+	0x39, 0x0f, 0x8a, 0x52, 0x72, 0xfe, 0x67, 0xa2, 0x8c, 0xcb, 0x41, 0x92, 0x99, 0x31, 0x67, 0x73,
+	0xbc, 0xe8, 0xa4, 0xfd, 0x04, 0xf4, 0x55, 0x05, 0xa4, 0x43, 0xf9, 0x35, 0x9d, 0xab, 0x0a, 0x14,
+	0x4b, 0xf4, 0x3e, 0x54, 0x2f, 0xc8, 0x64, 0x96, 0x57, 0x9d, 0x86, 0x73, 0xe1, 0xab, 0xd2, 0x97,
+	0x5a, 0x7b, 0x0f, 0x6e, 0x5e, 0x99, 0xa3, 0xce, 0x8f, 0x1a, 0xec, 0x2e, 0x15, 0x07, 0xba, 0x07,
+	0x6d, 0x6c, 0x9f, 0x9e, 0xda, 0xe7, 0xb2, 0xcd, 0xaf, 0x0f, 0x83, 0x95, 0x8e, 0xaf, 0x89, 0x1e,
+	0xea, 0x9e, 0xf7, 0xfb, 0x42, 0x28, 0x2d, 0xb7, 0xfc, 0xe5, 0x69, 0xd0, 0x80, 0x2d, 0xc7, 0xb4,
+	0x06, 0xa2, 0xd7, 0x56, 0xc5, 0xa8, 0xc9, 0x09, 0x4f, 0x38, 0x33, 0x07, 0xde, 0x51, 0xaf, 0xff,
+	0x4c, 0xaf, 0x1d, 0x01, 0x6c, 0x17, 0x65, 0x70, 0xf4, 0x93, 0x06, 0x0f, 0xfc, 0x64, 0xba, 0x29,
+	0xb3, 0x47, 0x4d, 0x5c, 0x7c, 0xf7, 0x39, 0xe2, 0x79, 0x39, 0xda, 0xf7, 0x8e, 0xda, 0x12, 0x26,
+	0x13, 0x12, 0x87, 0x46, 0xc2, 0xc2, 0x6e, 0x48, 0x63, 0xf9, 0xf8, 0xd4, 0x47, 0x24, 0x49, 0xa3,
+	0xec, 0x1f, 0x3f, 0x24, 0x1f, 0xaf, 0x81, 0xbf, 0x94, 0x2a, 0x27, 0x3d, 0xf7, 0xec, 0x65, 0x4d,
+	0xda, 0xf8, 0xf4, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xdd, 0x92, 0xf0, 0x8b, 0x0a, 0x00,
+	0x00,
 }
diff --git a/googleapis/api/servicemanagement/v1/servicemanager.pb.go b/googleapis/api/servicemanagement/v1/servicemanager.pb.go
index cbd3fb2e..b5632874 100644
--- a/googleapis/api/servicemanagement/v1/servicemanager.pb.go
+++ b/googleapis/api/servicemanagement/v1/servicemanager.pb.go
@@ -7,7 +7,6 @@ import proto "github.com/golang/protobuf/proto"
 import fmt "fmt"
 import math "math"
 import _ "google.golang.org/genproto/googleapis/api/annotations"
-import _ "google.golang.org/genproto/googleapis/api/serviceconfig"
 import google_api22 "google.golang.org/genproto/googleapis/api/serviceconfig"
 import google_longrunning "google.golang.org/genproto/googleapis/longrunning"
 import google_protobuf1 "github.com/golang/protobuf/ptypes/any"
@@ -1421,94 +1420,94 @@ func init() {
 }
 
 var fileDescriptor1 = []byte{
-	// 1420 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x1b, 0x45,
-	0x14, 0x67, 0x9c, 0xb4, 0x4d, 0x5e, 0x62, 0xb7, 0x9d, 0xb8, 0x8d, 0xeb, 0x34, 0x6a, 0xba, 0x81,
-	0x12, 0xa5, 0xd4, 0xab, 0xa4, 0xff, 0xa8, 0x53, 0x0e, 0x4d, 0x02, 0x55, 0x44, 0x4b, 0x23, 0xa7,
-	0x05, 0x54, 0x90, 0xac, 0xcd, 0xee, 0x64, 0xbb, 0x74, 0x3d, 0x63, 0x76, 0xd6, 0x09, 0x69, 0x94,
-	0x4b, 0x55, 0x09, 0x09, 0x4e, 0xa8, 0x40, 0x25, 0x8e, 0x15, 0xe2, 0xc0, 0x81, 0x0b, 0x07, 0x24,
-	0x0e, 0x48, 0x7c, 0x06, 0xc4, 0x37, 0xe0, 0x33, 0x70, 0x46, 0x9e, 0x9d, 0x75, 0x76, 0xec, 0x8d,
-	0x77, 0xd7, 0x02, 0x8e, 0xfb, 0x66, 0x7e, 0xef, 0xfd, 0xe6, 0xcd, 0x7b, 0x33, 0xbf, 0x59, 0xb8,
-	0x62, 0x33, 0x66, 0xbb, 0x44, 0x37, 0x9a, 0x8e, 0xce, 0x89, 0xb7, 0xed, 0x98, 0xa4, 0x61, 0x50,
-	0xc3, 0x26, 0x0d, 0x42, 0x7d, 0x7d, 0x7b, 0x41, 0x35, 0x7a, 0x95, 0xa6, 0xc7, 0x7c, 0x86, 0xcf,
-	0x05, 0xa8, 0x8a, 0xd1, 0x74, 0x2a, 0x3d, 0xa8, 0xca, 0xf6, 0x42, 0xf9, 0x6c, 0xc4, 0xad, 0x41,
-	0x29, 0xf3, 0x0d, 0xdf, 0x61, 0x94, 0x07, 0xf0, 0xf2, 0xa9, 0xe8, 0x68, 0xcb, 0x7f, 0x24, 0xcd,
-	0xa5, 0x5e, 0x2e, 0x72, 0x44, 0x4f, 0x62, 0xe9, 0x11, 0xce, 0x5a, 0x9e, 0x49, 0xc2, 0x08, 0xb3,
-	0x12, 0xe0, 0x32, 0x6a, 0x7b, 0x2d, 0x4a, 0x1d, 0x6a, 0xeb, 0xac, 0x49, 0x3c, 0x85, 0xc6, 0x19,
-	0x39, 0x49, 0x7c, 0x6d, 0xb6, 0xb6, 0x74, 0x83, 0xee, 0xca, 0xa1, 0x99, 0xee, 0xa1, 0x2d, 0x87,
-	0xb8, 0x56, 0xbd, 0x61, 0xf0, 0xc7, 0x72, 0xc6, 0xd9, 0xee, 0x19, 0xdc, 0xf7, 0x5a, 0xa6, 0x2f,
-	0x47, 0x27, 0xe5, 0xa8, 0xd7, 0x34, 0x75, 0xee, 0x1b, 0x7e, 0x4b, 0xc6, 0xd4, 0x5e, 0x22, 0x98,
-	0xb8, 0xe3, 0x70, 0x7f, 0x23, 0x58, 0x05, 0xaf, 0x91, 0x4f, 0x5b, 0x84, 0xfb, 0xb8, 0x02, 0x13,
-	0x4d, 0x8f, 0x59, 0x2d, 0x93, 0x78, 0xf5, 0xa6, 0xc7, 0x3e, 0x21, 0xa6, 0x5f, 0x77, 0xac, 0x12,
-	0x9a, 0x41, 0x73, 0xa3, 0xb5, 0x93, 0xe1, 0xd0, 0x7a, 0x30, 0xb2, 0x66, 0xe1, 0x29, 0x18, 0x6d,
-	0x1a, 0x36, 0xa9, 0x73, 0xe7, 0x09, 0x29, 0x1d, 0x99, 0x41, 0x73, 0x47, 0x6a, 0x23, 0x6d, 0xc3,
-	0x86, 0xf3, 0x84, 0xe0, 0x69, 0x00, 0x31, 0xe8, 0xb3, 0xc7, 0x84, 0x96, 0x8e, 0x0a, 0x1f, 0x62,
-	0xfa, 0xfd, 0xb6, 0x01, 0x9f, 0x83, 0x31, 0x93, 0x51, 0xde, 0x6a, 0x10, 0xaf, 0x1d, 0xe3, 0x98,
-	0x18, 0x87, 0xd0, 0xb4, 0x66, 0x69, 0x5f, 0x22, 0x28, 0xaa, 0x24, 0x79, 0x93, 0x51, 0x4e, 0xf0,
-	0xbb, 0x30, 0x22, 0xd3, 0xcf, 0x4b, 0x68, 0x66, 0x68, 0x6e, 0x6c, 0x51, 0xaf, 0x24, 0x94, 0x42,
-	0xe5, 0xae, 0xf8, 0xb2, 0xa4, 0xaf, 0x5a, 0xc7, 0x01, 0xbe, 0x00, 0xc7, 0x29, 0xf9, 0xcc, 0xaf,
-	0x47, 0xa8, 0xe6, 0x04, 0x95, 0x7c, 0xdb, 0xbc, 0x1e, 0xd2, 0xd5, 0xae, 0xc1, 0xc9, 0xdb, 0x24,
-	0xe4, 0x12, 0xe6, 0xeb, 0x3c, 0x8c, 0x4b, 0x47, 0x75, 0x6a, 0x34, 0x88, 0x4c, 0xd4, 0x98, 0xb4,
-	0xbd, 0x67, 0x34, 0x88, 0x66, 0x40, 0x71, 0xc5, 0x23, 0x86, 0x4f, 0xba, 0xa0, 0x6b, 0x70, 0x4c,
-	0x4e, 0x13, 0xa8, 0x01, 0xd6, 0x10, 0xe2, 0xb5, 0x1b, 0x50, 0x5c, 0x25, 0x2e, 0xe9, 0x09, 0x91,
-	0x82, 0xdd, 0x12, 0x9c, 0x7e, 0x40, 0xad, 0x01, 0xc1, 0x16, 0x4c, 0xf6, 0x80, 0xe5, 0x16, 0xfd,
-	0x8b, 0xab, 0xfb, 0x13, 0xc1, 0xe4, 0x41, 0xe6, 0x57, 0x18, 0xdd, 0x72, 0xec, 0xf4, 0x24, 0xdb,
-	0x25, 0x6a, 0x0a, 0x4c, 0xbb, 0xc8, 0x82, 0x9d, 0x1d, 0x09, 0x0c, 0x6b, 0x16, 0xfe, 0x00, 0x86,
-	0xb7, 0x1d, 0xb2, 0x53, 0x1a, 0x9a, 0x41, 0x73, 0x85, 0xc5, 0x95, 0x44, 0x8e, 0x87, 0xf0, 0xa8,
-	0x04, 0x5f, 0xef, 0x3b, 0x64, 0xa7, 0x26, 0x1c, 0x6a, 0xe7, 0x01, 0x0e, 0x6c, 0x78, 0x14, 0x8e,
-	0x2c, 0xdf, 0xda, 0x58, 0x5b, 0x39, 0xf1, 0x0a, 0x1e, 0x81, 0xe1, 0x77, 0x1e, 0xdc, 0xb9, 0x73,
-	0x02, 0x69, 0x4f, 0xe0, 0x4c, 0xa4, 0xba, 0x83, 0xd9, 0x3c, 0xc3, 0xc2, 0xd4, 0xf6, 0xca, 0x75,
-	0xb7, 0x97, 0xd2, 0x9a, 0x43, 0x6a, 0x6b, 0x6a, 0x4f, 0x11, 0x94, 0xe3, 0x82, 0xcb, 0xdd, 0xbb,
-	0x09, 0xc7, 0xc3, 0xe8, 0x41, 0xaa, 0xc2, 0x3e, 0x9b, 0x88, 0x66, 0x28, 0xdc, 0xa9, 0x02, 0x57,
-	0xbc, 0xa4, 0xee, 0xa8, 0x3d, 0x28, 0x2b, 0x9d, 0x91, 0x79, 0x6b, 0xab, 0x50, 0x50, 0x69, 0x8a,
-	0x38, 0x87, 0xb0, 0xcc, 0x2b, 0x2c, 0xb5, 0x5f, 0x10, 0x9c, 0xd9, 0x68, 0x6d, 0x36, 0x1c, 0x3f,
-	0x30, 0x6c, 0x88, 0x83, 0x3b, 0x43, 0xf0, 0x1a, 0xe4, 0x65, 0x5d, 0x05, 0x67, 0xbe, 0x8c, 0x7d,
-	0x29, 0xb1, 0x86, 0x94, 0x78, 0xe3, 0x66, 0xe4, 0x0b, 0xcf, 0x42, 0x7e, 0xdb, 0x70, 0x1d, 0xcb,
-	0xf0, 0x49, 0x9d, 0x51, 0x77, 0x57, 0xec, 0xdb, 0x48, 0x6d, 0x3c, 0x34, 0xde, 0xa3, 0xee, 0xae,
-	0xf6, 0x21, 0x94, 0xe3, 0x88, 0xcb, 0xad, 0xeb, 0xcd, 0x09, 0x4a, 0x9d, 0x93, 0x67, 0x08, 0xa6,
-	0xd4, 0xb3, 0x8a, 0xb9, 0x2e, 0x6b, 0xf9, 0x19, 0xb2, 0xb2, 0x0c, 0xc7, 0xbc, 0x00, 0x24, 0xf3,
-	0x31, 0x97, 0x98, 0x8f, 0x30, 0x48, 0x08, 0xd4, 0x9e, 0xab, 0xc5, 0x29, 0xc7, 0xff, 0xa7, 0xd6,
-	0xc0, 0xa7, 0xe1, 0xe8, 0x96, 0xe3, 0xfa, 0xc4, 0x2b, 0x0d, 0x0b, 0x9c, 0xfc, 0x6a, 0xdf, 0x46,
-	0x53, 0xb1, 0xac, 0x64, 0xe2, 0x57, 0x61, 0x44, 0x2e, 0x20, 0x6c, 0x96, 0xf4, 0x4b, 0xef, 0x20,
-	0x53, 0xf7, 0xce, 0xc7, 0x50, 0x8a, 0xdc, 0x46, 0x99, 0xb7, 0x69, 0x1a, 0x40, 0x86, 0x3c, 0x38,
-	0x15, 0x47, 0xa5, 0x65, 0xcd, 0xd2, 0x1e, 0x42, 0xf1, 0x6d, 0x6a, 0x6c, 0xba, 0xd9, 0xef, 0x84,
-	0xee, 0x5b, 0x3d, 0xd7, 0x73, 0xab, 0x7f, 0x04, 0xa7, 0x56, 0x1d, 0xfe, 0x1f, 0x39, 0xff, 0x1c,
-	0xc1, 0xd4, 0x6d, 0x42, 0xdb, 0x0a, 0xab, 0x73, 0x9c, 0x34, 0x99, 0xd7, 0x49, 0xcd, 0x65, 0x00,
-	0x4a, 0x76, 0xd4, 0xce, 0x28, 0x86, 0xdb, 0x14, 0x6a, 0xa8, 0xca, 0x2d, 0xba, 0x5b, 0x1b, 0xa5,
-	0x64, 0x27, 0xf0, 0xd0, 0x06, 0x31, 0xd7, 0x52, 0x8f, 0x98, 0x43, 0x40, 0xcc, 0xb5, 0x64, 0x2f,
-	0xfd, 0x8d, 0xe0, 0x6c, 0x3c, 0x13, 0x59, 0x2f, 0x29, 0x96, 0x5b, 0x80, 0x5c, 0x67, 0x95, 0x39,
-	0xc7, 0xc2, 0xf7, 0xa1, 0x60, 0x3e, 0x32, 0xa8, 0x4d, 0xea, 0x9e, 0xf0, 0xc5, 0x4b, 0x43, 0xa2,
-	0xd0, 0x52, 0x9c, 0x39, 0x02, 0x26, 0x19, 0xe4, 0xcd, 0xc8, 0x17, 0xc7, 0x77, 0x61, 0xcc, 0x72,
-	0x0c, 0x9b, 0x32, 0xee, 0x3b, 0x26, 0x2f, 0x0d, 0x0b, 0x97, 0x17, 0x13, 0x5d, 0xae, 0x76, 0x30,
-	0xb5, 0x28, 0x7e, 0xf1, 0xa7, 0x09, 0x28, 0xc8, 0x9d, 0x0d, 0x6e, 0x74, 0x0f, 0x7f, 0x85, 0x60,
-	0x3c, 0x2a, 0xe4, 0xf0, 0x95, 0x44, 0xef, 0x31, 0xe2, 0xb4, 0x7c, 0x35, 0x23, 0x2a, 0x48, 0xb4,
-	0x56, 0x7c, 0xfa, 0xc7, 0x5f, 0xcf, 0x73, 0x05, 0x3c, 0x1e, 0x79, 0x47, 0x70, 0xfc, 0x2d, 0x02,
-	0x38, 0xe8, 0x20, 0xbc, 0x98, 0xe1, 0xea, 0x0f, 0xf9, 0x64, 0x95, 0x34, 0xda, 0xac, 0x60, 0x32,
-	0x8d, 0xa7, 0xa2, 0x4c, 0xf4, 0xbd, 0x68, 0x19, 0xec, 0xe3, 0x67, 0x08, 0xf2, 0xca, 0x21, 0x8c,
-	0x93, 0xd7, 0x1d, 0x27, 0x30, 0xcb, 0xd3, 0x21, 0x2c, 0xf2, 0xfa, 0xa8, 0xdc, 0x0b, 0x5f, 0x1f,
-	0xda, 0xb4, 0x20, 0x33, 0xa9, 0x29, 0x69, 0xa9, 0x86, 0xaa, 0x0b, 0x7f, 0x81, 0x20, 0xaf, 0x88,
-	0xca, 0x14, 0x34, 0xe2, 0x44, 0x68, 0x12, 0x0d, 0x99, 0x93, 0xf9, 0xbe, 0x39, 0x79, 0x81, 0xe0,
-	0x78, 0x97, 0xd2, 0xc4, 0xd7, 0x13, 0xe9, 0xc4, 0x0b, 0xdb, 0x24, 0x42, 0x6f, 0x08, 0x42, 0x17,
-	0xb4, 0x57, 0xfb, 0x10, 0xaa, 0xb6, 0xa4, 0x6b, 0xfc, 0x2b, 0x02, 0xdc, 0x2b, 0xa4, 0x70, 0x35,
-	0x4b, 0xa9, 0xaa, 0xd2, 0xaf, 0xbc, 0x34, 0x10, 0x56, 0x16, 0xfb, 0x45, 0xc1, 0xfe, 0x35, 0x3c,
-	0xdb, 0x87, 0xbd, 0x2e, 0x35, 0x1d, 0xfe, 0x0e, 0xc1, 0x89, 0x6e, 0x45, 0x8b, 0xdf, 0x1c, 0x54,
-	0x04, 0x97, 0xe3, 0x24, 0x86, 0x76, 0x5d, 0x10, 0x5a, 0xc0, 0x7a, 0x0a, 0x42, 0xfa, 0x5e, 0x47,
-	0xa9, 0xef, 0xe3, 0xef, 0x11, 0x4c, 0xc4, 0xc8, 0x43, 0xbc, 0x94, 0xad, 0x1b, 0x52, 0x50, 0x5c,
-	0x12, 0x14, 0xaf, 0x6a, 0x69, 0x72, 0x56, 0xed, 0x52, 0x57, 0xf8, 0x07, 0x04, 0xb8, 0x57, 0x8e,
-	0xa5, 0x28, 0x80, 0x43, 0xc5, 0x67, 0x52, 0x81, 0x5e, 0x15, 0x74, 0x75, 0x6d, 0x3e, 0x0d, 0x5d,
-	0x2e, 0xa2, 0x54, 0xd1, 0x3c, 0xfe, 0x4d, 0x7d, 0xf2, 0x87, 0xfa, 0x05, 0x67, 0x2a, 0xb7, 0x2e,
-	0x2d, 0x56, 0xbe, 0x39, 0x18, 0x58, 0x16, 0xab, 0x6c, 0x35, 0xdc, 0xaf, 0xd5, 0xf4, 0x8e, 0x34,
-	0xfa, 0x19, 0x29, 0x2f, 0xf0, 0xc0, 0x8c, 0x6f, 0x64, 0x39, 0xb8, 0x15, 0x9d, 0x54, 0x4e, 0xad,
-	0xcf, 0xb4, 0x1b, 0x82, 0xe8, 0x65, 0xbc, 0x90, 0x86, 0xa8, 0xbe, 0x77, 0x20, 0xad, 0xf6, 0xf1,
-	0x8f, 0xa8, 0xfb, 0xfd, 0x2f, 0x89, 0xdf, 0xcc, 0x78, 0xaa, 0xab, 0xdc, 0x53, 0xd6, 0x48, 0xaa,
-	0xcc, 0x56, 0x43, 0xe5, 0x8d, 0x7f, 0x47, 0x50, 0x8c, 0x13, 0x2d, 0x29, 0xc8, 0xf6, 0x51, 0x5d,
-	0xe5, 0xb7, 0x06, 0x44, 0xab, 0x65, 0xa2, 0x9d, 0x57, 0x6e, 0x2a, 0x3b, 0x06, 0xd2, 0xae, 0xf3,
-	0xaf, 0x11, 0xe4, 0x15, 0xf1, 0x9a, 0xe2, 0xe2, 0x8a, 0x13, 0xbb, 0x49, 0x29, 0xbe, 0x24, 0x58,
-	0xbd, 0xae, 0x69, 0xfd, 0xee, 0x09, 0x22, 0x1c, 0xb7, 0x69, 0xbd, 0x40, 0x50, 0x50, 0x75, 0x2f,
-	0xbe, 0x96, 0x42, 0x63, 0xf1, 0xec, 0xc4, 0x2a, 0x82, 0xd8, 0x5c, 0xdf, 0xe3, 0xac, 0x6a, 0x05,
-	0x9e, 0xab, 0x68, 0x7e, 0xf9, 0x1b, 0x04, 0xb3, 0x26, 0x6b, 0x24, 0x91, 0x59, 0x9e, 0x50, 0x55,
-	0xdd, 0x7a, 0x5b, 0xf8, 0xae, 0xa3, 0x87, 0xeb, 0x12, 0x67, 0x33, 0xd7, 0xa0, 0x76, 0x85, 0x79,
-	0xb6, 0x6e, 0x13, 0x2a, 0x64, 0xb1, 0xfc, 0x5f, 0x6a, 0x34, 0x1d, 0x7e, 0xe8, 0x3f, 0xd3, 0xa5,
-	0x1e, 0xe3, 0xcb, 0xdc, 0xf0, 0xed, 0x5b, 0x1b, 0x77, 0x37, 0x8f, 0x0a, 0x1f, 0x97, 0xff, 0x09,
-	0x00, 0x00, 0xff, 0xff, 0x50, 0x43, 0x0b, 0xb9, 0x1c, 0x16, 0x00, 0x00,
+	// 1417 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0xdc, 0x44,
+	0x14, 0x67, 0x36, 0x69, 0x9b, 0xbc, 0x64, 0xb7, 0xed, 0x64, 0x69, 0xb6, 0x9b, 0x46, 0x4d, 0x9d,
+	0x52, 0xa2, 0x94, 0xae, 0xd5, 0xf4, 0x0f, 0x74, 0x53, 0x0e, 0x4d, 0x02, 0x55, 0x44, 0x4b, 0xa3,
+	0x4d, 0x4b, 0x51, 0x01, 0xad, 0x1c, 0x7b, 0x62, 0x4c, 0xbd, 0x33, 0x8b, 0xc7, 0x9b, 0x90, 0x46,
+	0xbd, 0x54, 0x95, 0x90, 0xe0, 0x84, 0x0a, 0xf4, 0x5e, 0x21, 0x0e, 0x5c, 0x39, 0x20, 0x71, 0x40,
+	0xf0, 0x19, 0x80, 0x6f, 0xc0, 0x67, 0xe0, 0x8c, 0x3c, 0x1e, 0x6f, 0x3c, 0xbb, 0xce, 0xda, 0x8e,
+	0x80, 0xa3, 0xdf, 0xf8, 0xf7, 0xde, 0x6f, 0xde, 0xbc, 0xf7, 0xe6, 0x67, 0xc3, 0x65, 0x9b, 0x31,
+	0xdb, 0x25, 0xba, 0xd1, 0x76, 0x74, 0x4e, 0xbc, 0x2d, 0xc7, 0x24, 0x2d, 0x83, 0x1a, 0x36, 0x69,
+	0x11, 0xea, 0xeb, 0x5b, 0x17, 0x55, 0xa3, 0x57, 0x6b, 0x7b, 0xcc, 0x67, 0xf8, 0x74, 0x88, 0xaa,
+	0x19, 0x6d, 0xa7, 0xd6, 0x87, 0xaa, 0x6d, 0x5d, 0xac, 0x9e, 0x8a, 0xb9, 0x35, 0x28, 0x65, 0xbe,
+	0xe1, 0x3b, 0x8c, 0xf2, 0x10, 0x5e, 0xad, 0xf4, 0x07, 0x95, 0x2b, 0x7a, 0x1a, 0x1d, 0x8f, 0x70,
+	0xd6, 0xf1, 0x4c, 0x12, 0xb9, 0x9a, 0x95, 0x00, 0x97, 0x51, 0xdb, 0xeb, 0x50, 0xea, 0x50, 0x5b,
+	0x67, 0x6d, 0xe2, 0x29, 0xf1, 0x4e, 0xca, 0x97, 0xc4, 0xd3, 0x46, 0x67, 0x53, 0x37, 0xe8, 0x8e,
+	0x5c, 0x9a, 0xe9, 0x5d, 0xda, 0x74, 0x88, 0x6b, 0x35, 0x5b, 0x06, 0x7f, 0x28, 0xdf, 0x38, 0xd5,
+	0xfb, 0x06, 0xf7, 0xbd, 0x8e, 0xe9, 0xcb, 0xd5, 0x49, 0xb9, 0xea, 0xb5, 0x4d, 0x9d, 0xfb, 0x86,
+	0xdf, 0x91, 0x31, 0xb5, 0x17, 0x08, 0x26, 0x6e, 0x39, 0xdc, 0x5f, 0x0f, 0x77, 0xc1, 0x1b, 0xe4,
+	0xd3, 0x0e, 0xe1, 0x3e, 0xae, 0xc1, 0x44, 0xdb, 0x63, 0x56, 0xc7, 0x24, 0x5e, 0xb3, 0xed, 0xb1,
+	0x4f, 0x88, 0xe9, 0x37, 0x1d, 0xab, 0x82, 0x66, 0xd0, 0xdc, 0x68, 0xe3, 0x78, 0xb4, 0xb4, 0x16,
+	0xae, 0xac, 0x5a, 0x78, 0x0a, 0x46, 0xdb, 0x86, 0x4d, 0x9a, 0xdc, 0x79, 0x44, 0x2a, 0x87, 0x66,
+	0xd0, 0xdc, 0xa1, 0xc6, 0x48, 0x60, 0x58, 0x77, 0x1e, 0x11, 0x3c, 0x0d, 0x20, 0x16, 0x7d, 0xf6,
+	0x90, 0xd0, 0xca, 0x61, 0xe1, 0x43, 0xbc, 0x7e, 0x37, 0x30, 0xe0, 0xd3, 0x30, 0x66, 0x32, 0xca,
+	0x3b, 0x2d, 0xe2, 0x05, 0x31, 0x8e, 0x88, 0x75, 0x88, 0x4c, 0xab, 0x96, 0xf6, 0x25, 0x82, 0xb2,
+	0x4a, 0x92, 0xb7, 0x19, 0xe5, 0x04, 0xbf, 0x03, 0x23, 0x32, 0xfd, 0xbc, 0x82, 0x66, 0x86, 0xe6,
+	0xc6, 0x16, 0xf4, 0x5a, 0xca, 0x99, 0xd7, 0x6e, 0x8b, 0x27, 0x4b, 0xfa, 0x6a, 0x74, 0x1d, 0xe0,
+	0x73, 0x70, 0x94, 0x92, 0xcf, 0xfc, 0x66, 0x8c, 0x6a, 0x41, 0x50, 0x29, 0x06, 0xe6, 0xb5, 0x88,
+	0xae, 0x76, 0x15, 0x8e, 0xdf, 0x24, 0x11, 0x97, 0x28, 0x5f, 0x67, 0x60, 0x5c, 0x3a, 0x6a, 0x52,
+	0xa3, 0x45, 0x64, 0xa2, 0xc6, 0xa4, 0xed, 0x5d, 0xa3, 0x45, 0x34, 0x03, 0xca, 0xcb, 0x1e, 0x31,
+	0x7c, 0xd2, 0x03, 0x5d, 0x85, 0x23, 0xf2, 0x35, 0x81, 0x3a, 0xc0, 0x1e, 0x22, 0xbc, 0x76, 0x0d,
+	0xca, 0x2b, 0xc4, 0x25, 0x7d, 0x21, 0x32, 0xb0, 0x5b, 0x84, 0x13, 0xf7, 0xa8, 0x75, 0x40, 0xb0,
+	0x05, 0x93, 0x7d, 0x60, 0x79, 0x44, 0xff, 0xe2, 0xee, 0xfe, 0x44, 0x30, 0xb9, 0x97, 0xf9, 0x65,
+	0x46, 0x37, 0x1d, 0x3b, 0x3b, 0xc9, 0xa0, 0x44, 0x4d, 0x81, 0x09, 0x8a, 0x2c, 0x3c, 0xd9, 0x91,
+	0xd0, 0xb0, 0x6a, 0xe1, 0xfb, 0x30, 0xbc, 0xe5, 0x90, 0xed, 0xca, 0xd0, 0x0c, 0x9a, 0x2b, 0x2d,
+	0x2c, 0xa7, 0x72, 0xdc, 0x87, 0x47, 0x2d, 0x7c, 0x7a, 0xcf, 0x21, 0xdb, 0x0d, 0xe1, 0x50, 0x3b,
+	0x03, 0xb0, 0x67, 0xc3, 0xa3, 0x70, 0x68, 0xe9, 0xc6, 0xfa, 0xea, 0xf2, 0xb1, 0x97, 0xf0, 0x08,
+	0x0c, 0xbf, 0x7d, 0xef, 0xd6, 0xad, 0x63, 0x48, 0x7b, 0x04, 0x27, 0x63, 0xd5, 0x1d, 0xbe, 0xcd,
+	0x73, 0x6c, 0x4c, 0x6d, 0xaf, 0x42, 0x6f, 0x7b, 0x29, 0xad, 0x39, 0xa4, 0xb6, 0xa6, 0xf6, 0x04,
+	0x41, 0x35, 0x29, 0xb8, 0x3c, 0xbd, 0xeb, 0x70, 0x34, 0x8a, 0x1e, 0xa6, 0x2a, 0xea, 0xb3, 0x89,
+	0x78, 0x86, 0xa2, 0x93, 0x2a, 0x71, 0xc5, 0x4b, 0xe6, 0x8e, 0xda, 0x85, 0xaa, 0xd2, 0x19, 0xb9,
+	0x8f, 0xb6, 0x0e, 0x25, 0x95, 0xa6, 0x88, 0xb3, 0x0f, 0xcb, 0xa2, 0xc2, 0x52, 0xfb, 0x09, 0xc1,
+	0xc9, 0xf5, 0xce, 0x46, 0xcb, 0xf1, 0x43, 0xc3, 0xba, 0x18, 0xdc, 0x39, 0x82, 0x37, 0xa0, 0x28,
+	0xeb, 0x2a, 0x9c, 0xf9, 0x32, 0xf6, 0x85, 0xd4, 0x1a, 0x52, 0xe2, 0x8d, 0x9b, 0xb1, 0x27, 0x3c,
+	0x0b, 0xc5, 0x2d, 0xc3, 0x75, 0x2c, 0xc3, 0x27, 0x4d, 0x46, 0xdd, 0x1d, 0x71, 0x6e, 0x23, 0x8d,
+	0xf1, 0xc8, 0x78, 0x87, 0xba, 0x3b, 0xda, 0xfb, 0x50, 0x4d, 0x22, 0x2e, 0x8f, 0xae, 0x3f, 0x27,
+	0x28, 0x73, 0x4e, 0x9e, 0x22, 0x98, 0x52, 0x67, 0x15, 0x73, 0x5d, 0xd6, 0xf1, 0x73, 0x64, 0x65,
+	0x09, 0x8e, 0x78, 0x21, 0x48, 0xe6, 0x63, 0x2e, 0x35, 0x1f, 0x51, 0x90, 0x08, 0xa8, 0x3d, 0x53,
+	0x8b, 0x53, 0xae, 0xff, 0x4f, 0xad, 0x81, 0x4f, 0xc0, 0xe1, 0x4d, 0xc7, 0xf5, 0x89, 0x57, 0x19,
+	0x16, 0x38, 0xf9, 0x14, 0xdc, 0x46, 0x53, 0x89, 0xac, 0x64, 0xe2, 0x57, 0x60, 0x44, 0x6e, 0x20,
+	0x6a, 0x96, 0xec, 0x5b, 0xef, 0x22, 0x33, 0xf7, 0xce, 0x87, 0x50, 0x89, 0xdd, 0x46, 0xb9, 0x8f,
+	0x69, 0x1a, 0x40, 0x86, 0xdc, 0x9b, 0x8a, 0xa3, 0xd2, 0xb2, 0x6a, 0x69, 0x0f, 0xa0, 0xfc, 0x16,
+	0x35, 0x36, 0xdc, 0xfc, 0x77, 0x42, 0xef, 0xad, 0x5e, 0xe8, 0xbb, 0xd5, 0x3f, 0x80, 0x97, 0x57,
+	0x1c, 0xfe, 0x1f, 0x39, 0xff, 0x1c, 0xc1, 0xd4, 0x4d, 0x42, 0x03, 0x85, 0xd5, 0x1d, 0x27, 0x6d,
+	0xe6, 0x75, 0x53, 0x73, 0x09, 0x80, 0x92, 0x6d, 0xb5, 0x33, 0xca, 0xd1, 0x31, 0x45, 0x1a, 0xaa,
+	0x76, 0x83, 0xee, 0x34, 0x46, 0x29, 0xd9, 0x0e, 0x3d, 0x04, 0x20, 0xe6, 0x5a, 0xea, 0x88, 0xd9,
+	0x07, 0xc4, 0x5c, 0x4b, 0xf6, 0xd2, 0xdf, 0x08, 0x4e, 0x25, 0x33, 0x91, 0xf5, 0x92, 0x61, 0xbb,
+	0x25, 0x28, 0x74, 0x77, 0x59, 0x70, 0x2c, 0x7c, 0x17, 0x4a, 0xe6, 0xc7, 0x06, 0xb5, 0x49, 0xd3,
+	0x13, 0xbe, 0x78, 0x65, 0x48, 0x14, 0x5a, 0x86, 0x99, 0x23, 0x60, 0x92, 0x41, 0xd1, 0x8c, 0x3d,
+	0x71, 0x7c, 0x1b, 0xc6, 0x2c, 0xc7, 0xb0, 0x29, 0xe3, 0xbe, 0x63, 0xf2, 0xca, 0xb0, 0x70, 0x79,
+	0x3e, 0xd5, 0xe5, 0x4a, 0x17, 0xd3, 0x88, 0xe3, 0x17, 0xfe, 0x98, 0x80, 0x92, 0x3c, 0xd9, 0xf0,
+	0x46, 0xf7, 0xf0, 0x57, 0x08, 0xc6, 0xe3, 0x42, 0x0e, 0x5f, 0x4e, 0xf5, 0x9e, 0x20, 0x4e, 0xab,
+	0x57, 0x72, 0xa2, 0xc2, 0x44, 0x6b, 0xe5, 0x27, 0xbf, 0xff, 0xf5, 0xac, 0x50, 0xc2, 0xe3, 0xb1,
+	0x0f, 0x06, 0x8e, 0xbf, 0x45, 0x00, 0x7b, 0x1d, 0x84, 0x17, 0x72, 0x5c, 0xfd, 0x11, 0x9f, 0xbc,
+	0x92, 0x46, 0x9b, 0x15, 0x4c, 0xa6, 0xf1, 0x54, 0x9c, 0x89, 0xbe, 0x1b, 0x2f, 0x83, 0xc7, 0xf8,
+	0x29, 0x82, 0xa2, 0x32, 0x84, 0x71, 0xfa, 0xbe, 0x93, 0x04, 0x66, 0x75, 0x3a, 0x82, 0xc5, 0xbe,
+	0x3e, 0x6a, 0x77, 0xa2, 0xaf, 0x0f, 0x6d, 0x5a, 0x90, 0x99, 0xd4, 0x94, 0xb4, 0xd4, 0x23, 0xd5,
+	0x85, 0xbf, 0x40, 0x50, 0x54, 0x44, 0x65, 0x06, 0x1a, 0x49, 0x22, 0x34, 0x8d, 0x86, 0xcc, 0xc9,
+	0xfc, 0xc0, 0x9c, 0x3c, 0x47, 0x70, 0xb4, 0x47, 0x69, 0xe2, 0xd7, 0x53, 0xe9, 0x24, 0x0b, 0xdb,
+	0x34, 0x42, 0xaf, 0x09, 0x42, 0xe7, 0xb4, 0xb3, 0x03, 0x08, 0xd5, 0x3b, 0xd2, 0x35, 0xfe, 0x19,
+	0x01, 0xee, 0x17, 0x52, 0xb8, 0x9e, 0xa7, 0x54, 0x55, 0xe9, 0x57, 0x5d, 0x3c, 0x10, 0x56, 0x16,
+	0xfb, 0x79, 0xc1, 0xfe, 0x15, 0x3c, 0x3b, 0x80, 0xbd, 0x2e, 0x35, 0x1d, 0xfe, 0x15, 0xc1, 0xb1,
+	0x5e, 0x45, 0x8b, 0xdf, 0x38, 0xa8, 0x08, 0xae, 0x26, 0x49, 0x0c, 0xed, 0x23, 0x41, 0xe8, 0x3e,
+	0xd6, 0x33, 0x10, 0xd2, 0x77, 0xbb, 0x4a, 0xfd, 0xf1, 0x83, 0xb3, 0x58, 0x4b, 0x87, 0xe0, 0xef,
+	0x10, 0x4c, 0x24, 0x88, 0x48, 0xbc, 0x98, 0xaf, 0x67, 0x32, 0x6c, 0x64, 0x51, 0x6c, 0xe4, 0x8a,
+	0x96, 0x25, 0xb3, 0xf5, 0x1e, 0x0d, 0x86, 0xbf, 0x47, 0x80, 0xfb, 0x45, 0x5b, 0x86, 0x32, 0xd9,
+	0x57, 0xa2, 0xa6, 0x95, 0xf1, 0x15, 0x41, 0x57, 0xd7, 0xe6, 0xb3, 0xd0, 0xe5, 0x22, 0x4a, 0x1d,
+	0xcd, 0xe3, 0x5f, 0xd4, 0x1f, 0x03, 0x91, 0xca, 0xc1, 0xb9, 0x8a, 0xb2, 0x47, 0xb1, 0x55, 0xaf,
+	0x1f, 0x0c, 0x2c, 0x4b, 0x5a, 0x36, 0x24, 0x1e, 0xd4, 0x90, 0x7a, 0x57, 0x40, 0xfd, 0x88, 0x94,
+	0xef, 0xf4, 0xd0, 0x8c, 0xaf, 0xe5, 0x19, 0xef, 0x8a, 0x9a, 0xaa, 0x66, 0x56, 0x71, 0xda, 0x35,
+	0x41, 0xf4, 0x12, 0xbe, 0x98, 0x85, 0xa8, 0xbe, 0xbb, 0x27, 0xc0, 0x1e, 0xe3, 0x1f, 0x50, 0xef,
+	0x5f, 0x02, 0x49, 0xfc, 0x7a, 0xce, 0xd9, 0xaf, 0x72, 0xcf, 0x58, 0x23, 0x99, 0x32, 0x5b, 0x8f,
+	0xf4, 0x39, 0xfe, 0x0d, 0x41, 0x39, 0x49, 0xda, 0x64, 0x20, 0x3b, 0x40, 0x9b, 0x55, 0xdf, 0x3c,
+	0x20, 0x5a, 0x2d, 0x13, 0xed, 0x8c, 0x72, 0x9f, 0xd9, 0x09, 0x90, 0xa0, 0xce, 0xbf, 0x46, 0x50,
+	0x54, 0x24, 0x6e, 0x86, 0xeb, 0x2d, 0x49, 0x12, 0xa7, 0xa5, 0xf8, 0x82, 0x60, 0xf5, 0xaa, 0x36,
+	0x68, 0x96, 0xd5, 0x89, 0x70, 0x1c, 0xd0, 0x7a, 0x8e, 0xa0, 0xa4, 0xaa, 0x63, 0x7c, 0x35, 0x83,
+	0x12, 0xe3, 0xf9, 0x89, 0xd5, 0x04, 0xb1, 0xb9, 0x81, 0xe3, 0xac, 0x6e, 0x85, 0x9e, 0xeb, 0x68,
+	0x7e, 0xe9, 0x1b, 0x04, 0xb3, 0x26, 0x6b, 0xa5, 0x91, 0x59, 0x9a, 0x50, 0xb5, 0xdf, 0x5a, 0x20,
+	0x8f, 0xd7, 0xd0, 0x83, 0x35, 0x89, 0xb3, 0x99, 0x6b, 0x50, 0xbb, 0xc6, 0x3c, 0x5b, 0xb7, 0x09,
+	0x15, 0xe2, 0x59, 0xfe, 0x55, 0x35, 0xda, 0x0e, 0xdf, 0xf7, 0xcf, 0xea, 0x62, 0x9f, 0xf1, 0x45,
+	0x61, 0xf8, 0xe6, 0x8d, 0xf5, 0xdb, 0x1b, 0x87, 0x85, 0x8f, 0x4b, 0xff, 0x04, 0x00, 0x00, 0xff,
+	0xff, 0xc1, 0x4b, 0xa8, 0xee, 0x2b, 0x16, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go b/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go
index 7b82cffa..28e3f420 100644
--- a/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go
+++ b/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go
@@ -13,6 +13,7 @@ It has these top-level messages:
 	StreamingRecognizeRequest
 	StreamingRecognitionConfig
 	RecognitionConfig
+	GoogleDataCollectionConfig
 	SpeechContext
 	RecognitionAudio
 	RecognizeResponse
@@ -56,21 +57,22 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 //
 // All encodings support only 1 channel (mono) audio.
 //
-// If you send a `FLAC` or `WAV` audio file format in the request,
-// then if you specify an encoding in `AudioEncoding`, it must match the
-// encoding described in the audio header. If it does not match, then the
-// request returns an
-// [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error code. You can request
-// recognition for `WAV` files that contain either `LINEAR16` or `MULAW`
-// encoded audio.
-// For audio file formats other than `FLAC` or `WAV`, you must
-// specify the audio encoding in your `RecognitionConfig`.
-//
 // For best results, the audio source should be captured and transmitted using
 // a lossless encoding (`FLAC` or `LINEAR16`). The accuracy of the speech
-// recognition can be reduced if lossy codecs, which include the other codecs
-// listed in this section, are used to capture or transmit the audio,
-// particularly if background noise is present.
+// recognition can be reduced if lossy codecs are used to capture or transmit
+// audio, particularly if background noise is present. Lossy codecs include
+// `MULAW`, `AMR`, `AMR_WB`, `OGG_OPUS`, and `SPEEX_WITH_HEADER_BYTE`.
+//
+// The `FLAC` and `WAV` audio file formats include a header that describes the
+// included audio content. You can request recognition for `WAV` files that
+// contain either `LINEAR16` or `MULAW` encoded audio.
+// If you send `FLAC` or `WAV` audio file format in
+// your request, you do not need to specify an `AudioEncoding`; the audio
+// encoding format is determined from the file header. If you specify
+// an `AudioEncoding` when you send  send `FLAC` or `WAV` audio, the
+// encoding configuration must match the encoding described in the audio
+// header; otherwise the request returns an
+// [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error code.
 type RecognitionConfig_AudioEncoding int32
 
 const (
@@ -78,7 +80,7 @@ const (
 	RecognitionConfig_ENCODING_UNSPECIFIED RecognitionConfig_AudioEncoding = 0
 	// Uncompressed 16-bit signed little-endian samples (Linear PCM).
 	RecognitionConfig_LINEAR16 RecognitionConfig_AudioEncoding = 1
-	// [`FLAC`](https://xiph.org/flac/documentation.html) (Free Lossless Audio
+	// `FLAC` (Free Lossless Audio
 	// Codec) is the recommended encoding because it is
 	// lossless--therefore recognition is not compromised--and
 	// requires only about half the bandwidth of `LINEAR16`. `FLAC` stream
@@ -139,6 +141,32 @@ func (RecognitionConfig_AudioEncoding) EnumDescriptor() ([]byte, []int) {
 	return fileDescriptor0, []int{4, 0}
 }
 
+// Speech content will not be logged until authorized consent is opted in.
+// Once it is opted in, this flag enables/disables logging to override that
+// consent.  default = ENABLED (logging due to consent).
+type GoogleDataCollectionConfig_LoggingConsentState int32
+
+const (
+	GoogleDataCollectionConfig_ENABLED  GoogleDataCollectionConfig_LoggingConsentState = 0
+	GoogleDataCollectionConfig_DISABLED GoogleDataCollectionConfig_LoggingConsentState = 1
+)
+
+var GoogleDataCollectionConfig_LoggingConsentState_name = map[int32]string{
+	0: "ENABLED",
+	1: "DISABLED",
+}
+var GoogleDataCollectionConfig_LoggingConsentState_value = map[string]int32{
+	"ENABLED":  0,
+	"DISABLED": 1,
+}
+
+func (x GoogleDataCollectionConfig_LoggingConsentState) String() string {
+	return proto.EnumName(GoogleDataCollectionConfig_LoggingConsentState_name, int32(x))
+}
+func (GoogleDataCollectionConfig_LoggingConsentState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{5, 0}
+}
+
 // Indicates the type of speech event.
 type StreamingRecognizeResponse_SpeechEventType int32
 
@@ -168,7 +196,7 @@ func (x StreamingRecognizeResponse_SpeechEventType) String() string {
 	return proto.EnumName(StreamingRecognizeResponse_SpeechEventType_name, int32(x))
 }
 func (StreamingRecognizeResponse_SpeechEventType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{10, 0}
+	return fileDescriptor0, []int{11, 0}
 }
 
 // The top-level message sent by the client for the `Recognize` method.
@@ -406,13 +434,17 @@ func (m *StreamingRecognitionConfig) GetInterimResults() bool {
 // Provides information to the recognizer that specifies how to process the
 // request.
 type RecognitionConfig struct {
-	// *Required* Encoding of audio data sent in all `RecognitionAudio` messages.
+	// Encoding of audio data sent in all `RecognitionAudio` messages.
+	// This field is optional for `FLAC` and `WAV` audio files and required
+	// for all other audio formats. For details, see [AudioEncoding][google.cloud.speech.v1p1beta1.RecognitionConfig.AudioEncoding].
 	Encoding RecognitionConfig_AudioEncoding `protobuf:"varint,1,opt,name=encoding,enum=google.cloud.speech.v1p1beta1.RecognitionConfig_AudioEncoding" json:"encoding,omitempty"`
-	// *Required* Sample rate in Hertz of the audio data sent in all
+	// Sample rate in Hertz of the audio data sent in all
 	// `RecognitionAudio` messages. Valid values are: 8000-48000.
 	// 16000 is optimal. For best results, set the sampling rate of the audio
 	// source to 16000 Hz. If that's not possible, use the native sample rate of
 	// the audio source (instead of re-sampling).
+	// This field is optional for `FLAC` and `WAV` audio files and required
+	// for all other audio formats. For details, see [AudioEncoding][google.cloud.speech.v1p1beta1.RecognitionConfig.AudioEncoding].
 	SampleRateHertz int32 `protobuf:"varint,2,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"`
 	// *Required* The language of the supplied audio as a
 	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.
@@ -443,7 +475,54 @@ type RecognitionConfig struct {
 	// best suited to your domain to get best results. If a model is not
 	// explicitly specified, then we auto-select a model based on the parameters
 	// in the RecognitionConfig.
+	// <table>
+	//   <tr>
+	//     <td><b>Model</b></td>
+	//     <td><b>Description</b></td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>command_and_search</code></td>
+	//     <td>Best for short queries such as voice commands or voice search.</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>phone_call</code></td>
+	//     <td>Best for audio that originated from a phone call (typically
+	//     recorded at an 8khz sampling rate).</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>video</code></td>
+	//     <td>Best for audio that originated from from video or includes multiple
+	//         speakers. Ideally the audio is recorded at a 16khz or greater
+	//         sampling rate. This is a premium model that costs more than the
+	//         standard rate.</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>default</code></td>
+	//     <td>Best for audio that is not one of the specific audio models.
+	//         For example, long-form audio. Ideally the audio is high-fidelity,
+	//         recorded at a 16khz or greater sampling rate.</td>
+	//   </tr>
+	// </table>
 	Model string `protobuf:"bytes,13,opt,name=model" json:"model,omitempty"`
+	// *Optional* Set to true to use an enhanced model for speech recognition.
+	// You must also set the `model` field to a valid, enhanced model. If
+	// `use_enhanced` is set to true and the `model` field is not set, then
+	// `use_enhanced` is ignored. If `use_enhanced` is true and an enhanced
+	// version of the specified model does not exist, then the speech is
+	// recognized using the standard version of the specified model.
+	//
+	// Enhanced speech models require that you enable audio logging for
+	// your request. To enable audio logging, set the `loggingConsentState` field
+	// to ENABLED in the [GoogleDataCollectionConfig][] section of your request.
+	// You must also opt-in to the audio logging alpha using the instructions in
+	// the [alpha documentation](/speech/data-sharing). If you set `use_enhanced`
+	// to true and you have not enabled audio logging, then you will receive
+	// an error.
+	UseEnhanced bool `protobuf:"varint,14,opt,name=use_enhanced,json=useEnhanced" json:"use_enhanced,omitempty"`
+	// *Optional* Contains settings to opt-in to allow Google to
+	// collect and use data from this request to improve Google's products and
+	// services.
+	GoogleDataCollectionOptIn *GoogleDataCollectionConfig `protobuf:"bytes,10,opt,name=google_data_collection_opt_in,json=googleDataCollectionOptIn" json:"google_data_collection_opt_in,omitempty"`
 }
 
 func (m *RecognitionConfig) Reset()                    { *m = RecognitionConfig{} }
@@ -507,6 +586,37 @@ func (m *RecognitionConfig) GetModel() string {
 	return ""
 }
 
+func (m *RecognitionConfig) GetUseEnhanced() bool {
+	if m != nil {
+		return m.UseEnhanced
+	}
+	return false
+}
+
+func (m *RecognitionConfig) GetGoogleDataCollectionOptIn() *GoogleDataCollectionConfig {
+	if m != nil {
+		return m.GoogleDataCollectionOptIn
+	}
+	return nil
+}
+
+// Google data collection opt-in settings.
+type GoogleDataCollectionConfig struct {
+	LoggingConsentState GoogleDataCollectionConfig_LoggingConsentState `protobuf:"varint,1,opt,name=logging_consent_state,json=loggingConsentState,enum=google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig_LoggingConsentState" json:"logging_consent_state,omitempty"`
+}
+
+func (m *GoogleDataCollectionConfig) Reset()                    { *m = GoogleDataCollectionConfig{} }
+func (m *GoogleDataCollectionConfig) String() string            { return proto.CompactTextString(m) }
+func (*GoogleDataCollectionConfig) ProtoMessage()               {}
+func (*GoogleDataCollectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *GoogleDataCollectionConfig) GetLoggingConsentState() GoogleDataCollectionConfig_LoggingConsentState {
+	if m != nil {
+		return m.LoggingConsentState
+	}
+	return GoogleDataCollectionConfig_ENABLED
+}
+
 // Provides "hints" to the speech recognizer to favor specific words and phrases
 // in the results.
 type SpeechContext struct {
@@ -522,7 +632,7 @@ type SpeechContext struct {
 func (m *SpeechContext) Reset()                    { *m = SpeechContext{} }
 func (m *SpeechContext) String() string            { return proto.CompactTextString(m) }
 func (*SpeechContext) ProtoMessage()               {}
-func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
 
 func (m *SpeechContext) GetPhrases() []string {
 	if m != nil {
@@ -548,7 +658,7 @@ type RecognitionAudio struct {
 func (m *RecognitionAudio) Reset()                    { *m = RecognitionAudio{} }
 func (m *RecognitionAudio) String() string            { return proto.CompactTextString(m) }
 func (*RecognitionAudio) ProtoMessage()               {}
-func (*RecognitionAudio) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+func (*RecognitionAudio) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
 
 type isRecognitionAudio_AudioSource interface {
 	isRecognitionAudio_AudioSource()
@@ -663,7 +773,7 @@ type RecognizeResponse struct {
 func (m *RecognizeResponse) Reset()                    { *m = RecognizeResponse{} }
 func (m *RecognizeResponse) String() string            { return proto.CompactTextString(m) }
 func (*RecognizeResponse) ProtoMessage()               {}
-func (*RecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+func (*RecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
 
 func (m *RecognizeResponse) GetResults() []*SpeechRecognitionResult {
 	if m != nil {
@@ -686,7 +796,7 @@ type LongRunningRecognizeResponse struct {
 func (m *LongRunningRecognizeResponse) Reset()                    { *m = LongRunningRecognizeResponse{} }
 func (m *LongRunningRecognizeResponse) String() string            { return proto.CompactTextString(m) }
 func (*LongRunningRecognizeResponse) ProtoMessage()               {}
-func (*LongRunningRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+func (*LongRunningRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
 
 func (m *LongRunningRecognizeResponse) GetResults() []*SpeechRecognitionResult {
 	if m != nil {
@@ -711,7 +821,7 @@ type LongRunningRecognizeMetadata struct {
 func (m *LongRunningRecognizeMetadata) Reset()                    { *m = LongRunningRecognizeMetadata{} }
 func (m *LongRunningRecognizeMetadata) String() string            { return proto.CompactTextString(m) }
 func (*LongRunningRecognizeMetadata) ProtoMessage()               {}
-func (*LongRunningRecognizeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+func (*LongRunningRecognizeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
 
 func (m *LongRunningRecognizeMetadata) GetProgressPercent() int32 {
 	if m != nil {
@@ -799,7 +909,7 @@ type StreamingRecognizeResponse struct {
 func (m *StreamingRecognizeResponse) Reset()                    { *m = StreamingRecognizeResponse{} }
 func (m *StreamingRecognizeResponse) String() string            { return proto.CompactTextString(m) }
 func (*StreamingRecognizeResponse) ProtoMessage()               {}
-func (*StreamingRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+func (*StreamingRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
 
 func (m *StreamingRecognizeResponse) GetError() *google_rpc.Status {
 	if m != nil {
@@ -847,7 +957,7 @@ type StreamingRecognitionResult struct {
 func (m *StreamingRecognitionResult) Reset()                    { *m = StreamingRecognitionResult{} }
 func (m *StreamingRecognitionResult) String() string            { return proto.CompactTextString(m) }
 func (*StreamingRecognitionResult) ProtoMessage()               {}
-func (*StreamingRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+func (*StreamingRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
 
 func (m *StreamingRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative {
 	if m != nil {
@@ -882,7 +992,7 @@ type SpeechRecognitionResult struct {
 func (m *SpeechRecognitionResult) Reset()                    { *m = SpeechRecognitionResult{} }
 func (m *SpeechRecognitionResult) String() string            { return proto.CompactTextString(m) }
 func (*SpeechRecognitionResult) ProtoMessage()               {}
-func (*SpeechRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (*SpeechRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
 
 func (m *SpeechRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative {
 	if m != nil {
@@ -910,7 +1020,7 @@ type SpeechRecognitionAlternative struct {
 func (m *SpeechRecognitionAlternative) Reset()                    { *m = SpeechRecognitionAlternative{} }
 func (m *SpeechRecognitionAlternative) String() string            { return proto.CompactTextString(m) }
 func (*SpeechRecognitionAlternative) ProtoMessage()               {}
-func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
 
 func (m *SpeechRecognitionAlternative) GetTranscript() string {
 	if m != nil {
@@ -956,7 +1066,7 @@ type WordInfo struct {
 func (m *WordInfo) Reset()                    { *m = WordInfo{} }
 func (m *WordInfo) String() string            { return proto.CompactTextString(m) }
 func (*WordInfo) ProtoMessage()               {}
-func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
 
 func (m *WordInfo) GetStartTime() *google_protobuf3.Duration {
 	if m != nil {
@@ -985,6 +1095,7 @@ func init() {
 	proto.RegisterType((*StreamingRecognizeRequest)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognizeRequest")
 	proto.RegisterType((*StreamingRecognitionConfig)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognitionConfig")
 	proto.RegisterType((*RecognitionConfig)(nil), "google.cloud.speech.v1p1beta1.RecognitionConfig")
+	proto.RegisterType((*GoogleDataCollectionConfig)(nil), "google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig")
 	proto.RegisterType((*SpeechContext)(nil), "google.cloud.speech.v1p1beta1.SpeechContext")
 	proto.RegisterType((*RecognitionAudio)(nil), "google.cloud.speech.v1p1beta1.RecognitionAudio")
 	proto.RegisterType((*RecognizeResponse)(nil), "google.cloud.speech.v1p1beta1.RecognizeResponse")
@@ -996,6 +1107,7 @@ func init() {
 	proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.speech.v1p1beta1.SpeechRecognitionAlternative")
 	proto.RegisterType((*WordInfo)(nil), "google.cloud.speech.v1p1beta1.WordInfo")
 	proto.RegisterEnum("google.cloud.speech.v1p1beta1.RecognitionConfig_AudioEncoding", RecognitionConfig_AudioEncoding_name, RecognitionConfig_AudioEncoding_value)
+	proto.RegisterEnum("google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig_LoggingConsentState", GoogleDataCollectionConfig_LoggingConsentState_name, GoogleDataCollectionConfig_LoggingConsentState_value)
 	proto.RegisterEnum("google.cloud.speech.v1p1beta1.StreamingRecognizeResponse_SpeechEventType", StreamingRecognizeResponse_SpeechEventType_name, StreamingRecognizeResponse_SpeechEventType_value)
 }
 
@@ -1189,89 +1301,98 @@ var _Speech_serviceDesc = grpc.ServiceDesc{
 func init() { proto.RegisterFile("google/cloud/speech/v1p1beta1/cloud_speech.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 1343 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xbb, 0x6f, 0x5b, 0xb7,
-	0x1a, 0xf7, 0xb1, 0x2c, 0x3f, 0xbe, 0xf8, 0x21, 0xf3, 0xe6, 0xde, 0xc8, 0x8a, 0x93, 0xeb, 0x7b,
-	0x82, 0x9b, 0x38, 0x69, 0x21, 0xd9, 0x6e, 0x91, 0xe6, 0x81, 0x16, 0x90, 0xe5, 0x63, 0x4b, 0x80,
-	0x2d, 0x1b, 0xb4, 0x5c, 0xb7, 0x59, 0x08, 0x5a, 0xa2, 0x94, 0x03, 0x48, 0xe4, 0x29, 0x49, 0xa5,
-	0xb1, 0xc7, 0xae, 0x45, 0xbb, 0x14, 0xe8, 0xd6, 0xa9, 0x9d, 0x3b, 0x76, 0xe8, 0xd2, 0x3d, 0x6b,
-	0x97, 0x8e, 0x1d, 0xfa, 0x47, 0x74, 0x2c, 0x48, 0x9e, 0x23, 0x4b, 0x7e, 0x27, 0x68, 0x80, 0x6e,
-	0x87, 0xbf, 0xef, 0xc1, 0x1f, 0x3f, 0x7e, 0x0f, 0x1e, 0x58, 0x6a, 0x09, 0xd1, 0x6a, 0xb3, 0x42,
-	0xbd, 0x2d, 0xba, 0x8d, 0x82, 0x8a, 0x18, 0xab, 0x3f, 0x2f, 0xbc, 0x58, 0x8e, 0x96, 0x0f, 0x98,
-	0xa6, 0xcb, 0x0e, 0x26, 0x0e, 0xce, 0x47, 0x52, 0x68, 0x81, 0x6e, 0x39, 0x8b, 0xbc, 0x15, 0xe5,
-	0x63, 0x51, 0xcf, 0x22, 0x37, 0x1f, 0x3b, 0xa4, 0x51, 0x58, 0xa0, 0x9c, 0x0b, 0x4d, 0x75, 0x28,
-	0xb8, 0x72, 0xc6, 0xb9, 0x3b, 0xb1, 0xb4, 0x2d, 0x78, 0x4b, 0x76, 0x39, 0x0f, 0x79, 0xab, 0x20,
-	0x22, 0x26, 0x07, 0x94, 0xe6, 0x62, 0x25, 0xbb, 0x3a, 0xe8, 0x36, 0x0b, 0x94, 0x1f, 0xc6, 0xa2,
-	0xdb, 0x27, 0x45, 0x8d, 0xae, 0xb3, 0x8d, 0xe5, 0xff, 0x3d, 0x29, 0xd7, 0x61, 0x87, 0x29, 0x4d,
-	0x3b, 0x51, 0xac, 0x70, 0x23, 0x56, 0x90, 0x51, 0xbd, 0xa0, 0x34, 0xd5, 0xdd, 0x78, 0x53, 0xff,
-	0x7b, 0x0f, 0x32, 0x98, 0xd5, 0x45, 0x8b, 0x87, 0x47, 0x0c, 0xb3, 0xcf, 0xba, 0x4c, 0x69, 0x54,
-	0x86, 0xd1, 0xba, 0xe0, 0xcd, 0xb0, 0x95, 0xf5, 0x16, 0xbc, 0xc5, 0x6b, 0x2b, 0x4b, 0xf9, 0x0b,
-	0x0f, 0x9f, 0x8f, 0x1d, 0x18, 0x42, 0x25, 0x6b, 0x87, 0x63, 0x7b, 0x14, 0x40, 0x9a, 0x76, 0x1b,
-	0xa1, 0xc8, 0x0e, 0x5b, 0x47, 0x85, 0xab, 0x3b, 0x2a, 0x1a, 0x33, 0xec, 0xac, 0xfd, 0x1f, 0x3d,
-	0xb8, 0xb9, 0x29, 0x78, 0x0b, 0xbb, 0xd8, 0xfd, 0xf3, 0x09, 0xff, 0xe2, 0xc1, 0xdc, 0xae, 0x96,
-	0x8c, 0x76, 0xce, 0xa2, 0xdb, 0x84, 0x8c, 0x4a, 0x84, 0x64, 0x80, 0xf8, 0xe3, 0x4b, 0xf6, 0x3b,
-	0xe9, 0xf3, 0xf8, 0x04, 0xe5, 0x21, 0x3c, 0xd3, 0x73, 0xea, 0x20, 0xf4, 0x7f, 0x98, 0xb2, 0x74,
-	0xcc, 0x1e, 0x9a, 0x71, 0x6d, 0x0f, 0x35, 0x59, 0x1e, 0xc2, 0x93, 0x16, 0x2e, 0x39, 0x74, 0xf5,
-	0x5f, 0x30, 0x7b, 0x4c, 0x47, 0x3a, 0x8e, 0xfe, 0xcf, 0x1e, 0xe4, 0xce, 0xdf, 0xed, 0x6f, 0x8c,
-	0xf8, 0x7d, 0xc8, 0xa8, 0x90, 0xb7, 0xda, 0x8c, 0x74, 0xb5, 0x66, 0x92, 0xf2, 0x3a, 0xb3, 0x3c,
-	0xc7, 0xf1, 0x8c, 0xc3, 0xf7, 0x12, 0x18, 0xdd, 0x83, 0x99, 0x90, 0x6b, 0x26, 0xc3, 0x0e, 0x91,
-	0x4c, 0x75, 0xdb, 0x5a, 0x65, 0x53, 0x56, 0x73, 0x3a, 0x86, 0xb1, 0x43, 0xfd, 0x57, 0x23, 0x30,
-	0x7b, 0x9a, 0xf3, 0x33, 0x18, 0x67, 0xbc, 0x2e, 0x1a, 0x21, 0x77, 0xac, 0xa7, 0x57, 0x3e, 0x7a,
-	0x5d, 0xd6, 0x79, 0x7b, 0xcb, 0x41, 0xec, 0x05, 0xf7, 0xfc, 0xa1, 0x07, 0x30, 0xab, 0x68, 0x27,
-	0x6a, 0x33, 0x22, 0xa9, 0x66, 0xe4, 0x39, 0x93, 0xfa, 0xc8, 0x1e, 0x23, 0x8d, 0x67, 0x9c, 0x00,
-	0x53, 0xcd, 0xca, 0x06, 0x46, 0x77, 0x60, 0xaa, 0x4d, 0x79, 0xab, 0x4b, 0x5b, 0x8c, 0xd4, 0x45,
-	0x83, 0xd9, 0x43, 0x4c, 0xe0, 0xc9, 0x04, 0x2c, 0x89, 0x06, 0x33, 0x61, 0xe9, 0xd0, 0x97, 0x84,
-	0xb6, 0x35, 0x93, 0x9c, 0xea, 0xf0, 0x05, 0x53, 0xd9, 0x11, 0xe7, 0xaf, 0x43, 0x5f, 0x16, 0xfb,
-	0x60, 0xa3, 0x1a, 0x49, 0xd1, 0xa4, 0x3c, 0xd4, 0x87, 0xa4, 0x19, 0x1a, 0x51, 0x36, 0xed, 0x22,
-	0xd8, 0xc3, 0xd7, 0x2d, 0x8c, 0xf6, 0x60, 0xc6, 0x1d, 0xd2, 0xa5, 0xc4, 0x4b, 0xad, 0xb2, 0xa3,
-	0x0b, 0xa9, 0xc5, 0x6b, 0x2b, 0xef, 0x5e, 0x96, 0x78, 0x16, 0x28, 0x39, 0x23, 0x3c, 0xad, 0xfa,
-	0x97, 0x0a, 0x7d, 0x00, 0x59, 0xc6, 0xe9, 0x41, 0x9b, 0x91, 0xcf, 0x85, 0x6c, 0x10, 0xd3, 0x7d,
-	0x88, 0x68, 0x36, 0x15, 0xd3, 0x2a, 0x3b, 0x6e, 0x99, 0xfc, 0xdb, 0xc9, 0xf7, 0x85, 0x6c, 0xd4,
-	0xc2, 0x0e, 0xdb, 0x76, 0x42, 0x74, 0x1d, 0xd2, 0x1d, 0xd1, 0x60, 0xed, 0xec, 0x94, 0x0d, 0x81,
-	0x5b, 0xf8, 0x5f, 0x7a, 0x30, 0x35, 0x10, 0x68, 0x94, 0x85, 0xeb, 0x41, 0xb5, 0xb4, 0xbd, 0x56,
-	0xa9, 0x6e, 0x90, 0xbd, 0xea, 0xee, 0x4e, 0x50, 0xaa, 0xac, 0x57, 0x82, 0xb5, 0xcc, 0x10, 0x9a,
-	0x84, 0xf1, 0xcd, 0x4a, 0x35, 0x28, 0xe2, 0xe5, 0x87, 0x19, 0x0f, 0x8d, 0xc3, 0xc8, 0xfa, 0x66,
-	0xb1, 0x94, 0x19, 0x46, 0x13, 0x90, 0xde, 0xda, 0xdb, 0x2c, 0xee, 0x67, 0x52, 0x68, 0x0c, 0x52,
-	0xc5, 0x2d, 0x9c, 0x19, 0x41, 0x00, 0xa3, 0xc5, 0x2d, 0x4c, 0xf6, 0x57, 0x33, 0x69, 0x63, 0xb7,
-	0xbd, 0xb1, 0x41, 0xb6, 0x77, 0xf6, 0x76, 0x33, 0xa3, 0x28, 0x07, 0xff, 0xd9, 0xdd, 0x09, 0x82,
-	0x4f, 0xc8, 0x7e, 0xa5, 0x56, 0x26, 0xe5, 0xa0, 0xb8, 0x16, 0x60, 0xb2, 0xfa, 0x69, 0x2d, 0xc8,
-	0x8c, 0xf9, 0xf7, 0x61, 0x6a, 0xe0, 0xf4, 0x28, 0x0b, 0x63, 0xd1, 0x73, 0x49, 0x15, 0x53, 0x59,
-	0x6f, 0x21, 0xb5, 0x38, 0x81, 0x93, 0xa5, 0x8f, 0x7b, 0xcd, 0xb4, 0xd7, 0x11, 0x50, 0x0e, 0xc6,
-	0x92, 0xf2, 0xf3, 0xe2, 0xf2, 0x4b, 0x00, 0x84, 0x20, 0xd5, 0x95, 0xa1, 0xcd, 0x93, 0x89, 0xf2,
-	0x10, 0x36, 0x8b, 0xd5, 0x69, 0x70, 0xd5, 0x49, 0x94, 0xe8, 0xca, 0x3a, 0xf3, 0x59, 0x2f, 0x95,
-	0x4d, 0x03, 0x51, 0x91, 0xe0, 0x8a, 0xa1, 0x1d, 0x18, 0x4b, 0x2a, 0x60, 0xd8, 0xde, 0xdf, 0xc3,
-	0x2b, 0xdd, 0x5f, 0x1f, 0x39, 0x57, 0x2a, 0x38, 0x71, 0xe3, 0x47, 0x30, 0x7f, 0x76, 0x87, 0x7d,
-	0x6b, 0x3b, 0xbe, 0xf2, 0xce, 0xde, 0x72, 0x8b, 0x69, 0xda, 0xa0, 0x9a, 0xc6, 0x79, 0xdd, 0x92,
-	0x4c, 0x29, 0x12, 0x31, 0x59, 0x4f, 0x42, 0x98, 0xb6, 0x79, 0x6d, 0xf1, 0x1d, 0x07, 0xa3, 0xc7,
-	0x00, 0x4a, 0x53, 0xa9, 0x6d, 0xea, 0xc5, 0xbd, 0x3b, 0x97, 0x10, 0x4c, 0xa6, 0x62, 0xbe, 0x96,
-	0x4c, 0x45, 0x3c, 0x61, 0xb5, 0xcd, 0x1a, 0xad, 0x41, 0xa6, 0x4d, 0x95, 0x26, 0xdd, 0xa8, 0x61,
-	0x2a, 0xd7, 0x3a, 0x48, 0x5d, 0xea, 0x60, 0xda, 0xd8, 0xec, 0x59, 0x13, 0x03, 0xfa, 0xbf, 0x0f,
-	0x9f, 0x6e, 0x97, 0x7d, 0xd1, 0x5b, 0x84, 0x34, 0x93, 0x52, 0xc8, 0xb8, 0x5b, 0xa2, 0xc4, 0xb3,
-	0x8c, 0xea, 0xf9, 0x5d, 0x3b, 0x8f, 0xb1, 0x53, 0x40, 0xbb, 0x27, 0xe3, 0xfc, 0x26, 0x23, 0xe1,
-	0x44, 0xa8, 0x51, 0x17, 0x66, 0xe3, 0xb2, 0x67, 0x2f, 0x18, 0xd7, 0x44, 0x1f, 0x46, 0xcc, 0x76,
-	0x93, 0xe9, 0x95, 0xca, 0x6b, 0xba, 0x3f, 0x3e, 0x54, 0x7c, 0xc3, 0x81, 0xf1, 0x58, 0x3b, 0x8c,
-	0x18, 0x8e, 0x5b, 0x4b, 0x0f, 0xf0, 0x37, 0x61, 0xe6, 0x84, 0x0e, 0x9a, 0x87, 0xac, 0x29, 0xb4,
-	0x52, 0x99, 0x04, 0x1f, 0x07, 0xd5, 0xda, 0x89, 0x62, 0xbe, 0x09, 0x37, 0x82, 0xea, 0x1a, 0xd9,
-	0x5e, 0x27, 0xbb, 0x95, 0xea, 0xc6, 0x66, 0x40, 0xf6, 0x6a, 0xb5, 0x00, 0x17, 0xab, 0xa5, 0x20,
-	0xe3, 0xf9, 0x3f, 0x9d, 0x33, 0x91, 0xdc, 0x61, 0x11, 0x81, 0xc9, 0x81, 0x66, 0xe9, 0xd9, 0xe8,
-	0x3d, 0x7d, 0xdd, 0x2c, 0xed, 0xeb, 0xac, 0x78, 0xc0, 0x21, 0x9a, 0x83, 0xf1, 0x50, 0x91, 0x66,
-	0xc8, 0x69, 0x3b, 0x1e, 0x50, 0x63, 0xa1, 0x5a, 0x37, 0x4b, 0x34, 0x0f, 0x26, 0xa1, 0x0e, 0xc2,
-	0x76, 0xa8, 0x0f, 0x6d, 0xf2, 0x0c, 0xe3, 0x63, 0xc0, 0x3f, 0x82, 0x1b, 0xe7, 0x14, 0xc3, 0x5b,
-	0x27, 0xed, 0x7f, 0xe7, 0xc1, 0xfc, 0x45, 0xea, 0xe8, 0x36, 0x80, 0x96, 0x94, 0xab, 0xba, 0x0c,
-	0x23, 0x57, 0x5e, 0x13, 0xb8, 0x0f, 0x31, 0x72, 0x3b, 0xa8, 0x1b, 0x2c, 0x19, 0xcc, 0xc3, 0xb8,
-	0x0f, 0x41, 0x1f, 0x42, 0xda, 0xf4, 0x7c, 0x33, 0x89, 0x0d, 0xf5, 0x7b, 0x97, 0x50, 0x37, 0x03,
-	0xa0, 0xc2, 0x9b, 0x02, 0x3b, 0x2b, 0xff, 0x6b, 0x0f, 0xc6, 0x13, 0x0c, 0x3d, 0x1a, 0xa8, 0x62,
-	0x57, 0x2a, 0x73, 0xa7, 0x8a, 0x70, 0x2d, 0x7e, 0xfb, 0xf6, 0x17, 0xf1, 0xfb, 0x66, 0xb4, 0x37,
-	0xfa, 0xab, 0xff, 0x02, 0xbb, 0x31, 0xc6, 0xed, 0x10, 0x42, 0x08, 0x46, 0x0c, 0x8b, 0x78, 0xfe,
-	0xda, 0xef, 0x95, 0xdf, 0x52, 0x30, 0xea, 0x02, 0x86, 0xbe, 0xf5, 0x60, 0xa2, 0x97, 0xf5, 0xe8,
-	0x8a, 0x4f, 0xc1, 0xde, 0x2b, 0x2f, 0xb7, 0x74, 0x75, 0x03, 0x57, 0x50, 0xfe, 0xdd, 0x2f, 0x7e,
-	0xfd, 0xe3, 0x9b, 0xe1, 0x05, 0xff, 0x66, 0xdf, 0xaf, 0x88, 0x33, 0x7b, 0x22, 0x13, 0xe5, 0x27,
-	0xde, 0x03, 0xf4, 0x83, 0x07, 0xd7, 0xcf, 0xea, 0x9c, 0xe8, 0xc9, 0x25, 0x5b, 0x5e, 0xf0, 0x86,
-	0xce, 0xdd, 0x4a, 0x6c, 0xfb, 0x7e, 0x52, 0xf2, 0xdb, 0xc9, 0x4f, 0x8a, 0xbf, 0x6c, 0xb9, 0xbd,
-	0xe3, 0xdf, 0x3d, 0xcd, 0xad, 0xcf, 0x60, 0x80, 0xe6, 0x57, 0x1e, 0xa0, 0xd3, 0xed, 0x03, 0x3d,
-	0x7a, 0x83, 0x8e, 0xe3, 0x28, 0x3e, 0x7e, 0xe3, 0x5e, 0xb5, 0xe8, 0x2d, 0x79, 0xab, 0x47, 0xf0,
-	0xbf, 0xba, 0xe8, 0x5c, 0xec, 0x63, 0xf5, 0x9a, 0xbb, 0xfc, 0x1d, 0x93, 0x35, 0x3b, 0xde, 0xb3,
-	0x52, 0xac, 0xdd, 0x12, 0xe6, 0x75, 0x96, 0x17, 0xb2, 0x55, 0x68, 0x31, 0x6e, 0x73, 0xaa, 0xe0,
-	0x44, 0x34, 0x0a, 0xd5, 0x39, 0xff, 0x91, 0x4f, 0x1d, 0xf0, 0xa7, 0xe7, 0x1d, 0x8c, 0x5a, 0x93,
-	0xf7, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x7b, 0x24, 0x37, 0x79, 0x0e, 0x00, 0x00,
+	// 1477 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xbd, 0x6f, 0x1b, 0x47,
+	0x16, 0xd7, 0x8a, 0xa2, 0x28, 0x3d, 0x7d, 0x51, 0x63, 0xfb, 0x4c, 0xd1, 0xb2, 0x4f, 0x5e, 0xe3,
+	0x6c, 0xd9, 0x77, 0x20, 0x25, 0xdd, 0xc1, 0xe7, 0x0f, 0xdc, 0x01, 0x14, 0xb9, 0x12, 0x09, 0x50,
+	0x94, 0x30, 0xa4, 0x4e, 0x77, 0x6e, 0x06, 0x23, 0x72, 0xb8, 0x5a, 0x60, 0xb9, 0xbb, 0xb7, 0x33,
+	0xeb, 0x58, 0x4a, 0x95, 0xb4, 0x41, 0xd2, 0x04, 0x48, 0x97, 0x2a, 0xa9, 0x53, 0xa6, 0x48, 0x93,
+	0x3e, 0x65, 0xd2, 0xa4, 0x4c, 0x91, 0x2a, 0x7f, 0x41, 0xca, 0x60, 0x66, 0x76, 0x29, 0x52, 0xdf,
+	0x16, 0x62, 0x20, 0xdd, 0xce, 0xef, 0x7d, 0xcc, 0x9b, 0xb7, 0xf3, 0x7e, 0xef, 0x0d, 0xac, 0xd8,
+	0xbe, 0x6f, 0xbb, 0xac, 0xd8, 0x76, 0xfd, 0xa8, 0x53, 0xe4, 0x01, 0x63, 0xed, 0x83, 0xe2, 0xeb,
+	0xd5, 0x60, 0x75, 0x9f, 0x09, 0xba, 0xaa, 0x61, 0xa2, 0xe1, 0x42, 0x10, 0xfa, 0xc2, 0x47, 0x77,
+	0xb5, 0x45, 0x41, 0x89, 0x0a, 0xb1, 0xa8, 0x6f, 0x91, 0x5f, 0x8c, 0x1d, 0xd2, 0xc0, 0x29, 0x52,
+	0xcf, 0xf3, 0x05, 0x15, 0x8e, 0xef, 0x71, 0x6d, 0x9c, 0x7f, 0x10, 0x4b, 0x5d, 0xdf, 0xb3, 0xc3,
+	0xc8, 0xf3, 0x1c, 0xcf, 0x2e, 0xfa, 0x01, 0x0b, 0x87, 0x94, 0x16, 0x62, 0x25, 0xb5, 0xda, 0x8f,
+	0xba, 0x45, 0xea, 0x1d, 0xc6, 0xa2, 0x7b, 0x27, 0x45, 0x9d, 0x48, 0xdb, 0xc6, 0xf2, 0x3f, 0x9f,
+	0x94, 0x0b, 0xa7, 0xc7, 0xb8, 0xa0, 0xbd, 0x20, 0x56, 0xb8, 0x1d, 0x2b, 0x84, 0x41, 0xbb, 0xc8,
+	0x05, 0x15, 0x51, 0xbc, 0xa9, 0xf9, 0x85, 0x01, 0x59, 0xcc, 0xda, 0xbe, 0xed, 0x39, 0x47, 0x0c,
+	0xb3, 0xff, 0x47, 0x8c, 0x0b, 0x54, 0x85, 0xf1, 0xb6, 0xef, 0x75, 0x1d, 0x3b, 0x67, 0x2c, 0x19,
+	0xcb, 0x53, 0x6b, 0x2b, 0x85, 0x0b, 0x0f, 0x5f, 0x88, 0x1d, 0xc8, 0x80, 0xca, 0xca, 0x0e, 0xc7,
+	0xf6, 0xc8, 0x82, 0x34, 0x8d, 0x3a, 0x8e, 0x9f, 0x1b, 0x55, 0x8e, 0x8a, 0x57, 0x77, 0x54, 0x92,
+	0x66, 0x58, 0x5b, 0x9b, 0x5f, 0x19, 0x70, 0xa7, 0xee, 0x7b, 0x36, 0xd6, 0xb9, 0xfb, 0xe3, 0x07,
+	0xfc, 0xad, 0x01, 0x0b, 0x4d, 0x11, 0x32, 0xda, 0x3b, 0x2b, 0xdc, 0x2e, 0x64, 0x79, 0x22, 0x24,
+	0x43, 0x81, 0x3f, 0xbf, 0x64, 0xbf, 0x93, 0x3e, 0x8f, 0x4f, 0x50, 0x1d, 0xc1, 0x73, 0x7d, 0xa7,
+	0x1a, 0x42, 0x7f, 0x81, 0x19, 0x15, 0x8e, 0xdc, 0x43, 0x30, 0x4f, 0xa8, 0x43, 0x4d, 0x57, 0x47,
+	0xf0, 0xb4, 0x82, 0xcb, 0x1a, 0x5d, 0xbf, 0x01, 0xf3, 0xc7, 0xe1, 0x84, 0x3a, 0x46, 0xf3, 0x1b,
+	0x03, 0xf2, 0xe7, 0xef, 0xf6, 0x3b, 0x66, 0xfc, 0x31, 0x64, 0xb9, 0xe3, 0xd9, 0x2e, 0x23, 0x91,
+	0x10, 0x2c, 0xa4, 0x5e, 0x9b, 0xa9, 0x38, 0x27, 0xf0, 0x9c, 0xc6, 0x77, 0x13, 0x18, 0x3d, 0x82,
+	0x39, 0xc7, 0x13, 0x2c, 0x74, 0x7a, 0x24, 0x64, 0x3c, 0x72, 0x05, 0xcf, 0xa5, 0x94, 0xe6, 0x6c,
+	0x0c, 0x63, 0x8d, 0x9a, 0xbf, 0xa4, 0x61, 0xfe, 0x74, 0xcc, 0xaf, 0x60, 0x82, 0x79, 0x6d, 0xbf,
+	0xe3, 0x78, 0x3a, 0xea, 0xd9, 0xb5, 0x7f, 0xbf, 0x6d, 0xd4, 0x05, 0xf5, 0x97, 0xad, 0xd8, 0x0b,
+	0xee, 0xfb, 0x43, 0x4f, 0x60, 0x9e, 0xd3, 0x5e, 0xe0, 0x32, 0x12, 0x52, 0xc1, 0xc8, 0x01, 0x0b,
+	0xc5, 0x91, 0x3a, 0x46, 0x1a, 0xcf, 0x69, 0x01, 0xa6, 0x82, 0x55, 0x25, 0x8c, 0x1e, 0xc0, 0x8c,
+	0x4b, 0x3d, 0x3b, 0xa2, 0x36, 0x23, 0x6d, 0xbf, 0xc3, 0xd4, 0x21, 0x26, 0xf1, 0x74, 0x02, 0x96,
+	0xfd, 0x0e, 0x93, 0x69, 0xe9, 0xd1, 0x37, 0x84, 0xba, 0x82, 0x85, 0x1e, 0x15, 0xce, 0x6b, 0xc6,
+	0x73, 0x63, 0xda, 0x5f, 0x8f, 0xbe, 0x29, 0x0d, 0xc0, 0x52, 0x35, 0x08, 0xfd, 0x2e, 0xf5, 0x1c,
+	0x71, 0x48, 0xba, 0x8e, 0x14, 0xe5, 0xd2, 0x3a, 0x83, 0x7d, 0x7c, 0x43, 0xc1, 0x68, 0x17, 0xe6,
+	0xf4, 0x21, 0xf5, 0x95, 0x78, 0x23, 0x78, 0x6e, 0x7c, 0x29, 0xb5, 0x3c, 0xb5, 0xf6, 0xb7, 0xcb,
+	0x2e, 0x9e, 0x02, 0xca, 0xda, 0x08, 0xcf, 0xf2, 0xc1, 0x25, 0x47, 0xff, 0x84, 0x1c, 0xf3, 0xe8,
+	0xbe, 0xcb, 0xc8, 0x7b, 0x7e, 0xd8, 0x21, 0x92, 0x7d, 0x88, 0xdf, 0xed, 0x72, 0x26, 0x78, 0x6e,
+	0x42, 0x45, 0x72, 0x4b, 0xcb, 0xf7, 0xfc, 0xb0, 0xd3, 0x72, 0x7a, 0x6c, 0x5b, 0x0b, 0xd1, 0x4d,
+	0x48, 0xf7, 0xfc, 0x0e, 0x73, 0x73, 0x33, 0x2a, 0x05, 0x7a, 0x81, 0xee, 0xc3, 0x74, 0xc4, 0x19,
+	0x61, 0xde, 0x81, 0xfc, 0xed, 0x9d, 0xdc, 0xac, 0x72, 0x31, 0x15, 0x71, 0x66, 0xc5, 0x10, 0x7a,
+	0x1f, 0x62, 0x42, 0x26, 0x1d, 0x2a, 0x28, 0x69, 0xfb, 0xae, 0xcb, 0xda, 0xf2, 0x3f, 0x11, 0x3f,
+	0x10, 0xc4, 0xf1, 0x72, 0x70, 0xa5, 0x7a, 0xda, 0x54, 0xd2, 0x0a, 0x15, 0xb4, 0xdc, 0xf7, 0x10,
+	0xdf, 0xcf, 0x98, 0x8e, 0x87, 0x65, 0xdb, 0x81, 0xa8, 0x79, 0xe6, 0x47, 0x06, 0xcc, 0x0c, 0x5d,
+	0x04, 0x94, 0x83, 0x9b, 0x56, 0xa3, 0xbc, 0x5d, 0xa9, 0x35, 0x36, 0xc9, 0x6e, 0xa3, 0xb9, 0x63,
+	0x95, 0x6b, 0x1b, 0x35, 0xab, 0x92, 0x1d, 0x41, 0xd3, 0x30, 0x51, 0xaf, 0x35, 0xac, 0x12, 0x5e,
+	0x7d, 0x9a, 0x35, 0xd0, 0x04, 0x8c, 0x6d, 0xd4, 0x4b, 0xe5, 0xec, 0x28, 0x9a, 0x84, 0xf4, 0xd6,
+	0x6e, 0xbd, 0xb4, 0x97, 0x4d, 0xa1, 0x0c, 0xa4, 0x4a, 0x5b, 0x38, 0x3b, 0x86, 0x00, 0xc6, 0x4b,
+	0x5b, 0x98, 0xec, 0xad, 0x67, 0xd3, 0xd2, 0x6e, 0x7b, 0x73, 0x93, 0x6c, 0xef, 0xec, 0x36, 0xb3,
+	0xe3, 0x28, 0x0f, 0x7f, 0x6a, 0xee, 0x58, 0xd6, 0x7f, 0xc9, 0x5e, 0xad, 0x55, 0x25, 0x55, 0xab,
+	0x54, 0xb1, 0x30, 0x59, 0xff, 0x5f, 0xcb, 0xca, 0x66, 0xcc, 0xef, 0x0d, 0xc8, 0x9f, 0x7f, 0x0e,
+	0xf4, 0x81, 0x01, 0xb7, 0x5c, 0xdf, 0xb6, 0x63, 0xae, 0xe1, 0xcc, 0x13, 0x44, 0xb6, 0x00, 0x16,
+	0xd7, 0xc0, 0xd6, 0xb5, 0x53, 0x54, 0xa8, 0x6b, 0xb7, 0x65, 0xed, 0xb5, 0x29, 0x9d, 0xe2, 0x1b,
+	0xee, 0x69, 0xd0, 0x5c, 0x81, 0x1b, 0x67, 0xe8, 0xa2, 0x29, 0xc8, 0x58, 0x8d, 0xd2, 0x7a, 0x3d,
+	0x49, 0x54, 0xa5, 0xd6, 0xd4, 0x2b, 0xc3, 0x7c, 0x0c, 0x33, 0x43, 0x57, 0x0e, 0xe5, 0x20, 0x13,
+	0x1c, 0x84, 0x94, 0x33, 0x9e, 0x33, 0x96, 0x52, 0xcb, 0x93, 0x38, 0x59, 0x9a, 0xb8, 0xdf, 0xc1,
+	0xfa, 0x34, 0x8c, 0xf2, 0x90, 0x49, 0x38, 0xcf, 0x88, 0x39, 0x2f, 0x01, 0x10, 0x82, 0x54, 0x14,
+	0x3a, 0xaa, 0x38, 0x27, 0xab, 0x23, 0x58, 0x2e, 0xd6, 0x67, 0x41, 0x53, 0x22, 0xe1, 0x7e, 0x14,
+	0xb6, 0x99, 0xc9, 0xfa, 0xfc, 0x21, 0x59, 0x9b, 0x07, 0x32, 0x6a, 0xb4, 0x03, 0x99, 0x84, 0x76,
+	0x46, 0x55, 0xd1, 0x3c, 0xbd, 0x52, 0xd1, 0x0c, 0x04, 0xa7, 0xf9, 0x09, 0x27, 0x6e, 0xcc, 0x00,
+	0x16, 0xcf, 0x6e, 0x6b, 0xef, 0x6c, 0xc7, 0xef, 0x8c, 0xb3, 0xb7, 0xdc, 0x62, 0x82, 0xca, 0x4a,
+	0x8a, 0xc9, 0xc4, 0x0e, 0x19, 0xe7, 0x24, 0x60, 0x61, 0x3b, 0x49, 0x61, 0x5a, 0x91, 0x89, 0xc2,
+	0x77, 0x34, 0x8c, 0x9e, 0x03, 0x70, 0x41, 0x43, 0xa1, 0xea, 0x3d, 0x6e, 0x98, 0xf9, 0x24, 0xc0,
+	0x64, 0x14, 0x29, 0xb4, 0x92, 0x51, 0x04, 0x4f, 0x2a, 0x6d, 0xb9, 0x46, 0x15, 0xc8, 0xba, 0x94,
+	0x0b, 0x12, 0x05, 0x1d, 0x49, 0x97, 0xca, 0x41, 0xea, 0x52, 0x07, 0xb3, 0xd2, 0x66, 0x57, 0x99,
+	0x48, 0xd0, 0xfc, 0x69, 0xf4, 0x74, 0x8f, 0x1a, 0xc8, 0xde, 0x32, 0xa4, 0x59, 0x18, 0xfa, 0x61,
+	0xdc, 0xa2, 0x50, 0xe2, 0x39, 0x0c, 0xda, 0x85, 0xa6, 0x1a, 0x82, 0xb0, 0x56, 0x40, 0xcd, 0x93,
+	0x79, 0xbe, 0x4e, 0x1f, 0x3e, 0x91, 0x6a, 0x14, 0xc1, 0x7c, 0xcc, 0xb5, 0xec, 0xb5, 0x2c, 0x3a,
+	0x71, 0x18, 0x30, 0x45, 0xe1, 0xb3, 0x6b, 0xb5, 0xb7, 0x74, 0x7f, 0x7c, 0xa8, 0xf8, 0x0f, 0x5b,
+	0xd2, 0x63, 0xeb, 0x30, 0x60, 0x38, 0xe6, 0xf3, 0x3e, 0x60, 0xd6, 0x61, 0xee, 0x84, 0x0e, 0x5a,
+	0x84, 0x9c, 0x64, 0x8f, 0x72, 0x95, 0x58, 0xff, 0xb1, 0x1a, 0xad, 0x13, 0x0c, 0x75, 0x07, 0x6e,
+	0x5b, 0x8d, 0x0a, 0xd9, 0xde, 0x20, 0xcd, 0x5a, 0x63, 0xb3, 0x6e, 0x91, 0xdd, 0x56, 0xcb, 0xc2,
+	0xa5, 0x46, 0xd9, 0xca, 0x1a, 0xe6, 0xd7, 0xe7, 0x8c, 0x01, 0xfa, 0xb0, 0x88, 0xc0, 0xf4, 0x50,
+	0x87, 0x32, 0x54, 0xf6, 0x5e, 0xbe, 0xed, 0x2d, 0x1d, 0x68, 0x67, 0x78, 0xc8, 0x21, 0x5a, 0x80,
+	0x09, 0x87, 0x93, 0xae, 0xe3, 0x51, 0x37, 0x9e, 0x0a, 0x32, 0x0e, 0xdf, 0x90, 0x4b, 0xb4, 0x08,
+	0xf2, 0x42, 0xed, 0x3b, 0xae, 0x23, 0x0e, 0xd5, 0xe5, 0x19, 0xc5, 0xc7, 0x80, 0x79, 0x04, 0xb7,
+	0xcf, 0x29, 0x86, 0x77, 0x1e, 0xb4, 0xf9, 0xb9, 0x01, 0x8b, 0x17, 0xa9, 0xa3, 0x7b, 0x00, 0x22,
+	0xa4, 0x1e, 0x6f, 0x87, 0x4e, 0xa0, 0xcb, 0x6b, 0x12, 0x0f, 0x20, 0x52, 0xae, 0xa6, 0xa3, 0x0e,
+	0x4b, 0xa6, 0xa1, 0x51, 0x3c, 0x80, 0xa0, 0x7f, 0x41, 0x5a, 0x36, 0x5a, 0x39, 0xfe, 0xc8, 0xd0,
+	0x1f, 0x5d, 0x12, 0xba, 0xec, 0xba, 0x35, 0xaf, 0xeb, 0x63, 0x6d, 0x65, 0x7e, 0x62, 0xc0, 0x44,
+	0x82, 0xa1, 0x67, 0x43, 0x55, 0xac, 0x4b, 0x65, 0xe1, 0x54, 0x11, 0x56, 0xe2, 0x07, 0xc7, 0x60,
+	0x11, 0xff, 0x43, 0xce, 0x53, 0x9d, 0xc1, 0xea, 0xbf, 0xc0, 0x2e, 0xc3, 0x3c, 0xd5, 0xf9, 0x11,
+	0x82, 0x31, 0x19, 0x45, 0x3c, 0xf4, 0xa8, 0xef, 0xb5, 0x1f, 0x53, 0x30, 0xae, 0x13, 0x86, 0x3e,
+	0x33, 0x60, 0xb2, 0x7f, 0xeb, 0xd1, 0x15, 0xe7, 0xef, 0xfe, 0x68, 0x9d, 0x5f, 0xb9, 0xba, 0x81,
+	0x2e, 0x28, 0xf3, 0xe1, 0x87, 0x3f, 0xfc, 0xfc, 0xe9, 0xe8, 0x92, 0x79, 0x67, 0xe0, 0xfd, 0xa7,
+	0xcd, 0x5e, 0x84, 0x89, 0xf2, 0x0b, 0xe3, 0x09, 0xfa, 0xd2, 0x80, 0x9b, 0x67, 0x31, 0x27, 0x7a,
+	0x71, 0xc9, 0x96, 0x17, 0x3c, 0x5c, 0xf2, 0x77, 0x13, 0xdb, 0x81, 0x97, 0x61, 0x61, 0x3b, 0x79,
+	0x19, 0x9a, 0xab, 0x2a, 0xb6, 0xbf, 0x9a, 0x0f, 0x4f, 0xc7, 0x36, 0x60, 0x30, 0x14, 0xe6, 0xc7,
+	0x06, 0xa0, 0xd3, 0xf4, 0x81, 0x9e, 0x5d, 0x83, 0x71, 0x74, 0x88, 0xcf, 0xaf, 0xcd, 0x55, 0xcb,
+	0xc6, 0x8a, 0xb1, 0x7e, 0x04, 0xf7, 0xdb, 0x7e, 0xef, 0x62, 0x1f, 0xeb, 0x53, 0xfa, 0xe7, 0xef,
+	0xc8, 0x5b, 0xb3, 0x63, 0xbc, 0x2a, 0xc7, 0xda, 0xb6, 0x2f, 0x47, 0xe2, 0x82, 0x1f, 0xda, 0x45,
+	0x9b, 0x79, 0xea, 0x4e, 0x15, 0xb5, 0x88, 0x06, 0x0e, 0x3f, 0xe7, 0xf1, 0xfe, 0x52, 0x03, 0xbf,
+	0x1a, 0xc6, 0xfe, 0xb8, 0x32, 0xf9, 0xfb, 0x6f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x88, 0x22, 0xc3,
+	0x54, 0xee, 0x0f, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go b/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go
index aefcc3d4..8dd0f8e9 100644
--- a/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go
+++ b/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go
@@ -116,6 +116,15 @@ func (AudioEncoding) EnumDescriptor() ([]byte, []int) { return fileDescriptor0,
 
 // The top-level message sent by the client for the `ListVoices` method.
 type ListVoicesRequest struct {
+	// Optional (but recommended)
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If
+	// specified, the ListVoices call will only return voices that can be used to
+	// synthesize this language_code. E.g. when specifying "en-NZ", you will get
+	// supported "en-*" voices; when specifying "no", you will get supported
+	// "no-*" (Norwegian) and "nb-*" (Norwegian Bokmal) voices; specifying "zh"
+	// will also get supported "cmn-*" voices; specifying "zh-hk" will also get
+	// supported "yue-*" voices.
+	LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"`
 }
 
 func (m *ListVoicesRequest) Reset()                    { *m = ListVoicesRequest{} }
@@ -123,6 +132,13 @@ func (m *ListVoicesRequest) String() string            { return proto.CompactTex
 func (*ListVoicesRequest) ProtoMessage()               {}
 func (*ListVoicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
 
+func (m *ListVoicesRequest) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
 // The message returned to the client by the `ListVoices` method.
 type ListVoicesResponse struct {
 	// The list of voices.
@@ -615,58 +631,58 @@ var _TextToSpeech_serviceDesc = grpc.ServiceDesc{
 func init() { proto.RegisterFile("google/cloud/texttospeech/v1beta1/cloud_tts.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 844 bytes of a gzipped FileDescriptorProto
+	// 846 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4d, 0x6f, 0x1b, 0x45,
-	0x18, 0xee, 0xd8, 0x71, 0xda, 0xbc, 0x5e, 0x3b, 0xce, 0x10, 0x51, 0x13, 0x51, 0xe4, 0x6e, 0xa8,
-	0x64, 0xe5, 0x60, 0x63, 0x97, 0x0f, 0x91, 0x1e, 0xc0, 0xb1, 0xb7, 0xae, 0x25, 0x7f, 0x31, 0x9b,
-	0xa4, 0x12, 0x97, 0xd5, 0x64, 0x3d, 0x6c, 0x56, 0xac, 0x67, 0x16, 0xcf, 0x6c, 0x54, 0x7a, 0x44,
-	0x9c, 0x39, 0xc0, 0x5f, 0xe0, 0x07, 0xf0, 0x5b, 0x40, 0xe2, 0x17, 0xf0, 0x0f, 0xb8, 0x70, 0x44,
-	0x33, 0xbb, 0x71, 0x1d, 0x07, 0x51, 0x97, 0x03, 0xb7, 0x9d, 0x67, 0xfc, 0x3c, 0xf3, 0xbe, 0xcf,
-	0x3c, 0x7e, 0x07, 0x5a, 0x81, 0x10, 0x41, 0xc4, 0x9a, 0x7e, 0x24, 0x92, 0x59, 0x53, 0xb1, 0x17,
-	0x4a, 0x09, 0x19, 0x33, 0xe6, 0x5f, 0x36, 0xaf, 0x5a, 0x17, 0x4c, 0xd1, 0x56, 0xba, 0xe5, 0x29,
-	0x25, 0x1b, 0xf1, 0x42, 0x28, 0x81, 0x1f, 0xa6, 0x94, 0x86, 0xc1, 0x1b, 0xab, 0x94, 0x46, 0x46,
-	0x39, 0x78, 0x37, 0x53, 0xa5, 0x71, 0xd8, 0xa4, 0x9c, 0x0b, 0x45, 0x55, 0x28, 0x78, 0x26, 0x60,
-	0xbf, 0x05, 0x7b, 0xc3, 0x50, 0xaa, 0x73, 0x11, 0xfa, 0x4c, 0x12, 0xf6, 0x4d, 0xc2, 0xa4, 0xb2,
-	0xcf, 0x01, 0xaf, 0x82, 0x32, 0x16, 0x5c, 0x32, 0xfc, 0x39, 0x6c, 0x5f, 0x19, 0xa4, 0x8a, 0x6a,
-	0xf9, 0x7a, 0xb1, 0x5d, 0x6f, 0xbc, 0xf6, 0xf0, 0x86, 0x91, 0x20, 0x19, 0xcf, 0xfe, 0x15, 0x41,
-	0xc1, 0x20, 0xf8, 0x11, 0x94, 0x23, 0xca, 0x83, 0x84, 0x06, 0xcc, 0xf3, 0xc5, 0x2c, 0xd3, 0xdc,
-	0x21, 0xa5, 0x6b, 0xb4, 0xab, 0x41, 0x8c, 0x61, 0x8b, 0xd3, 0x39, 0xab, 0xe6, 0x6a, 0xa8, 0xbe,
-	0x43, 0xcc, 0x37, 0x76, 0xa1, 0x28, 0xe5, 0x3c, 0xf2, 0x02, 0xc6, 0x67, 0x6c, 0x51, 0xcd, 0xd7,
-	0x50, 0xbd, 0xdc, 0x6e, 0x6f, 0x50, 0x8b, 0x2b, 0xe7, 0x91, 0x39, 0xbd, 0x6f, 0x98, 0x04, 0xb4,
-	0x4c, 0xfa, 0x8d, 0x3f, 0x85, 0x77, 0x38, 0x55, 0xc9, 0x82, 0x46, 0x9e, 0xa4, 0xf3, 0x38, 0x62,
-	0xde, 0x82, 0x2a, 0xe6, 0x5d, 0xb2, 0x85, 0x7a, 0x59, 0xdd, 0xaa, 0xa1, 0x7a, 0x81, 0xbc, 0x9d,
-	0xfd, 0xc0, 0x35, 0xfb, 0x84, 0x2a, 0xf6, 0x4c, 0xef, 0xda, 0xdf, 0xe7, 0xe0, 0xbe, 0xfb, 0x2d,
-	0x57, 0x97, 0x4c, 0x86, 0x2f, 0x99, 0x6b, 0xce, 0xcc, 0x8c, 0xc4, 0x7d, 0x28, 0x84, 0x3c, 0x4e,
-	0x54, 0x15, 0xd5, 0x50, 0xbd, 0xd8, 0x6e, 0x6d, 0x52, 0x65, 0x26, 0x25, 0x07, 0x9a, 0x48, 0x52,
-	0x3e, 0x1e, 0x41, 0xc1, 0x78, 0x68, 0x9c, 0x28, 0xb6, 0x3f, 0xd9, 0xd4, 0x7a, 0x97, 0x45, 0xcc,
-	0xd7, 0xf7, 0x3d, 0xa5, 0x0b, 0x3a, 0x97, 0x24, 0x55, 0xc1, 0x5f, 0x80, 0x45, 0x93, 0x59, 0x28,
-	0x3c, 0x5f, 0xf0, 0xaf, 0xc2, 0xc0, 0x98, 0x58, 0x6c, 0x37, 0x36, 0x50, 0xed, 0x68, 0x5a, 0xd7,
-	0xb0, 0x48, 0x91, 0xbe, 0x5a, 0xd8, 0x43, 0x28, 0xdf, 0x2c, 0x1d, 0xef, 0xc3, 0x96, 0x96, 0x30,
-	0xbd, 0xef, 0x3c, 0xbb, 0x43, 0xcc, 0x4a, 0xa3, 0xda, 0xf7, 0xf4, 0x4a, 0x35, 0xaa, 0x57, 0x27,
-	0x65, 0xb0, 0x4c, 0xa3, 0x9e, 0x14, 0xc9, 0xc2, 0x67, 0xf6, 0xcf, 0x08, 0xf6, 0xff, 0xa9, 0x01,
-	0x7c, 0x08, 0xa5, 0x1b, 0xc1, 0x49, 0xd5, 0x89, 0xb5, 0x9a, 0x9b, 0xff, 0x2d, 0x36, 0xf6, 0x9f,
-	0x08, 0x8a, 0x2b, 0x8e, 0xe0, 0xe7, 0x50, 0x4e, 0x7d, 0x65, 0xdc, 0x17, 0xb3, 0x90, 0x07, 0xa6,
-	0xbc, 0x72, 0xfb, 0x83, 0x4d, 0x9d, 0x75, 0x32, 0x1e, 0x29, 0xd1, 0xd5, 0xa5, 0x6e, 0x5b, 0xc6,
-	0x8c, 0x7e, 0x1d, 0xf2, 0xc0, 0x24, 0xd3, 0xb4, 0x86, 0x88, 0x75, 0x0d, 0xea, 0x38, 0xe2, 0x7d,
-	0x28, 0xc4, 0xa1, 0xf2, 0x2f, 0x4d, 0x73, 0x88, 0xa4, 0x0b, 0xfc, 0x3e, 0x94, 0xaf, 0x44, 0x94,
-	0xcc, 0x99, 0x17, 0xd0, 0x90, 0x7b, 0xb3, 0x0b, 0x93, 0x67, 0x44, 0xac, 0x14, 0xed, 0xd3, 0x90,
-	0xf7, 0x2e, 0xf0, 0x11, 0xec, 0xdd, 0x0e, 0x7e, 0xc1, 0x04, 0x7f, 0x57, 0xae, 0x25, 0xfe, 0x33,
-	0xa8, 0xde, 0x0e, 0x7c, 0x36, 0x24, 0x0e, 0xa1, 0xb4, 0x4c, 0x96, 0x62, 0x3c, 0xbd, 0x7d, 0x8b,
-	0x58, 0xd7, 0x51, 0xd1, 0xd8, 0xd1, 0x73, 0xd8, 0x5d, 0x73, 0x15, 0x3f, 0x84, 0x07, 0xae, 0x3b,
-	0x1a, 0x7a, 0xe7, 0x93, 0x41, 0xd7, 0xf1, 0xfa, 0xce, 0xb8, 0xe7, 0x10, 0xef, 0x6c, 0xec, 0x4e,
-	0x9d, 0xee, 0xe0, 0xe9, 0xc0, 0xe9, 0x55, 0xee, 0xe0, 0x7b, 0xb0, 0x35, 0xea, 0x0c, 0x9d, 0x0a,
-	0xc2, 0x00, 0xdb, 0x4f, 0x1d, 0xf3, 0x9d, 0xc3, 0x45, 0xb8, 0x3b, 0x76, 0xce, 0x4e, 0x49, 0x67,
-	0x58, 0xc9, 0x1f, 0x9d, 0x42, 0xe9, 0x86, 0x8d, 0xf8, 0x3d, 0x38, 0xe8, 0x9c, 0xf5, 0x06, 0x13,
-	0xcf, 0x19, 0x77, 0x27, 0xbd, 0xc1, 0xb8, 0xbf, 0xa6, 0x69, 0xc1, 0xbd, 0xe1, 0x60, 0xec, 0x74,
-	0x48, 0xeb, 0xe3, 0x0a, 0xc2, 0x77, 0x21, 0x3f, 0x9a, 0x3e, 0xae, 0xe4, 0x34, 0x3c, 0xe9, 0xf7,
-	0xbd, 0xc9, 0xf4, 0xcc, 0xad, 0xe4, 0xdb, 0xbf, 0xe7, 0xc0, 0x3a, 0x65, 0x2f, 0xd4, 0xa9, 0x48,
-	0x9b, 0xc5, 0x3f, 0x22, 0x80, 0x57, 0x03, 0x12, 0x7f, 0xb8, 0xc1, 0xed, 0xde, 0x1a, 0xb2, 0x07,
-	0x1f, 0xbd, 0x21, 0x2b, 0x35, 0xd8, 0xbe, 0xff, 0xdd, 0x6f, 0x7f, 0xfc, 0x94, 0xdb, 0xc3, 0xbb,
-	0xcb, 0x37, 0x21, 0x1d, 0xae, 0xf8, 0x17, 0x04, 0x95, 0xf5, 0x6b, 0xc1, 0xc7, 0x6f, 0x30, 0x71,
-	0xd6, 0x86, 0xd7, 0xc1, 0x93, 0xff, 0xc4, 0xcd, 0xca, 0x3c, 0x34, 0x65, 0x3e, 0xb0, 0xab, 0xcb,
-	0x32, 0x35, 0xff, 0x58, 0x2e, 0x7f, 0x7f, 0x8c, 0x8e, 0x4e, 0x7e, 0x40, 0xf0, 0xc8, 0x17, 0xf3,
-	0xd7, 0x9f, 0x73, 0xb2, 0xb7, 0xea, 0xff, 0x54, 0xbf, 0x5c, 0x53, 0xf4, 0xe5, 0x28, 0xe3, 0x05,
-	0x42, 0xff, 0xfb, 0x1b, 0x62, 0x11, 0x34, 0x03, 0xc6, 0xcd, 0xbb, 0xd6, 0x4c, 0xb7, 0x68, 0x1c,
-	0xca, 0x7f, 0x79, 0x4e, 0x9f, 0xac, 0x82, 0x7f, 0x21, 0x74, 0xb1, 0x6d, 0xc8, 0x8f, 0xff, 0x0e,
-	0x00, 0x00, 0xff, 0xff, 0x7f, 0xac, 0x4e, 0x87, 0x8a, 0x07, 0x00, 0x00,
+	0x18, 0xee, 0xd8, 0x71, 0xda, 0xbe, 0x5e, 0x3b, 0xce, 0x28, 0xa2, 0x26, 0xa2, 0x28, 0xdd, 0x50,
+	0xc9, 0xca, 0xc1, 0xc6, 0x2e, 0x9f, 0xe9, 0x01, 0x1c, 0x7b, 0xeb, 0x5a, 0xf2, 0x17, 0xb3, 0x49,
+	0x2a, 0x71, 0x59, 0x4d, 0xd6, 0xc3, 0x66, 0xc5, 0x7a, 0x66, 0xf1, 0x8c, 0xa3, 0xd2, 0x23, 0xe2,
+	0xcc, 0x01, 0xfe, 0x02, 0x3f, 0x80, 0xdf, 0x02, 0x12, 0xbf, 0x80, 0x7f, 0xc0, 0x85, 0x23, 0x9a,
+	0x99, 0x4d, 0xea, 0x38, 0x88, 0x3a, 0x1c, 0xb8, 0xed, 0x3c, 0xe3, 0xe7, 0x9d, 0xe7, 0x7d, 0xe6,
+	0xf1, 0x3b, 0xd0, 0x8c, 0x84, 0x88, 0x12, 0xd6, 0x08, 0x13, 0xb1, 0x98, 0x36, 0x14, 0x7b, 0xa9,
+	0x94, 0x90, 0x29, 0x63, 0xe1, 0x79, 0xe3, 0xa2, 0x79, 0xc6, 0x14, 0x6d, 0xda, 0xad, 0x40, 0x29,
+	0x59, 0x4f, 0xe7, 0x42, 0x09, 0xfc, 0xc8, 0x52, 0xea, 0x06, 0xaf, 0x2f, 0x53, 0xea, 0x19, 0x65,
+	0xf7, 0x9d, 0xac, 0x2a, 0x4d, 0xe3, 0x06, 0xe5, 0x5c, 0x28, 0xaa, 0x62, 0xc1, 0xb3, 0x02, 0xee,
+	0x27, 0xb0, 0x3d, 0x88, 0xa5, 0x3a, 0x15, 0x71, 0xc8, 0x24, 0x61, 0xdf, 0x2c, 0x98, 0x54, 0x78,
+	0x1f, 0x4a, 0x09, 0xe5, 0xd1, 0x82, 0x46, 0x2c, 0x08, 0xc5, 0x94, 0x55, 0xd1, 0x1e, 0xaa, 0xdd,
+	0x27, 0xce, 0x25, 0xd8, 0x11, 0x53, 0xe6, 0x9e, 0x02, 0x5e, 0x66, 0xca, 0x54, 0x70, 0xc9, 0xf0,
+	0xe7, 0xb0, 0x79, 0x61, 0x90, 0x2a, 0xda, 0xcb, 0xd7, 0x8a, 0xad, 0x5a, 0xfd, 0x8d, 0x0a, 0xeb,
+	0xa6, 0x04, 0xc9, 0x78, 0xee, 0xaf, 0x08, 0x0a, 0x06, 0xc1, 0x8f, 0xa1, 0x7c, 0x4d, 0x86, 0xad,
+	0x79, 0x9f, 0x94, 0x96, 0x75, 0x48, 0x8c, 0x61, 0x83, 0xd3, 0x19, 0xab, 0xe6, 0x8c, 0x48, 0xf3,
+	0x8d, 0x7d, 0x28, 0x4a, 0x39, 0x4b, 0x82, 0x88, 0xf1, 0x29, 0x9b, 0x57, 0xf3, 0x7b, 0xa8, 0x56,
+	0x6e, 0xb5, 0xd6, 0xd0, 0xe2, 0xcb, 0x59, 0x62, 0x4e, 0xef, 0x19, 0x26, 0x01, 0x5d, 0xc6, 0x7e,
+	0xe3, 0x4f, 0xe1, 0x6d, 0x4e, 0xd5, 0x62, 0x4e, 0x93, 0x40, 0xd2, 0x59, 0x9a, 0xb0, 0x60, 0x4e,
+	0x15, 0x0b, 0xce, 0xd9, 0x5c, 0xbd, 0xaa, 0x6e, 0xec, 0xa1, 0x5a, 0x81, 0xbc, 0x95, 0xfd, 0xc0,
+	0x37, 0xfb, 0x84, 0x2a, 0xf6, 0x5c, 0xef, 0xba, 0xdf, 0xe7, 0xe0, 0x81, 0xff, 0x2d, 0x57, 0xe7,
+	0x4c, 0xc6, 0xaf, 0x98, 0x6f, 0xce, 0xbc, 0x74, 0xbb, 0x07, 0x85, 0x98, 0xa7, 0x0b, 0x65, 0x5c,
+	0x2e, 0xb6, 0x9a, 0xeb, 0xa8, 0xcc, 0x4a, 0xc9, 0xbe, 0x26, 0x12, 0xcb, 0xc7, 0x43, 0x28, 0x18,
+	0x0f, 0x8d, 0x13, 0xc5, 0xd6, 0xc7, 0xeb, 0x5a, 0xef, 0xb3, 0x84, 0x85, 0x3a, 0x14, 0x13, 0x3a,
+	0xa7, 0x33, 0x49, 0x6c, 0x15, 0xfc, 0x05, 0x38, 0x74, 0x31, 0x8d, 0x45, 0x10, 0x0a, 0xfe, 0x55,
+	0x1c, 0x19, 0x13, 0x8b, 0xad, 0xfa, 0x1a, 0x55, 0xdb, 0x9a, 0xd6, 0x31, 0x2c, 0x52, 0xa4, 0xaf,
+	0x17, 0xee, 0x00, 0xca, 0xd7, 0xa5, 0xe3, 0x1d, 0xd8, 0xd0, 0x25, 0x6c, 0xc2, 0x9e, 0xdf, 0x21,
+	0x66, 0xa5, 0x51, 0xed, 0xbb, 0xbd, 0x52, 0x8d, 0xea, 0xd5, 0x51, 0x19, 0x1c, 0xd3, 0x68, 0x20,
+	0xc5, 0x62, 0x1e, 0x32, 0xf7, 0x67, 0x04, 0x3b, 0xff, 0xd4, 0xc0, 0x5a, 0xf9, 0xfd, 0xdf, 0x62,
+	0xe3, 0xfe, 0x89, 0xa0, 0xb8, 0xe4, 0x08, 0x7e, 0x01, 0x65, 0xeb, 0x2b, 0xe3, 0xa1, 0x98, 0xc6,
+	0x3c, 0x32, 0xf2, 0xca, 0xad, 0xf7, 0xd7, 0x75, 0xd6, 0xcb, 0x78, 0xa4, 0x44, 0x97, 0x97, 0xba,
+	0x6d, 0x99, 0x32, 0xfa, 0x75, 0xcc, 0x23, 0x93, 0x4c, 0xd3, 0x1a, 0x22, 0xce, 0x25, 0xa8, 0xe3,
+	0x88, 0x77, 0xa0, 0x90, 0xc6, 0x2a, 0x3c, 0x37, 0xcd, 0x21, 0x62, 0x17, 0xf8, 0x3d, 0x28, 0x5f,
+	0x88, 0x64, 0x31, 0x63, 0x41, 0x44, 0x63, 0x1e, 0x4c, 0xcf, 0x4c, 0x9e, 0x11, 0x71, 0x2c, 0xda,
+	0xa3, 0x31, 0xef, 0x9e, 0xe1, 0x03, 0xd8, 0xbe, 0x19, 0xfc, 0x82, 0x09, 0xfe, 0x96, 0x5c, 0x49,
+	0xfc, 0x67, 0x50, 0xbd, 0x19, 0xf8, 0x6c, 0x48, 0xec, 0x43, 0xe9, 0x2a, 0x59, 0x8a, 0x71, 0x7b,
+	0xfb, 0x0e, 0x71, 0x2e, 0xa3, 0xa2, 0xb1, 0x83, 0x17, 0xb0, 0xb5, 0xe2, 0x2a, 0x7e, 0x04, 0x0f,
+	0x7d, 0x7f, 0x38, 0x08, 0x4e, 0xc7, 0xfd, 0x8e, 0x17, 0xf4, 0xbc, 0x51, 0xd7, 0x23, 0xc1, 0xc9,
+	0xc8, 0x9f, 0x78, 0x9d, 0xfe, 0xb3, 0xbe, 0xd7, 0xad, 0xdc, 0xc1, 0xf7, 0x60, 0x63, 0xd8, 0x1e,
+	0x78, 0x15, 0x84, 0x01, 0x36, 0x9f, 0x79, 0xe6, 0x3b, 0x87, 0x8b, 0x70, 0x77, 0xe4, 0x9d, 0x1c,
+	0x93, 0xf6, 0xa0, 0x92, 0x3f, 0x38, 0x86, 0xd2, 0x35, 0x1b, 0xf1, 0xbb, 0xb0, 0xdb, 0x3e, 0xe9,
+	0xf6, 0xc7, 0x81, 0x37, 0xea, 0x8c, 0xbb, 0xfd, 0x51, 0x6f, 0xa5, 0xa6, 0x03, 0xf7, 0x06, 0xfd,
+	0x91, 0xd7, 0x26, 0xcd, 0x8f, 0x2a, 0x08, 0xdf, 0x85, 0xfc, 0x70, 0xf2, 0xa4, 0x92, 0xd3, 0xf0,
+	0xb8, 0xd7, 0x0b, 0xc6, 0x93, 0x13, 0xbf, 0x92, 0x6f, 0xfd, 0x9e, 0x03, 0xe7, 0x98, 0xbd, 0x54,
+	0xc7, 0xc2, 0x36, 0x8b, 0x7f, 0x44, 0x00, 0xaf, 0x07, 0x24, 0xfe, 0x60, 0x8d, 0xdb, 0xbd, 0x31,
+	0x89, 0x77, 0x3f, 0xbc, 0x25, 0xcb, 0x1a, 0xec, 0x3e, 0xf8, 0xee, 0xb7, 0x3f, 0x7e, 0xca, 0x6d,
+	0xe3, 0xad, 0xab, 0x87, 0xc3, 0x0e, 0x57, 0xfc, 0x0b, 0x82, 0xca, 0xea, 0xb5, 0xe0, 0xc3, 0x5b,
+	0x4c, 0x9c, 0x95, 0xe1, 0xb5, 0xfb, 0xf4, 0x3f, 0x71, 0x33, 0x99, 0xfb, 0x46, 0xe6, 0x43, 0xb7,
+	0x7a, 0x25, 0x53, 0xf3, 0x0f, 0xe5, 0xd5, 0xef, 0x0f, 0xd1, 0xc1, 0xd1, 0x0f, 0x08, 0x1e, 0x87,
+	0x62, 0xf6, 0xe6, 0x73, 0x8e, 0xb6, 0x97, 0xfd, 0x9f, 0xe8, 0xe7, 0x6d, 0x82, 0xbe, 0x1c, 0x66,
+	0xbc, 0x48, 0xe8, 0x7f, 0x7f, 0x5d, 0xcc, 0xa3, 0x46, 0xc4, 0xb8, 0x79, 0xfc, 0x1a, 0x76, 0x8b,
+	0xa6, 0xb1, 0xfc, 0x97, 0x37, 0xf7, 0xe9, 0x32, 0xf8, 0x17, 0x42, 0x67, 0x9b, 0x86, 0xfc, 0xe4,
+	0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x09, 0xb8, 0x07, 0xd3, 0xaf, 0x07, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go b/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go
new file mode 100644
index 00000000..7da3439c
--- /dev/null
+++ b/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go
@@ -0,0 +1,1551 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/videointelligence/v1p1beta1/video_intelligence.proto
+
+/*
+Package videointelligence is a generated protocol buffer package.
+
+It is generated from these files:
+	google/cloud/videointelligence/v1p1beta1/video_intelligence.proto
+
+It has these top-level messages:
+	AnnotateVideoRequest
+	VideoContext
+	LabelDetectionConfig
+	ShotChangeDetectionConfig
+	ExplicitContentDetectionConfig
+	FaceConfig
+	VideoSegment
+	LabelSegment
+	LabelFrame
+	Entity
+	LabelAnnotation
+	ExplicitContentFrame
+	ExplicitContentAnnotation
+	NormalizedBoundingBox
+	FaceSegment
+	FaceDetectionFrame
+	FaceDetectionAttribute
+	EmotionAttribute
+	FaceDetectionAnnotation
+	VideoAnnotationResults
+	AnnotateVideoResponse
+	VideoAnnotationProgress
+	AnnotateVideoProgress
+	SpeechTranscriptionConfig
+	SpeechContext
+	SpeechTranscription
+	SpeechRecognitionAlternative
+	WordInfo
+*/
+package videointelligence
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import google_longrunning "google.golang.org/genproto/googleapis/longrunning"
+import google_protobuf3 "github.com/golang/protobuf/ptypes/duration"
+import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp"
+import google_rpc "google.golang.org/genproto/googleapis/rpc/status"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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
+
+// Video annotation feature.
+type Feature int32
+
+const (
+	// Unspecified.
+	Feature_FEATURE_UNSPECIFIED Feature = 0
+	// Label detection. Detect objects, such as dog or flower.
+	Feature_LABEL_DETECTION Feature = 1
+	// Shot change detection.
+	Feature_SHOT_CHANGE_DETECTION Feature = 2
+	// Explicit content detection.
+	Feature_EXPLICIT_CONTENT_DETECTION Feature = 3
+	// Face detection.
+	Feature_FACE_DETECTION Feature = 8
+	// Speech transcription.
+	Feature_SPEECH_TRANSCRIPTION Feature = 6
+)
+
+var Feature_name = map[int32]string{
+	0: "FEATURE_UNSPECIFIED",
+	1: "LABEL_DETECTION",
+	2: "SHOT_CHANGE_DETECTION",
+	3: "EXPLICIT_CONTENT_DETECTION",
+	8: "FACE_DETECTION",
+	6: "SPEECH_TRANSCRIPTION",
+}
+var Feature_value = map[string]int32{
+	"FEATURE_UNSPECIFIED":        0,
+	"LABEL_DETECTION":            1,
+	"SHOT_CHANGE_DETECTION":      2,
+	"EXPLICIT_CONTENT_DETECTION": 3,
+	"FACE_DETECTION":             8,
+	"SPEECH_TRANSCRIPTION":       6,
+}
+
+func (x Feature) String() string {
+	return proto.EnumName(Feature_name, int32(x))
+}
+func (Feature) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+// Label detection mode.
+type LabelDetectionMode int32
+
+const (
+	// Unspecified.
+	LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED LabelDetectionMode = 0
+	// Detect shot-level labels.
+	LabelDetectionMode_SHOT_MODE LabelDetectionMode = 1
+	// Detect frame-level labels.
+	LabelDetectionMode_FRAME_MODE LabelDetectionMode = 2
+	// Detect both shot-level and frame-level labels.
+	LabelDetectionMode_SHOT_AND_FRAME_MODE LabelDetectionMode = 3
+)
+
+var LabelDetectionMode_name = map[int32]string{
+	0: "LABEL_DETECTION_MODE_UNSPECIFIED",
+	1: "SHOT_MODE",
+	2: "FRAME_MODE",
+	3: "SHOT_AND_FRAME_MODE",
+}
+var LabelDetectionMode_value = map[string]int32{
+	"LABEL_DETECTION_MODE_UNSPECIFIED": 0,
+	"SHOT_MODE":                        1,
+	"FRAME_MODE":                       2,
+	"SHOT_AND_FRAME_MODE":              3,
+}
+
+func (x LabelDetectionMode) String() string {
+	return proto.EnumName(LabelDetectionMode_name, int32(x))
+}
+func (LabelDetectionMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+// Bucketized representation of likelihood.
+type Likelihood int32
+
+const (
+	// Unspecified likelihood.
+	Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0
+	// Very unlikely.
+	Likelihood_VERY_UNLIKELY Likelihood = 1
+	// Unlikely.
+	Likelihood_UNLIKELY Likelihood = 2
+	// Possible.
+	Likelihood_POSSIBLE Likelihood = 3
+	// Likely.
+	Likelihood_LIKELY Likelihood = 4
+	// Very likely.
+	Likelihood_VERY_LIKELY Likelihood = 5
+)
+
+var Likelihood_name = map[int32]string{
+	0: "LIKELIHOOD_UNSPECIFIED",
+	1: "VERY_UNLIKELY",
+	2: "UNLIKELY",
+	3: "POSSIBLE",
+	4: "LIKELY",
+	5: "VERY_LIKELY",
+}
+var Likelihood_value = map[string]int32{
+	"LIKELIHOOD_UNSPECIFIED": 0,
+	"VERY_UNLIKELY":          1,
+	"UNLIKELY":               2,
+	"POSSIBLE":               3,
+	"LIKELY":                 4,
+	"VERY_LIKELY":            5,
+}
+
+func (x Likelihood) String() string {
+	return proto.EnumName(Likelihood_name, int32(x))
+}
+func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+// Emotions.
+type Emotion int32
+
+const (
+	// Unspecified emotion.
+	Emotion_EMOTION_UNSPECIFIED Emotion = 0
+	// Amusement.
+	Emotion_AMUSEMENT Emotion = 1
+	// Anger.
+	Emotion_ANGER Emotion = 2
+	// Concentration.
+	Emotion_CONCENTRATION Emotion = 3
+	// Contentment.
+	Emotion_CONTENTMENT Emotion = 4
+	// Desire.
+	Emotion_DESIRE Emotion = 5
+	// Disappointment.
+	Emotion_DISAPPOINTMENT Emotion = 6
+	// Disgust.
+	Emotion_DISGUST Emotion = 7
+	// Elation.
+	Emotion_ELATION Emotion = 8
+	// Embarrassment.
+	Emotion_EMBARRASSMENT Emotion = 9
+	// Interest.
+	Emotion_INTEREST Emotion = 10
+	// Pride.
+	Emotion_PRIDE Emotion = 11
+	// Sadness.
+	Emotion_SADNESS Emotion = 12
+	// Surprise.
+	Emotion_SURPRISE Emotion = 13
+)
+
+var Emotion_name = map[int32]string{
+	0:  "EMOTION_UNSPECIFIED",
+	1:  "AMUSEMENT",
+	2:  "ANGER",
+	3:  "CONCENTRATION",
+	4:  "CONTENTMENT",
+	5:  "DESIRE",
+	6:  "DISAPPOINTMENT",
+	7:  "DISGUST",
+	8:  "ELATION",
+	9:  "EMBARRASSMENT",
+	10: "INTEREST",
+	11: "PRIDE",
+	12: "SADNESS",
+	13: "SURPRISE",
+}
+var Emotion_value = map[string]int32{
+	"EMOTION_UNSPECIFIED": 0,
+	"AMUSEMENT":           1,
+	"ANGER":               2,
+	"CONCENTRATION":       3,
+	"CONTENTMENT":         4,
+	"DESIRE":              5,
+	"DISAPPOINTMENT":      6,
+	"DISGUST":             7,
+	"ELATION":             8,
+	"EMBARRASSMENT":       9,
+	"INTEREST":            10,
+	"PRIDE":               11,
+	"SADNESS":             12,
+	"SURPRISE":            13,
+}
+
+func (x Emotion) String() string {
+	return proto.EnumName(Emotion_name, int32(x))
+}
+func (Emotion) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+// Video annotation request.
+type AnnotateVideoRequest struct {
+	// Input video location. Currently, only
+	// [Google Cloud Storage](https://cloud.google.com/storage/) URIs are
+	// supported, which must be specified in the following format:
+	// `gs://bucket-id/object-id` (other URI formats return
+	// [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see
+	// [Request URIs](/storage/docs/reference-uris).
+	// A video URI may include wildcards in `object-id`, and thus identify
+	// multiple videos. Supported wildcards: '*' to match 0 or more characters;
+	// '?' to match 1 character. If unset, the input video should be embedded
+	// in the request as `input_content`. If set, `input_content` should be unset.
+	InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"`
+	// The video data bytes.
+	// If unset, the input video(s) should be specified via `input_uri`.
+	// If set, `input_uri` should be unset.
+	InputContent []byte `protobuf:"bytes,6,opt,name=input_content,json=inputContent,proto3" json:"input_content,omitempty"`
+	// Requested video annotation features.
+	Features []Feature `protobuf:"varint,2,rep,packed,name=features,enum=google.cloud.videointelligence.v1p1beta1.Feature" json:"features,omitempty"`
+	// Additional video context and/or feature-specific parameters.
+	VideoContext *VideoContext `protobuf:"bytes,3,opt,name=video_context,json=videoContext" json:"video_context,omitempty"`
+	// Optional location where the output (in JSON format) should be stored.
+	// Currently, only [Google Cloud Storage](https://cloud.google.com/storage/)
+	// URIs are supported, which must be specified in the following format:
+	// `gs://bucket-id/object-id` (other URI formats return
+	// [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see
+	// [Request URIs](/storage/docs/reference-uris).
+	OutputUri string `protobuf:"bytes,4,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"`
+	// Optional cloud region where annotation should take place. Supported cloud
+	// regions: `us-east1`, `us-west1`, `europe-west1`, `asia-east1`. If no region
+	// is specified, a region will be determined based on video file location.
+	LocationId string `protobuf:"bytes,5,opt,name=location_id,json=locationId" json:"location_id,omitempty"`
+}
+
+func (m *AnnotateVideoRequest) Reset()                    { *m = AnnotateVideoRequest{} }
+func (m *AnnotateVideoRequest) String() string            { return proto.CompactTextString(m) }
+func (*AnnotateVideoRequest) ProtoMessage()               {}
+func (*AnnotateVideoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *AnnotateVideoRequest) GetInputUri() string {
+	if m != nil {
+		return m.InputUri
+	}
+	return ""
+}
+
+func (m *AnnotateVideoRequest) GetInputContent() []byte {
+	if m != nil {
+		return m.InputContent
+	}
+	return nil
+}
+
+func (m *AnnotateVideoRequest) GetFeatures() []Feature {
+	if m != nil {
+		return m.Features
+	}
+	return nil
+}
+
+func (m *AnnotateVideoRequest) GetVideoContext() *VideoContext {
+	if m != nil {
+		return m.VideoContext
+	}
+	return nil
+}
+
+func (m *AnnotateVideoRequest) GetOutputUri() string {
+	if m != nil {
+		return m.OutputUri
+	}
+	return ""
+}
+
+func (m *AnnotateVideoRequest) GetLocationId() string {
+	if m != nil {
+		return m.LocationId
+	}
+	return ""
+}
+
+// Video context and/or feature-specific parameters.
+type VideoContext struct {
+	// Video segments to annotate. The segments may overlap and are not required
+	// to be contiguous or span the whole video. If unspecified, each video
+	// is treated as a single segment.
+	Segments []*VideoSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"`
+	// Config for LABEL_DETECTION.
+	LabelDetectionConfig *LabelDetectionConfig `protobuf:"bytes,2,opt,name=label_detection_config,json=labelDetectionConfig" json:"label_detection_config,omitempty"`
+	// Config for SHOT_CHANGE_DETECTION.
+	ShotChangeDetectionConfig *ShotChangeDetectionConfig `protobuf:"bytes,3,opt,name=shot_change_detection_config,json=shotChangeDetectionConfig" json:"shot_change_detection_config,omitempty"`
+	// Config for EXPLICIT_CONTENT_DETECTION.
+	ExplicitContentDetectionConfig *ExplicitContentDetectionConfig `protobuf:"bytes,4,opt,name=explicit_content_detection_config,json=explicitContentDetectionConfig" json:"explicit_content_detection_config,omitempty"`
+	// Config for SPEECH_TRANSCRIPTION.
+	SpeechTranscriptionConfig *SpeechTranscriptionConfig `protobuf:"bytes,6,opt,name=speech_transcription_config,json=speechTranscriptionConfig" json:"speech_transcription_config,omitempty"`
+	// Config for FACE_DETECTION.
+	FaceDetectionConfig *FaceConfig `protobuf:"bytes,7,opt,name=face_detection_config,json=faceDetectionConfig" json:"face_detection_config,omitempty"`
+}
+
+func (m *VideoContext) Reset()                    { *m = VideoContext{} }
+func (m *VideoContext) String() string            { return proto.CompactTextString(m) }
+func (*VideoContext) ProtoMessage()               {}
+func (*VideoContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *VideoContext) GetSegments() []*VideoSegment {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+func (m *VideoContext) GetLabelDetectionConfig() *LabelDetectionConfig {
+	if m != nil {
+		return m.LabelDetectionConfig
+	}
+	return nil
+}
+
+func (m *VideoContext) GetShotChangeDetectionConfig() *ShotChangeDetectionConfig {
+	if m != nil {
+		return m.ShotChangeDetectionConfig
+	}
+	return nil
+}
+
+func (m *VideoContext) GetExplicitContentDetectionConfig() *ExplicitContentDetectionConfig {
+	if m != nil {
+		return m.ExplicitContentDetectionConfig
+	}
+	return nil
+}
+
+func (m *VideoContext) GetSpeechTranscriptionConfig() *SpeechTranscriptionConfig {
+	if m != nil {
+		return m.SpeechTranscriptionConfig
+	}
+	return nil
+}
+
+func (m *VideoContext) GetFaceDetectionConfig() *FaceConfig {
+	if m != nil {
+		return m.FaceDetectionConfig
+	}
+	return nil
+}
+
+// Config for LABEL_DETECTION.
+type LabelDetectionConfig struct {
+	// What labels should be detected with LABEL_DETECTION, in addition to
+	// video-level labels or segment-level labels.
+	// If unspecified, defaults to `SHOT_MODE`.
+	LabelDetectionMode LabelDetectionMode `protobuf:"varint,1,opt,name=label_detection_mode,json=labelDetectionMode,enum=google.cloud.videointelligence.v1p1beta1.LabelDetectionMode" json:"label_detection_mode,omitempty"`
+	// Whether the video has been shot from a stationary (i.e. non-moving) camera.
+	// When set to true, might improve detection accuracy for moving objects.
+	// Should be used with `SHOT_AND_FRAME_MODE` enabled.
+	StationaryCamera bool `protobuf:"varint,2,opt,name=stationary_camera,json=stationaryCamera" json:"stationary_camera,omitempty"`
+	// Model to use for label detection.
+	// Supported values: "builtin/stable" (the default if unset) and
+	// "builtin/latest".
+	Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"`
+}
+
+func (m *LabelDetectionConfig) Reset()                    { *m = LabelDetectionConfig{} }
+func (m *LabelDetectionConfig) String() string            { return proto.CompactTextString(m) }
+func (*LabelDetectionConfig) ProtoMessage()               {}
+func (*LabelDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (m *LabelDetectionConfig) GetLabelDetectionMode() LabelDetectionMode {
+	if m != nil {
+		return m.LabelDetectionMode
+	}
+	return LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED
+}
+
+func (m *LabelDetectionConfig) GetStationaryCamera() bool {
+	if m != nil {
+		return m.StationaryCamera
+	}
+	return false
+}
+
+func (m *LabelDetectionConfig) GetModel() string {
+	if m != nil {
+		return m.Model
+	}
+	return ""
+}
+
+// Config for SHOT_CHANGE_DETECTION.
+type ShotChangeDetectionConfig struct {
+	// Model to use for shot change detection.
+	// Supported values: "builtin/stable" (the default if unset) and
+	// "builtin/latest".
+	Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"`
+}
+
+func (m *ShotChangeDetectionConfig) Reset()                    { *m = ShotChangeDetectionConfig{} }
+func (m *ShotChangeDetectionConfig) String() string            { return proto.CompactTextString(m) }
+func (*ShotChangeDetectionConfig) ProtoMessage()               {}
+func (*ShotChangeDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *ShotChangeDetectionConfig) GetModel() string {
+	if m != nil {
+		return m.Model
+	}
+	return ""
+}
+
+// Config for EXPLICIT_CONTENT_DETECTION.
+type ExplicitContentDetectionConfig struct {
+	// Model to use for explicit content detection.
+	// Supported values: "builtin/stable" (the default if unset) and
+	// "builtin/latest".
+	Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"`
+}
+
+func (m *ExplicitContentDetectionConfig) Reset()                    { *m = ExplicitContentDetectionConfig{} }
+func (m *ExplicitContentDetectionConfig) String() string            { return proto.CompactTextString(m) }
+func (*ExplicitContentDetectionConfig) ProtoMessage()               {}
+func (*ExplicitContentDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (m *ExplicitContentDetectionConfig) GetModel() string {
+	if m != nil {
+		return m.Model
+	}
+	return ""
+}
+
+// Config for FACE_DETECTION.
+type FaceConfig struct {
+	// Model to use for face detection.
+	// Supported values: "builtin/stable" (the default if unset) and
+	// "builtin/latest".
+	Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"`
+	// Whether bounding boxes be included in the face annotation output.
+	IncludeBoundingBoxes bool `protobuf:"varint,2,opt,name=include_bounding_boxes,json=includeBoundingBoxes" json:"include_bounding_boxes,omitempty"`
+	// Whether to enable emotion detection. Ignored if 'include_bounding_boxes' is
+	// false.
+	IncludeEmotions bool `protobuf:"varint,4,opt,name=include_emotions,json=includeEmotions" json:"include_emotions,omitempty"`
+}
+
+func (m *FaceConfig) Reset()                    { *m = FaceConfig{} }
+func (m *FaceConfig) String() string            { return proto.CompactTextString(m) }
+func (*FaceConfig) ProtoMessage()               {}
+func (*FaceConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *FaceConfig) GetModel() string {
+	if m != nil {
+		return m.Model
+	}
+	return ""
+}
+
+func (m *FaceConfig) GetIncludeBoundingBoxes() bool {
+	if m != nil {
+		return m.IncludeBoundingBoxes
+	}
+	return false
+}
+
+func (m *FaceConfig) GetIncludeEmotions() bool {
+	if m != nil {
+		return m.IncludeEmotions
+	}
+	return false
+}
+
+// Video segment.
+type VideoSegment struct {
+	// Time-offset, relative to the beginning of the video,
+	// corresponding to the start of the segment (inclusive).
+	StartTimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time_offset,json=startTimeOffset" json:"start_time_offset,omitempty"`
+	// Time-offset, relative to the beginning of the video,
+	// corresponding to the end of the segment (inclusive).
+	EndTimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time_offset,json=endTimeOffset" json:"end_time_offset,omitempty"`
+}
+
+func (m *VideoSegment) Reset()                    { *m = VideoSegment{} }
+func (m *VideoSegment) String() string            { return proto.CompactTextString(m) }
+func (*VideoSegment) ProtoMessage()               {}
+func (*VideoSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+func (m *VideoSegment) GetStartTimeOffset() *google_protobuf3.Duration {
+	if m != nil {
+		return m.StartTimeOffset
+	}
+	return nil
+}
+
+func (m *VideoSegment) GetEndTimeOffset() *google_protobuf3.Duration {
+	if m != nil {
+		return m.EndTimeOffset
+	}
+	return nil
+}
+
+// Video segment level annotation results for label detection.
+type LabelSegment struct {
+	// Video segment where a label was detected.
+	Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"`
+	// Confidence that the label is accurate. Range: [0, 1].
+	Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"`
+}
+
+func (m *LabelSegment) Reset()                    { *m = LabelSegment{} }
+func (m *LabelSegment) String() string            { return proto.CompactTextString(m) }
+func (*LabelSegment) ProtoMessage()               {}
+func (*LabelSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+func (m *LabelSegment) GetSegment() *VideoSegment {
+	if m != nil {
+		return m.Segment
+	}
+	return nil
+}
+
+func (m *LabelSegment) GetConfidence() float32 {
+	if m != nil {
+		return m.Confidence
+	}
+	return 0
+}
+
+// Video frame level annotation results for label detection.
+type LabelFrame struct {
+	// Time-offset, relative to the beginning of the video, corresponding to the
+	// video frame for this location.
+	TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"`
+	// Confidence that the label is accurate. Range: [0, 1].
+	Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"`
+}
+
+func (m *LabelFrame) Reset()                    { *m = LabelFrame{} }
+func (m *LabelFrame) String() string            { return proto.CompactTextString(m) }
+func (*LabelFrame) ProtoMessage()               {}
+func (*LabelFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+func (m *LabelFrame) GetTimeOffset() *google_protobuf3.Duration {
+	if m != nil {
+		return m.TimeOffset
+	}
+	return nil
+}
+
+func (m *LabelFrame) GetConfidence() float32 {
+	if m != nil {
+		return m.Confidence
+	}
+	return 0
+}
+
+// Detected entity from video analysis.
+type Entity struct {
+	// Opaque entity ID. Some IDs may be available in
+	// [Google Knowledge Graph Search
+	// API](https://developers.google.com/knowledge-graph/).
+	EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"`
+	// Textual description, e.g. `Fixed-gear bicycle`.
+	Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"`
+	// Language code for `description` in BCP-47 format.
+	LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"`
+}
+
+func (m *Entity) Reset()                    { *m = Entity{} }
+func (m *Entity) String() string            { return proto.CompactTextString(m) }
+func (*Entity) ProtoMessage()               {}
+func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+func (m *Entity) GetEntityId() string {
+	if m != nil {
+		return m.EntityId
+	}
+	return ""
+}
+
+func (m *Entity) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *Entity) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
+// Label annotation.
+type LabelAnnotation struct {
+	// Detected entity.
+	Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"`
+	// Common categories for the detected entity.
+	// E.g. when the label is `Terrier` the category is likely `dog`. And in some
+	// cases there might be more than one categories e.g. `Terrier` could also be
+	// a `pet`.
+	CategoryEntities []*Entity `protobuf:"bytes,2,rep,name=category_entities,json=categoryEntities" json:"category_entities,omitempty"`
+	// All video segments where a label was detected.
+	Segments []*LabelSegment `protobuf:"bytes,3,rep,name=segments" json:"segments,omitempty"`
+	// All video frames where a label was detected.
+	Frames []*LabelFrame `protobuf:"bytes,4,rep,name=frames" json:"frames,omitempty"`
+}
+
+func (m *LabelAnnotation) Reset()                    { *m = LabelAnnotation{} }
+func (m *LabelAnnotation) String() string            { return proto.CompactTextString(m) }
+func (*LabelAnnotation) ProtoMessage()               {}
+func (*LabelAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+
+func (m *LabelAnnotation) GetEntity() *Entity {
+	if m != nil {
+		return m.Entity
+	}
+	return nil
+}
+
+func (m *LabelAnnotation) GetCategoryEntities() []*Entity {
+	if m != nil {
+		return m.CategoryEntities
+	}
+	return nil
+}
+
+func (m *LabelAnnotation) GetSegments() []*LabelSegment {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+func (m *LabelAnnotation) GetFrames() []*LabelFrame {
+	if m != nil {
+		return m.Frames
+	}
+	return nil
+}
+
+// Video frame level annotation results for explicit content.
+type ExplicitContentFrame struct {
+	// Time-offset, relative to the beginning of the video, corresponding to the
+	// video frame for this location.
+	TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"`
+	// Likelihood of the pornography content..
+	PornographyLikelihood Likelihood `protobuf:"varint,2,opt,name=pornography_likelihood,json=pornographyLikelihood,enum=google.cloud.videointelligence.v1p1beta1.Likelihood" json:"pornography_likelihood,omitempty"`
+}
+
+func (m *ExplicitContentFrame) Reset()                    { *m = ExplicitContentFrame{} }
+func (m *ExplicitContentFrame) String() string            { return proto.CompactTextString(m) }
+func (*ExplicitContentFrame) ProtoMessage()               {}
+func (*ExplicitContentFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+
+func (m *ExplicitContentFrame) GetTimeOffset() *google_protobuf3.Duration {
+	if m != nil {
+		return m.TimeOffset
+	}
+	return nil
+}
+
+func (m *ExplicitContentFrame) GetPornographyLikelihood() Likelihood {
+	if m != nil {
+		return m.PornographyLikelihood
+	}
+	return Likelihood_LIKELIHOOD_UNSPECIFIED
+}
+
+// Explicit content annotation (based on per-frame visual signals only).
+// If no explicit content has been detected in a frame, no annotations are
+// present for that frame.
+type ExplicitContentAnnotation struct {
+	// All video frames where explicit content was detected.
+	Frames []*ExplicitContentFrame `protobuf:"bytes,1,rep,name=frames" json:"frames,omitempty"`
+}
+
+func (m *ExplicitContentAnnotation) Reset()                    { *m = ExplicitContentAnnotation{} }
+func (m *ExplicitContentAnnotation) String() string            { return proto.CompactTextString(m) }
+func (*ExplicitContentAnnotation) ProtoMessage()               {}
+func (*ExplicitContentAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+
+func (m *ExplicitContentAnnotation) GetFrames() []*ExplicitContentFrame {
+	if m != nil {
+		return m.Frames
+	}
+	return nil
+}
+
+// Normalized bounding box.
+// The normalized vertex coordinates are relative to the original image.
+// Range: [0, 1].
+type NormalizedBoundingBox struct {
+	// Left X coordinate.
+	Left float32 `protobuf:"fixed32,1,opt,name=left" json:"left,omitempty"`
+	// Top Y coordinate.
+	Top float32 `protobuf:"fixed32,2,opt,name=top" json:"top,omitempty"`
+	// Right X coordinate.
+	Right float32 `protobuf:"fixed32,3,opt,name=right" json:"right,omitempty"`
+	// Bottom Y coordinate.
+	Bottom float32 `protobuf:"fixed32,4,opt,name=bottom" json:"bottom,omitempty"`
+}
+
+func (m *NormalizedBoundingBox) Reset()                    { *m = NormalizedBoundingBox{} }
+func (m *NormalizedBoundingBox) String() string            { return proto.CompactTextString(m) }
+func (*NormalizedBoundingBox) ProtoMessage()               {}
+func (*NormalizedBoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+
+func (m *NormalizedBoundingBox) GetLeft() float32 {
+	if m != nil {
+		return m.Left
+	}
+	return 0
+}
+
+func (m *NormalizedBoundingBox) GetTop() float32 {
+	if m != nil {
+		return m.Top
+	}
+	return 0
+}
+
+func (m *NormalizedBoundingBox) GetRight() float32 {
+	if m != nil {
+		return m.Right
+	}
+	return 0
+}
+
+func (m *NormalizedBoundingBox) GetBottom() float32 {
+	if m != nil {
+		return m.Bottom
+	}
+	return 0
+}
+
+// Video segment level annotation results for face detection.
+type FaceSegment struct {
+	// Video segment where a face was detected.
+	Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"`
+}
+
+func (m *FaceSegment) Reset()                    { *m = FaceSegment{} }
+func (m *FaceSegment) String() string            { return proto.CompactTextString(m) }
+func (*FaceSegment) ProtoMessage()               {}
+func (*FaceSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+
+func (m *FaceSegment) GetSegment() *VideoSegment {
+	if m != nil {
+		return m.Segment
+	}
+	return nil
+}
+
+// Video frame level annotation results for face detection.
+type FaceDetectionFrame struct {
+	// Face attributes in a frame.
+	// There can be more than one attributes if the same face is detected in
+	// multiple locations within the current frame.
+	Attributes []*FaceDetectionAttribute `protobuf:"bytes,1,rep,name=attributes" json:"attributes,omitempty"`
+	// Time-offset, relative to the beginning of the video,
+	// corresponding to the video frame for this location.
+	TimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"`
+}
+
+func (m *FaceDetectionFrame) Reset()                    { *m = FaceDetectionFrame{} }
+func (m *FaceDetectionFrame) String() string            { return proto.CompactTextString(m) }
+func (*FaceDetectionFrame) ProtoMessage()               {}
+func (*FaceDetectionFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+
+func (m *FaceDetectionFrame) GetAttributes() []*FaceDetectionAttribute {
+	if m != nil {
+		return m.Attributes
+	}
+	return nil
+}
+
+func (m *FaceDetectionFrame) GetTimeOffset() *google_protobuf3.Duration {
+	if m != nil {
+		return m.TimeOffset
+	}
+	return nil
+}
+
+// Face detection attribute.
+type FaceDetectionAttribute struct {
+	// Normalized Bounding box.
+	NormalizedBoundingBox *NormalizedBoundingBox `protobuf:"bytes,1,opt,name=normalized_bounding_box,json=normalizedBoundingBox" json:"normalized_bounding_box,omitempty"`
+	// Emotion attributes.
+	Emotions []*EmotionAttribute `protobuf:"bytes,2,rep,name=emotions" json:"emotions,omitempty"`
+}
+
+func (m *FaceDetectionAttribute) Reset()                    { *m = FaceDetectionAttribute{} }
+func (m *FaceDetectionAttribute) String() string            { return proto.CompactTextString(m) }
+func (*FaceDetectionAttribute) ProtoMessage()               {}
+func (*FaceDetectionAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+
+func (m *FaceDetectionAttribute) GetNormalizedBoundingBox() *NormalizedBoundingBox {
+	if m != nil {
+		return m.NormalizedBoundingBox
+	}
+	return nil
+}
+
+func (m *FaceDetectionAttribute) GetEmotions() []*EmotionAttribute {
+	if m != nil {
+		return m.Emotions
+	}
+	return nil
+}
+
+// Emotion attribute.
+type EmotionAttribute struct {
+	// Emotion entry.
+	Emotion Emotion `protobuf:"varint,1,opt,name=emotion,enum=google.cloud.videointelligence.v1p1beta1.Emotion" json:"emotion,omitempty"`
+	// Confidence score.
+	Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"`
+}
+
+func (m *EmotionAttribute) Reset()                    { *m = EmotionAttribute{} }
+func (m *EmotionAttribute) String() string            { return proto.CompactTextString(m) }
+func (*EmotionAttribute) ProtoMessage()               {}
+func (*EmotionAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+
+func (m *EmotionAttribute) GetEmotion() Emotion {
+	if m != nil {
+		return m.Emotion
+	}
+	return Emotion_EMOTION_UNSPECIFIED
+}
+
+func (m *EmotionAttribute) GetScore() float32 {
+	if m != nil {
+		return m.Score
+	}
+	return 0
+}
+
+// Face detection annotation.
+type FaceDetectionAnnotation struct {
+	// All video segments where a face was detected.
+	Segments []*FaceSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"`
+	// All video frames where a face was detected.
+	Frames []*FaceDetectionFrame `protobuf:"bytes,2,rep,name=frames" json:"frames,omitempty"`
+}
+
+func (m *FaceDetectionAnnotation) Reset()                    { *m = FaceDetectionAnnotation{} }
+func (m *FaceDetectionAnnotation) String() string            { return proto.CompactTextString(m) }
+func (*FaceDetectionAnnotation) ProtoMessage()               {}
+func (*FaceDetectionAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+
+func (m *FaceDetectionAnnotation) GetSegments() []*FaceSegment {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+func (m *FaceDetectionAnnotation) GetFrames() []*FaceDetectionFrame {
+	if m != nil {
+		return m.Frames
+	}
+	return nil
+}
+
+// Annotation results for a single video.
+type VideoAnnotationResults struct {
+	// Video file location in
+	// [Google Cloud Storage](https://cloud.google.com/storage/).
+	InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"`
+	// Label annotations on video level or user specified segment level.
+	// There is exactly one element for each unique label.
+	SegmentLabelAnnotations []*LabelAnnotation `protobuf:"bytes,2,rep,name=segment_label_annotations,json=segmentLabelAnnotations" json:"segment_label_annotations,omitempty"`
+	// Label annotations on shot level.
+	// There is exactly one element for each unique label.
+	ShotLabelAnnotations []*LabelAnnotation `protobuf:"bytes,3,rep,name=shot_label_annotations,json=shotLabelAnnotations" json:"shot_label_annotations,omitempty"`
+	// Label annotations on frame level.
+	// There is exactly one element for each unique label.
+	FrameLabelAnnotations []*LabelAnnotation `protobuf:"bytes,4,rep,name=frame_label_annotations,json=frameLabelAnnotations" json:"frame_label_annotations,omitempty"`
+	// Face detection annotations.
+	FaceDetectionAnnotations []*FaceDetectionAnnotation `protobuf:"bytes,13,rep,name=face_detection_annotations,json=faceDetectionAnnotations" json:"face_detection_annotations,omitempty"`
+	// Shot annotations. Each shot is represented as a video segment.
+	ShotAnnotations []*VideoSegment `protobuf:"bytes,6,rep,name=shot_annotations,json=shotAnnotations" json:"shot_annotations,omitempty"`
+	// Explicit content annotation.
+	ExplicitAnnotation *ExplicitContentAnnotation `protobuf:"bytes,7,opt,name=explicit_annotation,json=explicitAnnotation" json:"explicit_annotation,omitempty"`
+	// Speech transcription.
+	SpeechTranscriptions []*SpeechTranscription `protobuf:"bytes,11,rep,name=speech_transcriptions,json=speechTranscriptions" json:"speech_transcriptions,omitempty"`
+	// If set, indicates an error. Note that for a single `AnnotateVideoRequest`
+	// some videos may succeed and some may fail.
+	Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"`
+}
+
+func (m *VideoAnnotationResults) Reset()                    { *m = VideoAnnotationResults{} }
+func (m *VideoAnnotationResults) String() string            { return proto.CompactTextString(m) }
+func (*VideoAnnotationResults) ProtoMessage()               {}
+func (*VideoAnnotationResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+
+func (m *VideoAnnotationResults) GetInputUri() string {
+	if m != nil {
+		return m.InputUri
+	}
+	return ""
+}
+
+func (m *VideoAnnotationResults) GetSegmentLabelAnnotations() []*LabelAnnotation {
+	if m != nil {
+		return m.SegmentLabelAnnotations
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetShotLabelAnnotations() []*LabelAnnotation {
+	if m != nil {
+		return m.ShotLabelAnnotations
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetFrameLabelAnnotations() []*LabelAnnotation {
+	if m != nil {
+		return m.FrameLabelAnnotations
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetFaceDetectionAnnotations() []*FaceDetectionAnnotation {
+	if m != nil {
+		return m.FaceDetectionAnnotations
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetShotAnnotations() []*VideoSegment {
+	if m != nil {
+		return m.ShotAnnotations
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetExplicitAnnotation() *ExplicitContentAnnotation {
+	if m != nil {
+		return m.ExplicitAnnotation
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetSpeechTranscriptions() []*SpeechTranscription {
+	if m != nil {
+		return m.SpeechTranscriptions
+	}
+	return nil
+}
+
+func (m *VideoAnnotationResults) GetError() *google_rpc.Status {
+	if m != nil {
+		return m.Error
+	}
+	return nil
+}
+
+// Video annotation response. Included in the `response`
+// field of the `Operation` returned by the `GetOperation`
+// call of the `google::longrunning::Operations` service.
+type AnnotateVideoResponse struct {
+	// Annotation results for all videos specified in `AnnotateVideoRequest`.
+	AnnotationResults []*VideoAnnotationResults `protobuf:"bytes,1,rep,name=annotation_results,json=annotationResults" json:"annotation_results,omitempty"`
+}
+
+func (m *AnnotateVideoResponse) Reset()                    { *m = AnnotateVideoResponse{} }
+func (m *AnnotateVideoResponse) String() string            { return proto.CompactTextString(m) }
+func (*AnnotateVideoResponse) ProtoMessage()               {}
+func (*AnnotateVideoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+
+func (m *AnnotateVideoResponse) GetAnnotationResults() []*VideoAnnotationResults {
+	if m != nil {
+		return m.AnnotationResults
+	}
+	return nil
+}
+
+// Annotation progress for a single video.
+type VideoAnnotationProgress struct {
+	// Video file location in
+	// [Google Cloud Storage](https://cloud.google.com/storage/).
+	InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"`
+	// Approximate percentage processed thus far.
+	// Guaranteed to be 100 when fully processed.
+	ProgressPercent int32 `protobuf:"varint,2,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"`
+	// Time when the request was received.
+	StartTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+	// Time of the most recent update.
+	UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
+}
+
+func (m *VideoAnnotationProgress) Reset()                    { *m = VideoAnnotationProgress{} }
+func (m *VideoAnnotationProgress) String() string            { return proto.CompactTextString(m) }
+func (*VideoAnnotationProgress) ProtoMessage()               {}
+func (*VideoAnnotationProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+
+func (m *VideoAnnotationProgress) GetInputUri() string {
+	if m != nil {
+		return m.InputUri
+	}
+	return ""
+}
+
+func (m *VideoAnnotationProgress) GetProgressPercent() int32 {
+	if m != nil {
+		return m.ProgressPercent
+	}
+	return 0
+}
+
+func (m *VideoAnnotationProgress) GetStartTime() *google_protobuf4.Timestamp {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *VideoAnnotationProgress) GetUpdateTime() *google_protobuf4.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+// Video annotation progress. Included in the `metadata`
+// field of the `Operation` returned by the `GetOperation`
+// call of the `google::longrunning::Operations` service.
+type AnnotateVideoProgress struct {
+	// Progress metadata for all videos specified in `AnnotateVideoRequest`.
+	AnnotationProgress []*VideoAnnotationProgress `protobuf:"bytes,1,rep,name=annotation_progress,json=annotationProgress" json:"annotation_progress,omitempty"`
+}
+
+func (m *AnnotateVideoProgress) Reset()                    { *m = AnnotateVideoProgress{} }
+func (m *AnnotateVideoProgress) String() string            { return proto.CompactTextString(m) }
+func (*AnnotateVideoProgress) ProtoMessage()               {}
+func (*AnnotateVideoProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+
+func (m *AnnotateVideoProgress) GetAnnotationProgress() []*VideoAnnotationProgress {
+	if m != nil {
+		return m.AnnotationProgress
+	}
+	return nil
+}
+
+// Config for SPEECH_TRANSCRIPTION.
+type SpeechTranscriptionConfig struct {
+	// *Required* The language of the supplied audio as a
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.
+	// Example: "en-US".
+	// See [Language Support](https://cloud.google.com/speech/docs/languages)
+	// for a list of the currently supported language codes.
+	LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"`
+	// *Optional* Maximum number of recognition hypotheses to be returned.
+	// Specifically, the maximum number of `SpeechRecognitionAlternative` messages
+	// within each `SpeechRecognitionResult`. The server may return fewer than
+	// `max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1` will
+	// return a maximum of one. If omitted, will return a maximum of one.
+	MaxAlternatives int32 `protobuf:"varint,2,opt,name=max_alternatives,json=maxAlternatives" json:"max_alternatives,omitempty"`
+	// *Optional* If set to `true`, the server will attempt to filter out
+	// profanities, replacing all but the initial character in each filtered word
+	// with asterisks, e.g. "f***". If set to `false` or omitted, profanities
+	// won't be filtered out.
+	FilterProfanity bool `protobuf:"varint,3,opt,name=filter_profanity,json=filterProfanity" json:"filter_profanity,omitempty"`
+	// *Optional* A means to provide context to assist the speech recognition.
+	SpeechContexts []*SpeechContext `protobuf:"bytes,4,rep,name=speech_contexts,json=speechContexts" json:"speech_contexts,omitempty"`
+	// *Optional* For file formats, such as MXF or MKV, supporting multiple audio
+	// tracks, specify up to two tracks. Default: track 0.
+	AudioTracks []int32 `protobuf:"varint,6,rep,packed,name=audio_tracks,json=audioTracks" json:"audio_tracks,omitempty"`
+}
+
+func (m *SpeechTranscriptionConfig) Reset()                    { *m = SpeechTranscriptionConfig{} }
+func (m *SpeechTranscriptionConfig) String() string            { return proto.CompactTextString(m) }
+func (*SpeechTranscriptionConfig) ProtoMessage()               {}
+func (*SpeechTranscriptionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+
+func (m *SpeechTranscriptionConfig) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
+func (m *SpeechTranscriptionConfig) GetMaxAlternatives() int32 {
+	if m != nil {
+		return m.MaxAlternatives
+	}
+	return 0
+}
+
+func (m *SpeechTranscriptionConfig) GetFilterProfanity() bool {
+	if m != nil {
+		return m.FilterProfanity
+	}
+	return false
+}
+
+func (m *SpeechTranscriptionConfig) GetSpeechContexts() []*SpeechContext {
+	if m != nil {
+		return m.SpeechContexts
+	}
+	return nil
+}
+
+func (m *SpeechTranscriptionConfig) GetAudioTracks() []int32 {
+	if m != nil {
+		return m.AudioTracks
+	}
+	return nil
+}
+
+// Provides "hints" to the speech recognizer to favor specific words and phrases
+// in the results.
+type SpeechContext struct {
+	// *Optional* A list of strings containing words and phrases "hints" so that
+	// the speech recognition is more likely to recognize them. This can be used
+	// to improve the accuracy for specific words and phrases, for example, if
+	// specific commands are typically spoken by the user. This can also be used
+	// to add additional words to the vocabulary of the recognizer. See
+	// [usage limits](https://cloud.google.com/speech/limits#content).
+	Phrases []string `protobuf:"bytes,1,rep,name=phrases" json:"phrases,omitempty"`
+}
+
+func (m *SpeechContext) Reset()                    { *m = SpeechContext{} }
+func (m *SpeechContext) String() string            { return proto.CompactTextString(m) }
+func (*SpeechContext) ProtoMessage()               {}
+func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+
+func (m *SpeechContext) GetPhrases() []string {
+	if m != nil {
+		return m.Phrases
+	}
+	return nil
+}
+
+// A speech recognition result corresponding to a portion of the audio.
+type SpeechTranscription struct {
+	// Output only. May contain one or more recognition hypotheses (up to the
+	// maximum specified in `max_alternatives`).
+	// These alternatives are ordered in terms of accuracy, with the top (first)
+	// alternative being the most probable, as ranked by the recognizer.
+	Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"`
+}
+
+func (m *SpeechTranscription) Reset()                    { *m = SpeechTranscription{} }
+func (m *SpeechTranscription) String() string            { return proto.CompactTextString(m) }
+func (*SpeechTranscription) ProtoMessage()               {}
+func (*SpeechTranscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+
+func (m *SpeechTranscription) GetAlternatives() []*SpeechRecognitionAlternative {
+	if m != nil {
+		return m.Alternatives
+	}
+	return nil
+}
+
+// Alternative hypotheses (a.k.a. n-best list).
+type SpeechRecognitionAlternative struct {
+	// Output only. Transcript text representing the words that the user spoke.
+	Transcript string `protobuf:"bytes,1,opt,name=transcript" json:"transcript,omitempty"`
+	// Output only. The confidence estimate between 0.0 and 1.0. A higher number
+	// indicates an estimated greater likelihood that the recognized words are
+	// correct. This field is typically provided only for the top hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on the
+	// `confidence` field as it is not guaranteed to be accurate or consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was not set.
+	Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"`
+	// Output only. A list of word-specific information for each recognized word.
+	Words []*WordInfo `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"`
+}
+
+func (m *SpeechRecognitionAlternative) Reset()                    { *m = SpeechRecognitionAlternative{} }
+func (m *SpeechRecognitionAlternative) String() string            { return proto.CompactTextString(m) }
+func (*SpeechRecognitionAlternative) ProtoMessage()               {}
+func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+
+func (m *SpeechRecognitionAlternative) GetTranscript() string {
+	if m != nil {
+		return m.Transcript
+	}
+	return ""
+}
+
+func (m *SpeechRecognitionAlternative) GetConfidence() float32 {
+	if m != nil {
+		return m.Confidence
+	}
+	return 0
+}
+
+func (m *SpeechRecognitionAlternative) GetWords() []*WordInfo {
+	if m != nil {
+		return m.Words
+	}
+	return nil
+}
+
+// Word-specific information for recognized words. Word information is only
+// included in the response when certain request parameters are set, such
+// as `enable_word_time_offsets`.
+type WordInfo struct {
+	// Output only. Time offset relative to the beginning of the audio, and
+	// corresponding to the start of the spoken word. This field is only set if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+	// Output only. Time offset relative to the beginning of the audio, and
+	// corresponding to the end of the spoken word. This field is only set if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+	// Output only. The word corresponding to this set of information.
+	Word string `protobuf:"bytes,3,opt,name=word" json:"word,omitempty"`
+}
+
+func (m *WordInfo) Reset()                    { *m = WordInfo{} }
+func (m *WordInfo) String() string            { return proto.CompactTextString(m) }
+func (*WordInfo) ProtoMessage()               {}
+func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+
+func (m *WordInfo) GetStartTime() *google_protobuf3.Duration {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *WordInfo) GetEndTime() *google_protobuf3.Duration {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *WordInfo) GetWord() string {
+	if m != nil {
+		return m.Word
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AnnotateVideoRequest)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoRequest")
+	proto.RegisterType((*VideoContext)(nil), "google.cloud.videointelligence.v1p1beta1.VideoContext")
+	proto.RegisterType((*LabelDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.LabelDetectionConfig")
+	proto.RegisterType((*ShotChangeDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.ShotChangeDetectionConfig")
+	proto.RegisterType((*ExplicitContentDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentDetectionConfig")
+	proto.RegisterType((*FaceConfig)(nil), "google.cloud.videointelligence.v1p1beta1.FaceConfig")
+	proto.RegisterType((*VideoSegment)(nil), "google.cloud.videointelligence.v1p1beta1.VideoSegment")
+	proto.RegisterType((*LabelSegment)(nil), "google.cloud.videointelligence.v1p1beta1.LabelSegment")
+	proto.RegisterType((*LabelFrame)(nil), "google.cloud.videointelligence.v1p1beta1.LabelFrame")
+	proto.RegisterType((*Entity)(nil), "google.cloud.videointelligence.v1p1beta1.Entity")
+	proto.RegisterType((*LabelAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.LabelAnnotation")
+	proto.RegisterType((*ExplicitContentFrame)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentFrame")
+	proto.RegisterType((*ExplicitContentAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentAnnotation")
+	proto.RegisterType((*NormalizedBoundingBox)(nil), "google.cloud.videointelligence.v1p1beta1.NormalizedBoundingBox")
+	proto.RegisterType((*FaceSegment)(nil), "google.cloud.videointelligence.v1p1beta1.FaceSegment")
+	proto.RegisterType((*FaceDetectionFrame)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionFrame")
+	proto.RegisterType((*FaceDetectionAttribute)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionAttribute")
+	proto.RegisterType((*EmotionAttribute)(nil), "google.cloud.videointelligence.v1p1beta1.EmotionAttribute")
+	proto.RegisterType((*FaceDetectionAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionAnnotation")
+	proto.RegisterType((*VideoAnnotationResults)(nil), "google.cloud.videointelligence.v1p1beta1.VideoAnnotationResults")
+	proto.RegisterType((*AnnotateVideoResponse)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoResponse")
+	proto.RegisterType((*VideoAnnotationProgress)(nil), "google.cloud.videointelligence.v1p1beta1.VideoAnnotationProgress")
+	proto.RegisterType((*AnnotateVideoProgress)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoProgress")
+	proto.RegisterType((*SpeechTranscriptionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechTranscriptionConfig")
+	proto.RegisterType((*SpeechContext)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechContext")
+	proto.RegisterType((*SpeechTranscription)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechTranscription")
+	proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechRecognitionAlternative")
+	proto.RegisterType((*WordInfo)(nil), "google.cloud.videointelligence.v1p1beta1.WordInfo")
+	proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Feature", Feature_name, Feature_value)
+	proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.LabelDetectionMode", LabelDetectionMode_name, LabelDetectionMode_value)
+	proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Likelihood", Likelihood_name, Likelihood_value)
+	proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Emotion", Emotion_name, Emotion_value)
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for VideoIntelligenceService service
+
+type VideoIntelligenceServiceClient interface {
+	// Performs asynchronous video annotation. Progress and results can be
+	// retrieved through the `google.longrunning.Operations` interface.
+	// `Operation.metadata` contains `AnnotateVideoProgress` (progress).
+	// `Operation.response` contains `AnnotateVideoResponse` (results).
+	AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error)
+}
+
+type videoIntelligenceServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewVideoIntelligenceServiceClient(cc *grpc.ClientConn) VideoIntelligenceServiceClient {
+	return &videoIntelligenceServiceClient{cc}
+}
+
+func (c *videoIntelligenceServiceClient) AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) {
+	out := new(google_longrunning.Operation)
+	err := grpc.Invoke(ctx, "/google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService/AnnotateVideo", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for VideoIntelligenceService service
+
+type VideoIntelligenceServiceServer interface {
+	// Performs asynchronous video annotation. Progress and results can be
+	// retrieved through the `google.longrunning.Operations` interface.
+	// `Operation.metadata` contains `AnnotateVideoProgress` (progress).
+	// `Operation.response` contains `AnnotateVideoResponse` (results).
+	AnnotateVideo(context.Context, *AnnotateVideoRequest) (*google_longrunning.Operation, error)
+}
+
+func RegisterVideoIntelligenceServiceServer(s *grpc.Server, srv VideoIntelligenceServiceServer) {
+	s.RegisterService(&_VideoIntelligenceService_serviceDesc, srv)
+}
+
+func _VideoIntelligenceService_AnnotateVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AnnotateVideoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService/AnnotateVideo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, req.(*AnnotateVideoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VideoIntelligenceService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService",
+	HandlerType: (*VideoIntelligenceServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "AnnotateVideo",
+			Handler:    _VideoIntelligenceService_AnnotateVideo_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/videointelligence/v1p1beta1/video_intelligence.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/videointelligence/v1p1beta1/video_intelligence.proto", fileDescriptor0)
+}
+
+var fileDescriptor0 = []byte{
+	// 2237 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x4b, 0x6f, 0x23, 0x59,
+	0xf5, 0xff, 0x97, 0x1d, 0x3b, 0xf1, 0x71, 0x12, 0xbb, 0x6f, 0x5e, 0x4e, 0xa6, 0x1f, 0x99, 0x9a,
+	0x3f, 0x52, 0xba, 0x41, 0x0e, 0x09, 0xcd, 0xc0, 0xf4, 0x0c, 0x03, 0x15, 0xbb, 0xd2, 0xb1, 0x26,
+	0xb1, 0xcd, 0x2d, 0x27, 0xd0, 0xd0, 0xa8, 0xa6, 0x52, 0x75, 0xed, 0x14, 0x5d, 0xae, 0xeb, 0xa9,
+	0x2a, 0xf7, 0x74, 0xb3, 0x61, 0x60, 0x58, 0x8c, 0x84, 0xc4, 0x66, 0x84, 0x84, 0xc4, 0x86, 0x25,
+	0x62, 0x39, 0x5f, 0x00, 0x09, 0xb1, 0x81, 0x2d, 0x2b, 0x24, 0x36, 0x48, 0xb0, 0xe0, 0x5b, 0xa0,
+	0xfb, 0x28, 0xbb, 0xfc, 0x48, 0x27, 0x4e, 0x8b, 0x9d, 0xef, 0x39, 0xf7, 0xfe, 0xce, 0xe3, 0x9e,
+	0x47, 0x9d, 0x6b, 0xd0, 0x3a, 0x94, 0x76, 0x3c, 0xb2, 0x6b, 0x7b, 0xb4, 0xef, 0xec, 0x3e, 0x77,
+	0x1d, 0x42, 0x5d, 0x3f, 0x22, 0x9e, 0xe7, 0x76, 0x88, 0x6f, 0x93, 0xdd, 0xe7, 0x7b, 0xbd, 0xbd,
+	0x73, 0x12, 0x59, 0x7b, 0x82, 0x67, 0x26, 0x99, 0xe5, 0x5e, 0x40, 0x23, 0x8a, 0x76, 0x04, 0x44,
+	0x99, 0x43, 0x94, 0x27, 0x20, 0xca, 0x03, 0x88, 0xad, 0xdb, 0x52, 0x98, 0xd5, 0x73, 0x77, 0x2d,
+	0xdf, 0xa7, 0x91, 0x15, 0xb9, 0xd4, 0x0f, 0x05, 0xce, 0xd6, 0x5b, 0x92, 0xeb, 0x51, 0xbf, 0x13,
+	0xf4, 0x7d, 0xdf, 0xf5, 0x3b, 0xbb, 0xb4, 0x47, 0x82, 0x91, 0x4d, 0x77, 0xe5, 0x26, 0xbe, 0x3a,
+	0xef, 0xb7, 0x77, 0x9d, 0xbe, 0xd8, 0x20, 0xf9, 0xf7, 0xc6, 0xf9, 0x91, 0xdb, 0x25, 0x61, 0x64,
+	0x75, 0x7b, 0x72, 0xc3, 0x86, 0xdc, 0x10, 0xf4, 0xec, 0xdd, 0x30, 0xb2, 0xa2, 0xbe, 0x44, 0x56,
+	0xff, 0x9c, 0x82, 0x55, 0x4d, 0x28, 0x45, 0xce, 0x98, 0x11, 0x98, 0x7c, 0xd4, 0x27, 0x61, 0x84,
+	0xde, 0x80, 0x9c, 0xeb, 0xf7, 0xfa, 0x91, 0xd9, 0x0f, 0xdc, 0x92, 0xb2, 0xad, 0xec, 0xe4, 0xf0,
+	0x02, 0x27, 0x9c, 0x06, 0x2e, 0x7a, 0x0b, 0x96, 0x04, 0xd3, 0xa6, 0x7e, 0x44, 0xfc, 0xa8, 0x94,
+	0xdd, 0x56, 0x76, 0x16, 0xf1, 0x22, 0x27, 0x56, 0x04, 0x0d, 0x9d, 0xc0, 0x42, 0x9b, 0x58, 0x51,
+	0x3f, 0x20, 0x61, 0x29, 0xb5, 0x9d, 0xde, 0x59, 0xde, 0xdf, 0x2b, 0x5f, 0xd7, 0x69, 0xe5, 0x43,
+	0x71, 0x12, 0x0f, 0x20, 0xd0, 0x0f, 0x61, 0x49, 0x5c, 0x06, 0x97, 0xf9, 0x22, 0x2a, 0xa5, 0xb7,
+	0x95, 0x9d, 0xfc, 0xfe, 0xdb, 0xd7, 0xc7, 0xe4, 0xf6, 0x55, 0xc4, 0x69, 0xbc, 0xf8, 0x3c, 0xb1,
+	0x42, 0x77, 0x00, 0x68, 0x3f, 0x8a, 0xcd, 0x9d, 0xe3, 0xe6, 0xe6, 0x04, 0x85, 0xd9, 0x7b, 0x0f,
+	0xf2, 0x1e, 0xb5, 0xb9, 0xc7, 0x4d, 0xd7, 0x29, 0x65, 0x38, 0x1f, 0x62, 0x52, 0xcd, 0x51, 0xff,
+	0x9d, 0x81, 0xc5, 0x24, 0x3c, 0xc2, 0xb0, 0x10, 0x92, 0x4e, 0x97, 0xf8, 0x51, 0x58, 0x52, 0xb6,
+	0xd3, 0x37, 0x50, 0xd4, 0x10, 0xc7, 0xf1, 0x00, 0x07, 0x45, 0xb0, 0xee, 0x59, 0xe7, 0xc4, 0x33,
+	0x1d, 0x12, 0x11, 0x9b, 0x2b, 0x63, 0x53, 0xbf, 0xed, 0x76, 0x4a, 0x29, 0xee, 0x8a, 0xf7, 0xaf,
+	0x2f, 0xe1, 0x98, 0xe1, 0x54, 0x63, 0x98, 0x0a, 0x47, 0xc1, 0xab, 0xde, 0x14, 0x2a, 0xfa, 0x85,
+	0x02, 0xb7, 0xc3, 0x0b, 0x1a, 0x99, 0xf6, 0x85, 0xe5, 0x77, 0xc8, 0xa4, 0x70, 0x71, 0x0f, 0x95,
+	0xeb, 0x0b, 0x37, 0x2e, 0x68, 0x54, 0xe1, 0x60, 0xe3, 0x1a, 0x6c, 0x86, 0x97, 0xb1, 0xd0, 0xe7,
+	0x0a, 0xbc, 0x49, 0x5e, 0xf4, 0x3c, 0xd7, 0x76, 0x07, 0x61, 0x37, 0xa9, 0xcb, 0x1c, 0xd7, 0xe5,
+	0xe8, 0xfa, 0xba, 0xe8, 0x12, 0x52, 0x06, 0xed, 0xb8, 0x42, 0x77, 0xc9, 0x2b, 0xf9, 0xe8, 0x53,
+	0x05, 0xde, 0x08, 0x7b, 0x84, 0xd8, 0x17, 0x66, 0x14, 0x58, 0x7e, 0x68, 0x07, 0x6e, 0x2f, 0xa9,
+	0x4f, 0x76, 0x66, 0xdf, 0x70, 0xb0, 0x56, 0x12, 0x6b, 0xe0, 0x9b, 0xcb, 0x58, 0xe8, 0x02, 0xd6,
+	0xda, 0x96, 0x3d, 0xe5, 0x6a, 0xe6, 0xb9, 0xf8, 0x87, 0x33, 0xa4, 0x9d, 0x65, 0x13, 0x29, 0x6f,
+	0x85, 0x41, 0x8e, 0xd9, 0xab, 0xfe, 0x45, 0x81, 0xd5, 0x69, 0xb1, 0x83, 0x7c, 0x58, 0x1d, 0x8f,
+	0xcd, 0x2e, 0x75, 0x08, 0xaf, 0x1c, 0xcb, 0xfb, 0xef, 0xdd, 0x34, 0x32, 0x4f, 0xa8, 0x43, 0x30,
+	0xf2, 0x26, 0x68, 0xe8, 0xcb, 0x70, 0x2b, 0x14, 0x85, 0xd4, 0x0a, 0x5e, 0x9a, 0xb6, 0xd5, 0x25,
+	0x81, 0xc5, 0xd3, 0x60, 0x01, 0x17, 0x87, 0x8c, 0x0a, 0xa7, 0xa3, 0x55, 0xc8, 0x30, 0x65, 0x3c,
+	0x1e, 0xaa, 0x39, 0x2c, 0x16, 0xea, 0x1e, 0x6c, 0x5e, 0x1a, 0x89, 0xc3, 0x23, 0x4a, 0xf2, 0xc8,
+	0xdb, 0x70, 0xf7, 0xd5, 0x01, 0x73, 0xc9, 0xb9, 0x4f, 0x15, 0x80, 0xa1, 0x6b, 0xa7, 0x6f, 0x42,
+	0x0f, 0x61, 0xdd, 0xf5, 0x6d, 0xaf, 0xef, 0x10, 0xf3, 0x9c, 0xf6, 0x7d, 0xc7, 0xf5, 0x3b, 0xe6,
+	0x39, 0x7d, 0xc1, 0xab, 0x27, 0xb3, 0x6b, 0x55, 0x72, 0x0f, 0x24, 0xf3, 0x80, 0xf1, 0xd0, 0x7d,
+	0x28, 0xc6, 0xa7, 0x48, 0x97, 0xf2, 0xa6, 0xc1, 0xb3, 0x60, 0x01, 0x17, 0x24, 0x5d, 0x97, 0x64,
+	0xf5, 0x37, 0x8a, 0x2c, 0x52, 0xb2, 0xb4, 0x20, 0x9d, 0x3b, 0x31, 0x88, 0x4c, 0xd6, 0x2e, 0x4c,
+	0xda, 0x6e, 0x87, 0x24, 0xe2, 0x3a, 0xe5, 0xf7, 0x37, 0xe3, 0x1b, 0x8b, 0x5b, 0x4a, 0xb9, 0x2a,
+	0x5b, 0x0e, 0x2e, 0xf0, 0x33, 0x2d, 0xb7, 0x4b, 0x1a, 0xfc, 0x04, 0xd2, 0xa0, 0x40, 0x7c, 0x67,
+	0x04, 0x24, 0x75, 0x15, 0xc8, 0x12, 0xf1, 0x9d, 0x21, 0x84, 0xfa, 0x89, 0x02, 0x8b, 0xfc, 0xe6,
+	0x63, 0xd5, 0x9a, 0x30, 0x2f, 0xeb, 0x9e, 0x54, 0xe8, 0xa6, 0xe5, 0x33, 0x86, 0x41, 0x77, 0x01,
+	0x78, 0x56, 0x38, 0x6c, 0x37, 0x57, 0x30, 0x85, 0x13, 0x14, 0xf5, 0x02, 0x80, 0x6b, 0x70, 0x18,
+	0x58, 0x5d, 0x82, 0x1e, 0x41, 0x7e, 0x26, 0xa7, 0x40, 0x34, 0xf4, 0xc7, 0x55, 0x92, 0x3c, 0xc8,
+	0xea, 0x7e, 0xe4, 0x46, 0x2f, 0x59, 0x93, 0x25, 0xfc, 0x17, 0xeb, 0x2a, 0xb2, 0xc9, 0x0a, 0x42,
+	0xcd, 0x41, 0xdb, 0x90, 0x77, 0xc8, 0x20, 0xd5, 0x39, 0x4e, 0x0e, 0x27, 0x49, 0xac, 0x0d, 0x7b,
+	0x96, 0xdf, 0xe9, 0x5b, 0x1d, 0x62, 0xda, 0x2c, 0xdb, 0x44, 0x7c, 0x2f, 0xc6, 0xc4, 0x0a, 0x75,
+	0x88, 0xfa, 0x8f, 0x14, 0x14, 0xb8, 0x61, 0xda, 0xe0, 0xdb, 0x03, 0x1d, 0x41, 0x56, 0x88, 0x91,
+	0x86, 0x7d, 0x75, 0x86, 0x82, 0xc9, 0xcf, 0x61, 0x79, 0x1e, 0xfd, 0x08, 0x6e, 0xd9, 0x56, 0x44,
+	0x3a, 0x34, 0x78, 0x69, 0x72, 0x92, 0x2b, 0xbb, 0xfd, 0x4d, 0x40, 0x8b, 0x31, 0x94, 0x2e, 0x91,
+	0x46, 0xda, 0x68, 0x7a, 0xd6, 0x36, 0x9a, 0x0c, 0xa8, 0x44, 0x1b, 0x3d, 0x86, 0x6c, 0x9b, 0xdd,
+	0x31, 0xcb, 0x93, 0xf4, 0x6c, 0xe5, 0x71, 0x18, 0x20, 0x58, 0x62, 0xa8, 0x7f, 0x54, 0x60, 0x75,
+	0xac, 0x26, 0xbc, 0x7e, 0x04, 0x3d, 0x83, 0xf5, 0x1e, 0x0d, 0x7c, 0xda, 0x09, 0xac, 0xde, 0xc5,
+	0x4b, 0xd3, 0x73, 0x9f, 0x11, 0xcf, 0xbd, 0xa0, 0xd4, 0xe1, 0x51, 0xb0, 0x3c, 0x93, 0xca, 0x83,
+	0xb3, 0x78, 0x2d, 0x81, 0x39, 0x24, 0xab, 0x21, 0x6c, 0x8e, 0x19, 0x90, 0x88, 0x94, 0xb3, 0x81,
+	0xb3, 0xc4, 0x57, 0xcc, 0xfb, 0x37, 0x6e, 0xad, 0xa3, 0x6e, 0x7b, 0x06, 0x6b, 0x75, 0x1a, 0x74,
+	0x2d, 0xcf, 0xfd, 0x09, 0x71, 0x12, 0x15, 0x0d, 0x21, 0x98, 0xf3, 0x48, 0x5b, 0xf8, 0x2b, 0x85,
+	0xf9, 0x6f, 0x54, 0x84, 0x74, 0x44, 0x7b, 0x32, 0x93, 0xd8, 0x4f, 0x56, 0x41, 0x03, 0xb7, 0x73,
+	0x21, 0x3e, 0x02, 0x53, 0x58, 0x2c, 0xd0, 0x3a, 0x64, 0xcf, 0x69, 0x14, 0xd1, 0x2e, 0xaf, 0x80,
+	0x29, 0x2c, 0x57, 0xaa, 0x09, 0x79, 0x56, 0x7d, 0xff, 0x67, 0xb5, 0x45, 0xfd, 0x42, 0x01, 0x74,
+	0x98, 0x6c, 0x97, 0x22, 0x04, 0x3e, 0x04, 0xb0, 0xa2, 0x28, 0x70, 0xcf, 0xfb, 0xd1, 0xc0, 0x81,
+	0xdf, 0x99, 0xad, 0x19, 0x0f, 0x10, 0xb5, 0x18, 0x08, 0x27, 0x30, 0xc7, 0x83, 0x2c, 0x35, 0x43,
+	0x90, 0xa9, 0xff, 0x51, 0x60, 0x7d, 0xba, 0x08, 0xf4, 0x31, 0x6c, 0xf8, 0x83, 0xdb, 0x19, 0xe9,
+	0x46, 0xd2, 0x63, 0xdf, 0xbe, 0xbe, 0x15, 0x53, 0xaf, 0x19, 0xaf, 0xf9, 0x53, 0x6f, 0xff, 0x0c,
+	0x16, 0x06, 0x5d, 0x4c, 0x54, 0x91, 0x47, 0x33, 0x04, 0x9c, 0x38, 0x39, 0xf4, 0xd4, 0x00, 0x4b,
+	0xed, 0x43, 0x71, 0x9c, 0x8b, 0x3e, 0x80, 0x79, 0xc9, 0x97, 0x5f, 0x29, 0x7b, 0x33, 0x8b, 0xc2,
+	0x31, 0x02, 0x0b, 0xc8, 0xd0, 0xa6, 0x41, 0x5c, 0xee, 0xc5, 0x42, 0xfd, 0x93, 0x02, 0x1b, 0xa3,
+	0x2e, 0x1e, 0x66, 0xd6, 0x77, 0x27, 0x26, 0x84, 0xaf, 0xcf, 0x16, 0x1a, 0x93, 0x95, 0xad, 0x35,
+	0x48, 0x56, 0xe1, 0xbb, 0xf7, 0x6e, 0x18, 0x6b, 0xa3, 0xa9, 0xfa, 0xd9, 0x3c, 0xac, 0xf3, 0xb0,
+	0x1f, 0x2a, 0x8f, 0x49, 0xd8, 0xf7, 0xa2, 0xf0, 0xd5, 0x43, 0x62, 0x1f, 0x36, 0xa5, 0x66, 0xa6,
+	0xf8, 0x34, 0x4c, 0x0c, 0xbf, 0x52, 0xc1, 0x77, 0x66, 0x2c, 0xbd, 0x09, 0x0d, 0x36, 0x24, 0xf6,
+	0x18, 0x3d, 0x44, 0x14, 0xd6, 0xf9, 0xb8, 0x32, 0x29, 0x33, 0xfd, 0xba, 0x32, 0x57, 0x19, 0xf0,
+	0x84, 0xc0, 0x8f, 0x60, 0x83, 0x7b, 0x6a, 0x8a, 0xc4, 0xb9, 0xd7, 0x95, 0xb8, 0xc6, 0x91, 0x27,
+	0x44, 0xfe, 0x14, 0xb6, 0xc6, 0x3e, 0xf8, 0x93, 0x52, 0x97, 0xb8, 0x54, 0xed, 0xa6, 0x85, 0x66,
+	0x28, 0xbd, 0xd4, 0x9e, 0xce, 0x08, 0x91, 0x05, 0x45, 0xee, 0xe4, 0xa4, 0xd8, 0xec, 0x6b, 0x8d,
+	0xb9, 0x05, 0x86, 0x97, 0x14, 0x11, 0xc1, 0xca, 0x60, 0xde, 0x1b, 0x8a, 0x91, 0x23, 0x4d, 0xe5,
+	0xc6, 0x6d, 0x28, 0x61, 0x1e, 0x8a, 0xf1, 0x13, 0x59, 0x19, 0xc0, 0xda, 0xb4, 0x79, 0x2e, 0x2c,
+	0xe5, 0xb9, 0x75, 0xdf, 0x7a, 0xad, 0x49, 0x0e, 0xaf, 0x4e, 0x99, 0xe1, 0x42, 0xb4, 0x03, 0x19,
+	0x12, 0x04, 0x34, 0x28, 0xe5, 0xb8, 0x6d, 0x28, 0x96, 0x11, 0xf4, 0xec, 0xb2, 0xc1, 0x1f, 0x6b,
+	0xb0, 0xd8, 0xa0, 0x7e, 0xa6, 0xc0, 0xda, 0xd8, 0x6b, 0x4d, 0xd8, 0xa3, 0x7e, 0x48, 0x10, 0x05,
+	0x34, 0x74, 0x92, 0x19, 0x88, 0xfc, 0x9c, 0xbd, 0xe5, 0x4c, 0xcf, 0x73, 0x7c, 0xcb, 0x1a, 0x27,
+	0xa9, 0x7f, 0x57, 0x60, 0x63, 0x6c, 0x77, 0x33, 0xa0, 0x9d, 0x80, 0x84, 0x57, 0x94, 0x85, 0xfb,
+	0x50, 0xec, 0xc9, 0x8d, 0x66, 0x8f, 0x04, 0x36, 0x6b, 0xc3, 0xac, 0x68, 0x66, 0x70, 0x21, 0xa6,
+	0x37, 0x05, 0x19, 0xbd, 0x03, 0x30, 0x9c, 0x4f, 0xe4, 0x3b, 0xc3, 0xd6, 0x44, 0x73, 0x6b, 0xc5,
+	0x6f, 0x5d, 0x38, 0x37, 0x98, 0x4c, 0xd0, 0xbb, 0x90, 0xef, 0xf7, 0x1c, 0x2b, 0x22, 0xe2, 0xec,
+	0xdc, 0x95, 0x67, 0x41, 0x6c, 0x67, 0x04, 0xf5, 0x97, 0xe3, 0x6e, 0x1e, 0x58, 0x16, 0xc0, 0x4a,
+	0xc2, 0xcd, 0xb1, 0xbe, 0xd2, 0xcf, 0xda, 0x8d, 0xfd, 0x1c, 0xe3, 0xe3, 0xc4, 0x25, 0xc6, 0x34,
+	0xf5, 0xb7, 0x29, 0xd8, 0xbc, 0xf4, 0x59, 0x60, 0x72, 0x06, 0x50, 0x26, 0x67, 0x00, 0xe6, 0xf3,
+	0xae, 0xf5, 0xc2, 0xb4, 0xbc, 0x88, 0x04, 0xbe, 0x15, 0xb9, 0xcf, 0xe5, 0x50, 0x99, 0xc1, 0x85,
+	0xae, 0xf5, 0x42, 0x4b, 0x90, 0xd9, 0xd6, 0xb6, 0xcb, 0x08, 0xcc, 0xba, 0xb6, 0xe5, 0xb3, 0x21,
+	0x21, 0x2d, 0xe6, 0x49, 0x41, 0x6f, 0xc6, 0x64, 0xf4, 0x21, 0x14, 0x64, 0xae, 0xc8, 0x27, 0xb9,
+	0xb8, 0xe0, 0x7d, 0x63, 0xd6, 0x2c, 0x89, 0x1f, 0xe5, 0x96, 0xc3, 0xe4, 0x32, 0x44, 0x6f, 0xc2,
+	0xa2, 0xd5, 0x77, 0x5c, 0xca, 0x92, 0xd1, 0x7e, 0x26, 0x4a, 0x4c, 0x06, 0xe7, 0x39, 0xad, 0xc5,
+	0x49, 0xea, 0x7d, 0x58, 0x1a, 0xc1, 0x40, 0x25, 0x98, 0xef, 0x5d, 0x04, 0x56, 0x28, 0xbf, 0xb8,
+	0x72, 0x38, 0x5e, 0xaa, 0x3f, 0x53, 0x60, 0x65, 0x8a, 0x23, 0xd1, 0x8f, 0x61, 0x71, 0xc4, 0x33,
+	0xe2, 0x36, 0x0f, 0x67, 0x35, 0x02, 0x13, 0x9b, 0x76, 0x7c, 0x97, 0x97, 0xca, 0x21, 0x1c, 0x1e,
+	0xc1, 0x56, 0x7f, 0xaf, 0xc0, 0xed, 0x57, 0x6d, 0x67, 0xc3, 0xe3, 0xb0, 0xf2, 0xc8, 0xcb, 0x4c,
+	0x50, 0xae, 0x1a, 0x2e, 0xd1, 0x11, 0x64, 0x3e, 0xa6, 0x81, 0x13, 0x77, 0xbb, 0xfd, 0xeb, 0x5b,
+	0xf1, 0x3d, 0x1a, 0x38, 0x35, 0xbf, 0x4d, 0xb1, 0x00, 0x50, 0x7f, 0xa5, 0xc0, 0x42, 0x4c, 0x43,
+	0xdf, 0x1c, 0x49, 0xc5, 0x2b, 0x87, 0x99, 0x44, 0x26, 0x3e, 0x84, 0x85, 0xf8, 0x75, 0xe0, 0xea,
+	0xef, 0xd3, 0x79, 0xf9, 0x2c, 0xc0, 0xc6, 0x00, 0xa6, 0x85, 0x9c, 0x68, 0xf9, 0xef, 0x07, 0xbf,
+	0x53, 0x60, 0x5e, 0xbe, 0x0b, 0xa3, 0x0d, 0x58, 0x39, 0xd4, 0xb5, 0xd6, 0x29, 0xd6, 0xcd, 0xd3,
+	0xba, 0xd1, 0xd4, 0x2b, 0xb5, 0xc3, 0x9a, 0x5e, 0x2d, 0xfe, 0x1f, 0x5a, 0x81, 0xc2, 0xb1, 0x76,
+	0xa0, 0x1f, 0x9b, 0x55, 0xbd, 0xa5, 0x57, 0x5a, 0xb5, 0x46, 0xbd, 0xa8, 0xa0, 0x4d, 0x58, 0x33,
+	0x8e, 0x1a, 0x2d, 0xb3, 0x72, 0xa4, 0xd5, 0x1f, 0xeb, 0x09, 0x56, 0x0a, 0xdd, 0x85, 0x2d, 0xfd,
+	0xfb, 0xcd, 0xe3, 0x5a, 0xa5, 0xd6, 0x32, 0x2b, 0x8d, 0x7a, 0x4b, 0xaf, 0xb7, 0x12, 0xfc, 0x34,
+	0x42, 0xb0, 0x7c, 0xa8, 0x55, 0x92, 0x67, 0x16, 0x50, 0x09, 0x56, 0x8d, 0xa6, 0xae, 0x57, 0x8e,
+	0xcc, 0x16, 0xd6, 0xea, 0x46, 0x05, 0xd7, 0x9a, 0x9c, 0x93, 0x7d, 0x10, 0x00, 0x9a, 0x7c, 0xc0,
+	0x42, 0xff, 0x0f, 0xdb, 0x63, 0x3a, 0x99, 0x27, 0x8d, 0xea, 0xb8, 0xe6, 0x4b, 0x90, 0xe3, 0x4a,
+	0x32, 0x56, 0x51, 0x41, 0xcb, 0x00, 0x87, 0x58, 0x3b, 0xd1, 0xc5, 0x3a, 0xc5, 0x2c, 0xe6, 0x6c,
+	0xad, 0x5e, 0x35, 0x13, 0x8c, 0xf4, 0x83, 0x08, 0x60, 0x38, 0xcd, 0xa1, 0x2d, 0x58, 0x3f, 0xae,
+	0x7d, 0xa0, 0x1f, 0xd7, 0x8e, 0x1a, 0x8d, 0xea, 0x98, 0x84, 0x5b, 0xb0, 0x74, 0xa6, 0xe3, 0x27,
+	0xe6, 0x69, 0x9d, 0x6f, 0x79, 0x52, 0x54, 0xd0, 0x22, 0x2c, 0x0c, 0x56, 0x29, 0xb6, 0x6a, 0x36,
+	0x0c, 0xa3, 0x76, 0x70, 0xac, 0x17, 0xd3, 0x08, 0x20, 0x2b, 0x39, 0x73, 0xa8, 0x00, 0x79, 0x7e,
+	0x54, 0x12, 0x32, 0x0f, 0xfe, 0xa9, 0xc0, 0xbc, 0xfc, 0x0a, 0x66, 0xaa, 0xe9, 0x27, 0x0d, 0x6e,
+	0xd7, 0x84, 0x49, 0xda, 0xc9, 0xa9, 0xa1, 0x9f, 0xe8, 0xf5, 0x56, 0x51, 0x41, 0x39, 0xc8, 0x30,
+	0xff, 0xe3, 0x62, 0x8a, 0xa9, 0x52, 0x69, 0xd4, 0x2b, 0x7a, 0xbd, 0x85, 0x35, 0xe9, 0xe9, 0x02,
+	0xe4, 0xe5, 0x05, 0xf0, 0xed, 0x73, 0x4c, 0x7e, 0x55, 0x37, 0x6a, 0x58, 0x2f, 0x66, 0xd8, 0x35,
+	0x54, 0x6b, 0x86, 0xd6, 0x6c, 0x36, 0x6a, 0x92, 0x9f, 0x45, 0x79, 0x98, 0xaf, 0xd6, 0x8c, 0xc7,
+	0xa7, 0x46, 0xab, 0x38, 0xcf, 0x16, 0xfa, 0xb1, 0x26, 0x2f, 0xe8, 0x16, 0x2c, 0xe9, 0x27, 0x07,
+	0x1a, 0xc6, 0x9a, 0x61, 0xf0, 0xcd, 0x39, 0x66, 0x5a, 0xad, 0xde, 0xd2, 0xb1, 0x6e, 0xb4, 0x8a,
+	0xc0, 0x34, 0x69, 0xe2, 0x5a, 0x55, 0x2f, 0xe6, 0xd9, 0x41, 0x43, 0xab, 0xd6, 0x75, 0xc3, 0x28,
+	0x2e, 0xb2, 0x5d, 0xc6, 0x29, 0x6e, 0xe2, 0x9a, 0xa1, 0x17, 0x97, 0xf6, 0xbf, 0x50, 0xa0, 0xc4,
+	0x2b, 0x75, 0x2d, 0x91, 0x31, 0x06, 0x09, 0x9e, 0xbb, 0x36, 0x41, 0xbf, 0x56, 0x60, 0x69, 0xa4,
+	0x49, 0xa0, 0x19, 0x66, 0xe3, 0x69, 0x7f, 0xb9, 0x6c, 0xdd, 0x89, 0xcf, 0x27, 0xfe, 0x0b, 0x2a,
+	0x37, 0xe2, 0xff, 0x82, 0xd4, 0x2f, 0xfd, 0xfc, 0x6f, 0xff, 0xfa, 0x3c, 0x75, 0x4f, 0xdd, 0x1a,
+	0xff, 0x7b, 0x2a, 0x7c, 0x24, 0xbb, 0x06, 0x79, 0xa4, 0x3c, 0x38, 0xf8, 0x24, 0x05, 0x5f, 0xb1,
+	0x69, 0xf7, 0xda, 0xba, 0x1c, 0xdc, 0xb9, 0xcc, 0xc4, 0x26, 0x4b, 0xcf, 0xa6, 0xf2, 0x83, 0x27,
+	0x12, 0xaa, 0x43, 0x59, 0x53, 0x29, 0xd3, 0xa0, 0xb3, 0xdb, 0x21, 0x3e, 0x4f, 0xde, 0x5d, 0xc1,
+	0xb2, 0x7a, 0x6e, 0x78, 0xf5, 0x9f, 0x69, 0xef, 0x4e, 0xf0, 0xfe, 0x90, 0xda, 0x79, 0x2c, 0xb0,
+	0x2b, 0x5c, 0xcd, 0x09, 0x4d, 0xca, 0x67, 0x7b, 0xcd, 0xbd, 0x03, 0x76, 0xf8, 0xaf, 0xf1, 0xd6,
+	0xa7, 0x7c, 0xeb, 0xd3, 0x89, 0xad, 0x4f, 0xcf, 0x62, 0x39, 0xe7, 0x59, 0xae, 0xdb, 0xd7, 0xfe,
+	0x1b, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x29, 0xc9, 0x61, 0xe7, 0x1b, 0x00, 0x00,
+}
diff --git a/googleapis/devtools/cloudtrace/v1/trace.pb.go b/googleapis/devtools/cloudtrace/v1/trace.pb.go
index cc15feed..9fa5d82d 100644
--- a/googleapis/devtools/cloudtrace/v1/trace.pb.go
+++ b/googleapis/devtools/cloudtrace/v1/trace.pb.go
@@ -218,9 +218,11 @@ type TraceSpan struct {
 	// *   `/http/client_region`
 	// *   `/http/host`
 	// *   `/http/method`
+	// *   `/http/path`
 	// *   `/http/redirected_url`
 	// *   `/http/request/size`
 	// *   `/http/response/size`
+	// *   `/http/route`
 	// *   `/http/status_code`
 	// *   `/http/url`
 	// *   `/http/user_agent`
diff --git a/googleapis/privacy/dlp/v2/dlp.pb.go b/googleapis/privacy/dlp/v2/dlp.pb.go
new file mode 100644
index 00000000..96d5750d
--- /dev/null
+++ b/googleapis/privacy/dlp/v2/dlp.pb.go
@@ -0,0 +1,9624 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/privacy/dlp/v2/dlp.proto
+
+/*
+Package dlp is a generated protocol buffer package.
+
+It is generated from these files:
+	google/privacy/dlp/v2/dlp.proto
+	google/privacy/dlp/v2/storage.proto
+
+It has these top-level messages:
+	InspectConfig
+	ByteContentItem
+	ContentItem
+	Table
+	InspectResult
+	Finding
+	Location
+	ContentLocation
+	DocumentLocation
+	RecordLocation
+	TableLocation
+	Range
+	ImageLocation
+	BoundingBox
+	RedactImageRequest
+	Color
+	RedactImageResponse
+	DeidentifyContentRequest
+	DeidentifyContentResponse
+	ReidentifyContentRequest
+	ReidentifyContentResponse
+	InspectContentRequest
+	InspectContentResponse
+	OutputStorageConfig
+	InfoTypeStats
+	InspectDataSourceDetails
+	InfoTypeDescription
+	ListInfoTypesRequest
+	ListInfoTypesResponse
+	RiskAnalysisJobConfig
+	PrivacyMetric
+	AnalyzeDataSourceRiskDetails
+	ValueFrequency
+	Value
+	QuoteInfo
+	DateTime
+	DeidentifyConfig
+	PrimitiveTransformation
+	TimePartConfig
+	CryptoHashConfig
+	ReplaceValueConfig
+	ReplaceWithInfoTypeConfig
+	RedactConfig
+	CharsToIgnore
+	CharacterMaskConfig
+	FixedSizeBucketingConfig
+	BucketingConfig
+	CryptoReplaceFfxFpeConfig
+	CryptoKey
+	TransientCryptoKey
+	UnwrappedCryptoKey
+	KmsWrappedCryptoKey
+	DateShiftConfig
+	InfoTypeTransformations
+	FieldTransformation
+	RecordTransformations
+	RecordSuppression
+	RecordCondition
+	TransformationOverview
+	TransformationSummary
+	Schedule
+	InspectTemplate
+	DeidentifyTemplate
+	Error
+	JobTrigger
+	Action
+	CreateInspectTemplateRequest
+	UpdateInspectTemplateRequest
+	GetInspectTemplateRequest
+	ListInspectTemplatesRequest
+	ListInspectTemplatesResponse
+	DeleteInspectTemplateRequest
+	CreateJobTriggerRequest
+	UpdateJobTriggerRequest
+	GetJobTriggerRequest
+	CreateDlpJobRequest
+	ListJobTriggersRequest
+	ListJobTriggersResponse
+	DeleteJobTriggerRequest
+	InspectJobConfig
+	DlpJob
+	GetDlpJobRequest
+	ListDlpJobsRequest
+	ListDlpJobsResponse
+	CancelDlpJobRequest
+	DeleteDlpJobRequest
+	CreateDeidentifyTemplateRequest
+	UpdateDeidentifyTemplateRequest
+	GetDeidentifyTemplateRequest
+	ListDeidentifyTemplatesRequest
+	ListDeidentifyTemplatesResponse
+	DeleteDeidentifyTemplateRequest
+	InfoType
+	CustomInfoType
+	FieldId
+	PartitionId
+	KindExpression
+	DatastoreOptions
+	CloudStorageOptions
+	BigQueryOptions
+	StorageConfig
+	BigQueryKey
+	DatastoreKey
+	Key
+	RecordKey
+	BigQueryTable
+*/
+package dlp
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import google_protobuf2 "github.com/golang/protobuf/ptypes/duration"
+import google_protobuf3 "github.com/golang/protobuf/ptypes/empty"
+import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask"
+import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp"
+import google_rpc "google.golang.org/genproto/googleapis/rpc/status"
+import google_type "google.golang.org/genproto/googleapis/type/date"
+import google_type1 "google.golang.org/genproto/googleapis/type/dayofweek"
+import google_type2 "google.golang.org/genproto/googleapis/type/timeofday"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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
+
+// Options describing which parts of the provided content should be scanned.
+type ContentOption int32
+
+const (
+	// Includes entire content of a file or a data stream.
+	ContentOption_CONTENT_UNSPECIFIED ContentOption = 0
+	// Text content within the data, excluding any metadata.
+	ContentOption_CONTENT_TEXT ContentOption = 1
+	// Images found in the data.
+	ContentOption_CONTENT_IMAGE ContentOption = 2
+)
+
+var ContentOption_name = map[int32]string{
+	0: "CONTENT_UNSPECIFIED",
+	1: "CONTENT_TEXT",
+	2: "CONTENT_IMAGE",
+}
+var ContentOption_value = map[string]int32{
+	"CONTENT_UNSPECIFIED": 0,
+	"CONTENT_TEXT":        1,
+	"CONTENT_IMAGE":       2,
+}
+
+func (x ContentOption) String() string {
+	return proto.EnumName(ContentOption_name, int32(x))
+}
+func (ContentOption) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+// Parts of the APIs which use certain infoTypes.
+type InfoTypeSupportedBy int32
+
+const (
+	InfoTypeSupportedBy_ENUM_TYPE_UNSPECIFIED InfoTypeSupportedBy = 0
+	// Supported by the inspect operations.
+	InfoTypeSupportedBy_INSPECT InfoTypeSupportedBy = 1
+	// Supported by the risk analysis operations.
+	InfoTypeSupportedBy_RISK_ANALYSIS InfoTypeSupportedBy = 2
+)
+
+var InfoTypeSupportedBy_name = map[int32]string{
+	0: "ENUM_TYPE_UNSPECIFIED",
+	1: "INSPECT",
+	2: "RISK_ANALYSIS",
+}
+var InfoTypeSupportedBy_value = map[string]int32{
+	"ENUM_TYPE_UNSPECIFIED": 0,
+	"INSPECT":               1,
+	"RISK_ANALYSIS":         2,
+}
+
+func (x InfoTypeSupportedBy) String() string {
+	return proto.EnumName(InfoTypeSupportedBy_name, int32(x))
+}
+func (InfoTypeSupportedBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+// Operators available for comparing the value of fields.
+type RelationalOperator int32
+
+const (
+	RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED RelationalOperator = 0
+	// Equal.
+	RelationalOperator_EQUAL_TO RelationalOperator = 1
+	// Not equal to.
+	RelationalOperator_NOT_EQUAL_TO RelationalOperator = 2
+	// Greater than.
+	RelationalOperator_GREATER_THAN RelationalOperator = 3
+	// Less than.
+	RelationalOperator_LESS_THAN RelationalOperator = 4
+	// Greater than or equals.
+	RelationalOperator_GREATER_THAN_OR_EQUALS RelationalOperator = 5
+	// Less than or equals.
+	RelationalOperator_LESS_THAN_OR_EQUALS RelationalOperator = 6
+	// Exists
+	RelationalOperator_EXISTS RelationalOperator = 7
+)
+
+var RelationalOperator_name = map[int32]string{
+	0: "RELATIONAL_OPERATOR_UNSPECIFIED",
+	1: "EQUAL_TO",
+	2: "NOT_EQUAL_TO",
+	3: "GREATER_THAN",
+	4: "LESS_THAN",
+	5: "GREATER_THAN_OR_EQUALS",
+	6: "LESS_THAN_OR_EQUALS",
+	7: "EXISTS",
+}
+var RelationalOperator_value = map[string]int32{
+	"RELATIONAL_OPERATOR_UNSPECIFIED": 0,
+	"EQUAL_TO":                        1,
+	"NOT_EQUAL_TO":                    2,
+	"GREATER_THAN":                    3,
+	"LESS_THAN":                       4,
+	"GREATER_THAN_OR_EQUALS":          5,
+	"LESS_THAN_OR_EQUALS":             6,
+	"EXISTS":                          7,
+}
+
+func (x RelationalOperator) String() string {
+	return proto.EnumName(RelationalOperator_name, int32(x))
+}
+func (RelationalOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+// An enum to represent the various type of DLP jobs.
+type DlpJobType int32
+
+const (
+	DlpJobType_DLP_JOB_TYPE_UNSPECIFIED DlpJobType = 0
+	// The job inspected Google Cloud for sensitive data.
+	DlpJobType_INSPECT_JOB DlpJobType = 1
+	// The job executed a Risk Analysis computation.
+	DlpJobType_RISK_ANALYSIS_JOB DlpJobType = 2
+)
+
+var DlpJobType_name = map[int32]string{
+	0: "DLP_JOB_TYPE_UNSPECIFIED",
+	1: "INSPECT_JOB",
+	2: "RISK_ANALYSIS_JOB",
+}
+var DlpJobType_value = map[string]int32{
+	"DLP_JOB_TYPE_UNSPECIFIED": 0,
+	"INSPECT_JOB":              1,
+	"RISK_ANALYSIS_JOB":        2,
+}
+
+func (x DlpJobType) String() string {
+	return proto.EnumName(DlpJobType_name, int32(x))
+}
+func (DlpJobType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+type ByteContentItem_BytesType int32
+
+const (
+	ByteContentItem_BYTES_TYPE_UNSPECIFIED ByteContentItem_BytesType = 0
+	ByteContentItem_IMAGE_JPEG             ByteContentItem_BytesType = 1
+	ByteContentItem_IMAGE_BMP              ByteContentItem_BytesType = 2
+	ByteContentItem_IMAGE_PNG              ByteContentItem_BytesType = 3
+	ByteContentItem_IMAGE_SVG              ByteContentItem_BytesType = 4
+	ByteContentItem_TEXT_UTF8              ByteContentItem_BytesType = 5
+)
+
+var ByteContentItem_BytesType_name = map[int32]string{
+	0: "BYTES_TYPE_UNSPECIFIED",
+	1: "IMAGE_JPEG",
+	2: "IMAGE_BMP",
+	3: "IMAGE_PNG",
+	4: "IMAGE_SVG",
+	5: "TEXT_UTF8",
+}
+var ByteContentItem_BytesType_value = map[string]int32{
+	"BYTES_TYPE_UNSPECIFIED": 0,
+	"IMAGE_JPEG":             1,
+	"IMAGE_BMP":              2,
+	"IMAGE_PNG":              3,
+	"IMAGE_SVG":              4,
+	"TEXT_UTF8":              5,
+}
+
+func (x ByteContentItem_BytesType) String() string {
+	return proto.EnumName(ByteContentItem_BytesType_name, int32(x))
+}
+func (ByteContentItem_BytesType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} }
+
+// Predefined schemas for storing findings.
+type OutputStorageConfig_OutputSchema int32
+
+const (
+	OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED OutputStorageConfig_OutputSchema = 0
+	// Basic schema including only `info_type`, `quote`, `certainty`, and
+	// `timestamp`.
+	OutputStorageConfig_BASIC_COLUMNS OutputStorageConfig_OutputSchema = 1
+	// Schema tailored to findings from scanning Google Cloud Storage.
+	OutputStorageConfig_GCS_COLUMNS OutputStorageConfig_OutputSchema = 2
+	// Schema tailored to findings from scanning Google Datastore.
+	OutputStorageConfig_DATASTORE_COLUMNS OutputStorageConfig_OutputSchema = 3
+	// Schema tailored to findings from scanning Google BigQuery.
+	OutputStorageConfig_BIG_QUERY_COLUMNS OutputStorageConfig_OutputSchema = 4
+	// Schema containing all columns.
+	OutputStorageConfig_ALL_COLUMNS OutputStorageConfig_OutputSchema = 5
+)
+
+var OutputStorageConfig_OutputSchema_name = map[int32]string{
+	0: "OUTPUT_SCHEMA_UNSPECIFIED",
+	1: "BASIC_COLUMNS",
+	2: "GCS_COLUMNS",
+	3: "DATASTORE_COLUMNS",
+	4: "BIG_QUERY_COLUMNS",
+	5: "ALL_COLUMNS",
+}
+var OutputStorageConfig_OutputSchema_value = map[string]int32{
+	"OUTPUT_SCHEMA_UNSPECIFIED": 0,
+	"BASIC_COLUMNS":             1,
+	"GCS_COLUMNS":               2,
+	"DATASTORE_COLUMNS":         3,
+	"BIG_QUERY_COLUMNS":         4,
+	"ALL_COLUMNS":               5,
+}
+
+func (x OutputStorageConfig_OutputSchema) String() string {
+	return proto.EnumName(OutputStorageConfig_OutputSchema_name, int32(x))
+}
+func (OutputStorageConfig_OutputSchema) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{23, 0}
+}
+
+type TimePartConfig_TimePart int32
+
+const (
+	TimePartConfig_TIME_PART_UNSPECIFIED TimePartConfig_TimePart = 0
+	// [0-9999]
+	TimePartConfig_YEAR TimePartConfig_TimePart = 1
+	// [1-12]
+	TimePartConfig_MONTH TimePartConfig_TimePart = 2
+	// [1-31]
+	TimePartConfig_DAY_OF_MONTH TimePartConfig_TimePart = 3
+	// [1-7]
+	TimePartConfig_DAY_OF_WEEK TimePartConfig_TimePart = 4
+	// [1-52]
+	TimePartConfig_WEEK_OF_YEAR TimePartConfig_TimePart = 5
+	// [0-23]
+	TimePartConfig_HOUR_OF_DAY TimePartConfig_TimePart = 6
+)
+
+var TimePartConfig_TimePart_name = map[int32]string{
+	0: "TIME_PART_UNSPECIFIED",
+	1: "YEAR",
+	2: "MONTH",
+	3: "DAY_OF_MONTH",
+	4: "DAY_OF_WEEK",
+	5: "WEEK_OF_YEAR",
+	6: "HOUR_OF_DAY",
+}
+var TimePartConfig_TimePart_value = map[string]int32{
+	"TIME_PART_UNSPECIFIED": 0,
+	"YEAR":                  1,
+	"MONTH":                 2,
+	"DAY_OF_MONTH":          3,
+	"DAY_OF_WEEK":           4,
+	"WEEK_OF_YEAR":          5,
+	"HOUR_OF_DAY":           6,
+}
+
+func (x TimePartConfig_TimePart) String() string {
+	return proto.EnumName(TimePartConfig_TimePart_name, int32(x))
+}
+func (TimePartConfig_TimePart) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{38, 0} }
+
+type CharsToIgnore_CommonCharsToIgnore int32
+
+const (
+	CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED CharsToIgnore_CommonCharsToIgnore = 0
+	// 0-9
+	CharsToIgnore_NUMERIC CharsToIgnore_CommonCharsToIgnore = 1
+	// A-Z
+	CharsToIgnore_ALPHA_UPPER_CASE CharsToIgnore_CommonCharsToIgnore = 2
+	// a-z
+	CharsToIgnore_ALPHA_LOWER_CASE CharsToIgnore_CommonCharsToIgnore = 3
+	// US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
+	CharsToIgnore_PUNCTUATION CharsToIgnore_CommonCharsToIgnore = 4
+	// Whitespace character, one of [ \t\n\x0B\f\r]
+	CharsToIgnore_WHITESPACE CharsToIgnore_CommonCharsToIgnore = 5
+)
+
+var CharsToIgnore_CommonCharsToIgnore_name = map[int32]string{
+	0: "COMMON_CHARS_TO_IGNORE_UNSPECIFIED",
+	1: "NUMERIC",
+	2: "ALPHA_UPPER_CASE",
+	3: "ALPHA_LOWER_CASE",
+	4: "PUNCTUATION",
+	5: "WHITESPACE",
+}
+var CharsToIgnore_CommonCharsToIgnore_value = map[string]int32{
+	"COMMON_CHARS_TO_IGNORE_UNSPECIFIED": 0,
+	"NUMERIC":          1,
+	"ALPHA_UPPER_CASE": 2,
+	"ALPHA_LOWER_CASE": 3,
+	"PUNCTUATION":      4,
+	"WHITESPACE":       5,
+}
+
+func (x CharsToIgnore_CommonCharsToIgnore) String() string {
+	return proto.EnumName(CharsToIgnore_CommonCharsToIgnore_name, int32(x))
+}
+func (CharsToIgnore_CommonCharsToIgnore) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{43, 0}
+}
+
+// These are commonly used subsets of the alphabet that the FFX mode
+// natively supports. In the algorithm, the alphabet is selected using
+// the "radix". Therefore each corresponds to particular radix.
+type CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet int32
+
+const (
+	CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 0
+	// [0-9] (radix of 10)
+	CryptoReplaceFfxFpeConfig_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 1
+	// [0-9A-F] (radix of 16)
+	CryptoReplaceFfxFpeConfig_HEXADECIMAL CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 2
+	// [0-9A-Z] (radix of 36)
+	CryptoReplaceFfxFpeConfig_UPPER_CASE_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 3
+	// [0-9A-Za-z] (radix of 62)
+	CryptoReplaceFfxFpeConfig_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 4
+)
+
+var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name = map[int32]string{
+	0: "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED",
+	1: "NUMERIC",
+	2: "HEXADECIMAL",
+	3: "UPPER_CASE_ALPHA_NUMERIC",
+	4: "ALPHA_NUMERIC",
+}
+var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value = map[string]int32{
+	"FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED": 0,
+	"NUMERIC":                  1,
+	"HEXADECIMAL":              2,
+	"UPPER_CASE_ALPHA_NUMERIC": 3,
+	"ALPHA_NUMERIC":            4,
+}
+
+func (x CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) String() string {
+	return proto.EnumName(CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, int32(x))
+}
+func (CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{47, 0}
+}
+
+type RecordCondition_Expressions_LogicalOperator int32
+
+const (
+	RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED RecordCondition_Expressions_LogicalOperator = 0
+	RecordCondition_Expressions_AND                          RecordCondition_Expressions_LogicalOperator = 1
+)
+
+var RecordCondition_Expressions_LogicalOperator_name = map[int32]string{
+	0: "LOGICAL_OPERATOR_UNSPECIFIED",
+	1: "AND",
+}
+var RecordCondition_Expressions_LogicalOperator_value = map[string]int32{
+	"LOGICAL_OPERATOR_UNSPECIFIED": 0,
+	"AND": 1,
+}
+
+func (x RecordCondition_Expressions_LogicalOperator) String() string {
+	return proto.EnumName(RecordCondition_Expressions_LogicalOperator_name, int32(x))
+}
+func (RecordCondition_Expressions_LogicalOperator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{57, 2, 0}
+}
+
+// Possible outcomes of transformations.
+type TransformationSummary_TransformationResultCode int32
+
+const (
+	TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED TransformationSummary_TransformationResultCode = 0
+	TransformationSummary_SUCCESS                                TransformationSummary_TransformationResultCode = 1
+	TransformationSummary_ERROR                                  TransformationSummary_TransformationResultCode = 2
+)
+
+var TransformationSummary_TransformationResultCode_name = map[int32]string{
+	0: "TRANSFORMATION_RESULT_CODE_UNSPECIFIED",
+	1: "SUCCESS",
+	2: "ERROR",
+}
+var TransformationSummary_TransformationResultCode_value = map[string]int32{
+	"TRANSFORMATION_RESULT_CODE_UNSPECIFIED": 0,
+	"SUCCESS": 1,
+	"ERROR":   2,
+}
+
+func (x TransformationSummary_TransformationResultCode) String() string {
+	return proto.EnumName(TransformationSummary_TransformationResultCode_name, int32(x))
+}
+func (TransformationSummary_TransformationResultCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{59, 0}
+}
+
+// Whether the trigger is currently active. If PAUSED or CANCELLED, no jobs
+// will be created with this configuration. The service may automatically
+// pause triggers experiencing frequent errors. To restart a job, set the
+// status to HEALTHY after correcting user errors.
+type JobTrigger_Status int32
+
+const (
+	JobTrigger_STATUS_UNSPECIFIED JobTrigger_Status = 0
+	// Trigger is healthy.
+	JobTrigger_HEALTHY JobTrigger_Status = 1
+	// Trigger is temporarily paused.
+	JobTrigger_PAUSED JobTrigger_Status = 2
+	// Trigger is cancelled and can not be resumed.
+	JobTrigger_CANCELLED JobTrigger_Status = 3
+)
+
+var JobTrigger_Status_name = map[int32]string{
+	0: "STATUS_UNSPECIFIED",
+	1: "HEALTHY",
+	2: "PAUSED",
+	3: "CANCELLED",
+}
+var JobTrigger_Status_value = map[string]int32{
+	"STATUS_UNSPECIFIED": 0,
+	"HEALTHY":            1,
+	"PAUSED":             2,
+	"CANCELLED":          3,
+}
+
+func (x JobTrigger_Status) String() string {
+	return proto.EnumName(JobTrigger_Status_name, int32(x))
+}
+func (JobTrigger_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{64, 0} }
+
+type DlpJob_JobState int32
+
+const (
+	DlpJob_JOB_STATE_UNSPECIFIED DlpJob_JobState = 0
+	// The job has not yet started.
+	DlpJob_PENDING DlpJob_JobState = 1
+	// The job is currently running.
+	DlpJob_RUNNING DlpJob_JobState = 2
+	// The job is no longer running.
+	DlpJob_DONE DlpJob_JobState = 3
+	// The job was canceled before it could complete.
+	DlpJob_CANCELED DlpJob_JobState = 4
+	// The job had an error and did not complete.
+	DlpJob_FAILED DlpJob_JobState = 5
+)
+
+var DlpJob_JobState_name = map[int32]string{
+	0: "JOB_STATE_UNSPECIFIED",
+	1: "PENDING",
+	2: "RUNNING",
+	3: "DONE",
+	4: "CANCELED",
+	5: "FAILED",
+}
+var DlpJob_JobState_value = map[string]int32{
+	"JOB_STATE_UNSPECIFIED": 0,
+	"PENDING":               1,
+	"RUNNING":               2,
+	"DONE":                  3,
+	"CANCELED":              4,
+	"FAILED":                5,
+}
+
+func (x DlpJob_JobState) String() string {
+	return proto.EnumName(DlpJob_JobState_name, int32(x))
+}
+func (DlpJob_JobState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{80, 0} }
+
+// Configuration description of the scanning process.
+// When used with redactContent only info_types and min_likelihood are currently
+// used.
+type InspectConfig struct {
+	// Restricts what info_types to look for. The values must correspond to
+	// InfoType values returned by ListInfoTypes or found in documentation.
+	// Empty info_types runs all enabled detectors.
+	InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
+	// Only returns findings equal or above this threshold. The default is
+	// POSSIBLE.
+	MinLikelihood Likelihood                   `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2.Likelihood" json:"min_likelihood,omitempty"`
+	Limits        *InspectConfig_FindingLimits `protobuf:"bytes,3,opt,name=limits" json:"limits,omitempty"`
+	// When true, a contextual quote from the data that triggered a finding is
+	// included in the response; see Finding.quote.
+	IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"`
+	// When true, excludes type information of the findings.
+	ExcludeInfoTypes bool `protobuf:"varint,5,opt,name=exclude_info_types,json=excludeInfoTypes" json:"exclude_info_types,omitempty"`
+	// Custom infoTypes provided by the user.
+	CustomInfoTypes []*CustomInfoType `protobuf:"bytes,6,rep,name=custom_info_types,json=customInfoTypes" json:"custom_info_types,omitempty"`
+	// List of options defining data content to scan.
+	// If empty, text, images, and other content will be included.
+	ContentOptions []ContentOption `protobuf:"varint,8,rep,packed,name=content_options,json=contentOptions,enum=google.privacy.dlp.v2.ContentOption" json:"content_options,omitempty"`
+}
+
+func (m *InspectConfig) Reset()                    { *m = InspectConfig{} }
+func (m *InspectConfig) String() string            { return proto.CompactTextString(m) }
+func (*InspectConfig) ProtoMessage()               {}
+func (*InspectConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *InspectConfig) GetInfoTypes() []*InfoType {
+	if m != nil {
+		return m.InfoTypes
+	}
+	return nil
+}
+
+func (m *InspectConfig) GetMinLikelihood() Likelihood {
+	if m != nil {
+		return m.MinLikelihood
+	}
+	return Likelihood_LIKELIHOOD_UNSPECIFIED
+}
+
+func (m *InspectConfig) GetLimits() *InspectConfig_FindingLimits {
+	if m != nil {
+		return m.Limits
+	}
+	return nil
+}
+
+func (m *InspectConfig) GetIncludeQuote() bool {
+	if m != nil {
+		return m.IncludeQuote
+	}
+	return false
+}
+
+func (m *InspectConfig) GetExcludeInfoTypes() bool {
+	if m != nil {
+		return m.ExcludeInfoTypes
+	}
+	return false
+}
+
+func (m *InspectConfig) GetCustomInfoTypes() []*CustomInfoType {
+	if m != nil {
+		return m.CustomInfoTypes
+	}
+	return nil
+}
+
+func (m *InspectConfig) GetContentOptions() []ContentOption {
+	if m != nil {
+		return m.ContentOptions
+	}
+	return nil
+}
+
+type InspectConfig_FindingLimits struct {
+	// Max number of findings that will be returned for each item scanned.
+	// When set within `InspectDataSourceRequest`,
+	// the maximum returned is 1000 regardless if this is set higher.
+	// When set within `InspectContentRequest`, this field is ignored.
+	MaxFindingsPerItem int32 `protobuf:"varint,1,opt,name=max_findings_per_item,json=maxFindingsPerItem" json:"max_findings_per_item,omitempty"`
+	// Max number of findings that will be returned per request/job.
+	// When set within `InspectContentRequest`, the maximum returned is 1000
+	// regardless if this is set higher.
+	MaxFindingsPerRequest int32 `protobuf:"varint,2,opt,name=max_findings_per_request,json=maxFindingsPerRequest" json:"max_findings_per_request,omitempty"`
+	// Configuration of findings limit given for specified infoTypes.
+	MaxFindingsPerInfoType []*InspectConfig_FindingLimits_InfoTypeLimit `protobuf:"bytes,3,rep,name=max_findings_per_info_type,json=maxFindingsPerInfoType" json:"max_findings_per_info_type,omitempty"`
+}
+
+func (m *InspectConfig_FindingLimits) Reset()                    { *m = InspectConfig_FindingLimits{} }
+func (m *InspectConfig_FindingLimits) String() string            { return proto.CompactTextString(m) }
+func (*InspectConfig_FindingLimits) ProtoMessage()               {}
+func (*InspectConfig_FindingLimits) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }
+
+func (m *InspectConfig_FindingLimits) GetMaxFindingsPerItem() int32 {
+	if m != nil {
+		return m.MaxFindingsPerItem
+	}
+	return 0
+}
+
+func (m *InspectConfig_FindingLimits) GetMaxFindingsPerRequest() int32 {
+	if m != nil {
+		return m.MaxFindingsPerRequest
+	}
+	return 0
+}
+
+func (m *InspectConfig_FindingLimits) GetMaxFindingsPerInfoType() []*InspectConfig_FindingLimits_InfoTypeLimit {
+	if m != nil {
+		return m.MaxFindingsPerInfoType
+	}
+	return nil
+}
+
+// Max findings configuration per infoType, per content item or long
+// running DlpJob.
+type InspectConfig_FindingLimits_InfoTypeLimit struct {
+	// Type of information the findings limit applies to. Only one limit per
+	// info_type should be provided. If InfoTypeLimit does not have an
+	// info_type, the DLP API applies the limit against all info_types that
+	// are found but not specified in another InfoTypeLimit.
+	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
+	// Max findings limit for the given infoType.
+	MaxFindings int32 `protobuf:"varint,2,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"`
+}
+
+func (m *InspectConfig_FindingLimits_InfoTypeLimit) Reset() {
+	*m = InspectConfig_FindingLimits_InfoTypeLimit{}
+}
+func (m *InspectConfig_FindingLimits_InfoTypeLimit) String() string { return proto.CompactTextString(m) }
+func (*InspectConfig_FindingLimits_InfoTypeLimit) ProtoMessage()    {}
+func (*InspectConfig_FindingLimits_InfoTypeLimit) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{0, 0, 0}
+}
+
+func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetInfoType() *InfoType {
+	if m != nil {
+		return m.InfoType
+	}
+	return nil
+}
+
+func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetMaxFindings() int32 {
+	if m != nil {
+		return m.MaxFindings
+	}
+	return 0
+}
+
+// Container for bytes to inspect or redact.
+type ByteContentItem struct {
+	// The type of data stored in the bytes string. Default will be TEXT_UTF8.
+	Type ByteContentItem_BytesType `protobuf:"varint,1,opt,name=type,enum=google.privacy.dlp.v2.ByteContentItem_BytesType" json:"type,omitempty"`
+	// Content data to inspect or redact.
+	Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *ByteContentItem) Reset()                    { *m = ByteContentItem{} }
+func (m *ByteContentItem) String() string            { return proto.CompactTextString(m) }
+func (*ByteContentItem) ProtoMessage()               {}
+func (*ByteContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *ByteContentItem) GetType() ByteContentItem_BytesType {
+	if m != nil {
+		return m.Type
+	}
+	return ByteContentItem_BYTES_TYPE_UNSPECIFIED
+}
+
+func (m *ByteContentItem) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Container structure for the content to inspect.
+type ContentItem struct {
+	// Data of the item either in the byte array or UTF-8 string form, or table.
+	//
+	// Types that are valid to be assigned to DataItem:
+	//	*ContentItem_Value
+	//	*ContentItem_Table
+	//	*ContentItem_ByteItem
+	DataItem isContentItem_DataItem `protobuf_oneof:"data_item"`
+}
+
+func (m *ContentItem) Reset()                    { *m = ContentItem{} }
+func (m *ContentItem) String() string            { return proto.CompactTextString(m) }
+func (*ContentItem) ProtoMessage()               {}
+func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+type isContentItem_DataItem interface {
+	isContentItem_DataItem()
+}
+
+type ContentItem_Value struct {
+	Value string `protobuf:"bytes,3,opt,name=value,oneof"`
+}
+type ContentItem_Table struct {
+	Table *Table `protobuf:"bytes,4,opt,name=table,oneof"`
+}
+type ContentItem_ByteItem struct {
+	ByteItem *ByteContentItem `protobuf:"bytes,5,opt,name=byte_item,json=byteItem,oneof"`
+}
+
+func (*ContentItem_Value) isContentItem_DataItem()    {}
+func (*ContentItem_Table) isContentItem_DataItem()    {}
+func (*ContentItem_ByteItem) isContentItem_DataItem() {}
+
+func (m *ContentItem) GetDataItem() isContentItem_DataItem {
+	if m != nil {
+		return m.DataItem
+	}
+	return nil
+}
+
+func (m *ContentItem) GetValue() string {
+	if x, ok := m.GetDataItem().(*ContentItem_Value); ok {
+		return x.Value
+	}
+	return ""
+}
+
+func (m *ContentItem) GetTable() *Table {
+	if x, ok := m.GetDataItem().(*ContentItem_Table); ok {
+		return x.Table
+	}
+	return nil
+}
+
+func (m *ContentItem) GetByteItem() *ByteContentItem {
+	if x, ok := m.GetDataItem().(*ContentItem_ByteItem); ok {
+		return x.ByteItem
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{
+		(*ContentItem_Value)(nil),
+		(*ContentItem_Table)(nil),
+		(*ContentItem_ByteItem)(nil),
+	}
+}
+
+func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ContentItem)
+	// data_item
+	switch x := m.DataItem.(type) {
+	case *ContentItem_Value:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Value)
+	case *ContentItem_Table:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Table); err != nil {
+			return err
+		}
+	case *ContentItem_ByteItem:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ByteItem); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ContentItem)
+	switch tag {
+	case 3: // data_item.value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.DataItem = &ContentItem_Value{x}
+		return true, err
+	case 4: // data_item.table
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Table)
+		err := b.DecodeMessage(msg)
+		m.DataItem = &ContentItem_Table{msg}
+		return true, err
+	case 5: // data_item.byte_item
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ByteContentItem)
+		err := b.DecodeMessage(msg)
+		m.DataItem = &ContentItem_ByteItem{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ContentItem_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ContentItem)
+	// data_item
+	switch x := m.DataItem.(type) {
+	case *ContentItem_Value:
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Value)))
+		n += len(x.Value)
+	case *ContentItem_Table:
+		s := proto.Size(x.Table)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ContentItem_ByteItem:
+		s := proto.Size(x.ByteItem)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Structured content to inspect. Up to 50,000 `Value`s per request allowed.
+type Table struct {
+	Headers []*FieldId   `protobuf:"bytes,1,rep,name=headers" json:"headers,omitempty"`
+	Rows    []*Table_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"`
+}
+
+func (m *Table) Reset()                    { *m = Table{} }
+func (m *Table) String() string            { return proto.CompactTextString(m) }
+func (*Table) ProtoMessage()               {}
+func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *Table) GetHeaders() []*FieldId {
+	if m != nil {
+		return m.Headers
+	}
+	return nil
+}
+
+func (m *Table) GetRows() []*Table_Row {
+	if m != nil {
+		return m.Rows
+	}
+	return nil
+}
+
+type Table_Row struct {
+	Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"`
+}
+
+func (m *Table_Row) Reset()                    { *m = Table_Row{} }
+func (m *Table_Row) String() string            { return proto.CompactTextString(m) }
+func (*Table_Row) ProtoMessage()               {}
+func (*Table_Row) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} }
+
+func (m *Table_Row) GetValues() []*Value {
+	if m != nil {
+		return m.Values
+	}
+	return nil
+}
+
+// All the findings for a single scanned item.
+type InspectResult struct {
+	// List of findings for an item.
+	Findings []*Finding `protobuf:"bytes,1,rep,name=findings" json:"findings,omitempty"`
+	// If true, then this item might have more findings than were returned,
+	// and the findings returned are an arbitrary subset of all findings.
+	// The findings list might be truncated because the input items were too
+	// large, or because the server reached the maximum amount of resources
+	// allowed for a single API call. For best results, divide the input into
+	// smaller batches.
+	FindingsTruncated bool `protobuf:"varint,2,opt,name=findings_truncated,json=findingsTruncated" json:"findings_truncated,omitempty"`
+}
+
+func (m *InspectResult) Reset()                    { *m = InspectResult{} }
+func (m *InspectResult) String() string            { return proto.CompactTextString(m) }
+func (*InspectResult) ProtoMessage()               {}
+func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (m *InspectResult) GetFindings() []*Finding {
+	if m != nil {
+		return m.Findings
+	}
+	return nil
+}
+
+func (m *InspectResult) GetFindingsTruncated() bool {
+	if m != nil {
+		return m.FindingsTruncated
+	}
+	return false
+}
+
+// Represents a piece of potentially sensitive content.
+type Finding struct {
+	// The content that was found. Even if the content is not textual, it
+	// may be converted to a textual representation here.
+	// Provided if requested by the `InspectConfig` and the finding is
+	// less than or equal to 4096 bytes long. If the finding exceeds 4096 bytes
+	// in length, the quote may be omitted.
+	Quote string `protobuf:"bytes,1,opt,name=quote" json:"quote,omitempty"`
+	// The type of content that might have been found.
+	// Provided if requested by the `InspectConfig`.
+	InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
+	// Estimate of how likely it is that the `info_type` is correct.
+	Likelihood Likelihood `protobuf:"varint,3,opt,name=likelihood,enum=google.privacy.dlp.v2.Likelihood" json:"likelihood,omitempty"`
+	// Where the content was found.
+	Location *Location `protobuf:"bytes,4,opt,name=location" json:"location,omitempty"`
+	// Timestamp when finding was detected.
+	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
+	// Contains data parsed from quotes. Only populated if include_quote was set
+	// to true and a supported infoType was requested. Currently supported
+	// infoTypes: DATE, DATE_OF_BIRTH and TIME.
+	QuoteInfo *QuoteInfo `protobuf:"bytes,7,opt,name=quote_info,json=quoteInfo" json:"quote_info,omitempty"`
+}
+
+func (m *Finding) Reset()                    { *m = Finding{} }
+func (m *Finding) String() string            { return proto.CompactTextString(m) }
+func (*Finding) ProtoMessage()               {}
+func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *Finding) GetQuote() string {
+	if m != nil {
+		return m.Quote
+	}
+	return ""
+}
+
+func (m *Finding) GetInfoType() *InfoType {
+	if m != nil {
+		return m.InfoType
+	}
+	return nil
+}
+
+func (m *Finding) GetLikelihood() Likelihood {
+	if m != nil {
+		return m.Likelihood
+	}
+	return Likelihood_LIKELIHOOD_UNSPECIFIED
+}
+
+func (m *Finding) GetLocation() *Location {
+	if m != nil {
+		return m.Location
+	}
+	return nil
+}
+
+func (m *Finding) GetCreateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *Finding) GetQuoteInfo() *QuoteInfo {
+	if m != nil {
+		return m.QuoteInfo
+	}
+	return nil
+}
+
+// Specifies the location of the finding.
+type Location struct {
+	// Zero-based byte offsets delimiting the finding.
+	// These are relative to the finding's containing element.
+	// Note that when the content is not textual, this references
+	// the UTF-8 encoded textual representation of the content.
+	// Omitted if content is an image.
+	ByteRange *Range `protobuf:"bytes,1,opt,name=byte_range,json=byteRange" json:"byte_range,omitempty"`
+	// Unicode character offsets delimiting the finding.
+	// These are relative to the finding's containing element.
+	// Provided when the content is text.
+	CodepointRange *Range `protobuf:"bytes,2,opt,name=codepoint_range,json=codepointRange" json:"codepoint_range,omitempty"`
+	// List of nested objects pointing to the precise location of the finding
+	// within the file or record.
+	ContentLocations []*ContentLocation `protobuf:"bytes,7,rep,name=content_locations,json=contentLocations" json:"content_locations,omitempty"`
+}
+
+func (m *Location) Reset()                    { *m = Location{} }
+func (m *Location) String() string            { return proto.CompactTextString(m) }
+func (*Location) ProtoMessage()               {}
+func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+func (m *Location) GetByteRange() *Range {
+	if m != nil {
+		return m.ByteRange
+	}
+	return nil
+}
+
+func (m *Location) GetCodepointRange() *Range {
+	if m != nil {
+		return m.CodepointRange
+	}
+	return nil
+}
+
+func (m *Location) GetContentLocations() []*ContentLocation {
+	if m != nil {
+		return m.ContentLocations
+	}
+	return nil
+}
+
+// Findings container location data.
+type ContentLocation struct {
+	// Name of the container where the finding is located.
+	// The top level name is the source file name or table name. Nested names
+	// could be absent if the embedded object has no string identifier
+	// (for an example an image contained within a document).
+	ContainerName string `protobuf:"bytes,1,opt,name=container_name,json=containerName" json:"container_name,omitempty"`
+	// Type of the container within the file with location of the finding.
+	//
+	// Types that are valid to be assigned to Location:
+	//	*ContentLocation_RecordLocation
+	//	*ContentLocation_ImageLocation
+	//	*ContentLocation_DocumentLocation
+	Location isContentLocation_Location `protobuf_oneof:"location"`
+	// Findings container modification timestamp, if applicable.
+	// For Google Cloud Storage contains last file modification timestamp.
+	// For BigQuery table contains last_modified_time property.
+	// For Datastore - not populated.
+	ContainerTimestamp *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=container_timestamp,json=containerTimestamp" json:"container_timestamp,omitempty"`
+	// Findings container version, if available
+	// ("generation" for Google Cloud Storage).
+	ContainerVersion string `protobuf:"bytes,7,opt,name=container_version,json=containerVersion" json:"container_version,omitempty"`
+}
+
+func (m *ContentLocation) Reset()                    { *m = ContentLocation{} }
+func (m *ContentLocation) String() string            { return proto.CompactTextString(m) }
+func (*ContentLocation) ProtoMessage()               {}
+func (*ContentLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+type isContentLocation_Location interface {
+	isContentLocation_Location()
+}
+
+type ContentLocation_RecordLocation struct {
+	RecordLocation *RecordLocation `protobuf:"bytes,2,opt,name=record_location,json=recordLocation,oneof"`
+}
+type ContentLocation_ImageLocation struct {
+	ImageLocation *ImageLocation `protobuf:"bytes,3,opt,name=image_location,json=imageLocation,oneof"`
+}
+type ContentLocation_DocumentLocation struct {
+	DocumentLocation *DocumentLocation `protobuf:"bytes,5,opt,name=document_location,json=documentLocation,oneof"`
+}
+
+func (*ContentLocation_RecordLocation) isContentLocation_Location()   {}
+func (*ContentLocation_ImageLocation) isContentLocation_Location()    {}
+func (*ContentLocation_DocumentLocation) isContentLocation_Location() {}
+
+func (m *ContentLocation) GetLocation() isContentLocation_Location {
+	if m != nil {
+		return m.Location
+	}
+	return nil
+}
+
+func (m *ContentLocation) GetContainerName() string {
+	if m != nil {
+		return m.ContainerName
+	}
+	return ""
+}
+
+func (m *ContentLocation) GetRecordLocation() *RecordLocation {
+	if x, ok := m.GetLocation().(*ContentLocation_RecordLocation); ok {
+		return x.RecordLocation
+	}
+	return nil
+}
+
+func (m *ContentLocation) GetImageLocation() *ImageLocation {
+	if x, ok := m.GetLocation().(*ContentLocation_ImageLocation); ok {
+		return x.ImageLocation
+	}
+	return nil
+}
+
+func (m *ContentLocation) GetDocumentLocation() *DocumentLocation {
+	if x, ok := m.GetLocation().(*ContentLocation_DocumentLocation); ok {
+		return x.DocumentLocation
+	}
+	return nil
+}
+
+func (m *ContentLocation) GetContainerTimestamp() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.ContainerTimestamp
+	}
+	return nil
+}
+
+func (m *ContentLocation) GetContainerVersion() string {
+	if m != nil {
+		return m.ContainerVersion
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ContentLocation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ContentLocation_OneofMarshaler, _ContentLocation_OneofUnmarshaler, _ContentLocation_OneofSizer, []interface{}{
+		(*ContentLocation_RecordLocation)(nil),
+		(*ContentLocation_ImageLocation)(nil),
+		(*ContentLocation_DocumentLocation)(nil),
+	}
+}
+
+func _ContentLocation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ContentLocation)
+	// location
+	switch x := m.Location.(type) {
+	case *ContentLocation_RecordLocation:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RecordLocation); err != nil {
+			return err
+		}
+	case *ContentLocation_ImageLocation:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ImageLocation); err != nil {
+			return err
+		}
+	case *ContentLocation_DocumentLocation:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DocumentLocation); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ContentLocation.Location has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ContentLocation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ContentLocation)
+	switch tag {
+	case 2: // location.record_location
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(RecordLocation)
+		err := b.DecodeMessage(msg)
+		m.Location = &ContentLocation_RecordLocation{msg}
+		return true, err
+	case 3: // location.image_location
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ImageLocation)
+		err := b.DecodeMessage(msg)
+		m.Location = &ContentLocation_ImageLocation{msg}
+		return true, err
+	case 5: // location.document_location
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DocumentLocation)
+		err := b.DecodeMessage(msg)
+		m.Location = &ContentLocation_DocumentLocation{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ContentLocation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ContentLocation)
+	// location
+	switch x := m.Location.(type) {
+	case *ContentLocation_RecordLocation:
+		s := proto.Size(x.RecordLocation)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ContentLocation_ImageLocation:
+		s := proto.Size(x.ImageLocation)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ContentLocation_DocumentLocation:
+		s := proto.Size(x.DocumentLocation)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Location of a finding within a document.
+type DocumentLocation struct {
+	// Offset of the line, from the beginning of the file, where the finding
+	// is located.
+	FileOffset int64 `protobuf:"varint,1,opt,name=file_offset,json=fileOffset" json:"file_offset,omitempty"`
+}
+
+func (m *DocumentLocation) Reset()                    { *m = DocumentLocation{} }
+func (m *DocumentLocation) String() string            { return proto.CompactTextString(m) }
+func (*DocumentLocation) ProtoMessage()               {}
+func (*DocumentLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+func (m *DocumentLocation) GetFileOffset() int64 {
+	if m != nil {
+		return m.FileOffset
+	}
+	return 0
+}
+
+// Location of a finding within a row or record.
+type RecordLocation struct {
+	// Key of the finding.
+	RecordKey *RecordKey `protobuf:"bytes,1,opt,name=record_key,json=recordKey" json:"record_key,omitempty"`
+	// Field id of the field containing the finding.
+	FieldId *FieldId `protobuf:"bytes,2,opt,name=field_id,json=fieldId" json:"field_id,omitempty"`
+	// Location within a `ContentItem.Table`.
+	TableLocation *TableLocation `protobuf:"bytes,3,opt,name=table_location,json=tableLocation" json:"table_location,omitempty"`
+}
+
+func (m *RecordLocation) Reset()                    { *m = RecordLocation{} }
+func (m *RecordLocation) String() string            { return proto.CompactTextString(m) }
+func (*RecordLocation) ProtoMessage()               {}
+func (*RecordLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+func (m *RecordLocation) GetRecordKey() *RecordKey {
+	if m != nil {
+		return m.RecordKey
+	}
+	return nil
+}
+
+func (m *RecordLocation) GetFieldId() *FieldId {
+	if m != nil {
+		return m.FieldId
+	}
+	return nil
+}
+
+func (m *RecordLocation) GetTableLocation() *TableLocation {
+	if m != nil {
+		return m.TableLocation
+	}
+	return nil
+}
+
+// Location of a finding within a table.
+type TableLocation struct {
+	// The zero-based index of the row where the finding is located.
+	RowIndex int64 `protobuf:"varint,1,opt,name=row_index,json=rowIndex" json:"row_index,omitempty"`
+}
+
+func (m *TableLocation) Reset()                    { *m = TableLocation{} }
+func (m *TableLocation) String() string            { return proto.CompactTextString(m) }
+func (*TableLocation) ProtoMessage()               {}
+func (*TableLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+
+func (m *TableLocation) GetRowIndex() int64 {
+	if m != nil {
+		return m.RowIndex
+	}
+	return 0
+}
+
+// Generic half-open interval [start, end)
+type Range struct {
+	// Index of the first character of the range (inclusive).
+	Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+	// Index of the last character of the range (exclusive).
+	End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+}
+
+func (m *Range) Reset()                    { *m = Range{} }
+func (m *Range) String() string            { return proto.CompactTextString(m) }
+func (*Range) ProtoMessage()               {}
+func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+
+func (m *Range) GetStart() int64 {
+	if m != nil {
+		return m.Start
+	}
+	return 0
+}
+
+func (m *Range) GetEnd() int64 {
+	if m != nil {
+		return m.End
+	}
+	return 0
+}
+
+// Location of the finding within an image.
+type ImageLocation struct {
+	// Bounding boxes locating the pixels within the image containing the finding.
+	BoundingBoxes []*BoundingBox `protobuf:"bytes,1,rep,name=bounding_boxes,json=boundingBoxes" json:"bounding_boxes,omitempty"`
+}
+
+func (m *ImageLocation) Reset()                    { *m = ImageLocation{} }
+func (m *ImageLocation) String() string            { return proto.CompactTextString(m) }
+func (*ImageLocation) ProtoMessage()               {}
+func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+
+func (m *ImageLocation) GetBoundingBoxes() []*BoundingBox {
+	if m != nil {
+		return m.BoundingBoxes
+	}
+	return nil
+}
+
+// Bounding box encompassing detected text within an image.
+type BoundingBox struct {
+	// Top coordinate of the bounding box. (0,0) is upper left.
+	Top int32 `protobuf:"varint,1,opt,name=top" json:"top,omitempty"`
+	// Left coordinate of the bounding box. (0,0) is upper left.
+	Left int32 `protobuf:"varint,2,opt,name=left" json:"left,omitempty"`
+	// Width of the bounding box in pixels.
+	Width int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"`
+	// Height of the bounding box in pixels.
+	Height int32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"`
+}
+
+func (m *BoundingBox) Reset()                    { *m = BoundingBox{} }
+func (m *BoundingBox) String() string            { return proto.CompactTextString(m) }
+func (*BoundingBox) ProtoMessage()               {}
+func (*BoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+
+func (m *BoundingBox) GetTop() int32 {
+	if m != nil {
+		return m.Top
+	}
+	return 0
+}
+
+func (m *BoundingBox) GetLeft() int32 {
+	if m != nil {
+		return m.Left
+	}
+	return 0
+}
+
+func (m *BoundingBox) GetWidth() int32 {
+	if m != nil {
+		return m.Width
+	}
+	return 0
+}
+
+func (m *BoundingBox) GetHeight() int32 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+// Request to search for potentially sensitive info in a list of items
+// and replace it with a default or provided content.
+type RedactImageRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Configuration for the inspector.
+	InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+	// The configuration for specifying what content to redact from images.
+	ImageRedactionConfigs []*RedactImageRequest_ImageRedactionConfig `protobuf:"bytes,5,rep,name=image_redaction_configs,json=imageRedactionConfigs" json:"image_redaction_configs,omitempty"`
+	// The content must be PNG, JPEG, SVG or BMP.
+	ByteItem *ByteContentItem `protobuf:"bytes,7,opt,name=byte_item,json=byteItem" json:"byte_item,omitempty"`
+}
+
+func (m *RedactImageRequest) Reset()                    { *m = RedactImageRequest{} }
+func (m *RedactImageRequest) String() string            { return proto.CompactTextString(m) }
+func (*RedactImageRequest) ProtoMessage()               {}
+func (*RedactImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+
+func (m *RedactImageRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *RedactImageRequest) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+func (m *RedactImageRequest) GetImageRedactionConfigs() []*RedactImageRequest_ImageRedactionConfig {
+	if m != nil {
+		return m.ImageRedactionConfigs
+	}
+	return nil
+}
+
+func (m *RedactImageRequest) GetByteItem() *ByteContentItem {
+	if m != nil {
+		return m.ByteItem
+	}
+	return nil
+}
+
+// Configuration for determining how redaction of images should occur.
+type RedactImageRequest_ImageRedactionConfig struct {
+	// Type of information to redact from images.
+	//
+	// Types that are valid to be assigned to Target:
+	//	*RedactImageRequest_ImageRedactionConfig_InfoType
+	//	*RedactImageRequest_ImageRedactionConfig_RedactAllText
+	Target isRedactImageRequest_ImageRedactionConfig_Target `protobuf_oneof:"target"`
+	// The color to use when redacting content from an image. If not specified,
+	// the default is black.
+	RedactionColor *Color `protobuf:"bytes,3,opt,name=redaction_color,json=redactionColor" json:"redaction_color,omitempty"`
+}
+
+func (m *RedactImageRequest_ImageRedactionConfig) Reset() {
+	*m = RedactImageRequest_ImageRedactionConfig{}
+}
+func (m *RedactImageRequest_ImageRedactionConfig) String() string { return proto.CompactTextString(m) }
+func (*RedactImageRequest_ImageRedactionConfig) ProtoMessage()    {}
+func (*RedactImageRequest_ImageRedactionConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{14, 0}
+}
+
+type isRedactImageRequest_ImageRedactionConfig_Target interface {
+	isRedactImageRequest_ImageRedactionConfig_Target()
+}
+
+type RedactImageRequest_ImageRedactionConfig_InfoType struct {
+	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType,oneof"`
+}
+type RedactImageRequest_ImageRedactionConfig_RedactAllText struct {
+	RedactAllText bool `protobuf:"varint,2,opt,name=redact_all_text,json=redactAllText,oneof"`
+}
+
+func (*RedactImageRequest_ImageRedactionConfig_InfoType) isRedactImageRequest_ImageRedactionConfig_Target() {
+}
+func (*RedactImageRequest_ImageRedactionConfig_RedactAllText) isRedactImageRequest_ImageRedactionConfig_Target() {
+}
+
+func (m *RedactImageRequest_ImageRedactionConfig) GetTarget() isRedactImageRequest_ImageRedactionConfig_Target {
+	if m != nil {
+		return m.Target
+	}
+	return nil
+}
+
+func (m *RedactImageRequest_ImageRedactionConfig) GetInfoType() *InfoType {
+	if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_InfoType); ok {
+		return x.InfoType
+	}
+	return nil
+}
+
+func (m *RedactImageRequest_ImageRedactionConfig) GetRedactAllText() bool {
+	if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_RedactAllText); ok {
+		return x.RedactAllText
+	}
+	return false
+}
+
+func (m *RedactImageRequest_ImageRedactionConfig) GetRedactionColor() *Color {
+	if m != nil {
+		return m.RedactionColor
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*RedactImageRequest_ImageRedactionConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _RedactImageRequest_ImageRedactionConfig_OneofMarshaler, _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler, _RedactImageRequest_ImageRedactionConfig_OneofSizer, []interface{}{
+		(*RedactImageRequest_ImageRedactionConfig_InfoType)(nil),
+		(*RedactImageRequest_ImageRedactionConfig_RedactAllText)(nil),
+	}
+}
+
+func _RedactImageRequest_ImageRedactionConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*RedactImageRequest_ImageRedactionConfig)
+	// target
+	switch x := m.Target.(type) {
+	case *RedactImageRequest_ImageRedactionConfig_InfoType:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InfoType); err != nil {
+			return err
+		}
+	case *RedactImageRequest_ImageRedactionConfig_RedactAllText:
+		t := uint64(0)
+		if x.RedactAllText {
+			t = 1
+		}
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(t)
+	case nil:
+	default:
+		return fmt.Errorf("RedactImageRequest_ImageRedactionConfig.Target has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*RedactImageRequest_ImageRedactionConfig)
+	switch tag {
+	case 1: // target.info_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InfoType)
+		err := b.DecodeMessage(msg)
+		m.Target = &RedactImageRequest_ImageRedactionConfig_InfoType{msg}
+		return true, err
+	case 2: // target.redact_all_text
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Target = &RedactImageRequest_ImageRedactionConfig_RedactAllText{x != 0}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _RedactImageRequest_ImageRedactionConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*RedactImageRequest_ImageRedactionConfig)
+	// target
+	switch x := m.Target.(type) {
+	case *RedactImageRequest_ImageRedactionConfig_InfoType:
+		s := proto.Size(x.InfoType)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *RedactImageRequest_ImageRedactionConfig_RedactAllText:
+		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += 1
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Represents a color in the RGB color space.
+type Color struct {
+	// The amount of red in the color as a value in the interval [0, 1].
+	Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"`
+	// The amount of green in the color as a value in the interval [0, 1].
+	Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"`
+	// The amount of blue in the color as a value in the interval [0, 1].
+	Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"`
+}
+
+func (m *Color) Reset()                    { *m = Color{} }
+func (m *Color) String() string            { return proto.CompactTextString(m) }
+func (*Color) ProtoMessage()               {}
+func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+
+func (m *Color) GetRed() float32 {
+	if m != nil {
+		return m.Red
+	}
+	return 0
+}
+
+func (m *Color) GetGreen() float32 {
+	if m != nil {
+		return m.Green
+	}
+	return 0
+}
+
+func (m *Color) GetBlue() float32 {
+	if m != nil {
+		return m.Blue
+	}
+	return 0
+}
+
+// Results of redacting an image.
+type RedactImageResponse struct {
+	// The redacted image. The type will be the same as the original image.
+	RedactedImage []byte `protobuf:"bytes,1,opt,name=redacted_image,json=redactedImage,proto3" json:"redacted_image,omitempty"`
+	// If an image was being inspected and the InspectConfig's include_quote was
+	// set to true, then this field will include all text, if any, that was found
+	// in the image.
+	ExtractedText string `protobuf:"bytes,2,opt,name=extracted_text,json=extractedText" json:"extracted_text,omitempty"`
+}
+
+func (m *RedactImageResponse) Reset()                    { *m = RedactImageResponse{} }
+func (m *RedactImageResponse) String() string            { return proto.CompactTextString(m) }
+func (*RedactImageResponse) ProtoMessage()               {}
+func (*RedactImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+
+func (m *RedactImageResponse) GetRedactedImage() []byte {
+	if m != nil {
+		return m.RedactedImage
+	}
+	return nil
+}
+
+func (m *RedactImageResponse) GetExtractedText() string {
+	if m != nil {
+		return m.ExtractedText
+	}
+	return ""
+}
+
+// Request to de-identify a list of items.
+type DeidentifyContentRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Configuration for the de-identification of the content item.
+	// Items specified here will override the template referenced by the
+	// deidentify_template_name argument.
+	DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"`
+	// Configuration for the inspector.
+	// Items specified here will override the template referenced by the
+	// inspect_template_name argument.
+	InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+	// The item to de-identify. Will be treated as text.
+	Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"`
+	// Optional template to use. Any configuration directly specified in
+	// inspect_config will override those set in the template. Singular fields
+	// that are set in this request will replace their corresponding fields in the
+	// template. Repeated fields are appended. Singular sub-messages and groups
+	// are recursively merged.
+	InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
+	// Optional template to use. Any configuration directly specified in
+	// deidentify_config will override those set in the template. Singular fields
+	// that are set in this request will replace their corresponding fields in the
+	// template. Repeated fields are appended. Singular sub-messages and groups
+	// are recursively merged.
+	DeidentifyTemplateName string `protobuf:"bytes,6,opt,name=deidentify_template_name,json=deidentifyTemplateName" json:"deidentify_template_name,omitempty"`
+}
+
+func (m *DeidentifyContentRequest) Reset()                    { *m = DeidentifyContentRequest{} }
+func (m *DeidentifyContentRequest) String() string            { return proto.CompactTextString(m) }
+func (*DeidentifyContentRequest) ProtoMessage()               {}
+func (*DeidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+
+func (m *DeidentifyContentRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *DeidentifyContentRequest) GetDeidentifyConfig() *DeidentifyConfig {
+	if m != nil {
+		return m.DeidentifyConfig
+	}
+	return nil
+}
+
+func (m *DeidentifyContentRequest) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+func (m *DeidentifyContentRequest) GetItem() *ContentItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *DeidentifyContentRequest) GetInspectTemplateName() string {
+	if m != nil {
+		return m.InspectTemplateName
+	}
+	return ""
+}
+
+func (m *DeidentifyContentRequest) GetDeidentifyTemplateName() string {
+	if m != nil {
+		return m.DeidentifyTemplateName
+	}
+	return ""
+}
+
+// Results of de-identifying a ContentItem.
+type DeidentifyContentResponse struct {
+	// The de-identified item.
+	Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
+	// An overview of the changes that were made on the `item`.
+	Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"`
+}
+
+func (m *DeidentifyContentResponse) Reset()                    { *m = DeidentifyContentResponse{} }
+func (m *DeidentifyContentResponse) String() string            { return proto.CompactTextString(m) }
+func (*DeidentifyContentResponse) ProtoMessage()               {}
+func (*DeidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+
+func (m *DeidentifyContentResponse) GetItem() *ContentItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *DeidentifyContentResponse) GetOverview() *TransformationOverview {
+	if m != nil {
+		return m.Overview
+	}
+	return nil
+}
+
+// Request to re-identify an item.
+type ReidentifyContentRequest struct {
+	// The parent resource name.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Configuration for the re-identification of the content item.
+	// This field shares the same proto message type that is used for
+	// de-identification, however its usage here is for the reversal of the
+	// previous de-identification. Re-identification is performed by examining
+	// the transformations used to de-identify the items and executing the
+	// reverse. This requires that only reversible transformations
+	// be provided here. The reversible transformations are:
+	//
+	//  - `CryptoReplaceFfxFpeConfig`
+	ReidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=reidentify_config,json=reidentifyConfig" json:"reidentify_config,omitempty"`
+	// Configuration for the inspector.
+	InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+	// The item to re-identify. Will be treated as text.
+	Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"`
+	// Optional template to use. Any configuration directly specified in
+	// `inspect_config` will override those set in the template. Singular fields
+	// that are set in this request will replace their corresponding fields in the
+	// template. Repeated fields are appended. Singular sub-messages and groups
+	// are recursively merged.
+	InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
+	// Optional template to use. References an instance of `DeidentifyTemplate`.
+	// Any configuration directly specified in `reidentify_config` or
+	// `inspect_config` will override those set in the template. Singular fields
+	// that are set in this request will replace their corresponding fields in the
+	// template. Repeated fields are appended. Singular sub-messages and groups
+	// are recursively merged.
+	ReidentifyTemplateName string `protobuf:"bytes,6,opt,name=reidentify_template_name,json=reidentifyTemplateName" json:"reidentify_template_name,omitempty"`
+}
+
+func (m *ReidentifyContentRequest) Reset()                    { *m = ReidentifyContentRequest{} }
+func (m *ReidentifyContentRequest) String() string            { return proto.CompactTextString(m) }
+func (*ReidentifyContentRequest) ProtoMessage()               {}
+func (*ReidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+
+func (m *ReidentifyContentRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ReidentifyContentRequest) GetReidentifyConfig() *DeidentifyConfig {
+	if m != nil {
+		return m.ReidentifyConfig
+	}
+	return nil
+}
+
+func (m *ReidentifyContentRequest) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+func (m *ReidentifyContentRequest) GetItem() *ContentItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *ReidentifyContentRequest) GetInspectTemplateName() string {
+	if m != nil {
+		return m.InspectTemplateName
+	}
+	return ""
+}
+
+func (m *ReidentifyContentRequest) GetReidentifyTemplateName() string {
+	if m != nil {
+		return m.ReidentifyTemplateName
+	}
+	return ""
+}
+
+// Results of re-identifying a item.
+type ReidentifyContentResponse struct {
+	// The re-identified item.
+	Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
+	// An overview of the changes that were made to the `item`.
+	Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"`
+}
+
+func (m *ReidentifyContentResponse) Reset()                    { *m = ReidentifyContentResponse{} }
+func (m *ReidentifyContentResponse) String() string            { return proto.CompactTextString(m) }
+func (*ReidentifyContentResponse) ProtoMessage()               {}
+func (*ReidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+
+func (m *ReidentifyContentResponse) GetItem() *ContentItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *ReidentifyContentResponse) GetOverview() *TransformationOverview {
+	if m != nil {
+		return m.Overview
+	}
+	return nil
+}
+
+// Request to search for potentially sensitive info in a ContentItem.
+type InspectContentRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Configuration for the inspector. What specified here will override
+	// the template referenced by the inspect_template_name argument.
+	InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+	// The item to inspect.
+	Item *ContentItem `protobuf:"bytes,3,opt,name=item" json:"item,omitempty"`
+	// Optional template to use. Any configuration directly specified in
+	// inspect_config will override those set in the template. Singular fields
+	// that are set in this request will replace their corresponding fields in the
+	// template. Repeated fields are appended. Singular sub-messages and groups
+	// are recursively merged.
+	InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
+}
+
+func (m *InspectContentRequest) Reset()                    { *m = InspectContentRequest{} }
+func (m *InspectContentRequest) String() string            { return proto.CompactTextString(m) }
+func (*InspectContentRequest) ProtoMessage()               {}
+func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+
+func (m *InspectContentRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *InspectContentRequest) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+func (m *InspectContentRequest) GetItem() *ContentItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *InspectContentRequest) GetInspectTemplateName() string {
+	if m != nil {
+		return m.InspectTemplateName
+	}
+	return ""
+}
+
+// Results of inspecting an item.
+type InspectContentResponse struct {
+	// The findings.
+	Result *InspectResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"`
+}
+
+func (m *InspectContentResponse) Reset()                    { *m = InspectContentResponse{} }
+func (m *InspectContentResponse) String() string            { return proto.CompactTextString(m) }
+func (*InspectContentResponse) ProtoMessage()               {}
+func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+
+func (m *InspectContentResponse) GetResult() *InspectResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// Cloud repository for storing output.
+type OutputStorageConfig struct {
+	// Types that are valid to be assigned to Type:
+	//	*OutputStorageConfig_Table
+	Type isOutputStorageConfig_Type `protobuf_oneof:"type"`
+	// Schema used for writing the findings. Columns are derived from the
+	// `Finding` object. If appending to an existing table, any columns from the
+	// predefined schema that are missing will be added. No columns in the
+	// existing table will be deleted.
+	//
+	// If unspecified, then all available columns will be used for a new table,
+	// and no changes will be made to an existing table.
+	OutputSchema OutputStorageConfig_OutputSchema `protobuf:"varint,3,opt,name=output_schema,json=outputSchema,enum=google.privacy.dlp.v2.OutputStorageConfig_OutputSchema" json:"output_schema,omitempty"`
+}
+
+func (m *OutputStorageConfig) Reset()                    { *m = OutputStorageConfig{} }
+func (m *OutputStorageConfig) String() string            { return proto.CompactTextString(m) }
+func (*OutputStorageConfig) ProtoMessage()               {}
+func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+
+type isOutputStorageConfig_Type interface {
+	isOutputStorageConfig_Type()
+}
+
+type OutputStorageConfig_Table struct {
+	Table *BigQueryTable `protobuf:"bytes,1,opt,name=table,oneof"`
+}
+
+func (*OutputStorageConfig_Table) isOutputStorageConfig_Type() {}
+
+func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *OutputStorageConfig) GetTable() *BigQueryTable {
+	if x, ok := m.GetType().(*OutputStorageConfig_Table); ok {
+		return x.Table
+	}
+	return nil
+}
+
+func (m *OutputStorageConfig) GetOutputSchema() OutputStorageConfig_OutputSchema {
+	if m != nil {
+		return m.OutputSchema
+	}
+	return OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*OutputStorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OutputStorageConfig_OneofMarshaler, _OutputStorageConfig_OneofUnmarshaler, _OutputStorageConfig_OneofSizer, []interface{}{
+		(*OutputStorageConfig_Table)(nil),
+	}
+}
+
+func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OutputStorageConfig)
+	// type
+	switch x := m.Type.(type) {
+	case *OutputStorageConfig_Table:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Table); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OutputStorageConfig.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OutputStorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OutputStorageConfig)
+	switch tag {
+	case 1: // type.table
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BigQueryTable)
+		err := b.DecodeMessage(msg)
+		m.Type = &OutputStorageConfig_Table{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OutputStorageConfig)
+	// type
+	switch x := m.Type.(type) {
+	case *OutputStorageConfig_Table:
+		s := proto.Size(x.Table)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Statistics regarding a specific InfoType.
+type InfoTypeStats struct {
+	// The type of finding this stat is for.
+	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
+	// Number of findings for this infoType.
+	Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+}
+
+func (m *InfoTypeStats) Reset()                    { *m = InfoTypeStats{} }
+func (m *InfoTypeStats) String() string            { return proto.CompactTextString(m) }
+func (*InfoTypeStats) ProtoMessage()               {}
+func (*InfoTypeStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+
+func (m *InfoTypeStats) GetInfoType() *InfoType {
+	if m != nil {
+		return m.InfoType
+	}
+	return nil
+}
+
+func (m *InfoTypeStats) GetCount() int64 {
+	if m != nil {
+		return m.Count
+	}
+	return 0
+}
+
+// The results of an inspect DataSource job.
+type InspectDataSourceDetails struct {
+	// The configuration used for this job.
+	RequestedOptions *InspectDataSourceDetails_RequestedOptions `protobuf:"bytes,2,opt,name=requested_options,json=requestedOptions" json:"requested_options,omitempty"`
+	// A summary of the outcome of this inspect job.
+	Result *InspectDataSourceDetails_Result `protobuf:"bytes,3,opt,name=result" json:"result,omitempty"`
+}
+
+func (m *InspectDataSourceDetails) Reset()                    { *m = InspectDataSourceDetails{} }
+func (m *InspectDataSourceDetails) String() string            { return proto.CompactTextString(m) }
+func (*InspectDataSourceDetails) ProtoMessage()               {}
+func (*InspectDataSourceDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+
+func (m *InspectDataSourceDetails) GetRequestedOptions() *InspectDataSourceDetails_RequestedOptions {
+	if m != nil {
+		return m.RequestedOptions
+	}
+	return nil
+}
+
+func (m *InspectDataSourceDetails) GetResult() *InspectDataSourceDetails_Result {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+type InspectDataSourceDetails_RequestedOptions struct {
+	// If run with an inspect template, a snapshot of it's state at the time of
+	// this run.
+	SnapshotInspectTemplate *InspectTemplate  `protobuf:"bytes,1,opt,name=snapshot_inspect_template,json=snapshotInspectTemplate" json:"snapshot_inspect_template,omitempty"`
+	JobConfig               *InspectJobConfig `protobuf:"bytes,3,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"`
+}
+
+func (m *InspectDataSourceDetails_RequestedOptions) Reset() {
+	*m = InspectDataSourceDetails_RequestedOptions{}
+}
+func (m *InspectDataSourceDetails_RequestedOptions) String() string { return proto.CompactTextString(m) }
+func (*InspectDataSourceDetails_RequestedOptions) ProtoMessage()    {}
+func (*InspectDataSourceDetails_RequestedOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{25, 0}
+}
+
+func (m *InspectDataSourceDetails_RequestedOptions) GetSnapshotInspectTemplate() *InspectTemplate {
+	if m != nil {
+		return m.SnapshotInspectTemplate
+	}
+	return nil
+}
+
+func (m *InspectDataSourceDetails_RequestedOptions) GetJobConfig() *InspectJobConfig {
+	if m != nil {
+		return m.JobConfig
+	}
+	return nil
+}
+
+type InspectDataSourceDetails_Result struct {
+	// Total size in bytes that were processed.
+	ProcessedBytes int64 `protobuf:"varint,1,opt,name=processed_bytes,json=processedBytes" json:"processed_bytes,omitempty"`
+	// Estimate of the number of bytes to process.
+	TotalEstimatedBytes int64 `protobuf:"varint,2,opt,name=total_estimated_bytes,json=totalEstimatedBytes" json:"total_estimated_bytes,omitempty"`
+	// Statistics of how many instances of each info type were found during
+	// inspect job.
+	InfoTypeStats []*InfoTypeStats `protobuf:"bytes,3,rep,name=info_type_stats,json=infoTypeStats" json:"info_type_stats,omitempty"`
+}
+
+func (m *InspectDataSourceDetails_Result) Reset()         { *m = InspectDataSourceDetails_Result{} }
+func (m *InspectDataSourceDetails_Result) String() string { return proto.CompactTextString(m) }
+func (*InspectDataSourceDetails_Result) ProtoMessage()    {}
+func (*InspectDataSourceDetails_Result) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{25, 1}
+}
+
+func (m *InspectDataSourceDetails_Result) GetProcessedBytes() int64 {
+	if m != nil {
+		return m.ProcessedBytes
+	}
+	return 0
+}
+
+func (m *InspectDataSourceDetails_Result) GetTotalEstimatedBytes() int64 {
+	if m != nil {
+		return m.TotalEstimatedBytes
+	}
+	return 0
+}
+
+func (m *InspectDataSourceDetails_Result) GetInfoTypeStats() []*InfoTypeStats {
+	if m != nil {
+		return m.InfoTypeStats
+	}
+	return nil
+}
+
+// InfoType description.
+type InfoTypeDescription struct {
+	// Internal name of the infoType.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// Human readable form of the infoType name.
+	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
+	// Which parts of the API supports this InfoType.
+	SupportedBy []InfoTypeSupportedBy `protobuf:"varint,3,rep,packed,name=supported_by,json=supportedBy,enum=google.privacy.dlp.v2.InfoTypeSupportedBy" json:"supported_by,omitempty"`
+}
+
+func (m *InfoTypeDescription) Reset()                    { *m = InfoTypeDescription{} }
+func (m *InfoTypeDescription) String() string            { return proto.CompactTextString(m) }
+func (*InfoTypeDescription) ProtoMessage()               {}
+func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+
+func (m *InfoTypeDescription) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *InfoTypeDescription) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *InfoTypeDescription) GetSupportedBy() []InfoTypeSupportedBy {
+	if m != nil {
+		return m.SupportedBy
+	}
+	return nil
+}
+
+// Request for the list of infoTypes.
+type ListInfoTypesRequest struct {
+	// Optional BCP-47 language code for localized infoType friendly
+	// names. If omitted, or if localized strings are not available,
+	// en-US strings will be returned.
+	LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"`
+	// Optional filter to only return infoTypes supported by certain parts of the
+	// API. Defaults to supported_by=INSPECT.
+	Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"`
+}
+
+func (m *ListInfoTypesRequest) Reset()                    { *m = ListInfoTypesRequest{} }
+func (m *ListInfoTypesRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListInfoTypesRequest) ProtoMessage()               {}
+func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+
+func (m *ListInfoTypesRequest) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
+func (m *ListInfoTypesRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+// Response to the ListInfoTypes request.
+type ListInfoTypesResponse struct {
+	// Set of sensitive infoTypes.
+	InfoTypes []*InfoTypeDescription `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
+}
+
+func (m *ListInfoTypesResponse) Reset()                    { *m = ListInfoTypesResponse{} }
+func (m *ListInfoTypesResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListInfoTypesResponse) ProtoMessage()               {}
+func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
+
+func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription {
+	if m != nil {
+		return m.InfoTypes
+	}
+	return nil
+}
+
+// Configuration for a risk analysis job.
+type RiskAnalysisJobConfig struct {
+	// Privacy metric to compute.
+	PrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=privacy_metric,json=privacyMetric" json:"privacy_metric,omitempty"`
+	// Input dataset to compute metrics over.
+	SourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"`
+	// Actions to execute at the completion of the job. Are executed in the order
+	// provided.
+	Actions []*Action `protobuf:"bytes,3,rep,name=actions" json:"actions,omitempty"`
+}
+
+func (m *RiskAnalysisJobConfig) Reset()                    { *m = RiskAnalysisJobConfig{} }
+func (m *RiskAnalysisJobConfig) String() string            { return proto.CompactTextString(m) }
+func (*RiskAnalysisJobConfig) ProtoMessage()               {}
+func (*RiskAnalysisJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
+
+func (m *RiskAnalysisJobConfig) GetPrivacyMetric() *PrivacyMetric {
+	if m != nil {
+		return m.PrivacyMetric
+	}
+	return nil
+}
+
+func (m *RiskAnalysisJobConfig) GetSourceTable() *BigQueryTable {
+	if m != nil {
+		return m.SourceTable
+	}
+	return nil
+}
+
+func (m *RiskAnalysisJobConfig) GetActions() []*Action {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Privacy metric to compute for reidentification risk analysis.
+type PrivacyMetric struct {
+	// Types that are valid to be assigned to Type:
+	//	*PrivacyMetric_NumericalStatsConfig_
+	//	*PrivacyMetric_CategoricalStatsConfig_
+	//	*PrivacyMetric_KAnonymityConfig_
+	//	*PrivacyMetric_LDiversityConfig_
+	//	*PrivacyMetric_KMapEstimationConfig_
+	Type isPrivacyMetric_Type `protobuf_oneof:"type"`
+}
+
+func (m *PrivacyMetric) Reset()                    { *m = PrivacyMetric{} }
+func (m *PrivacyMetric) String() string            { return proto.CompactTextString(m) }
+func (*PrivacyMetric) ProtoMessage()               {}
+func (*PrivacyMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
+
+type isPrivacyMetric_Type interface {
+	isPrivacyMetric_Type()
+}
+
+type PrivacyMetric_NumericalStatsConfig_ struct {
+	NumericalStatsConfig *PrivacyMetric_NumericalStatsConfig `protobuf:"bytes,1,opt,name=numerical_stats_config,json=numericalStatsConfig,oneof"`
+}
+type PrivacyMetric_CategoricalStatsConfig_ struct {
+	CategoricalStatsConfig *PrivacyMetric_CategoricalStatsConfig `protobuf:"bytes,2,opt,name=categorical_stats_config,json=categoricalStatsConfig,oneof"`
+}
+type PrivacyMetric_KAnonymityConfig_ struct {
+	KAnonymityConfig *PrivacyMetric_KAnonymityConfig `protobuf:"bytes,3,opt,name=k_anonymity_config,json=kAnonymityConfig,oneof"`
+}
+type PrivacyMetric_LDiversityConfig_ struct {
+	LDiversityConfig *PrivacyMetric_LDiversityConfig `protobuf:"bytes,4,opt,name=l_diversity_config,json=lDiversityConfig,oneof"`
+}
+type PrivacyMetric_KMapEstimationConfig_ struct {
+	KMapEstimationConfig *PrivacyMetric_KMapEstimationConfig `protobuf:"bytes,5,opt,name=k_map_estimation_config,json=kMapEstimationConfig,oneof"`
+}
+
+func (*PrivacyMetric_NumericalStatsConfig_) isPrivacyMetric_Type()   {}
+func (*PrivacyMetric_CategoricalStatsConfig_) isPrivacyMetric_Type() {}
+func (*PrivacyMetric_KAnonymityConfig_) isPrivacyMetric_Type()       {}
+func (*PrivacyMetric_LDiversityConfig_) isPrivacyMetric_Type()       {}
+func (*PrivacyMetric_KMapEstimationConfig_) isPrivacyMetric_Type()   {}
+
+func (m *PrivacyMetric) GetType() isPrivacyMetric_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *PrivacyMetric) GetNumericalStatsConfig() *PrivacyMetric_NumericalStatsConfig {
+	if x, ok := m.GetType().(*PrivacyMetric_NumericalStatsConfig_); ok {
+		return x.NumericalStatsConfig
+	}
+	return nil
+}
+
+func (m *PrivacyMetric) GetCategoricalStatsConfig() *PrivacyMetric_CategoricalStatsConfig {
+	if x, ok := m.GetType().(*PrivacyMetric_CategoricalStatsConfig_); ok {
+		return x.CategoricalStatsConfig
+	}
+	return nil
+}
+
+func (m *PrivacyMetric) GetKAnonymityConfig() *PrivacyMetric_KAnonymityConfig {
+	if x, ok := m.GetType().(*PrivacyMetric_KAnonymityConfig_); ok {
+		return x.KAnonymityConfig
+	}
+	return nil
+}
+
+func (m *PrivacyMetric) GetLDiversityConfig() *PrivacyMetric_LDiversityConfig {
+	if x, ok := m.GetType().(*PrivacyMetric_LDiversityConfig_); ok {
+		return x.LDiversityConfig
+	}
+	return nil
+}
+
+func (m *PrivacyMetric) GetKMapEstimationConfig() *PrivacyMetric_KMapEstimationConfig {
+	if x, ok := m.GetType().(*PrivacyMetric_KMapEstimationConfig_); ok {
+		return x.KMapEstimationConfig
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PrivacyMetric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PrivacyMetric_OneofMarshaler, _PrivacyMetric_OneofUnmarshaler, _PrivacyMetric_OneofSizer, []interface{}{
+		(*PrivacyMetric_NumericalStatsConfig_)(nil),
+		(*PrivacyMetric_CategoricalStatsConfig_)(nil),
+		(*PrivacyMetric_KAnonymityConfig_)(nil),
+		(*PrivacyMetric_LDiversityConfig_)(nil),
+		(*PrivacyMetric_KMapEstimationConfig_)(nil),
+	}
+}
+
+func _PrivacyMetric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PrivacyMetric)
+	// type
+	switch x := m.Type.(type) {
+	case *PrivacyMetric_NumericalStatsConfig_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.NumericalStatsConfig); err != nil {
+			return err
+		}
+	case *PrivacyMetric_CategoricalStatsConfig_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CategoricalStatsConfig); err != nil {
+			return err
+		}
+	case *PrivacyMetric_KAnonymityConfig_:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KAnonymityConfig); err != nil {
+			return err
+		}
+	case *PrivacyMetric_LDiversityConfig_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.LDiversityConfig); err != nil {
+			return err
+		}
+	case *PrivacyMetric_KMapEstimationConfig_:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KMapEstimationConfig); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PrivacyMetric.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PrivacyMetric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PrivacyMetric)
+	switch tag {
+	case 1: // type.numerical_stats_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrivacyMetric_NumericalStatsConfig)
+		err := b.DecodeMessage(msg)
+		m.Type = &PrivacyMetric_NumericalStatsConfig_{msg}
+		return true, err
+	case 2: // type.categorical_stats_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrivacyMetric_CategoricalStatsConfig)
+		err := b.DecodeMessage(msg)
+		m.Type = &PrivacyMetric_CategoricalStatsConfig_{msg}
+		return true, err
+	case 3: // type.k_anonymity_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrivacyMetric_KAnonymityConfig)
+		err := b.DecodeMessage(msg)
+		m.Type = &PrivacyMetric_KAnonymityConfig_{msg}
+		return true, err
+	case 4: // type.l_diversity_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrivacyMetric_LDiversityConfig)
+		err := b.DecodeMessage(msg)
+		m.Type = &PrivacyMetric_LDiversityConfig_{msg}
+		return true, err
+	case 5: // type.k_map_estimation_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrivacyMetric_KMapEstimationConfig)
+		err := b.DecodeMessage(msg)
+		m.Type = &PrivacyMetric_KMapEstimationConfig_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PrivacyMetric_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PrivacyMetric)
+	// type
+	switch x := m.Type.(type) {
+	case *PrivacyMetric_NumericalStatsConfig_:
+		s := proto.Size(x.NumericalStatsConfig)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrivacyMetric_CategoricalStatsConfig_:
+		s := proto.Size(x.CategoricalStatsConfig)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrivacyMetric_KAnonymityConfig_:
+		s := proto.Size(x.KAnonymityConfig)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrivacyMetric_LDiversityConfig_:
+		s := proto.Size(x.LDiversityConfig)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrivacyMetric_KMapEstimationConfig_:
+		s := proto.Size(x.KMapEstimationConfig)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Compute numerical stats over an individual column, including
+// min, max, and quantiles.
+type PrivacyMetric_NumericalStatsConfig struct {
+	// Field to compute numerical stats on. Supported types are
+	// integer, float, date, datetime, timestamp, time.
+	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
+}
+
+func (m *PrivacyMetric_NumericalStatsConfig) Reset()         { *m = PrivacyMetric_NumericalStatsConfig{} }
+func (m *PrivacyMetric_NumericalStatsConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivacyMetric_NumericalStatsConfig) ProtoMessage()    {}
+func (*PrivacyMetric_NumericalStatsConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 0}
+}
+
+func (m *PrivacyMetric_NumericalStatsConfig) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+// Compute numerical stats over an individual column, including
+// number of distinct values and value count distribution.
+type PrivacyMetric_CategoricalStatsConfig struct {
+	// Field to compute categorical stats on. All column types are
+	// supported except for arrays and structs. However, it may be more
+	// informative to use NumericalStats when the field type is supported,
+	// depending on the data.
+	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
+}
+
+func (m *PrivacyMetric_CategoricalStatsConfig) Reset()         { *m = PrivacyMetric_CategoricalStatsConfig{} }
+func (m *PrivacyMetric_CategoricalStatsConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivacyMetric_CategoricalStatsConfig) ProtoMessage()    {}
+func (*PrivacyMetric_CategoricalStatsConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 1}
+}
+
+func (m *PrivacyMetric_CategoricalStatsConfig) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+// k-anonymity metric, used for analysis of reidentification risk.
+type PrivacyMetric_KAnonymityConfig struct {
+	// Set of fields to compute k-anonymity over. When multiple fields are
+	// specified, they are considered a single composite key. Structs and
+	// repeated data types are not supported; however, nested fields are
+	// supported so long as they are not structs themselves or nested within
+	// a repeated field.
+	QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
+}
+
+func (m *PrivacyMetric_KAnonymityConfig) Reset()         { *m = PrivacyMetric_KAnonymityConfig{} }
+func (m *PrivacyMetric_KAnonymityConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivacyMetric_KAnonymityConfig) ProtoMessage()    {}
+func (*PrivacyMetric_KAnonymityConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 2}
+}
+
+func (m *PrivacyMetric_KAnonymityConfig) GetQuasiIds() []*FieldId {
+	if m != nil {
+		return m.QuasiIds
+	}
+	return nil
+}
+
+// l-diversity metric, used for analysis of reidentification risk.
+type PrivacyMetric_LDiversityConfig struct {
+	// Set of quasi-identifiers indicating how equivalence classes are
+	// defined for the l-diversity computation. When multiple fields are
+	// specified, they are considered a single composite key.
+	QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
+	// Sensitive field for computing the l-value.
+	SensitiveAttribute *FieldId `protobuf:"bytes,2,opt,name=sensitive_attribute,json=sensitiveAttribute" json:"sensitive_attribute,omitempty"`
+}
+
+func (m *PrivacyMetric_LDiversityConfig) Reset()         { *m = PrivacyMetric_LDiversityConfig{} }
+func (m *PrivacyMetric_LDiversityConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivacyMetric_LDiversityConfig) ProtoMessage()    {}
+func (*PrivacyMetric_LDiversityConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 3}
+}
+
+func (m *PrivacyMetric_LDiversityConfig) GetQuasiIds() []*FieldId {
+	if m != nil {
+		return m.QuasiIds
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_LDiversityConfig) GetSensitiveAttribute() *FieldId {
+	if m != nil {
+		return m.SensitiveAttribute
+	}
+	return nil
+}
+
+// Reidentifiability metric. This corresponds to a risk model similar to what
+// is called "journalist risk" in the literature, except the attack dataset is
+// statistically modeled instead of being perfectly known. This can be done
+// using publicly available data (like the US Census), or using a custom
+// statistical model (indicated as one or several BigQuery tables), or by
+// extrapolating from the distribution of values in the input dataset.
+type PrivacyMetric_KMapEstimationConfig struct {
+	// Fields considered to be quasi-identifiers. No two columns can have the
+	// same tag. [required]
+	QuasiIds []*PrivacyMetric_KMapEstimationConfig_TaggedField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
+	// ISO 3166-1 alpha-2 region code to use in the statistical modeling.
+	// Required if no column is tagged with a region-specific InfoType (like
+	// US_ZIP_5) or a region code.
+	RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode" json:"region_code,omitempty"`
+	// Several auxiliary tables can be used in the analysis. Each custom_tag
+	// used to tag a quasi-identifiers column must appear in exactly one column
+	// of one auxiliary table.
+	AuxiliaryTables []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable `protobuf:"bytes,3,rep,name=auxiliary_tables,json=auxiliaryTables" json:"auxiliary_tables,omitempty"`
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig) Reset()         { *m = PrivacyMetric_KMapEstimationConfig{} }
+func (m *PrivacyMetric_KMapEstimationConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivacyMetric_KMapEstimationConfig) ProtoMessage()    {}
+func (*PrivacyMetric_KMapEstimationConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 4}
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_TaggedField {
+	if m != nil {
+		return m.QuasiIds
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig) GetRegionCode() string {
+	if m != nil {
+		return m.RegionCode
+	}
+	return ""
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig) GetAuxiliaryTables() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable {
+	if m != nil {
+		return m.AuxiliaryTables
+	}
+	return nil
+}
+
+// A column with a semantic tag attached.
+type PrivacyMetric_KMapEstimationConfig_TaggedField struct {
+	// Identifies the column. [required]
+	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
+	// Semantic tag that identifies what a column contains, to determine which
+	// statistical model to use to estimate the reidentifiability of each
+	// value. [required]
+	//
+	// Types that are valid to be assigned to Tag:
+	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType
+	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag
+	//	*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred
+	Tag isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag `protobuf_oneof:"tag"`
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) Reset() {
+	*m = PrivacyMetric_KMapEstimationConfig_TaggedField{}
+}
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField) ProtoMessage() {}
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 4, 0}
+}
+
+type isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag interface {
+	isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag()
+}
+
+type PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType struct {
+	InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType,oneof"`
+}
+type PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag struct {
+	CustomTag string `protobuf:"bytes,3,opt,name=custom_tag,json=customTag,oneof"`
+}
+type PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred struct {
+	Inferred *google_protobuf3.Empty `protobuf:"bytes,4,opt,name=inferred,oneof"`
+}
+
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
+}
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
+}
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() {
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetTag() isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag {
+	if m != nil {
+		return m.Tag
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInfoType() *InfoType {
+	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType); ok {
+		return x.InfoType
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetCustomTag() string {
+	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag); ok {
+		return x.CustomTag
+	}
+	return ""
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInferred() *google_protobuf3.Empty {
+	if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred); ok {
+		return x.Inferred
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PrivacyMetric_KMapEstimationConfig_TaggedField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer, []interface{}{
+		(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType)(nil),
+		(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag)(nil),
+		(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred)(nil),
+	}
+}
+
+func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
+	// tag
+	switch x := m.Tag.(type) {
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InfoType); err != nil {
+			return err
+		}
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.CustomTag)
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Inferred); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PrivacyMetric_KMapEstimationConfig_TaggedField.Tag has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
+	switch tag {
+	case 2: // tag.info_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InfoType)
+		err := b.DecodeMessage(msg)
+		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType{msg}
+		return true, err
+	case 3: // tag.custom_tag
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag{x}
+		return true, err
+	case 4: // tag.inferred
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(google_protobuf3.Empty)
+		err := b.DecodeMessage(msg)
+		m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField)
+	// tag
+	switch x := m.Tag.(type) {
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType:
+		s := proto.Size(x.InfoType)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag:
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.CustomTag)))
+		n += len(x.CustomTag)
+	case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred:
+		s := proto.Size(x.Inferred)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// An auxiliary table contains statistical information on the relative
+// frequency of different quasi-identifiers values. It has one or several
+// quasi-identifiers columns, and one column that indicates the relative
+// frequency of each quasi-identifier tuple.
+// If a tuple is present in the data but not in the auxiliary table, the
+// corresponding relative frequency is assumed to be zero (and thus, the
+// tuple is highly reidentifiable).
+type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable struct {
+	// Auxiliary table location. [required]
+	Table *BigQueryTable `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"`
+	// Quasi-identifier columns. [required]
+	QuasiIds []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"`
+	// The relative frequency column must contain a floating-point number
+	// between 0 and 1 (inclusive). Null values are assumed to be zero.
+	// [required]
+	RelativeFrequency *FieldId `protobuf:"bytes,2,opt,name=relative_frequency,json=relativeFrequency" json:"relative_frequency,omitempty"`
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Reset() {
+	*m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable{}
+}
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) ProtoMessage() {}
+func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 4, 1}
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetTable() *BigQueryTable {
+	if m != nil {
+		return m.Table
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField {
+	if m != nil {
+		return m.QuasiIds
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetRelativeFrequency() *FieldId {
+	if m != nil {
+		return m.RelativeFrequency
+	}
+	return nil
+}
+
+// A quasi-identifier column has a custom_tag, used to know which column
+// in the data corresponds to which column in the statistical model.
+type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField struct {
+	Field     *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
+	CustomTag string   `protobuf:"bytes,2,opt,name=custom_tag,json=customTag" json:"custom_tag,omitempty"`
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Reset() {
+	*m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField{}
+}
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) ProtoMessage() {}
+func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{30, 4, 1, 0}
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetCustomTag() string {
+	if m != nil {
+		return m.CustomTag
+	}
+	return ""
+}
+
+// Result of a risk analysis operation request.
+type AnalyzeDataSourceRiskDetails struct {
+	// Privacy metric to compute.
+	RequestedPrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=requested_privacy_metric,json=requestedPrivacyMetric" json:"requested_privacy_metric,omitempty"`
+	// Input dataset to compute metrics over.
+	RequestedSourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=requested_source_table,json=requestedSourceTable" json:"requested_source_table,omitempty"`
+	// Values associated with this metric.
+	//
+	// Types that are valid to be assigned to Result:
+	//	*AnalyzeDataSourceRiskDetails_NumericalStatsResult_
+	//	*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_
+	//	*AnalyzeDataSourceRiskDetails_KAnonymityResult_
+	//	*AnalyzeDataSourceRiskDetails_LDiversityResult_
+	//	*AnalyzeDataSourceRiskDetails_KMapEstimationResult_
+	Result isAnalyzeDataSourceRiskDetails_Result `protobuf_oneof:"result"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails) Reset()                    { *m = AnalyzeDataSourceRiskDetails{} }
+func (m *AnalyzeDataSourceRiskDetails) String() string            { return proto.CompactTextString(m) }
+func (*AnalyzeDataSourceRiskDetails) ProtoMessage()               {}
+func (*AnalyzeDataSourceRiskDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
+
+type isAnalyzeDataSourceRiskDetails_Result interface {
+	isAnalyzeDataSourceRiskDetails_Result()
+}
+
+type AnalyzeDataSourceRiskDetails_NumericalStatsResult_ struct {
+	NumericalStatsResult *AnalyzeDataSourceRiskDetails_NumericalStatsResult `protobuf:"bytes,3,opt,name=numerical_stats_result,json=numericalStatsResult,oneof"`
+}
+type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ struct {
+	CategoricalStatsResult *AnalyzeDataSourceRiskDetails_CategoricalStatsResult `protobuf:"bytes,4,opt,name=categorical_stats_result,json=categoricalStatsResult,oneof"`
+}
+type AnalyzeDataSourceRiskDetails_KAnonymityResult_ struct {
+	KAnonymityResult *AnalyzeDataSourceRiskDetails_KAnonymityResult `protobuf:"bytes,5,opt,name=k_anonymity_result,json=kAnonymityResult,oneof"`
+}
+type AnalyzeDataSourceRiskDetails_LDiversityResult_ struct {
+	LDiversityResult *AnalyzeDataSourceRiskDetails_LDiversityResult `protobuf:"bytes,6,opt,name=l_diversity_result,json=lDiversityResult,oneof"`
+}
+type AnalyzeDataSourceRiskDetails_KMapEstimationResult_ struct {
+	KMapEstimationResult *AnalyzeDataSourceRiskDetails_KMapEstimationResult `protobuf:"bytes,7,opt,name=k_map_estimation_result,json=kMapEstimationResult,oneof"`
+}
+
+func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_) isAnalyzeDataSourceRiskDetails_Result()   {}
+func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_) isAnalyzeDataSourceRiskDetails_Result()       {}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult_) isAnalyzeDataSourceRiskDetails_Result()       {}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_) isAnalyzeDataSourceRiskDetails_Result()   {}
+
+func (m *AnalyzeDataSourceRiskDetails) GetResult() isAnalyzeDataSourceRiskDetails_Result {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetRequestedPrivacyMetric() *PrivacyMetric {
+	if m != nil {
+		return m.RequestedPrivacyMetric
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetRequestedSourceTable() *BigQueryTable {
+	if m != nil {
+		return m.RequestedSourceTable
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetNumericalStatsResult() *AnalyzeDataSourceRiskDetails_NumericalStatsResult {
+	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_); ok {
+		return x.NumericalStatsResult
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetCategoricalStatsResult() *AnalyzeDataSourceRiskDetails_CategoricalStatsResult {
+	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_); ok {
+		return x.CategoricalStatsResult
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetKAnonymityResult() *AnalyzeDataSourceRiskDetails_KAnonymityResult {
+	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KAnonymityResult_); ok {
+		return x.KAnonymityResult
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetLDiversityResult() *AnalyzeDataSourceRiskDetails_LDiversityResult {
+	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_LDiversityResult_); ok {
+		return x.LDiversityResult
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails) GetKMapEstimationResult() *AnalyzeDataSourceRiskDetails_KMapEstimationResult {
+	if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_); ok {
+		return x.KMapEstimationResult
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AnalyzeDataSourceRiskDetails) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AnalyzeDataSourceRiskDetails_OneofMarshaler, _AnalyzeDataSourceRiskDetails_OneofUnmarshaler, _AnalyzeDataSourceRiskDetails_OneofSizer, []interface{}{
+		(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_)(nil),
+		(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_)(nil),
+		(*AnalyzeDataSourceRiskDetails_KAnonymityResult_)(nil),
+		(*AnalyzeDataSourceRiskDetails_LDiversityResult_)(nil),
+		(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_)(nil),
+	}
+}
+
+func _AnalyzeDataSourceRiskDetails_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AnalyzeDataSourceRiskDetails)
+	// result
+	switch x := m.Result.(type) {
+	case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.NumericalStatsResult); err != nil {
+			return err
+		}
+	case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CategoricalStatsResult); err != nil {
+			return err
+		}
+	case *AnalyzeDataSourceRiskDetails_KAnonymityResult_:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KAnonymityResult); err != nil {
+			return err
+		}
+	case *AnalyzeDataSourceRiskDetails_LDiversityResult_:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.LDiversityResult); err != nil {
+			return err
+		}
+	case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KMapEstimationResult); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("AnalyzeDataSourceRiskDetails.Result has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AnalyzeDataSourceRiskDetails_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AnalyzeDataSourceRiskDetails)
+	switch tag {
+	case 3: // result.numerical_stats_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails_NumericalStatsResult)
+		err := b.DecodeMessage(msg)
+		m.Result = &AnalyzeDataSourceRiskDetails_NumericalStatsResult_{msg}
+		return true, err
+	case 4: // result.categorical_stats_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails_CategoricalStatsResult)
+		err := b.DecodeMessage(msg)
+		m.Result = &AnalyzeDataSourceRiskDetails_CategoricalStatsResult_{msg}
+		return true, err
+	case 5: // result.k_anonymity_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails_KAnonymityResult)
+		err := b.DecodeMessage(msg)
+		m.Result = &AnalyzeDataSourceRiskDetails_KAnonymityResult_{msg}
+		return true, err
+	case 6: // result.l_diversity_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails_LDiversityResult)
+		err := b.DecodeMessage(msg)
+		m.Result = &AnalyzeDataSourceRiskDetails_LDiversityResult_{msg}
+		return true, err
+	case 7: // result.k_map_estimation_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails_KMapEstimationResult)
+		err := b.DecodeMessage(msg)
+		m.Result = &AnalyzeDataSourceRiskDetails_KMapEstimationResult_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AnalyzeDataSourceRiskDetails_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AnalyzeDataSourceRiskDetails)
+	// result
+	switch x := m.Result.(type) {
+	case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_:
+		s := proto.Size(x.NumericalStatsResult)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_:
+		s := proto.Size(x.CategoricalStatsResult)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AnalyzeDataSourceRiskDetails_KAnonymityResult_:
+		s := proto.Size(x.KAnonymityResult)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AnalyzeDataSourceRiskDetails_LDiversityResult_:
+		s := proto.Size(x.LDiversityResult)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_:
+		s := proto.Size(x.KMapEstimationResult)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Result of the numerical stats computation.
+type AnalyzeDataSourceRiskDetails_NumericalStatsResult struct {
+	// Minimum value appearing in the column.
+	MinValue *Value `protobuf:"bytes,1,opt,name=min_value,json=minValue" json:"min_value,omitempty"`
+	// Maximum value appearing in the column.
+	MaxValue *Value `protobuf:"bytes,2,opt,name=max_value,json=maxValue" json:"max_value,omitempty"`
+	// List of 99 values that partition the set of field values into 100 equal
+	// sized buckets.
+	QuantileValues []*Value `protobuf:"bytes,4,rep,name=quantile_values,json=quantileValues" json:"quantile_values,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_NumericalStatsResult{}
+}
+func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 0}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMinValue() *Value {
+	if m != nil {
+		return m.MinValue
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMaxValue() *Value {
+	if m != nil {
+		return m.MaxValue
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetQuantileValues() []*Value {
+	if m != nil {
+		return m.QuantileValues
+	}
+	return nil
+}
+
+// Result of the categorical stats computation.
+type AnalyzeDataSourceRiskDetails_CategoricalStatsResult struct {
+	// Histogram of value frequencies in the column.
+	ValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket `protobuf:"bytes,5,rep,name=value_frequency_histogram_buckets,json=valueFrequencyHistogramBuckets" json:"value_frequency_histogram_buckets,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult{}
+}
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 1}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) GetValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket {
+	if m != nil {
+		return m.ValueFrequencyHistogramBuckets
+	}
+	return nil
+}
+
+type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket struct {
+	// Lower bound on the value frequency of the values in this bucket.
+	ValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=value_frequency_lower_bound,json=valueFrequencyLowerBound" json:"value_frequency_lower_bound,omitempty"`
+	// Upper bound on the value frequency of the values in this bucket.
+	ValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=value_frequency_upper_bound,json=valueFrequencyUpperBound" json:"value_frequency_upper_bound,omitempty"`
+	// Total number of values in this bucket.
+	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
+	// Sample of value frequencies in this bucket. The total number of
+	// values returned per bucket is capped at 20.
+	BucketValues []*ValueFrequency `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
+	// Total number of distinct values in this bucket.
+	BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket{}
+}
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) ProtoMessage() {
+}
+func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 1, 0}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyLowerBound() int64 {
+	if m != nil {
+		return m.ValueFrequencyLowerBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyUpperBound() int64 {
+	if m != nil {
+		return m.ValueFrequencyUpperBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketSize() int64 {
+	if m != nil {
+		return m.BucketSize
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValues() []*ValueFrequency {
+	if m != nil {
+		return m.BucketValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValueCount() int64 {
+	if m != nil {
+		return m.BucketValueCount
+	}
+	return 0
+}
+
+// Result of the k-anonymity computation.
+type AnalyzeDataSourceRiskDetails_KAnonymityResult struct {
+	// Histogram of k-anonymity equivalence classes.
+	EquivalenceClassHistogramBuckets []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket `protobuf:"bytes,5,rep,name=equivalence_class_histogram_buckets,json=equivalenceClassHistogramBuckets" json:"equivalence_class_histogram_buckets,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KAnonymityResult{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 2}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) GetEquivalenceClassHistogramBuckets() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket {
+	if m != nil {
+		return m.EquivalenceClassHistogramBuckets
+	}
+	return nil
+}
+
+// The set of columns' values that share the same ldiversity value
+type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass struct {
+	// Set of values defining the equivalence class. One value per
+	// quasi-identifier column in the original KAnonymity metric message.
+	// The order is always the same as the original request.
+	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
+	// Size of the equivalence class, for example number of rows with the
+	// above set of values.
+	EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 2, 0}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetQuasiIdsValues() []*Value {
+	if m != nil {
+		return m.QuasiIdsValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetEquivalenceClassSize() int64 {
+	if m != nil {
+		return m.EquivalenceClassSize
+	}
+	return 0
+}
+
+type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket struct {
+	// Lower bound on the size of the equivalence classes in this bucket.
+	EquivalenceClassSizeLowerBound int64 `protobuf:"varint,1,opt,name=equivalence_class_size_lower_bound,json=equivalenceClassSizeLowerBound" json:"equivalence_class_size_lower_bound,omitempty"`
+	// Upper bound on the size of the equivalence classes in this bucket.
+	EquivalenceClassSizeUpperBound int64 `protobuf:"varint,2,opt,name=equivalence_class_size_upper_bound,json=equivalenceClassSizeUpperBound" json:"equivalence_class_size_upper_bound,omitempty"`
+	// Total number of equivalence classes in this bucket.
+	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
+	// Sample of equivalence classes in this bucket. The total number of
+	// classes returned per bucket is capped at 20.
+	BucketValues []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
+	// Total number of distinct equivalence classes in this bucket.
+	BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 2, 1}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeLowerBound() int64 {
+	if m != nil {
+		return m.EquivalenceClassSizeLowerBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeUpperBound() int64 {
+	if m != nil {
+		return m.EquivalenceClassSizeUpperBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketSize() int64 {
+	if m != nil {
+		return m.BucketSize
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass {
+	if m != nil {
+		return m.BucketValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValueCount() int64 {
+	if m != nil {
+		return m.BucketValueCount
+	}
+	return 0
+}
+
+// Result of the l-diversity computation.
+type AnalyzeDataSourceRiskDetails_LDiversityResult struct {
+	// Histogram of l-diversity equivalence class sensitive value frequencies.
+	SensitiveValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket `protobuf:"bytes,5,rep,name=sensitive_value_frequency_histogram_buckets,json=sensitiveValueFrequencyHistogramBuckets" json:"sensitive_value_frequency_histogram_buckets,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_LDiversityResult{}
+}
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 3}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) GetSensitiveValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket {
+	if m != nil {
+		return m.SensitiveValueFrequencyHistogramBuckets
+	}
+	return nil
+}
+
+// The set of columns' values that share the same ldiversity value.
+type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass struct {
+	// Quasi-identifier values defining the k-anonymity equivalence
+	// class. The order is always the same as the original request.
+	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
+	// Size of the k-anonymity equivalence class.
+	EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"`
+	// Number of distinct sensitive values in this equivalence class.
+	NumDistinctSensitiveValues int64 `protobuf:"varint,3,opt,name=num_distinct_sensitive_values,json=numDistinctSensitiveValues" json:"num_distinct_sensitive_values,omitempty"`
+	// Estimated frequencies of top sensitive values.
+	TopSensitiveValues []*ValueFrequency `protobuf:"bytes,4,rep,name=top_sensitive_values,json=topSensitiveValues" json:"top_sensitive_values,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass{}
+}
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 3, 0}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetQuasiIdsValues() []*Value {
+	if m != nil {
+		return m.QuasiIdsValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetEquivalenceClassSize() int64 {
+	if m != nil {
+		return m.EquivalenceClassSize
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetNumDistinctSensitiveValues() int64 {
+	if m != nil {
+		return m.NumDistinctSensitiveValues
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetTopSensitiveValues() []*ValueFrequency {
+	if m != nil {
+		return m.TopSensitiveValues
+	}
+	return nil
+}
+
+type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket struct {
+	// Lower bound on the sensitive value frequencies of the equivalence
+	// classes in this bucket.
+	SensitiveValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=sensitive_value_frequency_lower_bound,json=sensitiveValueFrequencyLowerBound" json:"sensitive_value_frequency_lower_bound,omitempty"`
+	// Upper bound on the sensitive value frequencies of the equivalence
+	// classes in this bucket.
+	SensitiveValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=sensitive_value_frequency_upper_bound,json=sensitiveValueFrequencyUpperBound" json:"sensitive_value_frequency_upper_bound,omitempty"`
+	// Total number of equivalence classes in this bucket.
+	BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
+	// Sample of equivalence classes in this bucket. The total number of
+	// classes returned per bucket is capped at 20.
+	BucketValues []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
+	// Total number of distinct equivalence classes in this bucket.
+	BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket{}
+}
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 3, 1}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyLowerBound() int64 {
+	if m != nil {
+		return m.SensitiveValueFrequencyLowerBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyUpperBound() int64 {
+	if m != nil {
+		return m.SensitiveValueFrequencyUpperBound
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketSize() int64 {
+	if m != nil {
+		return m.BucketSize
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass {
+	if m != nil {
+		return m.BucketValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValueCount() int64 {
+	if m != nil {
+		return m.BucketValueCount
+	}
+	return 0
+}
+
+// Result of the reidentifiability analysis. Note that these results are an
+// estimation, not exact values.
+type AnalyzeDataSourceRiskDetails_KMapEstimationResult struct {
+	// The intervals [min_anonymity, max_anonymity] do not overlap. If a value
+	// doesn't correspond to any such interval, the associated frequency is
+	// zero. For example, the following records:
+	//   {min_anonymity: 1, max_anonymity: 1, frequency: 17}
+	//   {min_anonymity: 2, max_anonymity: 3, frequency: 42}
+	//   {min_anonymity: 5, max_anonymity: 10, frequency: 99}
+	// mean that there are no record with an estimated anonymity of 4, 5, or
+	// larger than 10.
+	KMapEstimationHistogram []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket `protobuf:"bytes,1,rep,name=k_map_estimation_histogram,json=kMapEstimationHistogram" json:"k_map_estimation_histogram,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KMapEstimationResult{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 4}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) GetKMapEstimationHistogram() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket {
+	if m != nil {
+		return m.KMapEstimationHistogram
+	}
+	return nil
+}
+
+// A tuple of values for the quasi-identifier columns.
+type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues struct {
+	// The quasi-identifier values.
+	QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"`
+	// The estimated anonymity for these quasi-identifier values.
+	EstimatedAnonymity int64 `protobuf:"varint,2,opt,name=estimated_anonymity,json=estimatedAnonymity" json:"estimated_anonymity,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) ProtoMessage() {}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 4, 0}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetQuasiIdsValues() []*Value {
+	if m != nil {
+		return m.QuasiIdsValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetEstimatedAnonymity() int64 {
+	if m != nil {
+		return m.EstimatedAnonymity
+	}
+	return 0
+}
+
+// A KMapEstimationHistogramBucket message with the following values:
+//   min_anonymity: 3
+//   max_anonymity: 5
+//   frequency: 42
+// means that there are 42 records whose quasi-identifier values correspond
+// to 3, 4 or 5 people in the overlying population. An important particular
+// case is when min_anonymity = max_anonymity = 1: the frequency field then
+// corresponds to the number of uniquely identifiable records.
+type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket struct {
+	// Always positive.
+	MinAnonymity int64 `protobuf:"varint,1,opt,name=min_anonymity,json=minAnonymity" json:"min_anonymity,omitempty"`
+	// Always greater than or equal to min_anonymity.
+	MaxAnonymity int64 `protobuf:"varint,2,opt,name=max_anonymity,json=maxAnonymity" json:"max_anonymity,omitempty"`
+	// Number of records within these anonymity bounds.
+	BucketSize int64 `protobuf:"varint,5,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
+	// Sample of quasi-identifier tuple values in this bucket. The total
+	// number of classes returned per bucket is capped at 20.
+	BucketValues []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues `protobuf:"bytes,6,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"`
+	// Total number of distinct quasi-identifier tuple values in this bucket.
+	BucketValueCount int64 `protobuf:"varint,7,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"`
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Reset() {
+	*m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket{}
+}
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) ProtoMessage() {
+}
+func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{31, 4, 1}
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMinAnonymity() int64 {
+	if m != nil {
+		return m.MinAnonymity
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMaxAnonymity() int64 {
+	if m != nil {
+		return m.MaxAnonymity
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketSize() int64 {
+	if m != nil {
+		return m.BucketSize
+	}
+	return 0
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues {
+	if m != nil {
+		return m.BucketValues
+	}
+	return nil
+}
+
+func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValueCount() int64 {
+	if m != nil {
+		return m.BucketValueCount
+	}
+	return 0
+}
+
+// A value of a field, including its frequency.
+type ValueFrequency struct {
+	// A value contained in the field in question.
+	Value *Value `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"`
+	// How many times the value is contained in the field.
+	Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+}
+
+func (m *ValueFrequency) Reset()                    { *m = ValueFrequency{} }
+func (m *ValueFrequency) String() string            { return proto.CompactTextString(m) }
+func (*ValueFrequency) ProtoMessage()               {}
+func (*ValueFrequency) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
+
+func (m *ValueFrequency) GetValue() *Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *ValueFrequency) GetCount() int64 {
+	if m != nil {
+		return m.Count
+	}
+	return 0
+}
+
+// Set of primitive values supported by the system.
+// Note that for the purposes of inspection or transformation, the number
+// of bytes considered to comprise a 'Value' is based on its representation
+// as a UTF-8 encoded string. For example, if 'integer_value' is set to
+// 123456789, the number of bytes would be counted as 9, even though an
+// int64 only holds up to 8 bytes of data.
+type Value struct {
+	// Types that are valid to be assigned to Type:
+	//	*Value_IntegerValue
+	//	*Value_FloatValue
+	//	*Value_StringValue
+	//	*Value_BooleanValue
+	//	*Value_TimestampValue
+	//	*Value_TimeValue
+	//	*Value_DateValue
+	//	*Value_DayOfWeekValue
+	Type isValue_Type `protobuf_oneof:"type"`
+}
+
+func (m *Value) Reset()                    { *m = Value{} }
+func (m *Value) String() string            { return proto.CompactTextString(m) }
+func (*Value) ProtoMessage()               {}
+func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
+
+type isValue_Type interface {
+	isValue_Type()
+}
+
+type Value_IntegerValue struct {
+	IntegerValue int64 `protobuf:"varint,1,opt,name=integer_value,json=integerValue,oneof"`
+}
+type Value_FloatValue struct {
+	FloatValue float64 `protobuf:"fixed64,2,opt,name=float_value,json=floatValue,oneof"`
+}
+type Value_StringValue struct {
+	StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"`
+}
+type Value_BooleanValue struct {
+	BooleanValue bool `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue,oneof"`
+}
+type Value_TimestampValue struct {
+	TimestampValue *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=timestamp_value,json=timestampValue,oneof"`
+}
+type Value_TimeValue struct {
+	TimeValue *google_type2.TimeOfDay `protobuf:"bytes,6,opt,name=time_value,json=timeValue,oneof"`
+}
+type Value_DateValue struct {
+	DateValue *google_type.Date `protobuf:"bytes,7,opt,name=date_value,json=dateValue,oneof"`
+}
+type Value_DayOfWeekValue struct {
+	DayOfWeekValue google_type1.DayOfWeek `protobuf:"varint,8,opt,name=day_of_week_value,json=dayOfWeekValue,enum=google.type.DayOfWeek,oneof"`
+}
+
+func (*Value_IntegerValue) isValue_Type()   {}
+func (*Value_FloatValue) isValue_Type()     {}
+func (*Value_StringValue) isValue_Type()    {}
+func (*Value_BooleanValue) isValue_Type()   {}
+func (*Value_TimestampValue) isValue_Type() {}
+func (*Value_TimeValue) isValue_Type()      {}
+func (*Value_DateValue) isValue_Type()      {}
+func (*Value_DayOfWeekValue) isValue_Type() {}
+
+func (m *Value) GetType() isValue_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *Value) GetIntegerValue() int64 {
+	if x, ok := m.GetType().(*Value_IntegerValue); ok {
+		return x.IntegerValue
+	}
+	return 0
+}
+
+func (m *Value) GetFloatValue() float64 {
+	if x, ok := m.GetType().(*Value_FloatValue); ok {
+		return x.FloatValue
+	}
+	return 0
+}
+
+func (m *Value) GetStringValue() string {
+	if x, ok := m.GetType().(*Value_StringValue); ok {
+		return x.StringValue
+	}
+	return ""
+}
+
+func (m *Value) GetBooleanValue() bool {
+	if x, ok := m.GetType().(*Value_BooleanValue); ok {
+		return x.BooleanValue
+	}
+	return false
+}
+
+func (m *Value) GetTimestampValue() *google_protobuf1.Timestamp {
+	if x, ok := m.GetType().(*Value_TimestampValue); ok {
+		return x.TimestampValue
+	}
+	return nil
+}
+
+func (m *Value) GetTimeValue() *google_type2.TimeOfDay {
+	if x, ok := m.GetType().(*Value_TimeValue); ok {
+		return x.TimeValue
+	}
+	return nil
+}
+
+func (m *Value) GetDateValue() *google_type.Date {
+	if x, ok := m.GetType().(*Value_DateValue); ok {
+		return x.DateValue
+	}
+	return nil
+}
+
+func (m *Value) GetDayOfWeekValue() google_type1.DayOfWeek {
+	if x, ok := m.GetType().(*Value_DayOfWeekValue); ok {
+		return x.DayOfWeekValue
+	}
+	return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{
+		(*Value_IntegerValue)(nil),
+		(*Value_FloatValue)(nil),
+		(*Value_StringValue)(nil),
+		(*Value_BooleanValue)(nil),
+		(*Value_TimestampValue)(nil),
+		(*Value_TimeValue)(nil),
+		(*Value_DateValue)(nil),
+		(*Value_DayOfWeekValue)(nil),
+	}
+}
+
+func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Value)
+	// type
+	switch x := m.Type.(type) {
+	case *Value_IntegerValue:
+		b.EncodeVarint(1<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IntegerValue))
+	case *Value_FloatValue:
+		b.EncodeVarint(2<<3 | proto.WireFixed64)
+		b.EncodeFixed64(math.Float64bits(x.FloatValue))
+	case *Value_StringValue:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.StringValue)
+	case *Value_BooleanValue:
+		t := uint64(0)
+		if x.BooleanValue {
+			t = 1
+		}
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(t)
+	case *Value_TimestampValue:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TimestampValue); err != nil {
+			return err
+		}
+	case *Value_TimeValue:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TimeValue); err != nil {
+			return err
+		}
+	case *Value_DateValue:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DateValue); err != nil {
+			return err
+		}
+	case *Value_DayOfWeekValue:
+		b.EncodeVarint(8<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DayOfWeekValue))
+	case nil:
+	default:
+		return fmt.Errorf("Value.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Value)
+	switch tag {
+	case 1: // type.integer_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Type = &Value_IntegerValue{int64(x)}
+		return true, err
+	case 2: // type.float_value
+		if wire != proto.WireFixed64 {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeFixed64()
+		m.Type = &Value_FloatValue{math.Float64frombits(x)}
+		return true, err
+	case 3: // type.string_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Type = &Value_StringValue{x}
+		return true, err
+	case 4: // type.boolean_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Type = &Value_BooleanValue{x != 0}
+		return true, err
+	case 5: // type.timestamp_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(google_protobuf1.Timestamp)
+		err := b.DecodeMessage(msg)
+		m.Type = &Value_TimestampValue{msg}
+		return true, err
+	case 6: // type.time_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(google_type2.TimeOfDay)
+		err := b.DecodeMessage(msg)
+		m.Type = &Value_TimeValue{msg}
+		return true, err
+	case 7: // type.date_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(google_type.Date)
+		err := b.DecodeMessage(msg)
+		m.Type = &Value_DateValue{msg}
+		return true, err
+	case 8: // type.day_of_week_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Type = &Value_DayOfWeekValue{google_type1.DayOfWeek(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Value_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Value)
+	// type
+	switch x := m.Type.(type) {
+	case *Value_IntegerValue:
+		n += proto.SizeVarint(1<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.IntegerValue))
+	case *Value_FloatValue:
+		n += proto.SizeVarint(2<<3 | proto.WireFixed64)
+		n += 8
+	case *Value_StringValue:
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.StringValue)))
+		n += len(x.StringValue)
+	case *Value_BooleanValue:
+		n += proto.SizeVarint(4<<3 | proto.WireVarint)
+		n += 1
+	case *Value_TimestampValue:
+		s := proto.Size(x.TimestampValue)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Value_TimeValue:
+		s := proto.Size(x.TimeValue)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Value_DateValue:
+		s := proto.Size(x.DateValue)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Value_DayOfWeekValue:
+		n += proto.SizeVarint(8<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.DayOfWeekValue))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message for infoType-dependent details parsed from quote.
+type QuoteInfo struct {
+	// Object representation of the quote.
+	//
+	// Types that are valid to be assigned to ParsedQuote:
+	//	*QuoteInfo_DateTime
+	ParsedQuote isQuoteInfo_ParsedQuote `protobuf_oneof:"parsed_quote"`
+}
+
+func (m *QuoteInfo) Reset()                    { *m = QuoteInfo{} }
+func (m *QuoteInfo) String() string            { return proto.CompactTextString(m) }
+func (*QuoteInfo) ProtoMessage()               {}
+func (*QuoteInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
+
+type isQuoteInfo_ParsedQuote interface {
+	isQuoteInfo_ParsedQuote()
+}
+
+type QuoteInfo_DateTime struct {
+	DateTime *DateTime `protobuf:"bytes,2,opt,name=date_time,json=dateTime,oneof"`
+}
+
+func (*QuoteInfo_DateTime) isQuoteInfo_ParsedQuote() {}
+
+func (m *QuoteInfo) GetParsedQuote() isQuoteInfo_ParsedQuote {
+	if m != nil {
+		return m.ParsedQuote
+	}
+	return nil
+}
+
+func (m *QuoteInfo) GetDateTime() *DateTime {
+	if x, ok := m.GetParsedQuote().(*QuoteInfo_DateTime); ok {
+		return x.DateTime
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*QuoteInfo) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _QuoteInfo_OneofMarshaler, _QuoteInfo_OneofUnmarshaler, _QuoteInfo_OneofSizer, []interface{}{
+		(*QuoteInfo_DateTime)(nil),
+	}
+}
+
+func _QuoteInfo_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*QuoteInfo)
+	// parsed_quote
+	switch x := m.ParsedQuote.(type) {
+	case *QuoteInfo_DateTime:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DateTime); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("QuoteInfo.ParsedQuote has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _QuoteInfo_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*QuoteInfo)
+	switch tag {
+	case 2: // parsed_quote.date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DateTime)
+		err := b.DecodeMessage(msg)
+		m.ParsedQuote = &QuoteInfo_DateTime{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _QuoteInfo_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*QuoteInfo)
+	// parsed_quote
+	switch x := m.ParsedQuote.(type) {
+	case *QuoteInfo_DateTime:
+		s := proto.Size(x.DateTime)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message for a date time object.
+type DateTime struct {
+	// One or more of the following must be set. All fields are optional, but
+	// when set must be valid date or time values.
+	Date      *google_type.Date       `protobuf:"bytes,1,opt,name=date" json:"date,omitempty"`
+	DayOfWeek google_type1.DayOfWeek  `protobuf:"varint,2,opt,name=day_of_week,json=dayOfWeek,enum=google.type.DayOfWeek" json:"day_of_week,omitempty"`
+	Time      *google_type2.TimeOfDay `protobuf:"bytes,3,opt,name=time" json:"time,omitempty"`
+	TimeZone  *DateTime_TimeZone      `protobuf:"bytes,4,opt,name=time_zone,json=timeZone" json:"time_zone,omitempty"`
+}
+
+func (m *DateTime) Reset()                    { *m = DateTime{} }
+func (m *DateTime) String() string            { return proto.CompactTextString(m) }
+func (*DateTime) ProtoMessage()               {}
+func (*DateTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
+
+func (m *DateTime) GetDate() *google_type.Date {
+	if m != nil {
+		return m.Date
+	}
+	return nil
+}
+
+func (m *DateTime) GetDayOfWeek() google_type1.DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED
+}
+
+func (m *DateTime) GetTime() *google_type2.TimeOfDay {
+	if m != nil {
+		return m.Time
+	}
+	return nil
+}
+
+func (m *DateTime) GetTimeZone() *DateTime_TimeZone {
+	if m != nil {
+		return m.TimeZone
+	}
+	return nil
+}
+
+type DateTime_TimeZone struct {
+	// Set only if the offset can be determined. Positive for time ahead of UTC.
+	// E.g. For "UTC-9", this value is -540.
+	OffsetMinutes int32 `protobuf:"varint,1,opt,name=offset_minutes,json=offsetMinutes" json:"offset_minutes,omitempty"`
+}
+
+func (m *DateTime_TimeZone) Reset()                    { *m = DateTime_TimeZone{} }
+func (m *DateTime_TimeZone) String() string            { return proto.CompactTextString(m) }
+func (*DateTime_TimeZone) ProtoMessage()               {}
+func (*DateTime_TimeZone) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35, 0} }
+
+func (m *DateTime_TimeZone) GetOffsetMinutes() int32 {
+	if m != nil {
+		return m.OffsetMinutes
+	}
+	return 0
+}
+
+// The configuration that controls how the data will change.
+type DeidentifyConfig struct {
+	// Types that are valid to be assigned to Transformation:
+	//	*DeidentifyConfig_InfoTypeTransformations
+	//	*DeidentifyConfig_RecordTransformations
+	Transformation isDeidentifyConfig_Transformation `protobuf_oneof:"transformation"`
+}
+
+func (m *DeidentifyConfig) Reset()                    { *m = DeidentifyConfig{} }
+func (m *DeidentifyConfig) String() string            { return proto.CompactTextString(m) }
+func (*DeidentifyConfig) ProtoMessage()               {}
+func (*DeidentifyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
+
+type isDeidentifyConfig_Transformation interface {
+	isDeidentifyConfig_Transformation()
+}
+
+type DeidentifyConfig_InfoTypeTransformations struct {
+	InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,1,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"`
+}
+type DeidentifyConfig_RecordTransformations struct {
+	RecordTransformations *RecordTransformations `protobuf:"bytes,2,opt,name=record_transformations,json=recordTransformations,oneof"`
+}
+
+func (*DeidentifyConfig_InfoTypeTransformations) isDeidentifyConfig_Transformation() {}
+func (*DeidentifyConfig_RecordTransformations) isDeidentifyConfig_Transformation()   {}
+
+func (m *DeidentifyConfig) GetTransformation() isDeidentifyConfig_Transformation {
+	if m != nil {
+		return m.Transformation
+	}
+	return nil
+}
+
+func (m *DeidentifyConfig) GetInfoTypeTransformations() *InfoTypeTransformations {
+	if x, ok := m.GetTransformation().(*DeidentifyConfig_InfoTypeTransformations); ok {
+		return x.InfoTypeTransformations
+	}
+	return nil
+}
+
+func (m *DeidentifyConfig) GetRecordTransformations() *RecordTransformations {
+	if x, ok := m.GetTransformation().(*DeidentifyConfig_RecordTransformations); ok {
+		return x.RecordTransformations
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*DeidentifyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _DeidentifyConfig_OneofMarshaler, _DeidentifyConfig_OneofUnmarshaler, _DeidentifyConfig_OneofSizer, []interface{}{
+		(*DeidentifyConfig_InfoTypeTransformations)(nil),
+		(*DeidentifyConfig_RecordTransformations)(nil),
+	}
+}
+
+func _DeidentifyConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*DeidentifyConfig)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *DeidentifyConfig_InfoTypeTransformations:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil {
+			return err
+		}
+	case *DeidentifyConfig_RecordTransformations:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RecordTransformations); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("DeidentifyConfig.Transformation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _DeidentifyConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*DeidentifyConfig)
+	switch tag {
+	case 1: // transformation.info_type_transformations
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InfoTypeTransformations)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &DeidentifyConfig_InfoTypeTransformations{msg}
+		return true, err
+	case 2: // transformation.record_transformations
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(RecordTransformations)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &DeidentifyConfig_RecordTransformations{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _DeidentifyConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*DeidentifyConfig)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *DeidentifyConfig_InfoTypeTransformations:
+		s := proto.Size(x.InfoTypeTransformations)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *DeidentifyConfig_RecordTransformations:
+		s := proto.Size(x.RecordTransformations)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A rule for transforming a value.
+type PrimitiveTransformation struct {
+	// Types that are valid to be assigned to Transformation:
+	//	*PrimitiveTransformation_ReplaceConfig
+	//	*PrimitiveTransformation_RedactConfig
+	//	*PrimitiveTransformation_CharacterMaskConfig
+	//	*PrimitiveTransformation_CryptoReplaceFfxFpeConfig
+	//	*PrimitiveTransformation_FixedSizeBucketingConfig
+	//	*PrimitiveTransformation_BucketingConfig
+	//	*PrimitiveTransformation_ReplaceWithInfoTypeConfig
+	//	*PrimitiveTransformation_TimePartConfig
+	//	*PrimitiveTransformation_CryptoHashConfig
+	//	*PrimitiveTransformation_DateShiftConfig
+	Transformation isPrimitiveTransformation_Transformation `protobuf_oneof:"transformation"`
+}
+
+func (m *PrimitiveTransformation) Reset()                    { *m = PrimitiveTransformation{} }
+func (m *PrimitiveTransformation) String() string            { return proto.CompactTextString(m) }
+func (*PrimitiveTransformation) ProtoMessage()               {}
+func (*PrimitiveTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
+
+type isPrimitiveTransformation_Transformation interface {
+	isPrimitiveTransformation_Transformation()
+}
+
+type PrimitiveTransformation_ReplaceConfig struct {
+	ReplaceConfig *ReplaceValueConfig `protobuf:"bytes,1,opt,name=replace_config,json=replaceConfig,oneof"`
+}
+type PrimitiveTransformation_RedactConfig struct {
+	RedactConfig *RedactConfig `protobuf:"bytes,2,opt,name=redact_config,json=redactConfig,oneof"`
+}
+type PrimitiveTransformation_CharacterMaskConfig struct {
+	CharacterMaskConfig *CharacterMaskConfig `protobuf:"bytes,3,opt,name=character_mask_config,json=characterMaskConfig,oneof"`
+}
+type PrimitiveTransformation_CryptoReplaceFfxFpeConfig struct {
+	CryptoReplaceFfxFpeConfig *CryptoReplaceFfxFpeConfig `protobuf:"bytes,4,opt,name=crypto_replace_ffx_fpe_config,json=cryptoReplaceFfxFpeConfig,oneof"`
+}
+type PrimitiveTransformation_FixedSizeBucketingConfig struct {
+	FixedSizeBucketingConfig *FixedSizeBucketingConfig `protobuf:"bytes,5,opt,name=fixed_size_bucketing_config,json=fixedSizeBucketingConfig,oneof"`
+}
+type PrimitiveTransformation_BucketingConfig struct {
+	BucketingConfig *BucketingConfig `protobuf:"bytes,6,opt,name=bucketing_config,json=bucketingConfig,oneof"`
+}
+type PrimitiveTransformation_ReplaceWithInfoTypeConfig struct {
+	ReplaceWithInfoTypeConfig *ReplaceWithInfoTypeConfig `protobuf:"bytes,7,opt,name=replace_with_info_type_config,json=replaceWithInfoTypeConfig,oneof"`
+}
+type PrimitiveTransformation_TimePartConfig struct {
+	TimePartConfig *TimePartConfig `protobuf:"bytes,8,opt,name=time_part_config,json=timePartConfig,oneof"`
+}
+type PrimitiveTransformation_CryptoHashConfig struct {
+	CryptoHashConfig *CryptoHashConfig `protobuf:"bytes,9,opt,name=crypto_hash_config,json=cryptoHashConfig,oneof"`
+}
+type PrimitiveTransformation_DateShiftConfig struct {
+	DateShiftConfig *DateShiftConfig `protobuf:"bytes,11,opt,name=date_shift_config,json=dateShiftConfig,oneof"`
+}
+
+func (*PrimitiveTransformation_ReplaceConfig) isPrimitiveTransformation_Transformation()             {}
+func (*PrimitiveTransformation_RedactConfig) isPrimitiveTransformation_Transformation()              {}
+func (*PrimitiveTransformation_CharacterMaskConfig) isPrimitiveTransformation_Transformation()       {}
+func (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig) isPrimitiveTransformation_Transformation() {}
+func (*PrimitiveTransformation_FixedSizeBucketingConfig) isPrimitiveTransformation_Transformation()  {}
+func (*PrimitiveTransformation_BucketingConfig) isPrimitiveTransformation_Transformation()           {}
+func (*PrimitiveTransformation_ReplaceWithInfoTypeConfig) isPrimitiveTransformation_Transformation() {}
+func (*PrimitiveTransformation_TimePartConfig) isPrimitiveTransformation_Transformation()            {}
+func (*PrimitiveTransformation_CryptoHashConfig) isPrimitiveTransformation_Transformation()          {}
+func (*PrimitiveTransformation_DateShiftConfig) isPrimitiveTransformation_Transformation()           {}
+
+func (m *PrimitiveTransformation) GetTransformation() isPrimitiveTransformation_Transformation {
+	if m != nil {
+		return m.Transformation
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetReplaceConfig() *ReplaceValueConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceConfig); ok {
+		return x.ReplaceConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetRedactConfig() *RedactConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_RedactConfig); ok {
+		return x.RedactConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetCharacterMaskConfig() *CharacterMaskConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CharacterMaskConfig); ok {
+		return x.CharacterMaskConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetCryptoReplaceFfxFpeConfig() *CryptoReplaceFfxFpeConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig); ok {
+		return x.CryptoReplaceFfxFpeConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetFixedSizeBucketingConfig() *FixedSizeBucketingConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_FixedSizeBucketingConfig); ok {
+		return x.FixedSizeBucketingConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetBucketingConfig() *BucketingConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_BucketingConfig); ok {
+		return x.BucketingConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetReplaceWithInfoTypeConfig() *ReplaceWithInfoTypeConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceWithInfoTypeConfig); ok {
+		return x.ReplaceWithInfoTypeConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetTimePartConfig() *TimePartConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_TimePartConfig); ok {
+		return x.TimePartConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetCryptoHashConfig() *CryptoHashConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoHashConfig); ok {
+		return x.CryptoHashConfig
+	}
+	return nil
+}
+
+func (m *PrimitiveTransformation) GetDateShiftConfig() *DateShiftConfig {
+	if x, ok := m.GetTransformation().(*PrimitiveTransformation_DateShiftConfig); ok {
+		return x.DateShiftConfig
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PrimitiveTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PrimitiveTransformation_OneofMarshaler, _PrimitiveTransformation_OneofUnmarshaler, _PrimitiveTransformation_OneofSizer, []interface{}{
+		(*PrimitiveTransformation_ReplaceConfig)(nil),
+		(*PrimitiveTransformation_RedactConfig)(nil),
+		(*PrimitiveTransformation_CharacterMaskConfig)(nil),
+		(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig)(nil),
+		(*PrimitiveTransformation_FixedSizeBucketingConfig)(nil),
+		(*PrimitiveTransformation_BucketingConfig)(nil),
+		(*PrimitiveTransformation_ReplaceWithInfoTypeConfig)(nil),
+		(*PrimitiveTransformation_TimePartConfig)(nil),
+		(*PrimitiveTransformation_CryptoHashConfig)(nil),
+		(*PrimitiveTransformation_DateShiftConfig)(nil),
+	}
+}
+
+func _PrimitiveTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PrimitiveTransformation)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *PrimitiveTransformation_ReplaceConfig:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ReplaceConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_RedactConfig:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RedactConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_CharacterMaskConfig:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CharacterMaskConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CryptoReplaceFfxFpeConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_FixedSizeBucketingConfig:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.FixedSizeBucketingConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_BucketingConfig:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BucketingConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_ReplaceWithInfoTypeConfig:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ReplaceWithInfoTypeConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_TimePartConfig:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TimePartConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_CryptoHashConfig:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CryptoHashConfig); err != nil {
+			return err
+		}
+	case *PrimitiveTransformation_DateShiftConfig:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DateShiftConfig); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PrimitiveTransformation.Transformation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PrimitiveTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PrimitiveTransformation)
+	switch tag {
+	case 1: // transformation.replace_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ReplaceValueConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_ReplaceConfig{msg}
+		return true, err
+	case 2: // transformation.redact_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(RedactConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_RedactConfig{msg}
+		return true, err
+	case 3: // transformation.character_mask_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CharacterMaskConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_CharacterMaskConfig{msg}
+		return true, err
+	case 4: // transformation.crypto_replace_ffx_fpe_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CryptoReplaceFfxFpeConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_CryptoReplaceFfxFpeConfig{msg}
+		return true, err
+	case 5: // transformation.fixed_size_bucketing_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(FixedSizeBucketingConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_FixedSizeBucketingConfig{msg}
+		return true, err
+	case 6: // transformation.bucketing_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BucketingConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_BucketingConfig{msg}
+		return true, err
+	case 7: // transformation.replace_with_info_type_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ReplaceWithInfoTypeConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_ReplaceWithInfoTypeConfig{msg}
+		return true, err
+	case 8: // transformation.time_part_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(TimePartConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_TimePartConfig{msg}
+		return true, err
+	case 9: // transformation.crypto_hash_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CryptoHashConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_CryptoHashConfig{msg}
+		return true, err
+	case 11: // transformation.date_shift_config
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DateShiftConfig)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &PrimitiveTransformation_DateShiftConfig{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PrimitiveTransformation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PrimitiveTransformation)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *PrimitiveTransformation_ReplaceConfig:
+		s := proto.Size(x.ReplaceConfig)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_RedactConfig:
+		s := proto.Size(x.RedactConfig)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_CharacterMaskConfig:
+		s := proto.Size(x.CharacterMaskConfig)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig:
+		s := proto.Size(x.CryptoReplaceFfxFpeConfig)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_FixedSizeBucketingConfig:
+		s := proto.Size(x.FixedSizeBucketingConfig)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_BucketingConfig:
+		s := proto.Size(x.BucketingConfig)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_ReplaceWithInfoTypeConfig:
+		s := proto.Size(x.ReplaceWithInfoTypeConfig)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_TimePartConfig:
+		s := proto.Size(x.TimePartConfig)
+		n += proto.SizeVarint(8<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_CryptoHashConfig:
+		s := proto.Size(x.CryptoHashConfig)
+		n += proto.SizeVarint(9<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PrimitiveTransformation_DateShiftConfig:
+		s := proto.Size(x.DateShiftConfig)
+		n += proto.SizeVarint(11<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a
+// portion of the value.
+type TimePartConfig struct {
+	PartToExtract TimePartConfig_TimePart `protobuf:"varint,1,opt,name=part_to_extract,json=partToExtract,enum=google.privacy.dlp.v2.TimePartConfig_TimePart" json:"part_to_extract,omitempty"`
+}
+
+func (m *TimePartConfig) Reset()                    { *m = TimePartConfig{} }
+func (m *TimePartConfig) String() string            { return proto.CompactTextString(m) }
+func (*TimePartConfig) ProtoMessage()               {}
+func (*TimePartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
+
+func (m *TimePartConfig) GetPartToExtract() TimePartConfig_TimePart {
+	if m != nil {
+		return m.PartToExtract
+	}
+	return TimePartConfig_TIME_PART_UNSPECIFIED
+}
+
+// Pseudonymization method that generates surrogates via cryptographic hashing.
+// Uses SHA-256.
+// The key size must be either 32 or 64 bytes.
+// Outputs a 32 byte digest as an uppercase hex string
+// (for example, 41D1567F7F99F1DC2A5FAB886DEE5BEE).
+// Currently, only string and integer values can be hashed.
+type CryptoHashConfig struct {
+	// The key used by the hash function.
+	CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"`
+}
+
+func (m *CryptoHashConfig) Reset()                    { *m = CryptoHashConfig{} }
+func (m *CryptoHashConfig) String() string            { return proto.CompactTextString(m) }
+func (*CryptoHashConfig) ProtoMessage()               {}
+func (*CryptoHashConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
+
+func (m *CryptoHashConfig) GetCryptoKey() *CryptoKey {
+	if m != nil {
+		return m.CryptoKey
+	}
+	return nil
+}
+
+// Replace each input value with a given `Value`.
+type ReplaceValueConfig struct {
+	// Value to replace it with.
+	NewValue *Value `protobuf:"bytes,1,opt,name=new_value,json=newValue" json:"new_value,omitempty"`
+}
+
+func (m *ReplaceValueConfig) Reset()                    { *m = ReplaceValueConfig{} }
+func (m *ReplaceValueConfig) String() string            { return proto.CompactTextString(m) }
+func (*ReplaceValueConfig) ProtoMessage()               {}
+func (*ReplaceValueConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
+
+func (m *ReplaceValueConfig) GetNewValue() *Value {
+	if m != nil {
+		return m.NewValue
+	}
+	return nil
+}
+
+// Replace each matching finding with the name of the info_type.
+type ReplaceWithInfoTypeConfig struct {
+}
+
+func (m *ReplaceWithInfoTypeConfig) Reset()                    { *m = ReplaceWithInfoTypeConfig{} }
+func (m *ReplaceWithInfoTypeConfig) String() string            { return proto.CompactTextString(m) }
+func (*ReplaceWithInfoTypeConfig) ProtoMessage()               {}
+func (*ReplaceWithInfoTypeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
+
+// Redact a given value. For example, if used with an `InfoTypeTransformation`
+// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the
+// output would be 'My phone number is '.
+type RedactConfig struct {
+}
+
+func (m *RedactConfig) Reset()                    { *m = RedactConfig{} }
+func (m *RedactConfig) String() string            { return proto.CompactTextString(m) }
+func (*RedactConfig) ProtoMessage()               {}
+func (*RedactConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
+
+// Characters to skip when doing deidentification of a value. These will be left
+// alone and skipped.
+type CharsToIgnore struct {
+	// Types that are valid to be assigned to Characters:
+	//	*CharsToIgnore_CharactersToSkip
+	//	*CharsToIgnore_CommonCharactersToIgnore
+	Characters isCharsToIgnore_Characters `protobuf_oneof:"characters"`
+}
+
+func (m *CharsToIgnore) Reset()                    { *m = CharsToIgnore{} }
+func (m *CharsToIgnore) String() string            { return proto.CompactTextString(m) }
+func (*CharsToIgnore) ProtoMessage()               {}
+func (*CharsToIgnore) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
+
+type isCharsToIgnore_Characters interface {
+	isCharsToIgnore_Characters()
+}
+
+type CharsToIgnore_CharactersToSkip struct {
+	CharactersToSkip string `protobuf:"bytes,1,opt,name=characters_to_skip,json=charactersToSkip,oneof"`
+}
+type CharsToIgnore_CommonCharactersToIgnore struct {
+	CommonCharactersToIgnore CharsToIgnore_CommonCharsToIgnore `protobuf:"varint,2,opt,name=common_characters_to_ignore,json=commonCharactersToIgnore,enum=google.privacy.dlp.v2.CharsToIgnore_CommonCharsToIgnore,oneof"`
+}
+
+func (*CharsToIgnore_CharactersToSkip) isCharsToIgnore_Characters()         {}
+func (*CharsToIgnore_CommonCharactersToIgnore) isCharsToIgnore_Characters() {}
+
+func (m *CharsToIgnore) GetCharacters() isCharsToIgnore_Characters {
+	if m != nil {
+		return m.Characters
+	}
+	return nil
+}
+
+func (m *CharsToIgnore) GetCharactersToSkip() string {
+	if x, ok := m.GetCharacters().(*CharsToIgnore_CharactersToSkip); ok {
+		return x.CharactersToSkip
+	}
+	return ""
+}
+
+func (m *CharsToIgnore) GetCommonCharactersToIgnore() CharsToIgnore_CommonCharsToIgnore {
+	if x, ok := m.GetCharacters().(*CharsToIgnore_CommonCharactersToIgnore); ok {
+		return x.CommonCharactersToIgnore
+	}
+	return CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CharsToIgnore) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CharsToIgnore_OneofMarshaler, _CharsToIgnore_OneofUnmarshaler, _CharsToIgnore_OneofSizer, []interface{}{
+		(*CharsToIgnore_CharactersToSkip)(nil),
+		(*CharsToIgnore_CommonCharactersToIgnore)(nil),
+	}
+}
+
+func _CharsToIgnore_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CharsToIgnore)
+	// characters
+	switch x := m.Characters.(type) {
+	case *CharsToIgnore_CharactersToSkip:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.CharactersToSkip)
+	case *CharsToIgnore_CommonCharactersToIgnore:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CommonCharactersToIgnore))
+	case nil:
+	default:
+		return fmt.Errorf("CharsToIgnore.Characters has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CharsToIgnore_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CharsToIgnore)
+	switch tag {
+	case 1: // characters.characters_to_skip
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Characters = &CharsToIgnore_CharactersToSkip{x}
+		return true, err
+	case 2: // characters.common_characters_to_ignore
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Characters = &CharsToIgnore_CommonCharactersToIgnore{CharsToIgnore_CommonCharsToIgnore(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CharsToIgnore_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CharsToIgnore)
+	// characters
+	switch x := m.Characters.(type) {
+	case *CharsToIgnore_CharactersToSkip:
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.CharactersToSkip)))
+		n += len(x.CharactersToSkip)
+	case *CharsToIgnore_CommonCharactersToIgnore:
+		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.CommonCharactersToIgnore))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Partially mask a string by replacing a given number of characters with a
+// fixed character. Masking can start from the beginning or end of the string.
+// This can be used on data of any type (numbers, longs, and so on) and when
+// de-identifying structured data we'll attempt to preserve the original data's
+// type. (This allows you to take a long like 123 and modify it to a string like
+// **3.
+type CharacterMaskConfig struct {
+	// Character to mask the sensitive values&mdash;for example, "*" for an
+	// alphabetic string such as name, or "0" for a numeric string such as ZIP
+	// code or credit card number. String must have length 1. If not supplied, we
+	// will default to "*" for strings, 0 for digits.
+	MaskingCharacter string `protobuf:"bytes,1,opt,name=masking_character,json=maskingCharacter" json:"masking_character,omitempty"`
+	// Number of characters to mask. If not set, all matching chars will be
+	// masked. Skipped characters do not count towards this tally.
+	NumberToMask int32 `protobuf:"varint,2,opt,name=number_to_mask,json=numberToMask" json:"number_to_mask,omitempty"`
+	// Mask characters in reverse order. For example, if `masking_character` is
+	// '0', number_to_mask is 14, and `reverse_order` is false, then
+	// 1234-5678-9012-3456 -> 00000000000000-3456
+	// If `masking_character` is '*', `number_to_mask` is 3, and `reverse_order`
+	// is true, then 12345 -> 12***
+	ReverseOrder bool `protobuf:"varint,3,opt,name=reverse_order,json=reverseOrder" json:"reverse_order,omitempty"`
+	// When masking a string, items in this list will be skipped when replacing.
+	// For example, if your string is 555-555-5555 and you ask us to skip `-` and
+	// mask 5 chars with * we would produce ***-*55-5555.
+	CharactersToIgnore []*CharsToIgnore `protobuf:"bytes,4,rep,name=characters_to_ignore,json=charactersToIgnore" json:"characters_to_ignore,omitempty"`
+}
+
+func (m *CharacterMaskConfig) Reset()                    { *m = CharacterMaskConfig{} }
+func (m *CharacterMaskConfig) String() string            { return proto.CompactTextString(m) }
+func (*CharacterMaskConfig) ProtoMessage()               {}
+func (*CharacterMaskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
+
+func (m *CharacterMaskConfig) GetMaskingCharacter() string {
+	if m != nil {
+		return m.MaskingCharacter
+	}
+	return ""
+}
+
+func (m *CharacterMaskConfig) GetNumberToMask() int32 {
+	if m != nil {
+		return m.NumberToMask
+	}
+	return 0
+}
+
+func (m *CharacterMaskConfig) GetReverseOrder() bool {
+	if m != nil {
+		return m.ReverseOrder
+	}
+	return false
+}
+
+func (m *CharacterMaskConfig) GetCharactersToIgnore() []*CharsToIgnore {
+	if m != nil {
+		return m.CharactersToIgnore
+	}
+	return nil
+}
+
+// Buckets values based on fixed size ranges. The
+// Bucketing transformation can provide all of this functionality,
+// but requires more configuration. This message is provided as a convenience to
+// the user for simple bucketing strategies.
+//
+// The transformed value will be a hyphenated string of
+// <lower_bound>-<upper_bound>, i.e if lower_bound = 10 and upper_bound = 20
+// all values that are within this bucket will be replaced with "10-20".
+//
+// This can be used on data of type: double, long.
+//
+// If the bound Value type differs from the type of data
+// being transformed, we will first attempt converting the type of the data to
+// be transformed to match the type of the bound before comparing.
+type FixedSizeBucketingConfig struct {
+	// Lower bound value of buckets. All values less than `lower_bound` are
+	// grouped together into a single bucket; for example if `lower_bound` = 10,
+	// then all values less than 10 are replaced with the value “-10”. [Required].
+	LowerBound *Value `protobuf:"bytes,1,opt,name=lower_bound,json=lowerBound" json:"lower_bound,omitempty"`
+	// Upper bound value of buckets. All values greater than upper_bound are
+	// grouped together into a single bucket; for example if `upper_bound` = 89,
+	// then all values greater than 89 are replaced with the value “89+”.
+	// [Required].
+	UpperBound *Value `protobuf:"bytes,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
+	// Size of each bucket (except for minimum and maximum buckets). So if
+	// `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the
+	// following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60,
+	// 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. [Required].
+	BucketSize float64 `protobuf:"fixed64,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"`
+}
+
+func (m *FixedSizeBucketingConfig) Reset()                    { *m = FixedSizeBucketingConfig{} }
+func (m *FixedSizeBucketingConfig) String() string            { return proto.CompactTextString(m) }
+func (*FixedSizeBucketingConfig) ProtoMessage()               {}
+func (*FixedSizeBucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
+
+func (m *FixedSizeBucketingConfig) GetLowerBound() *Value {
+	if m != nil {
+		return m.LowerBound
+	}
+	return nil
+}
+
+func (m *FixedSizeBucketingConfig) GetUpperBound() *Value {
+	if m != nil {
+		return m.UpperBound
+	}
+	return nil
+}
+
+func (m *FixedSizeBucketingConfig) GetBucketSize() float64 {
+	if m != nil {
+		return m.BucketSize
+	}
+	return 0
+}
+
+// Generalization function that buckets values based on ranges. The ranges and
+// replacement values are dynamically provided by the user for custom behavior,
+// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH
+// This can be used on
+// data of type: number, long, string, timestamp.
+// If the bound `Value` type differs from the type of data being transformed, we
+// will first attempt converting the type of the data to be transformed to match
+// the type of the bound before comparing.
+type BucketingConfig struct {
+	// Set of buckets. Ranges must be non-overlapping.
+	Buckets []*BucketingConfig_Bucket `protobuf:"bytes,1,rep,name=buckets" json:"buckets,omitempty"`
+}
+
+func (m *BucketingConfig) Reset()                    { *m = BucketingConfig{} }
+func (m *BucketingConfig) String() string            { return proto.CompactTextString(m) }
+func (*BucketingConfig) ProtoMessage()               {}
+func (*BucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
+
+func (m *BucketingConfig) GetBuckets() []*BucketingConfig_Bucket {
+	if m != nil {
+		return m.Buckets
+	}
+	return nil
+}
+
+// Bucket is represented as a range, along with replacement values.
+type BucketingConfig_Bucket struct {
+	// Lower bound of the range, inclusive. Type should be the same as max if
+	// used.
+	Min *Value `protobuf:"bytes,1,opt,name=min" json:"min,omitempty"`
+	// Upper bound of the range, exclusive; type must match min.
+	Max *Value `protobuf:"bytes,2,opt,name=max" json:"max,omitempty"`
+	// Replacement value for this bucket. If not provided
+	// the default behavior will be to hyphenate the min-max range.
+	ReplacementValue *Value `protobuf:"bytes,3,opt,name=replacement_value,json=replacementValue" json:"replacement_value,omitempty"`
+}
+
+func (m *BucketingConfig_Bucket) Reset()                    { *m = BucketingConfig_Bucket{} }
+func (m *BucketingConfig_Bucket) String() string            { return proto.CompactTextString(m) }
+func (*BucketingConfig_Bucket) ProtoMessage()               {}
+func (*BucketingConfig_Bucket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46, 0} }
+
+func (m *BucketingConfig_Bucket) GetMin() *Value {
+	if m != nil {
+		return m.Min
+	}
+	return nil
+}
+
+func (m *BucketingConfig_Bucket) GetMax() *Value {
+	if m != nil {
+		return m.Max
+	}
+	return nil
+}
+
+func (m *BucketingConfig_Bucket) GetReplacementValue() *Value {
+	if m != nil {
+		return m.ReplacementValue
+	}
+	return nil
+}
+
+// Replaces an identifier with a surrogate using FPE with the FFX
+// mode of operation; however when used in the `ReidentifyContent` API method,
+// it serves the opposite function by reversing the surrogate back into
+// the original identifier.
+// The identifier must be encoded as ASCII.
+// For a given crypto key and context, the same identifier will be
+// replaced with the same surrogate.
+// Identifiers must be at least two characters long.
+// In the case that the identifier is the empty string, it will be skipped.
+// See [Pseudonymization](/dlp/docs/pseudonymization) for example usage.
+type CryptoReplaceFfxFpeConfig struct {
+	// The key used by the encryption algorithm. [required]
+	CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"`
+	// The 'tweak', a context may be used for higher security since the same
+	// identifier in two different contexts won't be given the same surrogate. If
+	// the context is not set, a default tweak will be used.
+	//
+	// If the context is set but:
+	//
+	// 1. there is no record present when transforming a given value or
+	// 1. the field is not present when transforming a given value,
+	//
+	// a default tweak will be used.
+	//
+	// Note that case (1) is expected when an `InfoTypeTransformation` is
+	// applied to both structured and non-structured `ContentItem`s.
+	// Currently, the referenced field may be of value type integer or string.
+	//
+	// The tweak is constructed as a sequence of bytes in big endian byte order
+	// such that:
+	//
+	// - a 64 bit integer is encoded followed by a single byte of value 1
+	// - a string is encoded in UTF-8 format followed by a single byte of value
+	//  å 2
+	Context *FieldId `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"`
+	// Types that are valid to be assigned to Alphabet:
+	//	*CryptoReplaceFfxFpeConfig_CommonAlphabet
+	//	*CryptoReplaceFfxFpeConfig_CustomAlphabet
+	//	*CryptoReplaceFfxFpeConfig_Radix
+	Alphabet isCryptoReplaceFfxFpeConfig_Alphabet `protobuf_oneof:"alphabet"`
+	// The custom infoType to annotate the surrogate with.
+	// This annotation will be applied to the surrogate by prefixing it with
+	// the name of the custom infoType followed by the number of
+	// characters comprising the surrogate. The following scheme defines the
+	// format: info_type_name(surrogate_character_count):surrogate
+	//
+	// For example, if the name of custom infoType is 'MY_TOKEN_INFO_TYPE' and
+	// the surrogate is 'abc', the full replacement value
+	// will be: 'MY_TOKEN_INFO_TYPE(3):abc'
+	//
+	// This annotation identifies the surrogate when inspecting content using the
+	// custom infoType
+	// [`SurrogateType`](/dlp/docs/reference/rest/v2/InspectConfig#surrogatetype).
+	// This facilitates reversal of the surrogate when it occurs in free text.
+	//
+	// In order for inspection to work properly, the name of this infoType must
+	// not occur naturally anywhere in your data; otherwise, inspection may
+	// find a surrogate that does not correspond to an actual identifier.
+	// Therefore, choose your custom infoType name carefully after considering
+	// what your data looks like. One way to select a name that has a high chance
+	// of yielding reliable detection is to include one or more unicode characters
+	// that are highly improbable to exist in your data.
+	// For example, assuming your data is entered from a regular ASCII keyboard,
+	// the symbol with the hex code point 29DD might be used like so:
+	// ⧝MY_TOKEN_TYPE
+	SurrogateInfoType *InfoType `protobuf:"bytes,8,opt,name=surrogate_info_type,json=surrogateInfoType" json:"surrogate_info_type,omitempty"`
+}
+
+func (m *CryptoReplaceFfxFpeConfig) Reset()                    { *m = CryptoReplaceFfxFpeConfig{} }
+func (m *CryptoReplaceFfxFpeConfig) String() string            { return proto.CompactTextString(m) }
+func (*CryptoReplaceFfxFpeConfig) ProtoMessage()               {}
+func (*CryptoReplaceFfxFpeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
+
+type isCryptoReplaceFfxFpeConfig_Alphabet interface {
+	isCryptoReplaceFfxFpeConfig_Alphabet()
+}
+
+type CryptoReplaceFfxFpeConfig_CommonAlphabet struct {
+	CommonAlphabet CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet `protobuf:"varint,4,opt,name=common_alphabet,json=commonAlphabet,enum=google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet,oneof"`
+}
+type CryptoReplaceFfxFpeConfig_CustomAlphabet struct {
+	CustomAlphabet string `protobuf:"bytes,5,opt,name=custom_alphabet,json=customAlphabet,oneof"`
+}
+type CryptoReplaceFfxFpeConfig_Radix struct {
+	Radix int32 `protobuf:"varint,6,opt,name=radix,oneof"`
+}
+
+func (*CryptoReplaceFfxFpeConfig_CommonAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {}
+func (*CryptoReplaceFfxFpeConfig_CustomAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {}
+func (*CryptoReplaceFfxFpeConfig_Radix) isCryptoReplaceFfxFpeConfig_Alphabet()          {}
+
+func (m *CryptoReplaceFfxFpeConfig) GetAlphabet() isCryptoReplaceFfxFpeConfig_Alphabet {
+	if m != nil {
+		return m.Alphabet
+	}
+	return nil
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetCryptoKey() *CryptoKey {
+	if m != nil {
+		return m.CryptoKey
+	}
+	return nil
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetContext() *FieldId {
+	if m != nil {
+		return m.Context
+	}
+	return nil
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetCommonAlphabet() CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet {
+	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CommonAlphabet); ok {
+		return x.CommonAlphabet
+	}
+	return CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetCustomAlphabet() string {
+	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CustomAlphabet); ok {
+		return x.CustomAlphabet
+	}
+	return ""
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetRadix() int32 {
+	if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_Radix); ok {
+		return x.Radix
+	}
+	return 0
+}
+
+func (m *CryptoReplaceFfxFpeConfig) GetSurrogateInfoType() *InfoType {
+	if m != nil {
+		return m.SurrogateInfoType
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CryptoReplaceFfxFpeConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CryptoReplaceFfxFpeConfig_OneofMarshaler, _CryptoReplaceFfxFpeConfig_OneofUnmarshaler, _CryptoReplaceFfxFpeConfig_OneofSizer, []interface{}{
+		(*CryptoReplaceFfxFpeConfig_CommonAlphabet)(nil),
+		(*CryptoReplaceFfxFpeConfig_CustomAlphabet)(nil),
+		(*CryptoReplaceFfxFpeConfig_Radix)(nil),
+	}
+}
+
+func _CryptoReplaceFfxFpeConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CryptoReplaceFfxFpeConfig)
+	// alphabet
+	switch x := m.Alphabet.(type) {
+	case *CryptoReplaceFfxFpeConfig_CommonAlphabet:
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CommonAlphabet))
+	case *CryptoReplaceFfxFpeConfig_CustomAlphabet:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.CustomAlphabet)
+	case *CryptoReplaceFfxFpeConfig_Radix:
+		b.EncodeVarint(6<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Radix))
+	case nil:
+	default:
+		return fmt.Errorf("CryptoReplaceFfxFpeConfig.Alphabet has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CryptoReplaceFfxFpeConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CryptoReplaceFfxFpeConfig)
+	switch tag {
+	case 4: // alphabet.common_alphabet
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Alphabet = &CryptoReplaceFfxFpeConfig_CommonAlphabet{CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet(x)}
+		return true, err
+	case 5: // alphabet.custom_alphabet
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Alphabet = &CryptoReplaceFfxFpeConfig_CustomAlphabet{x}
+		return true, err
+	case 6: // alphabet.radix
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Alphabet = &CryptoReplaceFfxFpeConfig_Radix{int32(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CryptoReplaceFfxFpeConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CryptoReplaceFfxFpeConfig)
+	// alphabet
+	switch x := m.Alphabet.(type) {
+	case *CryptoReplaceFfxFpeConfig_CommonAlphabet:
+		n += proto.SizeVarint(4<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.CommonAlphabet))
+	case *CryptoReplaceFfxFpeConfig_CustomAlphabet:
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.CustomAlphabet)))
+		n += len(x.CustomAlphabet)
+	case *CryptoReplaceFfxFpeConfig_Radix:
+		n += proto.SizeVarint(6<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Radix))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// This is a data encryption key (DEK) (as opposed to
+// a key encryption key (KEK) stored by KMS).
+// When using KMS to wrap/unwrap DEKs, be sure to set an appropriate
+// IAM policy on the KMS CryptoKey (KEK) to ensure an attacker cannot
+// unwrap the data crypto key.
+type CryptoKey struct {
+	// Types that are valid to be assigned to Source:
+	//	*CryptoKey_Transient
+	//	*CryptoKey_Unwrapped
+	//	*CryptoKey_KmsWrapped
+	Source isCryptoKey_Source `protobuf_oneof:"source"`
+}
+
+func (m *CryptoKey) Reset()                    { *m = CryptoKey{} }
+func (m *CryptoKey) String() string            { return proto.CompactTextString(m) }
+func (*CryptoKey) ProtoMessage()               {}
+func (*CryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
+
+type isCryptoKey_Source interface {
+	isCryptoKey_Source()
+}
+
+type CryptoKey_Transient struct {
+	Transient *TransientCryptoKey `protobuf:"bytes,1,opt,name=transient,oneof"`
+}
+type CryptoKey_Unwrapped struct {
+	Unwrapped *UnwrappedCryptoKey `protobuf:"bytes,2,opt,name=unwrapped,oneof"`
+}
+type CryptoKey_KmsWrapped struct {
+	KmsWrapped *KmsWrappedCryptoKey `protobuf:"bytes,3,opt,name=kms_wrapped,json=kmsWrapped,oneof"`
+}
+
+func (*CryptoKey_Transient) isCryptoKey_Source()  {}
+func (*CryptoKey_Unwrapped) isCryptoKey_Source()  {}
+func (*CryptoKey_KmsWrapped) isCryptoKey_Source() {}
+
+func (m *CryptoKey) GetSource() isCryptoKey_Source {
+	if m != nil {
+		return m.Source
+	}
+	return nil
+}
+
+func (m *CryptoKey) GetTransient() *TransientCryptoKey {
+	if x, ok := m.GetSource().(*CryptoKey_Transient); ok {
+		return x.Transient
+	}
+	return nil
+}
+
+func (m *CryptoKey) GetUnwrapped() *UnwrappedCryptoKey {
+	if x, ok := m.GetSource().(*CryptoKey_Unwrapped); ok {
+		return x.Unwrapped
+	}
+	return nil
+}
+
+func (m *CryptoKey) GetKmsWrapped() *KmsWrappedCryptoKey {
+	if x, ok := m.GetSource().(*CryptoKey_KmsWrapped); ok {
+		return x.KmsWrapped
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CryptoKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CryptoKey_OneofMarshaler, _CryptoKey_OneofUnmarshaler, _CryptoKey_OneofSizer, []interface{}{
+		(*CryptoKey_Transient)(nil),
+		(*CryptoKey_Unwrapped)(nil),
+		(*CryptoKey_KmsWrapped)(nil),
+	}
+}
+
+func _CryptoKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CryptoKey)
+	// source
+	switch x := m.Source.(type) {
+	case *CryptoKey_Transient:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Transient); err != nil {
+			return err
+		}
+	case *CryptoKey_Unwrapped:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Unwrapped); err != nil {
+			return err
+		}
+	case *CryptoKey_KmsWrapped:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KmsWrapped); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CryptoKey.Source has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CryptoKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CryptoKey)
+	switch tag {
+	case 1: // source.transient
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(TransientCryptoKey)
+		err := b.DecodeMessage(msg)
+		m.Source = &CryptoKey_Transient{msg}
+		return true, err
+	case 2: // source.unwrapped
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(UnwrappedCryptoKey)
+		err := b.DecodeMessage(msg)
+		m.Source = &CryptoKey_Unwrapped{msg}
+		return true, err
+	case 3: // source.kms_wrapped
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(KmsWrappedCryptoKey)
+		err := b.DecodeMessage(msg)
+		m.Source = &CryptoKey_KmsWrapped{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CryptoKey_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CryptoKey)
+	// source
+	switch x := m.Source.(type) {
+	case *CryptoKey_Transient:
+		s := proto.Size(x.Transient)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CryptoKey_Unwrapped:
+		s := proto.Size(x.Unwrapped)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CryptoKey_KmsWrapped:
+		s := proto.Size(x.KmsWrapped)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Use this to have a random data crypto key generated.
+// It will be discarded after the request finishes.
+type TransientCryptoKey struct {
+	// Name of the key. [required]
+	// This is an arbitrary string used to differentiate different keys.
+	// A unique key is generated per name: two separate `TransientCryptoKey`
+	// protos share the same generated key if their names are the same.
+	// When the data crypto key is generated, this name is not used in any way
+	// (repeating the api call will result in a different key being generated).
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *TransientCryptoKey) Reset()                    { *m = TransientCryptoKey{} }
+func (m *TransientCryptoKey) String() string            { return proto.CompactTextString(m) }
+func (*TransientCryptoKey) ProtoMessage()               {}
+func (*TransientCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }
+
+func (m *TransientCryptoKey) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Using raw keys is prone to security risks due to accidentally
+// leaking the key. Choose another type of key if possible.
+type UnwrappedCryptoKey struct {
+	// The AES 128/192/256 bit key. [required]
+	Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+}
+
+func (m *UnwrappedCryptoKey) Reset()                    { *m = UnwrappedCryptoKey{} }
+func (m *UnwrappedCryptoKey) String() string            { return proto.CompactTextString(m) }
+func (*UnwrappedCryptoKey) ProtoMessage()               {}
+func (*UnwrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} }
+
+func (m *UnwrappedCryptoKey) GetKey() []byte {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+// Include to use an existing data crypto key wrapped by KMS.
+// Authorization requires the following IAM permissions when sending a request
+// to perform a crypto transformation using a kms-wrapped crypto key:
+// dlp.kms.encrypt
+type KmsWrappedCryptoKey struct {
+	// The wrapped data crypto key. [required]
+	WrappedKey []byte `protobuf:"bytes,1,opt,name=wrapped_key,json=wrappedKey,proto3" json:"wrapped_key,omitempty"`
+	// The resource name of the KMS CryptoKey to use for unwrapping. [required]
+	CryptoKeyName string `protobuf:"bytes,2,opt,name=crypto_key_name,json=cryptoKeyName" json:"crypto_key_name,omitempty"`
+}
+
+func (m *KmsWrappedCryptoKey) Reset()                    { *m = KmsWrappedCryptoKey{} }
+func (m *KmsWrappedCryptoKey) String() string            { return proto.CompactTextString(m) }
+func (*KmsWrappedCryptoKey) ProtoMessage()               {}
+func (*KmsWrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} }
+
+func (m *KmsWrappedCryptoKey) GetWrappedKey() []byte {
+	if m != nil {
+		return m.WrappedKey
+	}
+	return nil
+}
+
+func (m *KmsWrappedCryptoKey) GetCryptoKeyName() string {
+	if m != nil {
+		return m.CryptoKeyName
+	}
+	return ""
+}
+
+// Shifts dates by random number of days, with option to be consistent for the
+// same context.
+type DateShiftConfig struct {
+	// Range of shift in days. Actual shift will be selected at random within this
+	// range (inclusive ends). Negative means shift to earlier in time. Must not
+	// be more than 365250 days (1000 years) each direction.
+	//
+	// For example, 3 means shift date to at most 3 days into the future.
+	// [Required]
+	UpperBoundDays int32 `protobuf:"varint,1,opt,name=upper_bound_days,json=upperBoundDays" json:"upper_bound_days,omitempty"`
+	// For example, -5 means shift date to at most 5 days back in the past.
+	// [Required]
+	LowerBoundDays int32 `protobuf:"varint,2,opt,name=lower_bound_days,json=lowerBoundDays" json:"lower_bound_days,omitempty"`
+	// Points to the field that contains the context, for example, an entity id.
+	// If set, must also set method. If set, shift will be consistent for the
+	// given context.
+	Context *FieldId `protobuf:"bytes,3,opt,name=context" json:"context,omitempty"`
+	// Method for calculating shift that takes context into consideration. If
+	// set, must also set context. Can only be applied to table items.
+	//
+	// Types that are valid to be assigned to Method:
+	//	*DateShiftConfig_CryptoKey
+	Method isDateShiftConfig_Method `protobuf_oneof:"method"`
+}
+
+func (m *DateShiftConfig) Reset()                    { *m = DateShiftConfig{} }
+func (m *DateShiftConfig) String() string            { return proto.CompactTextString(m) }
+func (*DateShiftConfig) ProtoMessage()               {}
+func (*DateShiftConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} }
+
+type isDateShiftConfig_Method interface {
+	isDateShiftConfig_Method()
+}
+
+type DateShiftConfig_CryptoKey struct {
+	CryptoKey *CryptoKey `protobuf:"bytes,4,opt,name=crypto_key,json=cryptoKey,oneof"`
+}
+
+func (*DateShiftConfig_CryptoKey) isDateShiftConfig_Method() {}
+
+func (m *DateShiftConfig) GetMethod() isDateShiftConfig_Method {
+	if m != nil {
+		return m.Method
+	}
+	return nil
+}
+
+func (m *DateShiftConfig) GetUpperBoundDays() int32 {
+	if m != nil {
+		return m.UpperBoundDays
+	}
+	return 0
+}
+
+func (m *DateShiftConfig) GetLowerBoundDays() int32 {
+	if m != nil {
+		return m.LowerBoundDays
+	}
+	return 0
+}
+
+func (m *DateShiftConfig) GetContext() *FieldId {
+	if m != nil {
+		return m.Context
+	}
+	return nil
+}
+
+func (m *DateShiftConfig) GetCryptoKey() *CryptoKey {
+	if x, ok := m.GetMethod().(*DateShiftConfig_CryptoKey); ok {
+		return x.CryptoKey
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*DateShiftConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _DateShiftConfig_OneofMarshaler, _DateShiftConfig_OneofUnmarshaler, _DateShiftConfig_OneofSizer, []interface{}{
+		(*DateShiftConfig_CryptoKey)(nil),
+	}
+}
+
+func _DateShiftConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*DateShiftConfig)
+	// method
+	switch x := m.Method.(type) {
+	case *DateShiftConfig_CryptoKey:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CryptoKey); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("DateShiftConfig.Method has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _DateShiftConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*DateShiftConfig)
+	switch tag {
+	case 4: // method.crypto_key
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CryptoKey)
+		err := b.DecodeMessage(msg)
+		m.Method = &DateShiftConfig_CryptoKey{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _DateShiftConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*DateShiftConfig)
+	// method
+	switch x := m.Method.(type) {
+	case *DateShiftConfig_CryptoKey:
+		s := proto.Size(x.CryptoKey)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A type of transformation that will scan unstructured text and
+// apply various `PrimitiveTransformation`s to each finding, where the
+// transformation is applied to only values that were identified as a specific
+// info_type.
+type InfoTypeTransformations struct {
+	// Transformation for each infoType. Cannot specify more than one
+	// for a given infoType. [required]
+	Transformations []*InfoTypeTransformations_InfoTypeTransformation `protobuf:"bytes,1,rep,name=transformations" json:"transformations,omitempty"`
+}
+
+func (m *InfoTypeTransformations) Reset()                    { *m = InfoTypeTransformations{} }
+func (m *InfoTypeTransformations) String() string            { return proto.CompactTextString(m) }
+func (*InfoTypeTransformations) ProtoMessage()               {}
+func (*InfoTypeTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} }
+
+func (m *InfoTypeTransformations) GetTransformations() []*InfoTypeTransformations_InfoTypeTransformation {
+	if m != nil {
+		return m.Transformations
+	}
+	return nil
+}
+
+// A transformation to apply to text that is identified as a specific
+// info_type.
+type InfoTypeTransformations_InfoTypeTransformation struct {
+	// InfoTypes to apply the transformation to. Empty list will match all
+	// available infoTypes for this transformation.
+	InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"`
+	// Primitive transformation to apply to the infoType. [required]
+	PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,2,opt,name=primitive_transformation,json=primitiveTransformation" json:"primitive_transformation,omitempty"`
+}
+
+func (m *InfoTypeTransformations_InfoTypeTransformation) Reset() {
+	*m = InfoTypeTransformations_InfoTypeTransformation{}
+}
+func (m *InfoTypeTransformations_InfoTypeTransformation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*InfoTypeTransformations_InfoTypeTransformation) ProtoMessage() {}
+func (*InfoTypeTransformations_InfoTypeTransformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{53, 0}
+}
+
+func (m *InfoTypeTransformations_InfoTypeTransformation) GetInfoTypes() []*InfoType {
+	if m != nil {
+		return m.InfoTypes
+	}
+	return nil
+}
+
+func (m *InfoTypeTransformations_InfoTypeTransformation) GetPrimitiveTransformation() *PrimitiveTransformation {
+	if m != nil {
+		return m.PrimitiveTransformation
+	}
+	return nil
+}
+
+// The transformation to apply to the field.
+type FieldTransformation struct {
+	// Input field(s) to apply the transformation to. [required]
+	Fields []*FieldId `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"`
+	// Only apply the transformation if the condition evaluates to true for the
+	// given `RecordCondition`. The conditions are allowed to reference fields
+	// that are not used in the actual transformation. [optional]
+	//
+	// Example Use Cases:
+	//
+	// - Apply a different bucket transformation to an age column if the zip code
+	// column for the same record is within a specific range.
+	// - Redact a field if the date of birth field is greater than 85.
+	Condition *RecordCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"`
+	// Transformation to apply. [required]
+	//
+	// Types that are valid to be assigned to Transformation:
+	//	*FieldTransformation_PrimitiveTransformation
+	//	*FieldTransformation_InfoTypeTransformations
+	Transformation isFieldTransformation_Transformation `protobuf_oneof:"transformation"`
+}
+
+func (m *FieldTransformation) Reset()                    { *m = FieldTransformation{} }
+func (m *FieldTransformation) String() string            { return proto.CompactTextString(m) }
+func (*FieldTransformation) ProtoMessage()               {}
+func (*FieldTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} }
+
+type isFieldTransformation_Transformation interface {
+	isFieldTransformation_Transformation()
+}
+
+type FieldTransformation_PrimitiveTransformation struct {
+	PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,4,opt,name=primitive_transformation,json=primitiveTransformation,oneof"`
+}
+type FieldTransformation_InfoTypeTransformations struct {
+	InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,5,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"`
+}
+
+func (*FieldTransformation_PrimitiveTransformation) isFieldTransformation_Transformation() {}
+func (*FieldTransformation_InfoTypeTransformations) isFieldTransformation_Transformation() {}
+
+func (m *FieldTransformation) GetTransformation() isFieldTransformation_Transformation {
+	if m != nil {
+		return m.Transformation
+	}
+	return nil
+}
+
+func (m *FieldTransformation) GetFields() []*FieldId {
+	if m != nil {
+		return m.Fields
+	}
+	return nil
+}
+
+func (m *FieldTransformation) GetCondition() *RecordCondition {
+	if m != nil {
+		return m.Condition
+	}
+	return nil
+}
+
+func (m *FieldTransformation) GetPrimitiveTransformation() *PrimitiveTransformation {
+	if x, ok := m.GetTransformation().(*FieldTransformation_PrimitiveTransformation); ok {
+		return x.PrimitiveTransformation
+	}
+	return nil
+}
+
+func (m *FieldTransformation) GetInfoTypeTransformations() *InfoTypeTransformations {
+	if x, ok := m.GetTransformation().(*FieldTransformation_InfoTypeTransformations); ok {
+		return x.InfoTypeTransformations
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*FieldTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _FieldTransformation_OneofMarshaler, _FieldTransformation_OneofUnmarshaler, _FieldTransformation_OneofSizer, []interface{}{
+		(*FieldTransformation_PrimitiveTransformation)(nil),
+		(*FieldTransformation_InfoTypeTransformations)(nil),
+	}
+}
+
+func _FieldTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*FieldTransformation)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *FieldTransformation_PrimitiveTransformation:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PrimitiveTransformation); err != nil {
+			return err
+		}
+	case *FieldTransformation_InfoTypeTransformations:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("FieldTransformation.Transformation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _FieldTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*FieldTransformation)
+	switch tag {
+	case 4: // transformation.primitive_transformation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PrimitiveTransformation)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &FieldTransformation_PrimitiveTransformation{msg}
+		return true, err
+	case 5: // transformation.info_type_transformations
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InfoTypeTransformations)
+		err := b.DecodeMessage(msg)
+		m.Transformation = &FieldTransformation_InfoTypeTransformations{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _FieldTransformation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*FieldTransformation)
+	// transformation
+	switch x := m.Transformation.(type) {
+	case *FieldTransformation_PrimitiveTransformation:
+		s := proto.Size(x.PrimitiveTransformation)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FieldTransformation_InfoTypeTransformations:
+		s := proto.Size(x.InfoTypeTransformations)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A type of transformation that is applied over structured data such as a
+// table.
+type RecordTransformations struct {
+	// Transform the record by applying various field transformations.
+	FieldTransformations []*FieldTransformation `protobuf:"bytes,1,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"`
+	// Configuration defining which records get suppressed entirely. Records that
+	// match any suppression rule are omitted from the output [optional].
+	RecordSuppressions []*RecordSuppression `protobuf:"bytes,2,rep,name=record_suppressions,json=recordSuppressions" json:"record_suppressions,omitempty"`
+}
+
+func (m *RecordTransformations) Reset()                    { *m = RecordTransformations{} }
+func (m *RecordTransformations) String() string            { return proto.CompactTextString(m) }
+func (*RecordTransformations) ProtoMessage()               {}
+func (*RecordTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }
+
+func (m *RecordTransformations) GetFieldTransformations() []*FieldTransformation {
+	if m != nil {
+		return m.FieldTransformations
+	}
+	return nil
+}
+
+func (m *RecordTransformations) GetRecordSuppressions() []*RecordSuppression {
+	if m != nil {
+		return m.RecordSuppressions
+	}
+	return nil
+}
+
+// Configuration to suppress records whose suppression conditions evaluate to
+// true.
+type RecordSuppression struct {
+	// A condition that when it evaluates to true will result in the record being
+	// evaluated to be suppressed from the transformed content.
+	Condition *RecordCondition `protobuf:"bytes,1,opt,name=condition" json:"condition,omitempty"`
+}
+
+func (m *RecordSuppression) Reset()                    { *m = RecordSuppression{} }
+func (m *RecordSuppression) String() string            { return proto.CompactTextString(m) }
+func (*RecordSuppression) ProtoMessage()               {}
+func (*RecordSuppression) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} }
+
+func (m *RecordSuppression) GetCondition() *RecordCondition {
+	if m != nil {
+		return m.Condition
+	}
+	return nil
+}
+
+// A condition for determining whether a transformation should be applied to
+// a field.
+type RecordCondition struct {
+	// An expression.
+	Expressions *RecordCondition_Expressions `protobuf:"bytes,3,opt,name=expressions" json:"expressions,omitempty"`
+}
+
+func (m *RecordCondition) Reset()                    { *m = RecordCondition{} }
+func (m *RecordCondition) String() string            { return proto.CompactTextString(m) }
+func (*RecordCondition) ProtoMessage()               {}
+func (*RecordCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} }
+
+func (m *RecordCondition) GetExpressions() *RecordCondition_Expressions {
+	if m != nil {
+		return m.Expressions
+	}
+	return nil
+}
+
+// The field type of `value` and `field` do not need to match to be
+// considered equal, but not all comparisons are possible.
+//
+// A `value` of type:
+//
+// - `string` can be compared against all other types
+// - `boolean` can only be compared against other booleans
+// - `integer` can be compared against doubles or a string if the string value
+// can be parsed as an integer.
+// - `double` can be compared against integers or a string if the string can
+// be parsed as a double.
+// - `Timestamp` can be compared against strings in RFC 3339 date string
+// format.
+// - `TimeOfDay` can be compared against timestamps and strings in the format
+// of 'HH:mm:ss'.
+//
+// If we fail to compare do to type mismatch, a warning will be given and
+// the condition will evaluate to false.
+type RecordCondition_Condition struct {
+	// Field within the record this condition is evaluated against. [required]
+	Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"`
+	// Operator used to compare the field or infoType to the value. [required]
+	Operator RelationalOperator `protobuf:"varint,3,opt,name=operator,enum=google.privacy.dlp.v2.RelationalOperator" json:"operator,omitempty"`
+	// Value to compare against. [Required, except for `EXISTS` tests.]
+	Value *Value `protobuf:"bytes,4,opt,name=value" json:"value,omitempty"`
+}
+
+func (m *RecordCondition_Condition) Reset()                    { *m = RecordCondition_Condition{} }
+func (m *RecordCondition_Condition) String() string            { return proto.CompactTextString(m) }
+func (*RecordCondition_Condition) ProtoMessage()               {}
+func (*RecordCondition_Condition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 0} }
+
+func (m *RecordCondition_Condition) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *RecordCondition_Condition) GetOperator() RelationalOperator {
+	if m != nil {
+		return m.Operator
+	}
+	return RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED
+}
+
+func (m *RecordCondition_Condition) GetValue() *Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// A collection of conditions.
+type RecordCondition_Conditions struct {
+	Conditions []*RecordCondition_Condition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"`
+}
+
+func (m *RecordCondition_Conditions) Reset()                    { *m = RecordCondition_Conditions{} }
+func (m *RecordCondition_Conditions) String() string            { return proto.CompactTextString(m) }
+func (*RecordCondition_Conditions) ProtoMessage()               {}
+func (*RecordCondition_Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 1} }
+
+func (m *RecordCondition_Conditions) GetConditions() []*RecordCondition_Condition {
+	if m != nil {
+		return m.Conditions
+	}
+	return nil
+}
+
+// An expression, consisting or an operator and conditions.
+type RecordCondition_Expressions struct {
+	// The operator to apply to the result of conditions. Default and currently
+	// only supported value is `AND`.
+	LogicalOperator RecordCondition_Expressions_LogicalOperator `protobuf:"varint,1,opt,name=logical_operator,json=logicalOperator,enum=google.privacy.dlp.v2.RecordCondition_Expressions_LogicalOperator" json:"logical_operator,omitempty"`
+	// Types that are valid to be assigned to Type:
+	//	*RecordCondition_Expressions_Conditions
+	Type isRecordCondition_Expressions_Type `protobuf_oneof:"type"`
+}
+
+func (m *RecordCondition_Expressions) Reset()                    { *m = RecordCondition_Expressions{} }
+func (m *RecordCondition_Expressions) String() string            { return proto.CompactTextString(m) }
+func (*RecordCondition_Expressions) ProtoMessage()               {}
+func (*RecordCondition_Expressions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 2} }
+
+type isRecordCondition_Expressions_Type interface {
+	isRecordCondition_Expressions_Type()
+}
+
+type RecordCondition_Expressions_Conditions struct {
+	Conditions *RecordCondition_Conditions `protobuf:"bytes,3,opt,name=conditions,oneof"`
+}
+
+func (*RecordCondition_Expressions_Conditions) isRecordCondition_Expressions_Type() {}
+
+func (m *RecordCondition_Expressions) GetType() isRecordCondition_Expressions_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *RecordCondition_Expressions) GetLogicalOperator() RecordCondition_Expressions_LogicalOperator {
+	if m != nil {
+		return m.LogicalOperator
+	}
+	return RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED
+}
+
+func (m *RecordCondition_Expressions) GetConditions() *RecordCondition_Conditions {
+	if x, ok := m.GetType().(*RecordCondition_Expressions_Conditions); ok {
+		return x.Conditions
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*RecordCondition_Expressions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _RecordCondition_Expressions_OneofMarshaler, _RecordCondition_Expressions_OneofUnmarshaler, _RecordCondition_Expressions_OneofSizer, []interface{}{
+		(*RecordCondition_Expressions_Conditions)(nil),
+	}
+}
+
+func _RecordCondition_Expressions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*RecordCondition_Expressions)
+	// type
+	switch x := m.Type.(type) {
+	case *RecordCondition_Expressions_Conditions:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Conditions); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("RecordCondition_Expressions.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _RecordCondition_Expressions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*RecordCondition_Expressions)
+	switch tag {
+	case 3: // type.conditions
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(RecordCondition_Conditions)
+		err := b.DecodeMessage(msg)
+		m.Type = &RecordCondition_Expressions_Conditions{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _RecordCondition_Expressions_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*RecordCondition_Expressions)
+	// type
+	switch x := m.Type.(type) {
+	case *RecordCondition_Expressions_Conditions:
+		s := proto.Size(x.Conditions)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Overview of the modifications that occurred.
+type TransformationOverview struct {
+	// Total size in bytes that were transformed in some way.
+	TransformedBytes int64 `protobuf:"varint,2,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"`
+	// Transformations applied to the dataset.
+	TransformationSummaries []*TransformationSummary `protobuf:"bytes,3,rep,name=transformation_summaries,json=transformationSummaries" json:"transformation_summaries,omitempty"`
+}
+
+func (m *TransformationOverview) Reset()                    { *m = TransformationOverview{} }
+func (m *TransformationOverview) String() string            { return proto.CompactTextString(m) }
+func (*TransformationOverview) ProtoMessage()               {}
+func (*TransformationOverview) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} }
+
+func (m *TransformationOverview) GetTransformedBytes() int64 {
+	if m != nil {
+		return m.TransformedBytes
+	}
+	return 0
+}
+
+func (m *TransformationOverview) GetTransformationSummaries() []*TransformationSummary {
+	if m != nil {
+		return m.TransformationSummaries
+	}
+	return nil
+}
+
+// Summary of a single tranformation.
+// Only one of 'transformation', 'field_transformation', or 'record_suppress'
+// will be set.
+type TransformationSummary struct {
+	// Set if the transformation was limited to a specific info_type.
+	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
+	// Set if the transformation was limited to a specific FieldId.
+	Field *FieldId `protobuf:"bytes,2,opt,name=field" json:"field,omitempty"`
+	// The specific transformation these stats apply to.
+	Transformation *PrimitiveTransformation `protobuf:"bytes,3,opt,name=transformation" json:"transformation,omitempty"`
+	// The field transformation that was applied.
+	// If multiple field transformations are requested for a single field,
+	// this list will contain all of them; otherwise, only one is supplied.
+	FieldTransformations []*FieldTransformation `protobuf:"bytes,5,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"`
+	// The specific suppression option these stats apply to.
+	RecordSuppress *RecordSuppression                     `protobuf:"bytes,6,opt,name=record_suppress,json=recordSuppress" json:"record_suppress,omitempty"`
+	Results        []*TransformationSummary_SummaryResult `protobuf:"bytes,4,rep,name=results" json:"results,omitempty"`
+	// Total size in bytes that were transformed in some way.
+	TransformedBytes int64 `protobuf:"varint,7,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"`
+}
+
+func (m *TransformationSummary) Reset()                    { *m = TransformationSummary{} }
+func (m *TransformationSummary) String() string            { return proto.CompactTextString(m) }
+func (*TransformationSummary) ProtoMessage()               {}
+func (*TransformationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} }
+
+func (m *TransformationSummary) GetInfoType() *InfoType {
+	if m != nil {
+		return m.InfoType
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetField() *FieldId {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetTransformation() *PrimitiveTransformation {
+	if m != nil {
+		return m.Transformation
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetFieldTransformations() []*FieldTransformation {
+	if m != nil {
+		return m.FieldTransformations
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetRecordSuppress() *RecordSuppression {
+	if m != nil {
+		return m.RecordSuppress
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetResults() []*TransformationSummary_SummaryResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *TransformationSummary) GetTransformedBytes() int64 {
+	if m != nil {
+		return m.TransformedBytes
+	}
+	return 0
+}
+
+// A collection that informs the user the number of times a particular
+// `TransformationResultCode` and error details occurred.
+type TransformationSummary_SummaryResult struct {
+	Count int64                                          `protobuf:"varint,1,opt,name=count" json:"count,omitempty"`
+	Code  TransformationSummary_TransformationResultCode `protobuf:"varint,2,opt,name=code,enum=google.privacy.dlp.v2.TransformationSummary_TransformationResultCode" json:"code,omitempty"`
+	// A place for warnings or errors to show up if a transformation didn't
+	// work as expected.
+	Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"`
+}
+
+func (m *TransformationSummary_SummaryResult) Reset()         { *m = TransformationSummary_SummaryResult{} }
+func (m *TransformationSummary_SummaryResult) String() string { return proto.CompactTextString(m) }
+func (*TransformationSummary_SummaryResult) ProtoMessage()    {}
+func (*TransformationSummary_SummaryResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{59, 0}
+}
+
+func (m *TransformationSummary_SummaryResult) GetCount() int64 {
+	if m != nil {
+		return m.Count
+	}
+	return 0
+}
+
+func (m *TransformationSummary_SummaryResult) GetCode() TransformationSummary_TransformationResultCode {
+	if m != nil {
+		return m.Code
+	}
+	return TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED
+}
+
+func (m *TransformationSummary_SummaryResult) GetDetails() string {
+	if m != nil {
+		return m.Details
+	}
+	return ""
+}
+
+// Schedule for triggeredJobs.
+type Schedule struct {
+	// Types that are valid to be assigned to Option:
+	//	*Schedule_RecurrencePeriodDuration
+	Option isSchedule_Option `protobuf_oneof:"option"`
+}
+
+func (m *Schedule) Reset()                    { *m = Schedule{} }
+func (m *Schedule) String() string            { return proto.CompactTextString(m) }
+func (*Schedule) ProtoMessage()               {}
+func (*Schedule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} }
+
+type isSchedule_Option interface {
+	isSchedule_Option()
+}
+
+type Schedule_RecurrencePeriodDuration struct {
+	RecurrencePeriodDuration *google_protobuf2.Duration `protobuf:"bytes,1,opt,name=recurrence_period_duration,json=recurrencePeriodDuration,oneof"`
+}
+
+func (*Schedule_RecurrencePeriodDuration) isSchedule_Option() {}
+
+func (m *Schedule) GetOption() isSchedule_Option {
+	if m != nil {
+		return m.Option
+	}
+	return nil
+}
+
+func (m *Schedule) GetRecurrencePeriodDuration() *google_protobuf2.Duration {
+	if x, ok := m.GetOption().(*Schedule_RecurrencePeriodDuration); ok {
+		return x.RecurrencePeriodDuration
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Schedule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Schedule_OneofMarshaler, _Schedule_OneofUnmarshaler, _Schedule_OneofSizer, []interface{}{
+		(*Schedule_RecurrencePeriodDuration)(nil),
+	}
+}
+
+func _Schedule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Schedule)
+	// option
+	switch x := m.Option.(type) {
+	case *Schedule_RecurrencePeriodDuration:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RecurrencePeriodDuration); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Schedule.Option has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Schedule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Schedule)
+	switch tag {
+	case 1: // option.recurrence_period_duration
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(google_protobuf2.Duration)
+		err := b.DecodeMessage(msg)
+		m.Option = &Schedule_RecurrencePeriodDuration{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Schedule_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Schedule)
+	// option
+	switch x := m.Option.(type) {
+	case *Schedule_RecurrencePeriodDuration:
+		s := proto.Size(x.RecurrencePeriodDuration)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// The inspectTemplate contains a configuration (set of types of sensitive data
+// to be detected) to be used anywhere you otherwise would normally specify
+// InspectConfig.
+type InspectTemplate struct {
+	// The template name. Output only.
+	//
+	// The template will have one of the following formats:
+	// `projects/PROJECT_ID/inspectTemplates/TEMPLATE_ID` OR
+	// `organizations/ORGANIZATION_ID/inspectTemplates/TEMPLATE_ID`
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// Display name (max 256 chars).
+	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
+	// Short description (max 256 chars).
+	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+	// The creation timestamp of a inspectTemplate, output only field.
+	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
+	// The last update timestamp of a inspectTemplate, output only field.
+	UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
+	// The core content of the template. Configuration of the scanning process.
+	InspectConfig *InspectConfig `protobuf:"bytes,6,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+}
+
+func (m *InspectTemplate) Reset()                    { *m = InspectTemplate{} }
+func (m *InspectTemplate) String() string            { return proto.CompactTextString(m) }
+func (*InspectTemplate) ProtoMessage()               {}
+func (*InspectTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} }
+
+func (m *InspectTemplate) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *InspectTemplate) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *InspectTemplate) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *InspectTemplate) GetCreateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *InspectTemplate) GetUpdateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+func (m *InspectTemplate) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+// The DeidentifyTemplates contains instructions on how to deidentify content.
+type DeidentifyTemplate struct {
+	// The template name. Output only.
+	//
+	// The template will have one of the following formats:
+	// `projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID` OR
+	// `organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID`
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// Display name (max 256 chars).
+	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
+	// Short description (max 256 chars).
+	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+	// The creation timestamp of a inspectTemplate, output only field.
+	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
+	// The last update timestamp of a inspectTemplate, output only field.
+	UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
+	// ///////////// // The core content of the template  // ///////////////
+	DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,6,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"`
+}
+
+func (m *DeidentifyTemplate) Reset()                    { *m = DeidentifyTemplate{} }
+func (m *DeidentifyTemplate) String() string            { return proto.CompactTextString(m) }
+func (*DeidentifyTemplate) ProtoMessage()               {}
+func (*DeidentifyTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} }
+
+func (m *DeidentifyTemplate) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *DeidentifyTemplate) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *DeidentifyTemplate) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *DeidentifyTemplate) GetCreateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *DeidentifyTemplate) GetUpdateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+func (m *DeidentifyTemplate) GetDeidentifyConfig() *DeidentifyConfig {
+	if m != nil {
+		return m.DeidentifyConfig
+	}
+	return nil
+}
+
+// Details information about an error encountered during job execution or
+// the results of an unsuccessful activation of the JobTrigger.
+// Output only field.
+type Error struct {
+	Details *google_rpc.Status `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"`
+	// The times the error occurred.
+	Timestamps []*google_protobuf1.Timestamp `protobuf:"bytes,2,rep,name=timestamps" json:"timestamps,omitempty"`
+}
+
+func (m *Error) Reset()                    { *m = Error{} }
+func (m *Error) String() string            { return proto.CompactTextString(m) }
+func (*Error) ProtoMessage()               {}
+func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} }
+
+func (m *Error) GetDetails() *google_rpc.Status {
+	if m != nil {
+		return m.Details
+	}
+	return nil
+}
+
+func (m *Error) GetTimestamps() []*google_protobuf1.Timestamp {
+	if m != nil {
+		return m.Timestamps
+	}
+	return nil
+}
+
+// Contains a configuration to make dlp api calls on a repeating basis.
+type JobTrigger struct {
+	// Unique resource name for the triggeredJob, assigned by the service when the
+	// triggeredJob is created, for example
+	// `projects/dlp-test-project/triggeredJobs/53234423`.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// Display name (max 100 chars)
+	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"`
+	// User provided description (max 256 chars)
+	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+	// The configuration details for the specific type of job to run.
+	//
+	// Types that are valid to be assigned to Job:
+	//	*JobTrigger_InspectJob
+	Job isJobTrigger_Job `protobuf_oneof:"job"`
+	// A list of triggers which will be OR'ed together. Only one in the list
+	// needs to trigger for a job to be started. The list may contain only
+	// a single Schedule trigger and must have at least one object.
+	Triggers []*JobTrigger_Trigger `protobuf:"bytes,5,rep,name=triggers" json:"triggers,omitempty"`
+	// A stream of errors encountered when the trigger was activated. Repeated
+	// errors may result in the JobTrigger automaticaly being paused.
+	// Will return the last 100 errors. Whenever the JobTrigger is modified
+	// this list will be cleared. Output only field.
+	Errors []*Error `protobuf:"bytes,6,rep,name=errors" json:"errors,omitempty"`
+	// The creation timestamp of a triggeredJob, output only field.
+	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
+	// The last update timestamp of a triggeredJob, output only field.
+	UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime" json:"update_time,omitempty"`
+	// The timestamp of the last time this trigger executed, output only field.
+	LastRunTime *google_protobuf1.Timestamp `protobuf:"bytes,9,opt,name=last_run_time,json=lastRunTime" json:"last_run_time,omitempty"`
+	// A status for this trigger. [required]
+	Status JobTrigger_Status `protobuf:"varint,10,opt,name=status,enum=google.privacy.dlp.v2.JobTrigger_Status" json:"status,omitempty"`
+}
+
+func (m *JobTrigger) Reset()                    { *m = JobTrigger{} }
+func (m *JobTrigger) String() string            { return proto.CompactTextString(m) }
+func (*JobTrigger) ProtoMessage()               {}
+func (*JobTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} }
+
+type isJobTrigger_Job interface {
+	isJobTrigger_Job()
+}
+
+type JobTrigger_InspectJob struct {
+	InspectJob *InspectJobConfig `protobuf:"bytes,4,opt,name=inspect_job,json=inspectJob,oneof"`
+}
+
+func (*JobTrigger_InspectJob) isJobTrigger_Job() {}
+
+func (m *JobTrigger) GetJob() isJobTrigger_Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *JobTrigger) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *JobTrigger) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *JobTrigger) GetInspectJob() *InspectJobConfig {
+	if x, ok := m.GetJob().(*JobTrigger_InspectJob); ok {
+		return x.InspectJob
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetTriggers() []*JobTrigger_Trigger {
+	if m != nil {
+		return m.Triggers
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetErrors() []*Error {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetCreateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetUpdateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetLastRunTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.LastRunTime
+	}
+	return nil
+}
+
+func (m *JobTrigger) GetStatus() JobTrigger_Status {
+	if m != nil {
+		return m.Status
+	}
+	return JobTrigger_STATUS_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*JobTrigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _JobTrigger_OneofMarshaler, _JobTrigger_OneofUnmarshaler, _JobTrigger_OneofSizer, []interface{}{
+		(*JobTrigger_InspectJob)(nil),
+	}
+}
+
+func _JobTrigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*JobTrigger)
+	// job
+	switch x := m.Job.(type) {
+	case *JobTrigger_InspectJob:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InspectJob); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("JobTrigger.Job has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _JobTrigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*JobTrigger)
+	switch tag {
+	case 4: // job.inspect_job
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InspectJobConfig)
+		err := b.DecodeMessage(msg)
+		m.Job = &JobTrigger_InspectJob{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _JobTrigger_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*JobTrigger)
+	// job
+	switch x := m.Job.(type) {
+	case *JobTrigger_InspectJob:
+		s := proto.Size(x.InspectJob)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// What event needs to occur for a new job to be started.
+type JobTrigger_Trigger struct {
+	// Types that are valid to be assigned to Trigger:
+	//	*JobTrigger_Trigger_Schedule
+	Trigger isJobTrigger_Trigger_Trigger `protobuf_oneof:"trigger"`
+}
+
+func (m *JobTrigger_Trigger) Reset()                    { *m = JobTrigger_Trigger{} }
+func (m *JobTrigger_Trigger) String() string            { return proto.CompactTextString(m) }
+func (*JobTrigger_Trigger) ProtoMessage()               {}
+func (*JobTrigger_Trigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64, 0} }
+
+type isJobTrigger_Trigger_Trigger interface {
+	isJobTrigger_Trigger_Trigger()
+}
+
+type JobTrigger_Trigger_Schedule struct {
+	Schedule *Schedule `protobuf:"bytes,1,opt,name=schedule,oneof"`
+}
+
+func (*JobTrigger_Trigger_Schedule) isJobTrigger_Trigger_Trigger() {}
+
+func (m *JobTrigger_Trigger) GetTrigger() isJobTrigger_Trigger_Trigger {
+	if m != nil {
+		return m.Trigger
+	}
+	return nil
+}
+
+func (m *JobTrigger_Trigger) GetSchedule() *Schedule {
+	if x, ok := m.GetTrigger().(*JobTrigger_Trigger_Schedule); ok {
+		return x.Schedule
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*JobTrigger_Trigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _JobTrigger_Trigger_OneofMarshaler, _JobTrigger_Trigger_OneofUnmarshaler, _JobTrigger_Trigger_OneofSizer, []interface{}{
+		(*JobTrigger_Trigger_Schedule)(nil),
+	}
+}
+
+func _JobTrigger_Trigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*JobTrigger_Trigger)
+	// trigger
+	switch x := m.Trigger.(type) {
+	case *JobTrigger_Trigger_Schedule:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Schedule); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("JobTrigger_Trigger.Trigger has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _JobTrigger_Trigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*JobTrigger_Trigger)
+	switch tag {
+	case 1: // trigger.schedule
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Schedule)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &JobTrigger_Trigger_Schedule{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _JobTrigger_Trigger_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*JobTrigger_Trigger)
+	// trigger
+	switch x := m.Trigger.(type) {
+	case *JobTrigger_Trigger_Schedule:
+		s := proto.Size(x.Schedule)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A task to execute on the completion of a job.
+type Action struct {
+	// Types that are valid to be assigned to Action:
+	//	*Action_SaveFindings_
+	//	*Action_PubSub
+	Action isAction_Action `protobuf_oneof:"action"`
+}
+
+func (m *Action) Reset()                    { *m = Action{} }
+func (m *Action) String() string            { return proto.CompactTextString(m) }
+func (*Action) ProtoMessage()               {}
+func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} }
+
+type isAction_Action interface {
+	isAction_Action()
+}
+
+type Action_SaveFindings_ struct {
+	SaveFindings *Action_SaveFindings `protobuf:"bytes,1,opt,name=save_findings,json=saveFindings,oneof"`
+}
+type Action_PubSub struct {
+	PubSub *Action_PublishToPubSub `protobuf:"bytes,2,opt,name=pub_sub,json=pubSub,oneof"`
+}
+
+func (*Action_SaveFindings_) isAction_Action() {}
+func (*Action_PubSub) isAction_Action()        {}
+
+func (m *Action) GetAction() isAction_Action {
+	if m != nil {
+		return m.Action
+	}
+	return nil
+}
+
+func (m *Action) GetSaveFindings() *Action_SaveFindings {
+	if x, ok := m.GetAction().(*Action_SaveFindings_); ok {
+		return x.SaveFindings
+	}
+	return nil
+}
+
+func (m *Action) GetPubSub() *Action_PublishToPubSub {
+	if x, ok := m.GetAction().(*Action_PubSub); ok {
+		return x.PubSub
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Action) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Action_OneofMarshaler, _Action_OneofUnmarshaler, _Action_OneofSizer, []interface{}{
+		(*Action_SaveFindings_)(nil),
+		(*Action_PubSub)(nil),
+	}
+}
+
+func _Action_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Action)
+	// action
+	switch x := m.Action.(type) {
+	case *Action_SaveFindings_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SaveFindings); err != nil {
+			return err
+		}
+	case *Action_PubSub:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PubSub); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Action.Action has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Action_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Action)
+	switch tag {
+	case 1: // action.save_findings
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Action_SaveFindings)
+		err := b.DecodeMessage(msg)
+		m.Action = &Action_SaveFindings_{msg}
+		return true, err
+	case 2: // action.pub_sub
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Action_PublishToPubSub)
+		err := b.DecodeMessage(msg)
+		m.Action = &Action_PubSub{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Action_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Action)
+	// action
+	switch x := m.Action.(type) {
+	case *Action_SaveFindings_:
+		s := proto.Size(x.SaveFindings)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Action_PubSub:
+		s := proto.Size(x.PubSub)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// If set, the detailed findings will be persisted to the specified
+// OutputStorageConfig. Compatible with: Inspect
+type Action_SaveFindings struct {
+	OutputConfig *OutputStorageConfig `protobuf:"bytes,1,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"`
+}
+
+func (m *Action_SaveFindings) Reset()                    { *m = Action_SaveFindings{} }
+func (m *Action_SaveFindings) String() string            { return proto.CompactTextString(m) }
+func (*Action_SaveFindings) ProtoMessage()               {}
+func (*Action_SaveFindings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65, 0} }
+
+func (m *Action_SaveFindings) GetOutputConfig() *OutputStorageConfig {
+	if m != nil {
+		return m.OutputConfig
+	}
+	return nil
+}
+
+// Publish the results of a DlpJob to a pub sub channel.
+// Compatible with: Inpect, Risk
+type Action_PublishToPubSub struct {
+	// Cloud Pub/Sub topic to send notifications to. The topic must have given
+	// publishing access rights to the DLP API service account executing
+	// the long running DlpJob sending the notifications.
+	// Format is projects/{project}/topics/{topic}.
+	Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"`
+}
+
+func (m *Action_PublishToPubSub) Reset()                    { *m = Action_PublishToPubSub{} }
+func (m *Action_PublishToPubSub) String() string            { return proto.CompactTextString(m) }
+func (*Action_PublishToPubSub) ProtoMessage()               {}
+func (*Action_PublishToPubSub) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65, 1} }
+
+func (m *Action_PublishToPubSub) GetTopic() string {
+	if m != nil {
+		return m.Topic
+	}
+	return ""
+}
+
+// Request message for CreateInspectTemplate.
+type CreateInspectTemplateRequest struct {
+	// The parent resource name, for example projects/my-project-id or
+	// organizations/my-org-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// The InspectTemplate to create.
+	InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"`
+	// The template id can contain uppercase and lowercase letters,
+	// numbers, and hyphens; that is, it must match the regular
+	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
+	// characters. Can be empty to allow the system to generate one.
+	TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"`
+}
+
+func (m *CreateInspectTemplateRequest) Reset()                    { *m = CreateInspectTemplateRequest{} }
+func (m *CreateInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateInspectTemplateRequest) ProtoMessage()               {}
+func (*CreateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} }
+
+func (m *CreateInspectTemplateRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate {
+	if m != nil {
+		return m.InspectTemplate
+	}
+	return nil
+}
+
+func (m *CreateInspectTemplateRequest) GetTemplateId() string {
+	if m != nil {
+		return m.TemplateId
+	}
+	return ""
+}
+
+// Request message for UpdateInspectTemplate.
+type UpdateInspectTemplateRequest struct {
+	// Resource name of organization and inspectTemplate to be updated, for
+	// example `organizations/433245324/inspectTemplates/432452342` or
+	// projects/project-id/inspectTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// New InspectTemplate value.
+	InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"`
+	// Mask to control which fields get updated.
+	UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"`
+}
+
+func (m *UpdateInspectTemplateRequest) Reset()                    { *m = UpdateInspectTemplateRequest{} }
+func (m *UpdateInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
+func (*UpdateInspectTemplateRequest) ProtoMessage()               {}
+func (*UpdateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} }
+
+func (m *UpdateInspectTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *UpdateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate {
+	if m != nil {
+		return m.InspectTemplate
+	}
+	return nil
+}
+
+func (m *UpdateInspectTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Request message for GetInspectTemplate.
+type GetInspectTemplateRequest struct {
+	// Resource name of the organization and inspectTemplate to be read, for
+	// example `organizations/433245324/inspectTemplates/432452342` or
+	// projects/project-id/inspectTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *GetInspectTemplateRequest) Reset()                    { *m = GetInspectTemplateRequest{} }
+func (m *GetInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
+func (*GetInspectTemplateRequest) ProtoMessage()               {}
+func (*GetInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
+
+func (m *GetInspectTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for ListInspectTemplates.
+type ListInspectTemplatesRequest struct {
+	// The parent resource name, for example projects/my-project-id or
+	// organizations/my-org-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Optional page token to continue retrieval. Comes from previous call
+	// to `ListInspectTemplates`.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
+	// Optional size of the page, can be limited by server. If zero server returns
+	// a page of max size 100.
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
+}
+
+func (m *ListInspectTemplatesRequest) Reset()                    { *m = ListInspectTemplatesRequest{} }
+func (m *ListInspectTemplatesRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListInspectTemplatesRequest) ProtoMessage()               {}
+func (*ListInspectTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
+
+func (m *ListInspectTemplatesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListInspectTemplatesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListInspectTemplatesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for ListInspectTemplates.
+type ListInspectTemplatesResponse struct {
+	// List of inspectTemplates, up to page_size in ListInspectTemplatesRequest.
+	InspectTemplates []*InspectTemplate `protobuf:"bytes,1,rep,name=inspect_templates,json=inspectTemplates" json:"inspect_templates,omitempty"`
+	// If the next page is available then the next page token to be used
+	// in following ListInspectTemplates request.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
+}
+
+func (m *ListInspectTemplatesResponse) Reset()                    { *m = ListInspectTemplatesResponse{} }
+func (m *ListInspectTemplatesResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListInspectTemplatesResponse) ProtoMessage()               {}
+func (*ListInspectTemplatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
+
+func (m *ListInspectTemplatesResponse) GetInspectTemplates() []*InspectTemplate {
+	if m != nil {
+		return m.InspectTemplates
+	}
+	return nil
+}
+
+func (m *ListInspectTemplatesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// Request message for DeleteInspectTemplate.
+type DeleteInspectTemplateRequest struct {
+	// Resource name of the organization and inspectTemplate to be deleted, for
+	// example `organizations/433245324/inspectTemplates/432452342` or
+	// projects/project-id/inspectTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *DeleteInspectTemplateRequest) Reset()                    { *m = DeleteInspectTemplateRequest{} }
+func (m *DeleteInspectTemplateRequest) String() string            { return proto.CompactTextString(m) }
+func (*DeleteInspectTemplateRequest) ProtoMessage()               {}
+func (*DeleteInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }
+
+func (m *DeleteInspectTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for CreateJobTrigger.
+type CreateJobTriggerRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// The JobTrigger to create.
+	JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"`
+	// The trigger id can contain uppercase and lowercase letters,
+	// numbers, and hyphens; that is, it must match the regular
+	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
+	// characters. Can be empty to allow the system to generate one.
+	TriggerId string `protobuf:"bytes,3,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"`
+}
+
+func (m *CreateJobTriggerRequest) Reset()                    { *m = CreateJobTriggerRequest{} }
+func (m *CreateJobTriggerRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateJobTriggerRequest) ProtoMessage()               {}
+func (*CreateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }
+
+func (m *CreateJobTriggerRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateJobTriggerRequest) GetJobTrigger() *JobTrigger {
+	if m != nil {
+		return m.JobTrigger
+	}
+	return nil
+}
+
+func (m *CreateJobTriggerRequest) GetTriggerId() string {
+	if m != nil {
+		return m.TriggerId
+	}
+	return ""
+}
+
+// Request message for UpdateJobTrigger.
+type UpdateJobTriggerRequest struct {
+	// Resource name of the project and the triggeredJob, for example
+	// `projects/dlp-test-project/jobTriggers/53234423`.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// New JobTrigger value.
+	JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"`
+	// Mask to control which fields get updated.
+	UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"`
+}
+
+func (m *UpdateJobTriggerRequest) Reset()                    { *m = UpdateJobTriggerRequest{} }
+func (m *UpdateJobTriggerRequest) String() string            { return proto.CompactTextString(m) }
+func (*UpdateJobTriggerRequest) ProtoMessage()               {}
+func (*UpdateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
+
+func (m *UpdateJobTriggerRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *UpdateJobTriggerRequest) GetJobTrigger() *JobTrigger {
+	if m != nil {
+		return m.JobTrigger
+	}
+	return nil
+}
+
+func (m *UpdateJobTriggerRequest) GetUpdateMask() *google_protobuf4.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Request message for GetJobTrigger.
+type GetJobTriggerRequest struct {
+	// Resource name of the project and the triggeredJob, for example
+	// `projects/dlp-test-project/jobTriggers/53234423`.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *GetJobTriggerRequest) Reset()                    { *m = GetJobTriggerRequest{} }
+func (m *GetJobTriggerRequest) String() string            { return proto.CompactTextString(m) }
+func (*GetJobTriggerRequest) ProtoMessage()               {}
+func (*GetJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
+
+func (m *GetJobTriggerRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for CreateDlpJobRequest. Used to initiate long running
+// jobs such as calculating risk metrics or inspecting Google Cloud
+// Storage.
+type CreateDlpJobRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// The configuration details for the specific type of job to run.
+	//
+	// Types that are valid to be assigned to Job:
+	//	*CreateDlpJobRequest_InspectJob
+	//	*CreateDlpJobRequest_RiskJob
+	Job isCreateDlpJobRequest_Job `protobuf_oneof:"job"`
+	// The job id can contain uppercase and lowercase letters,
+	// numbers, and hyphens; that is, it must match the regular
+	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
+	// characters. Can be empty to allow the system to generate one.
+	JobId string `protobuf:"bytes,4,opt,name=job_id,json=jobId" json:"job_id,omitempty"`
+}
+
+func (m *CreateDlpJobRequest) Reset()                    { *m = CreateDlpJobRequest{} }
+func (m *CreateDlpJobRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateDlpJobRequest) ProtoMessage()               {}
+func (*CreateDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
+
+type isCreateDlpJobRequest_Job interface {
+	isCreateDlpJobRequest_Job()
+}
+
+type CreateDlpJobRequest_InspectJob struct {
+	InspectJob *InspectJobConfig `protobuf:"bytes,2,opt,name=inspect_job,json=inspectJob,oneof"`
+}
+type CreateDlpJobRequest_RiskJob struct {
+	RiskJob *RiskAnalysisJobConfig `protobuf:"bytes,3,opt,name=risk_job,json=riskJob,oneof"`
+}
+
+func (*CreateDlpJobRequest_InspectJob) isCreateDlpJobRequest_Job() {}
+func (*CreateDlpJobRequest_RiskJob) isCreateDlpJobRequest_Job()    {}
+
+func (m *CreateDlpJobRequest) GetJob() isCreateDlpJobRequest_Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+func (m *CreateDlpJobRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateDlpJobRequest) GetInspectJob() *InspectJobConfig {
+	if x, ok := m.GetJob().(*CreateDlpJobRequest_InspectJob); ok {
+		return x.InspectJob
+	}
+	return nil
+}
+
+func (m *CreateDlpJobRequest) GetRiskJob() *RiskAnalysisJobConfig {
+	if x, ok := m.GetJob().(*CreateDlpJobRequest_RiskJob); ok {
+		return x.RiskJob
+	}
+	return nil
+}
+
+func (m *CreateDlpJobRequest) GetJobId() string {
+	if m != nil {
+		return m.JobId
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CreateDlpJobRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CreateDlpJobRequest_OneofMarshaler, _CreateDlpJobRequest_OneofUnmarshaler, _CreateDlpJobRequest_OneofSizer, []interface{}{
+		(*CreateDlpJobRequest_InspectJob)(nil),
+		(*CreateDlpJobRequest_RiskJob)(nil),
+	}
+}
+
+func _CreateDlpJobRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CreateDlpJobRequest)
+	// job
+	switch x := m.Job.(type) {
+	case *CreateDlpJobRequest_InspectJob:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InspectJob); err != nil {
+			return err
+		}
+	case *CreateDlpJobRequest_RiskJob:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RiskJob); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CreateDlpJobRequest.Job has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CreateDlpJobRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CreateDlpJobRequest)
+	switch tag {
+	case 2: // job.inspect_job
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InspectJobConfig)
+		err := b.DecodeMessage(msg)
+		m.Job = &CreateDlpJobRequest_InspectJob{msg}
+		return true, err
+	case 3: // job.risk_job
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(RiskAnalysisJobConfig)
+		err := b.DecodeMessage(msg)
+		m.Job = &CreateDlpJobRequest_RiskJob{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CreateDlpJobRequest_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CreateDlpJobRequest)
+	// job
+	switch x := m.Job.(type) {
+	case *CreateDlpJobRequest_InspectJob:
+		s := proto.Size(x.InspectJob)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CreateDlpJobRequest_RiskJob:
+		s := proto.Size(x.RiskJob)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Request message for ListJobTriggers.
+type ListJobTriggersRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Optional page token to continue retrieval. Comes from previous call
+	// to ListJobTriggers. `order_by` and `filter` should not change for
+	// subsequent calls, but can be omitted if token is specified.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
+	// Optional size of the page, can be limited by a server.
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
+	// Optional comma separated list of triggeredJob fields to order by,
+	// followed by 'asc/desc' postfix, i.e.
+	// `"create_time asc,name desc,schedule_mode asc"`. This list is
+	// case-insensitive.
+	//
+	// Example: `"name asc,schedule_mode desc, status desc"`
+	//
+	// Supported filters keys and values are:
+	//
+	// - `create_time`: corresponds to time the triggeredJob was created.
+	// - `update_time`: corresponds to time the triggeredJob was last updated.
+	// - `name`: corresponds to JobTrigger's display name.
+	// - `status`: corresponds to the triggeredJob status.
+	OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy" json:"order_by,omitempty"`
+}
+
+func (m *ListJobTriggersRequest) Reset()                    { *m = ListJobTriggersRequest{} }
+func (m *ListJobTriggersRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListJobTriggersRequest) ProtoMessage()               {}
+func (*ListJobTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
+
+func (m *ListJobTriggersRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListJobTriggersRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListJobTriggersRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListJobTriggersRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+// Response message for ListJobTriggers.
+type ListJobTriggersResponse struct {
+	// List of triggeredJobs, up to page_size in ListJobTriggersRequest.
+	JobTriggers []*JobTrigger `protobuf:"bytes,1,rep,name=job_triggers,json=jobTriggers" json:"job_triggers,omitempty"`
+	// If the next page is available then the next page token to be used
+	// in following ListJobTriggers request.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
+}
+
+func (m *ListJobTriggersResponse) Reset()                    { *m = ListJobTriggersResponse{} }
+func (m *ListJobTriggersResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListJobTriggersResponse) ProtoMessage()               {}
+func (*ListJobTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
+
+func (m *ListJobTriggersResponse) GetJobTriggers() []*JobTrigger {
+	if m != nil {
+		return m.JobTriggers
+	}
+	return nil
+}
+
+func (m *ListJobTriggersResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// Request message for DeleteJobTrigger.
+type DeleteJobTriggerRequest struct {
+	// Resource name of the project and the triggeredJob, for example
+	// `projects/dlp-test-project/jobTriggers/53234423`.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *DeleteJobTriggerRequest) Reset()                    { *m = DeleteJobTriggerRequest{} }
+func (m *DeleteJobTriggerRequest) String() string            { return proto.CompactTextString(m) }
+func (*DeleteJobTriggerRequest) ProtoMessage()               {}
+func (*DeleteJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
+
+func (m *DeleteJobTriggerRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type InspectJobConfig struct {
+	// The data to scan.
+	StorageConfig *StorageConfig `protobuf:"bytes,1,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"`
+	// How and what to scan for.
+	InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"`
+	// If provided, will be used as the default for all values in InspectConfig.
+	// `inspect_config` will be merged into the values persisted as part of the
+	// template.
+	InspectTemplateName string `protobuf:"bytes,3,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"`
+	// Actions to execute at the completion of the job. Are executed in the order
+	// provided.
+	Actions []*Action `protobuf:"bytes,4,rep,name=actions" json:"actions,omitempty"`
+}
+
+func (m *InspectJobConfig) Reset()                    { *m = InspectJobConfig{} }
+func (m *InspectJobConfig) String() string            { return proto.CompactTextString(m) }
+func (*InspectJobConfig) ProtoMessage()               {}
+func (*InspectJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
+
+func (m *InspectJobConfig) GetStorageConfig() *StorageConfig {
+	if m != nil {
+		return m.StorageConfig
+	}
+	return nil
+}
+
+func (m *InspectJobConfig) GetInspectConfig() *InspectConfig {
+	if m != nil {
+		return m.InspectConfig
+	}
+	return nil
+}
+
+func (m *InspectJobConfig) GetInspectTemplateName() string {
+	if m != nil {
+		return m.InspectTemplateName
+	}
+	return ""
+}
+
+func (m *InspectJobConfig) GetActions() []*Action {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Combines all of the information about a DLP job.
+type DlpJob struct {
+	// The server-assigned name.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// The type of job.
+	Type DlpJobType `protobuf:"varint,2,opt,name=type,enum=google.privacy.dlp.v2.DlpJobType" json:"type,omitempty"`
+	// State of a job.
+	State DlpJob_JobState `protobuf:"varint,3,opt,name=state,enum=google.privacy.dlp.v2.DlpJob_JobState" json:"state,omitempty"`
+	// Types that are valid to be assigned to Details:
+	//	*DlpJob_RiskDetails
+	//	*DlpJob_InspectDetails
+	Details isDlpJob_Details `protobuf_oneof:"details"`
+	// Time when the job was created.
+	CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
+	// Time when the job started.
+	StartTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+	// Time when the job finished.
+	EndTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+	// If created by a job trigger, the resource name of the trigger that
+	// instantiated the job.
+	JobTriggerName string `protobuf:"bytes,10,opt,name=job_trigger_name,json=jobTriggerName" json:"job_trigger_name,omitempty"`
+	// A stream of errors encountered running the job.
+	Errors []*Error `protobuf:"bytes,11,rep,name=errors" json:"errors,omitempty"`
+}
+
+func (m *DlpJob) Reset()                    { *m = DlpJob{} }
+func (m *DlpJob) String() string            { return proto.CompactTextString(m) }
+func (*DlpJob) ProtoMessage()               {}
+func (*DlpJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
+
+type isDlpJob_Details interface {
+	isDlpJob_Details()
+}
+
+type DlpJob_RiskDetails struct {
+	RiskDetails *AnalyzeDataSourceRiskDetails `protobuf:"bytes,4,opt,name=risk_details,json=riskDetails,oneof"`
+}
+type DlpJob_InspectDetails struct {
+	InspectDetails *InspectDataSourceDetails `protobuf:"bytes,5,opt,name=inspect_details,json=inspectDetails,oneof"`
+}
+
+func (*DlpJob_RiskDetails) isDlpJob_Details()    {}
+func (*DlpJob_InspectDetails) isDlpJob_Details() {}
+
+func (m *DlpJob) GetDetails() isDlpJob_Details {
+	if m != nil {
+		return m.Details
+	}
+	return nil
+}
+
+func (m *DlpJob) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *DlpJob) GetType() DlpJobType {
+	if m != nil {
+		return m.Type
+	}
+	return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED
+}
+
+func (m *DlpJob) GetState() DlpJob_JobState {
+	if m != nil {
+		return m.State
+	}
+	return DlpJob_JOB_STATE_UNSPECIFIED
+}
+
+func (m *DlpJob) GetRiskDetails() *AnalyzeDataSourceRiskDetails {
+	if x, ok := m.GetDetails().(*DlpJob_RiskDetails); ok {
+		return x.RiskDetails
+	}
+	return nil
+}
+
+func (m *DlpJob) GetInspectDetails() *InspectDataSourceDetails {
+	if x, ok := m.GetDetails().(*DlpJob_InspectDetails); ok {
+		return x.InspectDetails
+	}
+	return nil
+}
+
+func (m *DlpJob) GetCreateTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *DlpJob) GetStartTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *DlpJob) GetEndTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *DlpJob) GetJobTriggerName() string {
+	if m != nil {
+		return m.JobTriggerName
+	}
+	return ""
+}
+
+func (m *DlpJob) GetErrors() []*Error {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*DlpJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _DlpJob_OneofMarshaler, _DlpJob_OneofUnmarshaler, _DlpJob_OneofSizer, []interface{}{
+		(*DlpJob_RiskDetails)(nil),
+		(*DlpJob_InspectDetails)(nil),
+	}
+}
+
+func _DlpJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*DlpJob)
+	// details
+	switch x := m.Details.(type) {
+	case *DlpJob_RiskDetails:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.RiskDetails); err != nil {
+			return err
+		}
+	case *DlpJob_InspectDetails:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InspectDetails); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("DlpJob.Details has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _DlpJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*DlpJob)
+	switch tag {
+	case 4: // details.risk_details
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AnalyzeDataSourceRiskDetails)
+		err := b.DecodeMessage(msg)
+		m.Details = &DlpJob_RiskDetails{msg}
+		return true, err
+	case 5: // details.inspect_details
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(InspectDataSourceDetails)
+		err := b.DecodeMessage(msg)
+		m.Details = &DlpJob_InspectDetails{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _DlpJob_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*DlpJob)
+	// details
+	switch x := m.Details.(type) {
+	case *DlpJob_RiskDetails:
+		s := proto.Size(x.RiskDetails)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *DlpJob_InspectDetails:
+		s := proto.Size(x.InspectDetails)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// The request message for [DlpJobs.GetDlpJob][].
+type GetDlpJobRequest struct {
+	// The name of the DlpJob resource.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *GetDlpJobRequest) Reset()                    { *m = GetDlpJobRequest{} }
+func (m *GetDlpJobRequest) String() string            { return proto.CompactTextString(m) }
+func (*GetDlpJobRequest) ProtoMessage()               {}
+func (*GetDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
+
+func (m *GetDlpJobRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for listing DLP jobs.
+type ListDlpJobsRequest struct {
+	// The parent resource name, for example projects/my-project-id.
+	Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"`
+	// Optional. Allows filtering.
+	//
+	// Supported syntax:
+	//
+	// * Filter expressions are made up of one or more restrictions.
+	// * Restrictions can be combined by `AND` or `OR` logical operators. A
+	// sequence of restrictions implicitly uses `AND`.
+	// * A restriction has the form of `<field> <operator> <value>`.
+	// * Supported fields/values for inspect jobs:
+	//     - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED
+	//     - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY
+	//     - `trigger_name` - The resource name of the trigger that created job.
+	// * Supported fields for risk analysis jobs:
+	//     - `state` - RUNNING|CANCELED|FINISHED|FAILED
+	// * The operator must be `=` or `!=`.
+	//
+	// Examples:
+	//
+	// * inspected_storage = cloud_storage AND state = done
+	// * inspected_storage = cloud_storage OR inspected_storage = bigquery
+	// * inspected_storage = cloud_storage AND (state = done OR state = canceled)
+	//
+	// The length of this field should be no more than 500 characters.
+	Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"`
+	// The standard list page size.
+	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
+	// The standard list page token.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
+	// The type of job. Defaults to `DlpJobType.INSPECT`
+	Type DlpJobType `protobuf:"varint,5,opt,name=type,enum=google.privacy.dlp.v2.DlpJobType" json:"type,omitempty"`
+}
+
+func (m *ListDlpJobsRequest) Reset()                    { *m = ListDlpJobsRequest{} }
+func (m *ListDlpJobsRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListDlpJobsRequest) ProtoMessage()               {}
+func (*ListDlpJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
+
+func (m *ListDlpJobsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListDlpJobsRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func (m *ListDlpJobsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListDlpJobsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListDlpJobsRequest) GetType() DlpJobType {
+	if m != nil {
+		return m.Type
+	}
+	return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED
+}
+
+// The response message for listing DLP jobs.
+type ListDlpJobsResponse struct {
+	// A list of DlpJobs that matches the specified filter in the request.
+	Jobs []*DlpJob `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"`
+	// The standard List next-page token.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
+}
+
+func (m *ListDlpJobsResponse) Reset()                    { *m = ListDlpJobsResponse{} }
+func (m *ListDlpJobsResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListDlpJobsResponse) ProtoMessage()               {}
+func (*ListDlpJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} }
+
+func (m *ListDlpJobsResponse) GetJobs() []*DlpJob {
+	if m != nil {
+		return m.Jobs
+	}
+	return nil
+}
+
+func (m *ListDlpJobsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// The request message for canceling a DLP job.
+type CancelDlpJobRequest struct {
+	// The name of the DlpJob resource to be cancelled.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *CancelDlpJobRequest) Reset()                    { *m = CancelDlpJobRequest{} }
+func (m *CancelDlpJobRequest) String() string            { return proto.CompactTextString(m) }
+func (*CancelDlpJobRequest) ProtoMessage()               {}
+func (*CancelDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
+
+func (m *CancelDlpJobRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request message for deleting a DLP job.
+type DeleteDlpJobRequest struct {
+	// The name of the DlpJob resource to be deleted.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *DeleteDlpJobRequest) Reset()                    { *m = DeleteDlpJobRequest{} }
+func (m *DeleteDlpJobRequest) String() string            { return proto.CompactTextString(m) }
+func (*DeleteDlpJobRequest) ProtoMessage()               {}
+func (*DeleteDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
+
+func (m *DeleteDlpJobRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for CreateDeidentifyTemplate.
+type CreateDeidentifyTemplateRequest struct {
+	// The parent resource name, for example projects/my-project-id or
+	// organizations/my-org-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// The DeidentifyTemplate to create.
+	DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"`
+	// The template id can contain uppercase and lowercase letters,
+	// numbers, and hyphens; that is, it must match the regular
+	// expression: `[a-zA-Z\\d-]+`. The maximum length is 100
+	// characters. Can be empty to allow the system to generate one.
+	TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"`
+}
+
+func (m *CreateDeidentifyTemplateRequest) Reset()         { *m = CreateDeidentifyTemplateRequest{} }
+func (m *CreateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateDeidentifyTemplateRequest) ProtoMessage()    {}
+func (*CreateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{86}
+}
+
+func (m *CreateDeidentifyTemplateRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate {
+	if m != nil {
+		return m.DeidentifyTemplate
+	}
+	return nil
+}
+
+func (m *CreateDeidentifyTemplateRequest) GetTemplateId() string {
+	if m != nil {
+		return m.TemplateId
+	}
+	return ""
+}
+
+// Request message for UpdateDeidentifyTemplate.
+type UpdateDeidentifyTemplateRequest struct {
+	// Resource name of organization and deidentify template to be updated, for
+	// example `organizations/433245324/deidentifyTemplates/432452342` or
+	// projects/project-id/deidentifyTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// New DeidentifyTemplate value.
+	DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"`
+	// Mask to control which fields get updated.
+	UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"`
+}
+
+func (m *UpdateDeidentifyTemplateRequest) Reset()         { *m = UpdateDeidentifyTemplateRequest{} }
+func (m *UpdateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateDeidentifyTemplateRequest) ProtoMessage()    {}
+func (*UpdateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{87}
+}
+
+func (m *UpdateDeidentifyTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *UpdateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate {
+	if m != nil {
+		return m.DeidentifyTemplate
+	}
+	return nil
+}
+
+func (m *UpdateDeidentifyTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Request message for GetDeidentifyTemplate.
+type GetDeidentifyTemplateRequest struct {
+	// Resource name of the organization and deidentify template to be read, for
+	// example `organizations/433245324/deidentifyTemplates/432452342` or
+	// projects/project-id/deidentifyTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *GetDeidentifyTemplateRequest) Reset()                    { *m = GetDeidentifyTemplateRequest{} }
+func (m *GetDeidentifyTemplateRequest) String() string            { return proto.CompactTextString(m) }
+func (*GetDeidentifyTemplateRequest) ProtoMessage()               {}
+func (*GetDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
+
+func (m *GetDeidentifyTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Request message for ListDeidentifyTemplates.
+type ListDeidentifyTemplatesRequest struct {
+	// The parent resource name, for example projects/my-project-id or
+	// organizations/my-org-id.
+	Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"`
+	// Optional page token to continue retrieval. Comes from previous call
+	// to `ListDeidentifyTemplates`.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"`
+	// Optional size of the page, can be limited by server. If zero server returns
+	// a page of max size 100.
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"`
+}
+
+func (m *ListDeidentifyTemplatesRequest) Reset()                    { *m = ListDeidentifyTemplatesRequest{} }
+func (m *ListDeidentifyTemplatesRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListDeidentifyTemplatesRequest) ProtoMessage()               {}
+func (*ListDeidentifyTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
+
+func (m *ListDeidentifyTemplatesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListDeidentifyTemplatesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListDeidentifyTemplatesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for ListDeidentifyTemplates.
+type ListDeidentifyTemplatesResponse struct {
+	// List of deidentify templates, up to page_size in
+	// ListDeidentifyTemplatesRequest.
+	DeidentifyTemplates []*DeidentifyTemplate `protobuf:"bytes,1,rep,name=deidentify_templates,json=deidentifyTemplates" json:"deidentify_templates,omitempty"`
+	// If the next page is available then the next page token to be used
+	// in following ListDeidentifyTemplates request.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"`
+}
+
+func (m *ListDeidentifyTemplatesResponse) Reset()         { *m = ListDeidentifyTemplatesResponse{} }
+func (m *ListDeidentifyTemplatesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListDeidentifyTemplatesResponse) ProtoMessage()    {}
+func (*ListDeidentifyTemplatesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{90}
+}
+
+func (m *ListDeidentifyTemplatesResponse) GetDeidentifyTemplates() []*DeidentifyTemplate {
+	if m != nil {
+		return m.DeidentifyTemplates
+	}
+	return nil
+}
+
+func (m *ListDeidentifyTemplatesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// Request message for DeleteDeidentifyTemplate.
+type DeleteDeidentifyTemplateRequest struct {
+	// Resource name of the organization and deidentify template to be deleted,
+	// for example `organizations/433245324/deidentifyTemplates/432452342` or
+	// projects/project-id/deidentifyTemplates/432452342.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *DeleteDeidentifyTemplateRequest) Reset()         { *m = DeleteDeidentifyTemplateRequest{} }
+func (m *DeleteDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteDeidentifyTemplateRequest) ProtoMessage()    {}
+func (*DeleteDeidentifyTemplateRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{91}
+}
+
+func (m *DeleteDeidentifyTemplateRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2.InspectConfig")
+	proto.RegisterType((*InspectConfig_FindingLimits)(nil), "google.privacy.dlp.v2.InspectConfig.FindingLimits")
+	proto.RegisterType((*InspectConfig_FindingLimits_InfoTypeLimit)(nil), "google.privacy.dlp.v2.InspectConfig.FindingLimits.InfoTypeLimit")
+	proto.RegisterType((*ByteContentItem)(nil), "google.privacy.dlp.v2.ByteContentItem")
+	proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2.ContentItem")
+	proto.RegisterType((*Table)(nil), "google.privacy.dlp.v2.Table")
+	proto.RegisterType((*Table_Row)(nil), "google.privacy.dlp.v2.Table.Row")
+	proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2.InspectResult")
+	proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2.Finding")
+	proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2.Location")
+	proto.RegisterType((*ContentLocation)(nil), "google.privacy.dlp.v2.ContentLocation")
+	proto.RegisterType((*DocumentLocation)(nil), "google.privacy.dlp.v2.DocumentLocation")
+	proto.RegisterType((*RecordLocation)(nil), "google.privacy.dlp.v2.RecordLocation")
+	proto.RegisterType((*TableLocation)(nil), "google.privacy.dlp.v2.TableLocation")
+	proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2.Range")
+	proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2.ImageLocation")
+	proto.RegisterType((*BoundingBox)(nil), "google.privacy.dlp.v2.BoundingBox")
+	proto.RegisterType((*RedactImageRequest)(nil), "google.privacy.dlp.v2.RedactImageRequest")
+	proto.RegisterType((*RedactImageRequest_ImageRedactionConfig)(nil), "google.privacy.dlp.v2.RedactImageRequest.ImageRedactionConfig")
+	proto.RegisterType((*Color)(nil), "google.privacy.dlp.v2.Color")
+	proto.RegisterType((*RedactImageResponse)(nil), "google.privacy.dlp.v2.RedactImageResponse")
+	proto.RegisterType((*DeidentifyContentRequest)(nil), "google.privacy.dlp.v2.DeidentifyContentRequest")
+	proto.RegisterType((*DeidentifyContentResponse)(nil), "google.privacy.dlp.v2.DeidentifyContentResponse")
+	proto.RegisterType((*ReidentifyContentRequest)(nil), "google.privacy.dlp.v2.ReidentifyContentRequest")
+	proto.RegisterType((*ReidentifyContentResponse)(nil), "google.privacy.dlp.v2.ReidentifyContentResponse")
+	proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2.InspectContentRequest")
+	proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2.InspectContentResponse")
+	proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2.OutputStorageConfig")
+	proto.RegisterType((*InfoTypeStats)(nil), "google.privacy.dlp.v2.InfoTypeStats")
+	proto.RegisterType((*InspectDataSourceDetails)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails")
+	proto.RegisterType((*InspectDataSourceDetails_RequestedOptions)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails.RequestedOptions")
+	proto.RegisterType((*InspectDataSourceDetails_Result)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails.Result")
+	proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2.InfoTypeDescription")
+	proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2.ListInfoTypesRequest")
+	proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2.ListInfoTypesResponse")
+	proto.RegisterType((*RiskAnalysisJobConfig)(nil), "google.privacy.dlp.v2.RiskAnalysisJobConfig")
+	proto.RegisterType((*PrivacyMetric)(nil), "google.privacy.dlp.v2.PrivacyMetric")
+	proto.RegisterType((*PrivacyMetric_NumericalStatsConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.NumericalStatsConfig")
+	proto.RegisterType((*PrivacyMetric_CategoricalStatsConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.CategoricalStatsConfig")
+	proto.RegisterType((*PrivacyMetric_KAnonymityConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.KAnonymityConfig")
+	proto.RegisterType((*PrivacyMetric_LDiversityConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.LDiversityConfig")
+	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig")
+	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_TaggedField)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.TaggedField")
+	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable")
+	proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable.QuasiIdField")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_NumericalStatsResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.NumericalStatsResult")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult.CategoricalStatsHistogramBucket")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityEquivalenceClass")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityHistogramBucket")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityEquivalenceClass")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityHistogramBucket")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationQuasiIdValues")
+	proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationHistogramBucket")
+	proto.RegisterType((*ValueFrequency)(nil), "google.privacy.dlp.v2.ValueFrequency")
+	proto.RegisterType((*Value)(nil), "google.privacy.dlp.v2.Value")
+	proto.RegisterType((*QuoteInfo)(nil), "google.privacy.dlp.v2.QuoteInfo")
+	proto.RegisterType((*DateTime)(nil), "google.privacy.dlp.v2.DateTime")
+	proto.RegisterType((*DateTime_TimeZone)(nil), "google.privacy.dlp.v2.DateTime.TimeZone")
+	proto.RegisterType((*DeidentifyConfig)(nil), "google.privacy.dlp.v2.DeidentifyConfig")
+	proto.RegisterType((*PrimitiveTransformation)(nil), "google.privacy.dlp.v2.PrimitiveTransformation")
+	proto.RegisterType((*TimePartConfig)(nil), "google.privacy.dlp.v2.TimePartConfig")
+	proto.RegisterType((*CryptoHashConfig)(nil), "google.privacy.dlp.v2.CryptoHashConfig")
+	proto.RegisterType((*ReplaceValueConfig)(nil), "google.privacy.dlp.v2.ReplaceValueConfig")
+	proto.RegisterType((*ReplaceWithInfoTypeConfig)(nil), "google.privacy.dlp.v2.ReplaceWithInfoTypeConfig")
+	proto.RegisterType((*RedactConfig)(nil), "google.privacy.dlp.v2.RedactConfig")
+	proto.RegisterType((*CharsToIgnore)(nil), "google.privacy.dlp.v2.CharsToIgnore")
+	proto.RegisterType((*CharacterMaskConfig)(nil), "google.privacy.dlp.v2.CharacterMaskConfig")
+	proto.RegisterType((*FixedSizeBucketingConfig)(nil), "google.privacy.dlp.v2.FixedSizeBucketingConfig")
+	proto.RegisterType((*BucketingConfig)(nil), "google.privacy.dlp.v2.BucketingConfig")
+	proto.RegisterType((*BucketingConfig_Bucket)(nil), "google.privacy.dlp.v2.BucketingConfig.Bucket")
+	proto.RegisterType((*CryptoReplaceFfxFpeConfig)(nil), "google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig")
+	proto.RegisterType((*CryptoKey)(nil), "google.privacy.dlp.v2.CryptoKey")
+	proto.RegisterType((*TransientCryptoKey)(nil), "google.privacy.dlp.v2.TransientCryptoKey")
+	proto.RegisterType((*UnwrappedCryptoKey)(nil), "google.privacy.dlp.v2.UnwrappedCryptoKey")
+	proto.RegisterType((*KmsWrappedCryptoKey)(nil), "google.privacy.dlp.v2.KmsWrappedCryptoKey")
+	proto.RegisterType((*DateShiftConfig)(nil), "google.privacy.dlp.v2.DateShiftConfig")
+	proto.RegisterType((*InfoTypeTransformations)(nil), "google.privacy.dlp.v2.InfoTypeTransformations")
+	proto.RegisterType((*InfoTypeTransformations_InfoTypeTransformation)(nil), "google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation")
+	proto.RegisterType((*FieldTransformation)(nil), "google.privacy.dlp.v2.FieldTransformation")
+	proto.RegisterType((*RecordTransformations)(nil), "google.privacy.dlp.v2.RecordTransformations")
+	proto.RegisterType((*RecordSuppression)(nil), "google.privacy.dlp.v2.RecordSuppression")
+	proto.RegisterType((*RecordCondition)(nil), "google.privacy.dlp.v2.RecordCondition")
+	proto.RegisterType((*RecordCondition_Condition)(nil), "google.privacy.dlp.v2.RecordCondition.Condition")
+	proto.RegisterType((*RecordCondition_Conditions)(nil), "google.privacy.dlp.v2.RecordCondition.Conditions")
+	proto.RegisterType((*RecordCondition_Expressions)(nil), "google.privacy.dlp.v2.RecordCondition.Expressions")
+	proto.RegisterType((*TransformationOverview)(nil), "google.privacy.dlp.v2.TransformationOverview")
+	proto.RegisterType((*TransformationSummary)(nil), "google.privacy.dlp.v2.TransformationSummary")
+	proto.RegisterType((*TransformationSummary_SummaryResult)(nil), "google.privacy.dlp.v2.TransformationSummary.SummaryResult")
+	proto.RegisterType((*Schedule)(nil), "google.privacy.dlp.v2.Schedule")
+	proto.RegisterType((*InspectTemplate)(nil), "google.privacy.dlp.v2.InspectTemplate")
+	proto.RegisterType((*DeidentifyTemplate)(nil), "google.privacy.dlp.v2.DeidentifyTemplate")
+	proto.RegisterType((*Error)(nil), "google.privacy.dlp.v2.Error")
+	proto.RegisterType((*JobTrigger)(nil), "google.privacy.dlp.v2.JobTrigger")
+	proto.RegisterType((*JobTrigger_Trigger)(nil), "google.privacy.dlp.v2.JobTrigger.Trigger")
+	proto.RegisterType((*Action)(nil), "google.privacy.dlp.v2.Action")
+	proto.RegisterType((*Action_SaveFindings)(nil), "google.privacy.dlp.v2.Action.SaveFindings")
+	proto.RegisterType((*Action_PublishToPubSub)(nil), "google.privacy.dlp.v2.Action.PublishToPubSub")
+	proto.RegisterType((*CreateInspectTemplateRequest)(nil), "google.privacy.dlp.v2.CreateInspectTemplateRequest")
+	proto.RegisterType((*UpdateInspectTemplateRequest)(nil), "google.privacy.dlp.v2.UpdateInspectTemplateRequest")
+	proto.RegisterType((*GetInspectTemplateRequest)(nil), "google.privacy.dlp.v2.GetInspectTemplateRequest")
+	proto.RegisterType((*ListInspectTemplatesRequest)(nil), "google.privacy.dlp.v2.ListInspectTemplatesRequest")
+	proto.RegisterType((*ListInspectTemplatesResponse)(nil), "google.privacy.dlp.v2.ListInspectTemplatesResponse")
+	proto.RegisterType((*DeleteInspectTemplateRequest)(nil), "google.privacy.dlp.v2.DeleteInspectTemplateRequest")
+	proto.RegisterType((*CreateJobTriggerRequest)(nil), "google.privacy.dlp.v2.CreateJobTriggerRequest")
+	proto.RegisterType((*UpdateJobTriggerRequest)(nil), "google.privacy.dlp.v2.UpdateJobTriggerRequest")
+	proto.RegisterType((*GetJobTriggerRequest)(nil), "google.privacy.dlp.v2.GetJobTriggerRequest")
+	proto.RegisterType((*CreateDlpJobRequest)(nil), "google.privacy.dlp.v2.CreateDlpJobRequest")
+	proto.RegisterType((*ListJobTriggersRequest)(nil), "google.privacy.dlp.v2.ListJobTriggersRequest")
+	proto.RegisterType((*ListJobTriggersResponse)(nil), "google.privacy.dlp.v2.ListJobTriggersResponse")
+	proto.RegisterType((*DeleteJobTriggerRequest)(nil), "google.privacy.dlp.v2.DeleteJobTriggerRequest")
+	proto.RegisterType((*InspectJobConfig)(nil), "google.privacy.dlp.v2.InspectJobConfig")
+	proto.RegisterType((*DlpJob)(nil), "google.privacy.dlp.v2.DlpJob")
+	proto.RegisterType((*GetDlpJobRequest)(nil), "google.privacy.dlp.v2.GetDlpJobRequest")
+	proto.RegisterType((*ListDlpJobsRequest)(nil), "google.privacy.dlp.v2.ListDlpJobsRequest")
+	proto.RegisterType((*ListDlpJobsResponse)(nil), "google.privacy.dlp.v2.ListDlpJobsResponse")
+	proto.RegisterType((*CancelDlpJobRequest)(nil), "google.privacy.dlp.v2.CancelDlpJobRequest")
+	proto.RegisterType((*DeleteDlpJobRequest)(nil), "google.privacy.dlp.v2.DeleteDlpJobRequest")
+	proto.RegisterType((*CreateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.CreateDeidentifyTemplateRequest")
+	proto.RegisterType((*UpdateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.UpdateDeidentifyTemplateRequest")
+	proto.RegisterType((*GetDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.GetDeidentifyTemplateRequest")
+	proto.RegisterType((*ListDeidentifyTemplatesRequest)(nil), "google.privacy.dlp.v2.ListDeidentifyTemplatesRequest")
+	proto.RegisterType((*ListDeidentifyTemplatesResponse)(nil), "google.privacy.dlp.v2.ListDeidentifyTemplatesResponse")
+	proto.RegisterType((*DeleteDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.DeleteDeidentifyTemplateRequest")
+	proto.RegisterEnum("google.privacy.dlp.v2.ContentOption", ContentOption_name, ContentOption_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.InfoTypeSupportedBy", InfoTypeSupportedBy_name, InfoTypeSupportedBy_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.RelationalOperator", RelationalOperator_name, RelationalOperator_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.DlpJobType", DlpJobType_name, DlpJobType_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.ByteContentItem_BytesType", ByteContentItem_BytesType_name, ByteContentItem_BytesType_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.OutputStorageConfig_OutputSchema", OutputStorageConfig_OutputSchema_name, OutputStorageConfig_OutputSchema_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.TimePartConfig_TimePart", TimePartConfig_TimePart_name, TimePartConfig_TimePart_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.CharsToIgnore_CommonCharsToIgnore", CharsToIgnore_CommonCharsToIgnore_name, CharsToIgnore_CommonCharsToIgnore_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet", CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.RecordCondition_Expressions_LogicalOperator", RecordCondition_Expressions_LogicalOperator_name, RecordCondition_Expressions_LogicalOperator_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.TransformationSummary_TransformationResultCode", TransformationSummary_TransformationResultCode_name, TransformationSummary_TransformationResultCode_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.JobTrigger_Status", JobTrigger_Status_name, JobTrigger_Status_value)
+	proto.RegisterEnum("google.privacy.dlp.v2.DlpJob_JobState", DlpJob_JobState_name, DlpJob_JobState_value)
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for DlpService service
+
+type DlpServiceClient interface {
+	// Finds potentially sensitive info in content.
+	// This method has limits on input size, processing time, and output size.
+	// [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for
+	// images](/dlp/docs/inspecting-images)
+	InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error)
+	// Redacts potentially sensitive info from an image.
+	// This method has limits on input size, processing time, and output size.
+	// [How-to guide](/dlp/docs/redacting-sensitive-data-images)
+	RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error)
+	// De-identifies potentially sensitive info from a ContentItem.
+	// This method has limits on input size and output size.
+	// [How-to guide](/dlp/docs/deidentify-sensitive-data)
+	DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error)
+	// Re-identify content that has been de-identified.
+	ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error)
+	// Returns sensitive information types DLP supports.
+	ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error)
+	// Creates an inspect template for re-using frequently used configuration
+	// for inspecting content, images, and storage.
+	CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
+	// Updates the inspect template.
+	UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
+	// Gets an inspect template.
+	GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error)
+	// Lists inspect templates.
+	ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error)
+	// Deletes inspect templates.
+	DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
+	// Creates an Deidentify template for re-using frequently used configuration
+	// for Deidentifying content, images, and storage.
+	CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
+	// Updates the inspect template.
+	UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
+	// Gets an inspect template.
+	GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error)
+	// Lists inspect templates.
+	ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error)
+	// Deletes inspect templates.
+	DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
+	// Creates a job to run DLP actions such as scanning storage for sensitive
+	// information on a set schedule.
+	CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error)
+	// Updates a job trigger.
+	UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error)
+	// Gets a job trigger.
+	GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error)
+	// Lists job triggers.
+	ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error)
+	// Deletes a job trigger.
+	DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
+	// Create a new job to inspect storage or calculate risk metrics [How-to
+	// guide](/dlp/docs/compute-risk-analysis).
+	CreateDlpJob(ctx context.Context, in *CreateDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error)
+	// Lists DlpJobs that match the specified filter in the request.
+	ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error)
+	// Gets the latest state of a long-running DlpJob.
+	GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error)
+	// Deletes a long-running DlpJob. This method indicates that the client is
+	// no longer interested in the DlpJob result. The job will be cancelled if
+	// possible.
+	DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
+	// Starts asynchronous cancellation on a long-running DlpJob.  The server
+	// makes a best effort to cancel the DlpJob, but success is not
+	// guaranteed.
+	CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error)
+}
+
+type dlpServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient {
+	return &dlpServiceClient{cc}
+}
+
+func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) {
+	out := new(InspectContentResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/InspectContent", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) {
+	out := new(RedactImageResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/RedactImage", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) {
+	out := new(DeidentifyContentResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeidentifyContent", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) {
+	out := new(ReidentifyContentResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ReidentifyContent", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) {
+	out := new(ListInfoTypesResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListInfoTypes", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
+	out := new(InspectTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateInspectTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
+	out := new(InspectTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateInspectTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) {
+	out := new(InspectTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetInspectTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) {
+	out := new(ListInspectTemplatesResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListInspectTemplates", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
+	out := new(google_protobuf3.Empty)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteInspectTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
+	out := new(DeidentifyTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateDeidentifyTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
+	out := new(DeidentifyTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateDeidentifyTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) {
+	out := new(DeidentifyTemplate)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetDeidentifyTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) {
+	out := new(ListDeidentifyTemplatesResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListDeidentifyTemplates", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
+	out := new(google_protobuf3.Empty)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteDeidentifyTemplate", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) {
+	out := new(JobTrigger)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateJobTrigger", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) {
+	out := new(JobTrigger)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateJobTrigger", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) {
+	out := new(JobTrigger)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetJobTrigger", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error) {
+	out := new(ListJobTriggersResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListJobTriggers", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
+	out := new(google_protobuf3.Empty)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteJobTrigger", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) CreateDlpJob(ctx context.Context, in *CreateDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) {
+	out := new(DlpJob)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateDlpJob", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) {
+	out := new(ListDlpJobsResponse)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListDlpJobs", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) {
+	out := new(DlpJob)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetDlpJob", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
+	out := new(google_protobuf3.Empty)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteDlpJob", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dlpServiceClient) CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) {
+	out := new(google_protobuf3.Empty)
+	err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CancelDlpJob", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for DlpService service
+
+type DlpServiceServer interface {
+	// Finds potentially sensitive info in content.
+	// This method has limits on input size, processing time, and output size.
+	// [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for
+	// images](/dlp/docs/inspecting-images)
+	InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error)
+	// Redacts potentially sensitive info from an image.
+	// This method has limits on input size, processing time, and output size.
+	// [How-to guide](/dlp/docs/redacting-sensitive-data-images)
+	RedactImage(context.Context, *RedactImageRequest) (*RedactImageResponse, error)
+	// De-identifies potentially sensitive info from a ContentItem.
+	// This method has limits on input size and output size.
+	// [How-to guide](/dlp/docs/deidentify-sensitive-data)
+	DeidentifyContent(context.Context, *DeidentifyContentRequest) (*DeidentifyContentResponse, error)
+	// Re-identify content that has been de-identified.
+	ReidentifyContent(context.Context, *ReidentifyContentRequest) (*ReidentifyContentResponse, error)
+	// Returns sensitive information types DLP supports.
+	ListInfoTypes(context.Context, *ListInfoTypesRequest) (*ListInfoTypesResponse, error)
+	// Creates an inspect template for re-using frequently used configuration
+	// for inspecting content, images, and storage.
+	CreateInspectTemplate(context.Context, *CreateInspectTemplateRequest) (*InspectTemplate, error)
+	// Updates the inspect template.
+	UpdateInspectTemplate(context.Context, *UpdateInspectTemplateRequest) (*InspectTemplate, error)
+	// Gets an inspect template.
+	GetInspectTemplate(context.Context, *GetInspectTemplateRequest) (*InspectTemplate, error)
+	// Lists inspect templates.
+	ListInspectTemplates(context.Context, *ListInspectTemplatesRequest) (*ListInspectTemplatesResponse, error)
+	// Deletes inspect templates.
+	DeleteInspectTemplate(context.Context, *DeleteInspectTemplateRequest) (*google_protobuf3.Empty, error)
+	// Creates an Deidentify template for re-using frequently used configuration
+	// for Deidentifying content, images, and storage.
+	CreateDeidentifyTemplate(context.Context, *CreateDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
+	// Updates the inspect template.
+	UpdateDeidentifyTemplate(context.Context, *UpdateDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
+	// Gets an inspect template.
+	GetDeidentifyTemplate(context.Context, *GetDeidentifyTemplateRequest) (*DeidentifyTemplate, error)
+	// Lists inspect templates.
+	ListDeidentifyTemplates(context.Context, *ListDeidentifyTemplatesRequest) (*ListDeidentifyTemplatesResponse, error)
+	// Deletes inspect templates.
+	DeleteDeidentifyTemplate(context.Context, *DeleteDeidentifyTemplateRequest) (*google_protobuf3.Empty, error)
+	// Creates a job to run DLP actions such as scanning storage for sensitive
+	// information on a set schedule.
+	CreateJobTrigger(context.Context, *CreateJobTriggerRequest) (*JobTrigger, error)
+	// Updates a job trigger.
+	UpdateJobTrigger(context.Context, *UpdateJobTriggerRequest) (*JobTrigger, error)
+	// Gets a job trigger.
+	GetJobTrigger(context.Context, *GetJobTriggerRequest) (*JobTrigger, error)
+	// Lists job triggers.
+	ListJobTriggers(context.Context, *ListJobTriggersRequest) (*ListJobTriggersResponse, error)
+	// Deletes a job trigger.
+	DeleteJobTrigger(context.Context, *DeleteJobTriggerRequest) (*google_protobuf3.Empty, error)
+	// Create a new job to inspect storage or calculate risk metrics [How-to
+	// guide](/dlp/docs/compute-risk-analysis).
+	CreateDlpJob(context.Context, *CreateDlpJobRequest) (*DlpJob, error)
+	// Lists DlpJobs that match the specified filter in the request.
+	ListDlpJobs(context.Context, *ListDlpJobsRequest) (*ListDlpJobsResponse, error)
+	// Gets the latest state of a long-running DlpJob.
+	GetDlpJob(context.Context, *GetDlpJobRequest) (*DlpJob, error)
+	// Deletes a long-running DlpJob. This method indicates that the client is
+	// no longer interested in the DlpJob result. The job will be cancelled if
+	// possible.
+	DeleteDlpJob(context.Context, *DeleteDlpJobRequest) (*google_protobuf3.Empty, error)
+	// Starts asynchronous cancellation on a long-running DlpJob.  The server
+	// makes a best effort to cancel the DlpJob, but success is not
+	// guaranteed.
+	CancelDlpJob(context.Context, *CancelDlpJobRequest) (*google_protobuf3.Empty, error)
+}
+
+func RegisterDlpServiceServer(s *grpc.Server, srv DlpServiceServer) {
+	s.RegisterService(&_DlpService_serviceDesc, srv)
+}
+
+func _DlpService_InspectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InspectContentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).InspectContent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/InspectContent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).InspectContent(ctx, req.(*InspectContentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_RedactImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RedactImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).RedactImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/RedactImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).RedactImage(ctx, req.(*RedactImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_DeidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeidentifyContentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).DeidentifyContent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/DeidentifyContent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).DeidentifyContent(ctx, req.(*DeidentifyContentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ReidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ReidentifyContentRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ReidentifyContent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ReidentifyContent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ReidentifyContent(ctx, req.(*ReidentifyContentRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ListInfoTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListInfoTypesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ListInfoTypes(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ListInfoTypes",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ListInfoTypes(ctx, req.(*ListInfoTypesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_CreateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateInspectTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).CreateInspectTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/CreateInspectTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).CreateInspectTemplate(ctx, req.(*CreateInspectTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_UpdateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateInspectTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateInspectTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, req.(*UpdateInspectTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_GetInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetInspectTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).GetInspectTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/GetInspectTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).GetInspectTemplate(ctx, req.(*GetInspectTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ListInspectTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListInspectTemplatesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ListInspectTemplates(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ListInspectTemplates",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ListInspectTemplates(ctx, req.(*ListInspectTemplatesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_DeleteInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteInspectTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteInspectTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, req.(*DeleteInspectTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_CreateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateDeidentifyTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/CreateDeidentifyTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, req.(*CreateDeidentifyTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_UpdateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateDeidentifyTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateDeidentifyTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, req.(*UpdateDeidentifyTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_GetDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDeidentifyTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/GetDeidentifyTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, req.(*GetDeidentifyTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ListDeidentifyTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListDeidentifyTemplatesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ListDeidentifyTemplates",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, req.(*ListDeidentifyTemplatesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_DeleteDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteDeidentifyTemplateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteDeidentifyTemplate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, req.(*DeleteDeidentifyTemplateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_CreateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateJobTriggerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).CreateJobTrigger(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/CreateJobTrigger",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).CreateJobTrigger(ctx, req.(*CreateJobTriggerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_UpdateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateJobTriggerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).UpdateJobTrigger(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateJobTrigger",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).UpdateJobTrigger(ctx, req.(*UpdateJobTriggerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_GetJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetJobTriggerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).GetJobTrigger(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/GetJobTrigger",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).GetJobTrigger(ctx, req.(*GetJobTriggerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ListJobTriggers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListJobTriggersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ListJobTriggers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ListJobTriggers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ListJobTriggers(ctx, req.(*ListJobTriggersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_DeleteJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteJobTriggerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).DeleteJobTrigger(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteJobTrigger",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).DeleteJobTrigger(ctx, req.(*DeleteJobTriggerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_CreateDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateDlpJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).CreateDlpJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/CreateDlpJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).CreateDlpJob(ctx, req.(*CreateDlpJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_ListDlpJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListDlpJobsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).ListDlpJobs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/ListDlpJobs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).ListDlpJobs(ctx, req.(*ListDlpJobsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_GetDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDlpJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).GetDlpJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/GetDlpJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).GetDlpJob(ctx, req.(*GetDlpJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_DeleteDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteDlpJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).DeleteDlpJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteDlpJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).DeleteDlpJob(ctx, req.(*DeleteDlpJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DlpService_CancelDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CancelDlpJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DlpServiceServer).CancelDlpJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.privacy.dlp.v2.DlpService/CancelDlpJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DlpServiceServer).CancelDlpJob(ctx, req.(*CancelDlpJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DlpService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.privacy.dlp.v2.DlpService",
+	HandlerType: (*DlpServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "InspectContent",
+			Handler:    _DlpService_InspectContent_Handler,
+		},
+		{
+			MethodName: "RedactImage",
+			Handler:    _DlpService_RedactImage_Handler,
+		},
+		{
+			MethodName: "DeidentifyContent",
+			Handler:    _DlpService_DeidentifyContent_Handler,
+		},
+		{
+			MethodName: "ReidentifyContent",
+			Handler:    _DlpService_ReidentifyContent_Handler,
+		},
+		{
+			MethodName: "ListInfoTypes",
+			Handler:    _DlpService_ListInfoTypes_Handler,
+		},
+		{
+			MethodName: "CreateInspectTemplate",
+			Handler:    _DlpService_CreateInspectTemplate_Handler,
+		},
+		{
+			MethodName: "UpdateInspectTemplate",
+			Handler:    _DlpService_UpdateInspectTemplate_Handler,
+		},
+		{
+			MethodName: "GetInspectTemplate",
+			Handler:    _DlpService_GetInspectTemplate_Handler,
+		},
+		{
+			MethodName: "ListInspectTemplates",
+			Handler:    _DlpService_ListInspectTemplates_Handler,
+		},
+		{
+			MethodName: "DeleteInspectTemplate",
+			Handler:    _DlpService_DeleteInspectTemplate_Handler,
+		},
+		{
+			MethodName: "CreateDeidentifyTemplate",
+			Handler:    _DlpService_CreateDeidentifyTemplate_Handler,
+		},
+		{
+			MethodName: "UpdateDeidentifyTemplate",
+			Handler:    _DlpService_UpdateDeidentifyTemplate_Handler,
+		},
+		{
+			MethodName: "GetDeidentifyTemplate",
+			Handler:    _DlpService_GetDeidentifyTemplate_Handler,
+		},
+		{
+			MethodName: "ListDeidentifyTemplates",
+			Handler:    _DlpService_ListDeidentifyTemplates_Handler,
+		},
+		{
+			MethodName: "DeleteDeidentifyTemplate",
+			Handler:    _DlpService_DeleteDeidentifyTemplate_Handler,
+		},
+		{
+			MethodName: "CreateJobTrigger",
+			Handler:    _DlpService_CreateJobTrigger_Handler,
+		},
+		{
+			MethodName: "UpdateJobTrigger",
+			Handler:    _DlpService_UpdateJobTrigger_Handler,
+		},
+		{
+			MethodName: "GetJobTrigger",
+			Handler:    _DlpService_GetJobTrigger_Handler,
+		},
+		{
+			MethodName: "ListJobTriggers",
+			Handler:    _DlpService_ListJobTriggers_Handler,
+		},
+		{
+			MethodName: "DeleteJobTrigger",
+			Handler:    _DlpService_DeleteJobTrigger_Handler,
+		},
+		{
+			MethodName: "CreateDlpJob",
+			Handler:    _DlpService_CreateDlpJob_Handler,
+		},
+		{
+			MethodName: "ListDlpJobs",
+			Handler:    _DlpService_ListDlpJobs_Handler,
+		},
+		{
+			MethodName: "GetDlpJob",
+			Handler:    _DlpService_GetDlpJob_Handler,
+		},
+		{
+			MethodName: "DeleteDlpJob",
+			Handler:    _DlpService_DeleteDlpJob_Handler,
+		},
+		{
+			MethodName: "CancelDlpJob",
+			Handler:    _DlpService_CancelDlpJob_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/privacy/dlp/v2/dlp.proto",
+}
+
+func init() { proto.RegisterFile("google/privacy/dlp/v2/dlp.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 7980 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x6d, 0x6c, 0x1b, 0xd9,
+	0x76, 0x98, 0x86, 0x14, 0x25, 0xea, 0x50, 0xa4, 0xa8, 0x2b, 0x4b, 0x96, 0x69, 0x7b, 0xed, 0x1d,
+	0xef, 0x7a, 0xbd, 0x5a, 0x5b, 0xda, 0xd5, 0x7e, 0xbc, 0x5d, 0xef, 0xbe, 0x4d, 0x28, 0x92, 0x16,
+	0xe9, 0x95, 0x44, 0x79, 0x48, 0x79, 0xd7, 0xce, 0x62, 0xa7, 0x23, 0xf2, 0x8a, 0x1a, 0x8b, 0xe4,
+	0xd0, 0x33, 0x43, 0x5b, 0xda, 0x24, 0xc0, 0x4b, 0xd1, 0x36, 0x48, 0xd1, 0x87, 0x06, 0x68, 0x5f,
+	0x1f, 0x9a, 0xb4, 0x41, 0xda, 0xfe, 0x28, 0x10, 0x20, 0x2d, 0x8a, 0xb6, 0x09, 0xd2, 0xa6, 0xfd,
+	0x91, 0x7e, 0xa2, 0x28, 0x8a, 0x17, 0xbc, 0x5f, 0x45, 0x51, 0x20, 0x7d, 0xfd, 0x40, 0x81, 0xcd,
+	0x9f, 0x02, 0xfd, 0xd1, 0x0f, 0xa0, 0x28, 0xee, 0xd7, 0x7c, 0x71, 0x86, 0x1f, 0xb2, 0x17, 0x09,
+	0xf2, 0x4b, 0x9c, 0x73, 0xcf, 0x39, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0x3f, 0x04,
+	0xd7, 0x5a, 0x86, 0xd1, 0x6a, 0xe3, 0x8d, 0x9e, 0xa9, 0x3f, 0xd3, 0x1a, 0x67, 0x1b, 0xcd, 0x76,
+	0x6f, 0xe3, 0xd9, 0x26, 0xf9, 0xb3, 0xde, 0x33, 0x0d, 0xdb, 0x40, 0xcb, 0x0c, 0x61, 0x9d, 0x23,
+	0xac, 0x93, 0x92, 0x67, 0x9b, 0xb9, 0x2b, 0x9c, 0x4e, 0xeb, 0xe9, 0x1b, 0x5a, 0xb7, 0x6b, 0xd8,
+	0x9a, 0xad, 0x1b, 0x5d, 0x8b, 0x11, 0xe5, 0x6e, 0x84, 0x73, 0xb5, 0x6c, 0xc3, 0xd4, 0x5a, 0x98,
+	0x23, 0xbd, 0xe2, 0x20, 0x19, 0xb6, 0x71, 0xd8, 0x3f, 0xda, 0x68, 0xf6, 0x4d, 0xca, 0x85, 0x97,
+	0x5f, 0x0e, 0x96, 0xe3, 0x4e, 0xcf, 0x3e, 0xe3, 0x85, 0xd7, 0x83, 0x85, 0x47, 0x3a, 0x6e, 0x37,
+	0xd5, 0x8e, 0x66, 0x9d, 0x70, 0x8c, 0x6b, 0x41, 0x0c, 0x5b, 0xef, 0x60, 0xcb, 0xd6, 0x3a, 0xbc,
+	0x65, 0xb9, 0x8b, 0x1c, 0xc1, 0xec, 0x35, 0x36, 0x2c, 0x5b, 0xb3, 0xfb, 0x42, 0xfa, 0x15, 0x5e,
+	0x60, 0x9f, 0xf5, 0xf0, 0x46, 0x53, 0xb3, 0x71, 0x40, 0x20, 0x0e, 0x3f, 0x33, 0x8e, 0x9e, 0x63,
+	0x7c, 0x12, 0x56, 0x48, 0xaa, 0x32, 0x8e, 0x9a, 0x1a, 0x97, 0x56, 0xfe, 0xd7, 0x33, 0x90, 0xae,
+	0x74, 0xad, 0x1e, 0x6e, 0xd8, 0x05, 0xa3, 0x7b, 0xa4, 0xb7, 0xd0, 0xa7, 0x00, 0x7a, 0xf7, 0xc8,
+	0x50, 0x09, 0xba, 0xb5, 0x2a, 0x5d, 0x8f, 0xdf, 0x4a, 0x6d, 0x5e, 0x5b, 0x0f, 0xd5, 0xf5, 0x7a,
+	0xa5, 0x7b, 0x64, 0xd4, 0xcf, 0x7a, 0x58, 0x99, 0xd3, 0xf9, 0x2f, 0x0b, 0x95, 0x21, 0xd3, 0xd1,
+	0xbb, 0x6a, 0x5b, 0x3f, 0xc1, 0x6d, 0xfd, 0xd8, 0x30, 0x9a, 0xab, 0xb1, 0xeb, 0xd2, 0xad, 0xcc,
+	0xe6, 0xab, 0x11, 0x3c, 0x76, 0x1c, 0x44, 0x25, 0xdd, 0xd1, 0xbb, 0xee, 0x27, 0xba, 0x0f, 0x33,
+	0x6d, 0xbd, 0xa3, 0xdb, 0xd6, 0x6a, 0xfc, 0xba, 0x74, 0x2b, 0xb5, 0xb9, 0x19, 0x29, 0x85, 0x47,
+	0xfe, 0xf5, 0x7b, 0x7a, 0xb7, 0xa9, 0x77, 0x5b, 0x3b, 0x94, 0x52, 0xe1, 0x1c, 0xd0, 0x0d, 0x48,
+	0xeb, 0xdd, 0x46, 0xbb, 0xdf, 0xc4, 0xea, 0xd3, 0xbe, 0x61, 0xe3, 0xd5, 0xe9, 0xeb, 0xd2, 0xad,
+	0xa4, 0x32, 0xcf, 0x81, 0x0f, 0x08, 0x0c, 0xdd, 0x06, 0x84, 0x4f, 0x19, 0x92, 0x47, 0x05, 0x09,
+	0x8a, 0x99, 0xe5, 0x25, 0x15, 0xa7, 0xa1, 0x0f, 0x60, 0xb1, 0xd1, 0xb7, 0x6c, 0xa3, 0xe3, 0x45,
+	0x9e, 0xa1, 0xfa, 0x7a, 0x3d, 0x42, 0xd2, 0x02, 0xc5, 0x77, 0xb4, 0xb6, 0xd0, 0xf0, 0x7d, 0x5b,
+	0x68, 0x17, 0x16, 0x1a, 0x46, 0xd7, 0xc6, 0x5d, 0x5b, 0x35, 0x7a, 0xd4, 0x6c, 0x57, 0x93, 0xd7,
+	0xe3, 0xb7, 0x32, 0x9b, 0xaf, 0x45, 0x31, 0x64, 0xd8, 0x55, 0x8a, 0xac, 0x64, 0x1a, 0xde, 0x4f,
+	0x2b, 0xf7, 0x4d, 0x0c, 0xd2, 0x3e, 0x75, 0xa0, 0x77, 0x60, 0xb9, 0xa3, 0x9d, 0xaa, 0x47, 0x0c,
+	0x68, 0xa9, 0x3d, 0x6c, 0xaa, 0xba, 0x8d, 0x3b, 0xab, 0xd2, 0x75, 0xe9, 0x56, 0x42, 0x41, 0x1d,
+	0xed, 0x94, 0x13, 0x58, 0xfb, 0xd8, 0xac, 0xd8, 0xb8, 0x83, 0xbe, 0x03, 0xab, 0x03, 0x24, 0x26,
+	0x7e, 0xda, 0xc7, 0x96, 0x4d, 0x7b, 0x36, 0xa1, 0x2c, 0xfb, 0xa9, 0x14, 0x56, 0x88, 0x7e, 0x0e,
+	0x72, 0x83, 0x75, 0x09, 0x4d, 0xad, 0xc6, 0xa9, 0xa2, 0x7e, 0x7a, 0xf2, 0x2e, 0x75, 0x8c, 0x8e,
+	0x7e, 0x2a, 0x2b, 0x01, 0x91, 0x79, 0x61, 0xae, 0x47, 0xec, 0xda, 0x83, 0x88, 0x3e, 0x81, 0x39,
+	0xb7, 0x76, 0x89, 0x1a, 0xd4, 0x48, 0xb3, 0x4e, 0x0a, 0xb3, 0x46, 0xaf, 0xc2, 0xbc, 0xb7, 0x31,
+	0xbc, 0xe5, 0x29, 0x4f, 0xe5, 0xf2, 0x1f, 0x48, 0xb0, 0xb0, 0x75, 0x66, 0x63, 0xde, 0x27, 0x54,
+	0x79, 0x45, 0x98, 0x76, 0xea, 0xcb, 0x6c, 0xbe, 0x1d, 0x51, 0x5f, 0x80, 0x8a, 0x7e, 0x5b, 0x54,
+	0x00, 0x4a, 0x8d, 0x10, 0x4c, 0x37, 0x35, 0x5b, 0xa3, 0x95, 0xce, 0x2b, 0xf4, 0xb7, 0x6c, 0xc1,
+	0x9c, 0x83, 0x86, 0x72, 0xb0, 0xb2, 0xf5, 0xa8, 0x5e, 0xaa, 0xa9, 0xf5, 0x47, 0xfb, 0x25, 0xf5,
+	0x60, 0xaf, 0xb6, 0x5f, 0x2a, 0x54, 0xee, 0x55, 0x4a, 0xc5, 0xec, 0x14, 0xca, 0x00, 0x54, 0x76,
+	0xf3, 0xdb, 0x25, 0xf5, 0xfe, 0x7e, 0x69, 0x3b, 0x2b, 0xa1, 0x34, 0xcc, 0xb1, 0xef, 0xad, 0xdd,
+	0xfd, 0x6c, 0xcc, 0xfd, 0xdc, 0xdf, 0xdb, 0xce, 0xc6, 0xdd, 0xcf, 0xda, 0xc3, 0xed, 0xec, 0x34,
+	0xf9, 0xac, 0x97, 0xbe, 0xa8, 0xab, 0x07, 0xf5, 0x7b, 0x1f, 0x66, 0x13, 0xf2, 0xdf, 0x95, 0x20,
+	0xe5, 0x6d, 0xde, 0x0a, 0x24, 0x9e, 0x69, 0xed, 0x3e, 0xa6, 0x03, 0x74, 0xae, 0x3c, 0xa5, 0xb0,
+	0x4f, 0xf4, 0x1e, 0x24, 0x6c, 0xed, 0xb0, 0xcd, 0x46, 0x59, 0x6a, 0xf3, 0x4a, 0x44, 0xbb, 0xeb,
+	0x04, 0x87, 0x50, 0x51, 0x64, 0x54, 0x82, 0xb9, 0xc3, 0x33, 0x1b, 0x33, 0x83, 0x4c, 0x50, 0xca,
+	0x9b, 0xe3, 0x69, 0xac, 0x3c, 0xa5, 0x24, 0x09, 0x29, 0xf9, 0xbd, 0x95, 0x82, 0x39, 0xa2, 0x21,
+	0xca, 0x46, 0xfe, 0x07, 0x12, 0x24, 0x68, 0x35, 0xe8, 0x43, 0x98, 0x3d, 0xc6, 0x5a, 0x13, 0x9b,
+	0xc2, 0xa9, 0xbd, 0x12, 0xc1, 0xfb, 0x1e, 0xf1, 0xd7, 0x95, 0xa6, 0x22, 0xd0, 0xd1, 0x7b, 0x30,
+	0x6d, 0x1a, 0xcf, 0x49, 0x9f, 0x13, 0xb2, 0xeb, 0xc3, 0x1a, 0xb3, 0xae, 0x18, 0xcf, 0x15, 0x8a,
+	0x9d, 0xfb, 0x18, 0xe2, 0x8a, 0xf1, 0x1c, 0xbd, 0x07, 0x33, 0x54, 0x27, 0xa2, 0xd6, 0x28, 0x5d,
+	0x3c, 0x24, 0x48, 0x0a, 0xc7, 0x95, 0xbf, 0x76, 0xbc, 0xb2, 0x82, 0xad, 0x7e, 0xdb, 0x46, 0x77,
+	0x21, 0xe9, 0xd8, 0xde, 0x28, 0xf1, 0x29, 0x9a, 0xe2, 0xe0, 0xa3, 0x3b, 0x80, 0x9c, 0x41, 0x68,
+	0x9b, 0xfd, 0x6e, 0x43, 0xb3, 0x31, 0xf3, 0xca, 0x49, 0x65, 0x51, 0x94, 0xd4, 0x45, 0x81, 0xfc,
+	0x1f, 0x62, 0x30, 0xcb, 0x99, 0xa0, 0x0b, 0x90, 0x60, 0xee, 0x92, 0x18, 0xf0, 0x9c, 0xc2, 0x3e,
+	0xfc, 0x43, 0x29, 0x36, 0xe9, 0x50, 0xca, 0x03, 0x78, 0x26, 0x87, 0xf8, 0xb8, 0x93, 0x83, 0x87,
+	0x08, 0x7d, 0x0c, 0xc9, 0xb6, 0xd1, 0xa0, 0x53, 0x32, 0x37, 0xb1, 0xa8, 0xfa, 0x77, 0x38, 0x9a,
+	0xe2, 0x10, 0xa0, 0x8f, 0x21, 0xd5, 0x30, 0xb1, 0x66, 0x63, 0x95, 0x4c, 0x86, 0xab, 0x33, 0x94,
+	0x3e, 0xe7, 0xd2, 0xb3, 0x49, 0x79, 0xbd, 0x2e, 0x26, 0x65, 0x05, 0x18, 0x3a, 0x01, 0xa0, 0x9f,
+	0x02, 0xa0, 0x3a, 0xa0, 0x9e, 0x6c, 0x75, 0x96, 0xd2, 0x46, 0x59, 0x04, 0x9d, 0x54, 0x88, 0x02,
+	0x94, 0xb9, 0xa7, 0xe2, 0xa7, 0xfc, 0x9f, 0x25, 0x48, 0xee, 0xb8, 0xa2, 0x00, 0xb5, 0x78, 0x53,
+	0xeb, 0xb6, 0x84, 0x53, 0x8a, 0x32, 0x10, 0x85, 0xe0, 0x28, 0x74, 0x84, 0xd0, 0x9f, 0xa8, 0x44,
+	0x26, 0x8b, 0x26, 0xee, 0x19, 0x7a, 0xd7, 0xe6, 0x1c, 0x62, 0x63, 0x70, 0xc8, 0x38, 0x44, 0x8c,
+	0x4d, 0x0d, 0x16, 0xc5, 0x9c, 0x23, 0x54, 0x64, 0xad, 0xce, 0x52, 0x13, 0xbb, 0x39, 0x7c, 0xd6,
+	0x71, 0x74, 0x9b, 0x6d, 0xf8, 0x01, 0x96, 0xfc, 0xdb, 0x71, 0x58, 0x08, 0x60, 0xa1, 0xd7, 0x81,
+	0xce, 0x4f, 0x9a, 0xde, 0xc5, 0xa6, 0xda, 0xd5, 0x3a, 0xc2, 0xa8, 0xd2, 0x0e, 0x74, 0x4f, 0xeb,
+	0x60, 0xb4, 0x0f, 0x0b, 0x26, 0x6e, 0x18, 0x66, 0xd3, 0x11, 0x87, 0x37, 0x2b, 0x6a, 0x52, 0x55,
+	0x28, 0xb6, 0xa8, 0xa6, 0x3c, 0xa5, 0x64, 0x4c, 0x1f, 0x04, 0xed, 0x42, 0x46, 0xef, 0x68, 0x2d,
+	0xec, 0x32, 0x64, 0xf1, 0x44, 0xd4, 0xa4, 0x5a, 0x21, 0xc8, 0x1e, 0x7e, 0x69, 0xdd, 0x0b, 0x40,
+	0x0f, 0x61, 0xb1, 0x69, 0x34, 0xfa, 0x1d, 0xaf, 0xc6, 0xb8, 0xbb, 0x7a, 0x23, 0x82, 0x63, 0x91,
+	0xe3, 0x7b, 0x98, 0x66, 0x9b, 0x01, 0x18, 0xfa, 0x0c, 0x96, 0x5c, 0xfd, 0x38, 0x21, 0xe1, 0x18,
+	0xf6, 0x89, 0x1c, 0x32, 0x07, 0x86, 0xde, 0x62, 0xbd, 0xca, 0x98, 0x3d, 0xc3, 0xa6, 0x45, 0x84,
+	0x9c, 0xa5, 0xfa, 0xce, 0x3a, 0x05, 0x0f, 0x19, 0x7c, 0x0b, 0xdc, 0xe1, 0x24, 0xbf, 0x0b, 0xd9,
+	0xa0, 0xb4, 0xe8, 0x1a, 0xa4, 0x8e, 0xf4, 0x36, 0x56, 0x8d, 0xa3, 0x23, 0x0b, 0xdb, 0xb4, 0xdb,
+	0xe2, 0x0a, 0x10, 0x50, 0x95, 0x42, 0xe4, 0x7f, 0x2f, 0x41, 0xc6, 0xdf, 0x0d, 0x64, 0xa0, 0xf0,
+	0x6e, 0x3c, 0xc1, 0x67, 0xdc, 0xb4, 0xaf, 0x0f, 0xed, 0xc1, 0xcf, 0xf0, 0x99, 0x32, 0x67, 0x8a,
+	0x9f, 0xe8, 0x23, 0xe2, 0xf1, 0x48, 0xe4, 0xac, 0x37, 0xb9, 0x01, 0x8c, 0x74, 0xd8, 0x47, 0xec,
+	0x07, 0xfa, 0x0c, 0x32, 0x74, 0x46, 0x19, 0xb7, 0xc3, 0xa9, 0xeb, 0x76, 0xac, 0x39, 0x6d, 0x7b,
+	0x3f, 0xe5, 0xdb, 0x90, 0xf6, 0x95, 0xa3, 0xcb, 0x30, 0x67, 0x1a, 0xcf, 0x55, 0xbd, 0xdb, 0xc4,
+	0xa7, 0x5c, 0x17, 0x49, 0xd3, 0x78, 0x5e, 0x21, 0xdf, 0xf2, 0x06, 0x24, 0xd8, 0xb0, 0xba, 0x00,
+	0x09, 0xcb, 0xd6, 0x4c, 0xa1, 0x2d, 0xf6, 0x81, 0xb2, 0x10, 0xc7, 0x5d, 0xd6, 0x9e, 0xb8, 0x42,
+	0x7e, 0xca, 0x8f, 0x21, 0xed, 0xb3, 0x37, 0x54, 0x81, 0xcc, 0xa1, 0xd1, 0xa7, 0xee, 0x57, 0x3d,
+	0x34, 0x4e, 0x9d, 0x89, 0x43, 0x8e, 0x9a, 0x0a, 0x39, 0xf2, 0x96, 0x71, 0xaa, 0xa4, 0x0f, 0xdd,
+	0x0f, 0x6c, 0xc9, 0x1a, 0xa4, 0x3c, 0xa5, 0xa4, 0x72, 0xdb, 0xe8, 0xf1, 0x50, 0x8f, 0xfc, 0x24,
+	0x81, 0x45, 0x1b, 0x1f, 0x89, 0x38, 0x8e, 0xfe, 0x26, 0x82, 0x3f, 0xd7, 0x9b, 0xf6, 0x31, 0xd5,
+	0x59, 0x42, 0x61, 0x1f, 0x68, 0x05, 0x66, 0x8e, 0xb1, 0xde, 0x3a, 0xb6, 0xa9, 0xbf, 0x4d, 0x28,
+	0xfc, 0x4b, 0xfe, 0xf3, 0xd3, 0x80, 0x14, 0xdc, 0xd4, 0x1a, 0x36, 0x6d, 0x85, 0x88, 0xfd, 0x56,
+	0x60, 0xa6, 0xa7, 0x99, 0xb8, 0x6b, 0xf3, 0x31, 0xce, 0xbf, 0x48, 0xcf, 0xe8, 0x6c, 0x5e, 0x53,
+	0x1b, 0x34, 0xb6, 0xe3, 0x5d, 0xfb, 0xda, 0x38, 0x71, 0xa0, 0x92, 0xd6, 0x7d, 0x2b, 0x95, 0x67,
+	0x70, 0x91, 0x8d, 0x6b, 0x93, 0x0a, 0xa0, 0x1b, 0x5d, 0xce, 0x94, 0xc4, 0xec, 0x44, 0x65, 0x9f,
+	0x46, 0xda, 0x5b, 0x50, 0xe0, 0x75, 0xfe, 0xc1, 0xf9, 0xf0, 0xfa, 0x96, 0xf5, 0x10, 0xa8, 0x85,
+	0x0a, 0xde, 0x38, 0x65, 0x76, 0x92, 0x38, 0xc5, 0x8d, 0x52, 0x72, 0xbf, 0x2f, 0xc1, 0x85, 0xb0,
+	0x4a, 0xd1, 0xa7, 0x93, 0xc7, 0xa9, 0x24, 0xfc, 0x71, 0xa6, 0xd7, 0x5b, 0xc4, 0x7f, 0x12, 0x96,
+	0xaa, 0xd6, 0x6e, 0xab, 0x36, 0x3e, 0x65, 0xdd, 0x9b, 0x24, 0x8e, 0x8c, 0x15, 0xe4, 0xdb, 0xed,
+	0x3a, 0x3e, 0xb5, 0xc9, 0x04, 0xe2, 0xd5, 0x5c, 0xdb, 0x30, 0xf9, 0x38, 0xb9, 0x12, 0xe9, 0xf7,
+	0xdb, 0x86, 0x49, 0xdc, 0xab, 0x23, 0x71, 0xdb, 0x30, 0xb7, 0x92, 0x30, 0x63, 0x6b, 0x66, 0x0b,
+	0xdb, 0x72, 0x01, 0x12, 0x14, 0x44, 0x2c, 0xcd, 0xc4, 0x4d, 0x2a, 0x7d, 0x4c, 0x21, 0x3f, 0x89,
+	0x55, 0xb5, 0x4c, 0x8c, 0x99, 0x2f, 0x8f, 0x29, 0xec, 0x83, 0xd8, 0xdf, 0xa1, 0x08, 0x1f, 0x63,
+	0x0a, 0xfd, 0x2d, 0x37, 0x60, 0xc9, 0xd7, 0x3f, 0x56, 0xcf, 0xe8, 0x5a, 0x98, 0xcc, 0x1e, 0xac,
+	0x5e, 0xdc, 0x54, 0x69, 0xb7, 0x50, 0xee, 0xf3, 0xa2, 0x4d, 0xb8, 0x49, 0xd1, 0x09, 0x1a, 0x3e,
+	0xb5, 0x4d, 0x86, 0xe7, 0x34, 0x7e, 0x4e, 0x49, 0x3b, 0x50, 0xd2, 0x74, 0xf9, 0xff, 0xc6, 0x60,
+	0xb5, 0x88, 0xf5, 0x26, 0xee, 0xda, 0xfa, 0xd1, 0x19, 0xef, 0xa1, 0x51, 0xc6, 0x5b, 0x87, 0xc5,
+	0xa6, 0x43, 0xe3, 0xb7, 0xdf, 0x48, 0xc7, 0xef, 0xad, 0x83, 0x98, 0x54, 0xb6, 0x19, 0x80, 0x84,
+	0x0c, 0x89, 0xf8, 0xf9, 0x87, 0xc4, 0x07, 0x30, 0x4d, 0xad, 0x92, 0x05, 0x45, 0xf2, 0xf0, 0xf9,
+	0x9b, 0x5a, 0x24, 0xc5, 0x47, 0x9b, 0xb0, 0x2c, 0x84, 0xb0, 0x71, 0xa7, 0xd7, 0x26, 0xd1, 0x11,
+	0x9d, 0xa2, 0x13, 0x54, 0x03, 0x4b, 0xbc, 0xb0, 0xce, 0xcb, 0xe8, 0x44, 0xfd, 0x21, 0xac, 0x7a,
+	0xd4, 0xe1, 0x27, 0x9b, 0xa1, 0x64, 0x2b, 0x6e, 0xb9, 0x97, 0x52, 0xfe, 0x35, 0x09, 0x2e, 0x85,
+	0x68, 0x9f, 0xf7, 0xb4, 0x68, 0x83, 0x34, 0x61, 0x1b, 0x2a, 0x90, 0x34, 0x9e, 0x61, 0xf3, 0x99,
+	0x8e, 0x9f, 0xf3, 0x5e, 0xb9, 0x13, 0xe5, 0xef, 0x4d, 0xad, 0x6b, 0x1d, 0x19, 0x66, 0x87, 0x7a,
+	0xdc, 0x2a, 0x27, 0x52, 0x1c, 0x72, 0x6a, 0x1e, 0xca, 0x39, 0xcc, 0xc3, 0x7c, 0x61, 0xf3, 0x30,
+	0xff, 0x24, 0x99, 0x87, 0x39, 0xc2, 0x3c, 0xcc, 0x68, 0xf3, 0x50, 0xfe, 0x38, 0x9b, 0xc7, 0x7f,
+	0x97, 0x60, 0xd9, 0xd5, 0xf3, 0x38, 0xb6, 0xf1, 0x52, 0xe7, 0x3d, 0xa1, 0x81, 0xf8, 0xcb, 0xea,
+	0xc5, 0xe9, 0xc8, 0x5e, 0x94, 0x1f, 0xc2, 0x4a, 0xb0, 0xa5, 0xbc, 0x1f, 0x3e, 0x81, 0x19, 0x93,
+	0xae, 0x4d, 0x79, 0x4f, 0x8c, 0x68, 0x0a, 0x5b, 0xc7, 0x2a, 0x9c, 0x46, 0xfe, 0xb7, 0x31, 0x58,
+	0xaa, 0xf6, 0xed, 0x5e, 0xdf, 0xae, 0xb1, 0xd4, 0x2b, 0x6f, 0xdb, 0x27, 0x22, 0x73, 0x30, 0x9c,
+	0xe9, 0x96, 0xde, 0x7a, 0xd0, 0xc7, 0xe6, 0x59, 0x20, 0x83, 0xf0, 0x25, 0xa4, 0x0d, 0xca, 0x54,
+	0xb5, 0x1a, 0xc7, 0xb8, 0xa3, 0xf1, 0xd5, 0xe5, 0x77, 0x22, 0xb8, 0x84, 0x08, 0x20, 0x60, 0x94,
+	0x5c, 0x99, 0x37, 0x3c, 0x5f, 0xf2, 0x2f, 0x4b, 0x30, 0xef, 0x2d, 0x46, 0x57, 0xe1, 0x52, 0xf5,
+	0xa0, 0xbe, 0x7f, 0x50, 0x57, 0x6b, 0x85, 0x72, 0x69, 0x37, 0x1f, 0xc8, 0xbc, 0x2c, 0x42, 0x7a,
+	0x2b, 0x5f, 0xab, 0x14, 0xd4, 0x42, 0x75, 0xe7, 0x60, 0x77, 0xaf, 0x96, 0x95, 0xd0, 0x02, 0xa4,
+	0xb6, 0x0b, 0x35, 0x07, 0x10, 0x43, 0xcb, 0xb0, 0x58, 0xcc, 0xd7, 0xf3, 0xb5, 0x7a, 0x55, 0x29,
+	0x39, 0xe0, 0x38, 0x01, 0x6f, 0x55, 0xb6, 0xd5, 0x07, 0x07, 0x25, 0xe5, 0x91, 0x03, 0x9e, 0x26,
+	0xe4, 0xf9, 0x9d, 0x1d, 0x07, 0x90, 0xd8, 0x9a, 0x61, 0xf9, 0x25, 0xb9, 0xe1, 0x66, 0xbb, 0x6a,
+	0xb6, 0x66, 0x5b, 0x2f, 0x98, 0xed, 0xba, 0x00, 0x89, 0x86, 0xd1, 0xef, 0xda, 0x3c, 0x50, 0x65,
+	0x1f, 0xf2, 0x8f, 0xa6, 0x61, 0x95, 0xf7, 0x66, 0x51, 0xb3, 0xb5, 0x9a, 0xd1, 0x37, 0x1b, 0xb8,
+	0x88, 0x6d, 0x4d, 0x6f, 0x5b, 0xa8, 0x43, 0xbc, 0x1f, 0x1d, 0x04, 0xb8, 0xe9, 0x24, 0x2f, 0x99,
+	0x91, 0x8f, 0x48, 0xf2, 0x0d, 0xf0, 0x5a, 0x57, 0x04, 0x23, 0x9e, 0xc8, 0x24, 0x6e, 0xd1, 0x0f,
+	0x41, 0x7b, 0x8e, 0xf5, 0xb1, 0x51, 0xf0, 0xc1, 0xe4, 0x75, 0x78, 0xed, 0x31, 0xf7, 0x4f, 0x25,
+	0xc8, 0x06, 0xab, 0x45, 0x87, 0x70, 0xc9, 0xea, 0x6a, 0x3d, 0xeb, 0xd8, 0xb0, 0xd5, 0xe0, 0xc8,
+	0xe1, 0x4a, 0xbd, 0x39, 0xbc, 0x5e, 0x31, 0x96, 0x94, 0x8b, 0x82, 0x51, 0xa0, 0x00, 0xdd, 0x03,
+	0x78, 0x62, 0x1c, 0xfa, 0x7d, 0xfb, 0x1b, 0xc3, 0x99, 0xde, 0x37, 0x0e, 0xb9, 0x63, 0x98, 0x7b,
+	0x22, 0x7e, 0xe6, 0xfe, 0xbe, 0x04, 0x33, 0x3c, 0x57, 0xf4, 0x06, 0x2c, 0xf4, 0x4c, 0xa3, 0x81,
+	0x2d, 0x0b, 0x37, 0x55, 0x12, 0x70, 0x5a, 0x7c, 0x11, 0x92, 0x71, 0xc0, 0x34, 0x75, 0x48, 0x1c,
+	0x82, 0x6d, 0xd8, 0x5a, 0x5b, 0xc5, 0x96, 0xad, 0x77, 0x34, 0xdb, 0x41, 0x67, 0xdd, 0xbe, 0x44,
+	0x0b, 0x4b, 0xa2, 0x8c, 0xd1, 0xec, 0xc0, 0x82, 0x63, 0x58, 0xaa, 0x45, 0x6c, 0x8d, 0xa7, 0x72,
+	0x5f, 0x1b, 0x61, 0x5e, 0xd4, 0x2e, 0x89, 0x2b, 0xf3, 0x7c, 0xca, 0xbf, 0x2a, 0xc1, 0x92, 0x40,
+	0x28, 0x62, 0xab, 0x61, 0xea, 0x54, 0xf5, 0x24, 0x30, 0xf4, 0x64, 0x08, 0xe8, 0x6f, 0xf4, 0x2a,
+	0xcc, 0x37, 0x75, 0xab, 0xd7, 0xd6, 0xce, 0x98, 0xd7, 0x62, 0x81, 0x5d, 0x8a, 0xc3, 0xe8, 0x9c,
+	0xb3, 0x0b, 0xf3, 0x56, 0xbf, 0xd7, 0x33, 0x4c, 0xd6, 0x14, 0x2a, 0x59, 0x66, 0x73, 0x6d, 0x94,
+	0x64, 0x82, 0x64, 0xeb, 0x4c, 0x49, 0x59, 0xee, 0x87, 0x5c, 0x83, 0x0b, 0x3b, 0xba, 0x65, 0x3b,
+	0xf9, 0x79, 0xe1, 0xe5, 0x6f, 0x40, 0xba, 0xad, 0x75, 0x5b, 0x7d, 0xb2, 0xf6, 0x68, 0x18, 0x4d,
+	0x21, 0xe6, 0xbc, 0x00, 0x16, 0x8c, 0x26, 0x26, 0x53, 0xc1, 0x91, 0xde, 0xb6, 0xb1, 0xc9, 0x05,
+	0xe5, 0x5f, 0xf2, 0x21, 0x2c, 0x07, 0x98, 0x72, 0x87, 0x5a, 0x09, 0xd9, 0x78, 0x19, 0x25, 0xba,
+	0x47, 0x67, 0x9e, 0x3d, 0x18, 0xf9, 0xbf, 0x49, 0xb0, 0xac, 0xe8, 0xd6, 0x49, 0xbe, 0xab, 0xb5,
+	0xcf, 0x2c, 0xdd, 0x72, 0x2c, 0x86, 0x4c, 0x44, 0x9c, 0x95, 0xda, 0xc1, 0xb6, 0xa9, 0x37, 0x46,
+	0x38, 0xda, 0x7d, 0xf6, 0xb9, 0x4b, 0x71, 0x95, 0x74, 0xcf, 0xfb, 0x89, 0xb6, 0x61, 0xde, 0xa2,
+	0x83, 0x4a, 0x65, 0x3e, 0x3b, 0x36, 0xbe, 0xcf, 0x56, 0x52, 0x8c, 0x92, 0xe5, 0x66, 0xbf, 0x03,
+	0xb3, 0x6c, 0x45, 0x21, 0x8c, 0xe9, 0x6a, 0x04, 0x8f, 0x3c, 0xc5, 0x52, 0x04, 0xb6, 0xfc, 0x2f,
+	0x32, 0x90, 0xf6, 0x89, 0x88, 0x9e, 0xc2, 0x4a, 0xb7, 0xdf, 0xc1, 0xa6, 0xde, 0xd0, 0xda, 0xcc,
+	0x3e, 0xc5, 0xd8, 0x62, 0x0d, 0xfd, 0x68, 0x9c, 0x86, 0xae, 0xef, 0x09, 0x16, 0xd4, 0x4c, 0x99,
+	0xee, 0xca, 0x53, 0xca, 0x85, 0x6e, 0x08, 0x1c, 0x3d, 0x87, 0xd5, 0x86, 0x66, 0xe3, 0x96, 0x11,
+	0x52, 0x29, 0x53, 0xc9, 0xc7, 0x63, 0x55, 0x5a, 0x70, 0x99, 0xf8, 0xab, 0x5d, 0x69, 0x84, 0x96,
+	0x20, 0x0c, 0xe8, 0x44, 0xd5, 0xba, 0x46, 0xf7, 0xac, 0xa3, 0xdb, 0x67, 0x7e, 0x1f, 0xf2, 0xfe,
+	0x58, 0x55, 0x7e, 0x96, 0x17, 0xd4, 0x4e, 0x65, 0xd9, 0x93, 0x00, 0x8c, 0x54, 0xd3, 0x56, 0x9b,
+	0x3a, 0xcd, 0x22, 0xb9, 0xd5, 0x4c, 0x4f, 0x50, 0xcd, 0x4e, 0x51, 0x50, 0xbb, 0xd5, 0xb4, 0x03,
+	0x30, 0x64, 0xc2, 0xc5, 0x13, 0xb5, 0xa3, 0xf5, 0x84, 0x37, 0x72, 0xd7, 0xf3, 0x3c, 0xbb, 0x36,
+	0x5e, 0xd7, 0x7d, 0xb6, 0xab, 0xf5, 0x4a, 0x0e, 0x07, 0xb7, 0xeb, 0x4e, 0x42, 0xe0, 0xb9, 0x1d,
+	0xb8, 0x10, 0xd6, 0xd5, 0xe8, 0x3d, 0x48, 0xd0, 0x64, 0x12, 0x37, 0x9a, 0x51, 0x99, 0x27, 0x86,
+	0x9c, 0xdb, 0x83, 0x95, 0xf0, 0x3e, 0x3c, 0x27, 0xbf, 0x2a, 0x64, 0x83, 0x1d, 0x84, 0x3e, 0x86,
+	0xb9, 0xa7, 0x7d, 0xcd, 0xd2, 0x55, 0xbd, 0x39, 0xee, 0x46, 0x46, 0x92, 0x12, 0x54, 0x9a, 0x56,
+	0xee, 0xd7, 0x25, 0xc8, 0x06, 0xfb, 0xe2, 0x85, 0x38, 0xa2, 0x2a, 0x2c, 0x59, 0xb8, 0x6b, 0xe9,
+	0xb6, 0xfe, 0x0c, 0xab, 0x9a, 0x6d, 0x9b, 0xfa, 0x61, 0xdf, 0xc6, 0x63, 0x26, 0xec, 0x90, 0x43,
+	0x9a, 0x17, 0x94, 0xb9, 0x6f, 0x66, 0xe0, 0x42, 0x58, 0x17, 0xa2, 0xc3, 0x41, 0x31, 0x4b, 0xe7,
+	0x36, 0x88, 0xf5, 0xba, 0xd6, 0x6a, 0xe1, 0x26, 0x15, 0xc4, 0xd3, 0x9a, 0x6b, 0x90, 0x32, 0x71,
+	0x8b, 0x19, 0x5e, 0x53, 0xcc, 0x30, 0xc0, 0x40, 0xd4, 0xa9, 0x5b, 0x90, 0xd5, 0xfa, 0xa7, 0x7a,
+	0x5b, 0xd7, 0xcc, 0x33, 0xe6, 0xf4, 0x84, 0xc7, 0x2a, 0x9f, 0x5f, 0x96, 0xbc, 0xe0, 0xc8, 0x3c,
+	0xe3, 0x82, 0xe6, 0xfb, 0xb6, 0x72, 0xff, 0x49, 0x82, 0x94, 0x47, 0xde, 0xf3, 0x19, 0x93, 0x3f,
+	0xaf, 0x14, 0x9b, 0x3c, 0xaf, 0x74, 0x0d, 0x80, 0x6f, 0x77, 0xdb, 0x5a, 0xcb, 0xd9, 0xf0, 0x9b,
+	0x63, 0xb0, 0xba, 0x46, 0x6c, 0x9c, 0x20, 0x63, 0xd3, 0xc4, 0x4d, 0xee, 0x1c, 0x56, 0x06, 0x92,
+	0xd6, 0xa5, 0x4e, 0xcf, 0x3e, 0xe3, 0x6c, 0x29, 0xe6, 0x56, 0x02, 0xe2, 0xb6, 0xd6, 0xca, 0xfd,
+	0xcf, 0x18, 0x64, 0xfc, 0x7a, 0x40, 0x77, 0xc5, 0x52, 0x20, 0x3e, 0xc1, 0xb4, 0xc2, 0x17, 0x02,
+	0xe6, 0xa0, 0xb1, 0x1c, 0xbc, 0xac, 0x0e, 0x5a, 0x7f, 0xc0, 0xcc, 0x25, 0x68, 0x3c, 0xbb, 0x80,
+	0x4c, 0xdc, 0xd6, 0xe8, 0x48, 0x38, 0xa2, 0x01, 0x6b, 0xb7, 0x71, 0x36, 0xe6, 0x48, 0x58, 0x14,
+	0x94, 0xf7, 0x04, 0x61, 0xae, 0x01, 0xf3, 0xde, 0x8a, 0xce, 0xd9, 0xeb, 0x57, 0x7d, 0xbd, 0xc6,
+	0x0c, 0xda, 0xed, 0x33, 0x67, 0xfd, 0xf0, 0xbf, 0x5e, 0x81, 0x2b, 0x34, 0x58, 0xf8, 0x1a, 0xbb,
+	0xa1, 0x32, 0x89, 0x20, 0x44, 0x78, 0xff, 0x15, 0x59, 0xcd, 0x8b, 0xf0, 0xfe, 0x05, 0x22, 0x88,
+	0x15, 0x87, 0x8b, 0x7f, 0xda, 0x7e, 0x0c, 0x6e, 0x89, 0x7a, 0xee, 0xa0, 0xe2, 0x82, 0xc3, 0xa3,
+	0xe6, 0x89, 0x2e, 0xbe, 0x27, 0x0d, 0xc6, 0x04, 0xbe, 0xc5, 0x43, 0xd4, 0xd8, 0x1d, 0xa6, 0x91,
+	0x40, 0x88, 0xc0, 0x42, 0xef, 0xc1, 0x10, 0x81, 0x87, 0xe4, 0x7f, 0x4e, 0x0a, 0x8b, 0x11, 0xb8,
+	0x10, 0x6c, 0xb0, 0xdc, 0x3f, 0x8f, 0x10, 0xc1, 0xe9, 0xc6, 0x11, 0x63, 0x20, 0x64, 0xe0, 0x82,
+	0xd8, 0xfe, 0x90, 0x81, 0x4b, 0xc0, 0xe6, 0xd7, 0xe2, 0x79, 0x24, 0x70, 0x27, 0x28, 0xa7, 0x6e,
+	0x4f, 0x04, 0xe1, 0xd6, 0xea, 0x8d, 0x20, 0x78, 0xad, 0x33, 0xe7, 0xaf, 0xd5, 0x9d, 0xc4, 0xdc,
+	0x5a, 0xdb, 0x01, 0x18, 0xfa, 0x05, 0x29, 0x24, 0xa2, 0xe0, 0x75, 0xcf, 0x9e, 0xbf, 0xe3, 0xfd,
+	0x2e, 0xc2, 0xed, 0xf8, 0x93, 0x10, 0x78, 0xee, 0xc7, 0x52, 0x30, 0xc2, 0xe0, 0xc2, 0x7d, 0x04,
+	0x73, 0x1d, 0xbd, 0xab, 0xb2, 0xe3, 0x13, 0xc3, 0x77, 0x7e, 0xd9, 0xd1, 0x80, 0x64, 0x47, 0xef,
+	0xd2, 0x5f, 0x94, 0x54, 0x3b, 0xe5, 0xa4, 0xb1, 0xb1, 0x48, 0xb5, 0x53, 0x46, 0x5a, 0x82, 0x85,
+	0xa7, 0x7d, 0xad, 0x6b, 0xeb, 0x6d, 0xac, 0xf2, 0x63, 0x09, 0xd3, 0x63, 0x1c, 0x4b, 0xc8, 0x08,
+	0x22, 0xfa, 0x69, 0xe5, 0xbe, 0x3f, 0x3d, 0x18, 0xe9, 0xf0, 0x76, 0xfd, 0x43, 0x09, 0x5e, 0xa5,
+	0x9c, 0x5d, 0x1f, 0xa8, 0x1e, 0xeb, 0x96, 0x6d, 0xb4, 0x4c, 0xad, 0xa3, 0x1e, 0xf6, 0x1b, 0x27,
+	0xd8, 0x16, 0xfb, 0x33, 0x4f, 0x5e, 0x9e, 0xc9, 0x0f, 0x80, 0xcb, 0xa2, 0xce, 0x2d, 0x5a, 0xa5,
+	0xf2, 0x0a, 0x15, 0xca, 0x71, 0xaf, 0x81, 0x62, 0x2b, 0xf7, 0x8f, 0x62, 0x70, 0x6d, 0x04, 0x0f,
+	0xf4, 0x5d, 0xb8, 0x1c, 0x6c, 0x5a, 0xdb, 0x78, 0x8e, 0x4d, 0x95, 0x6e, 0xbb, 0xf1, 0x45, 0xf6,
+	0xaa, 0xbf, 0xa2, 0x1d, 0x82, 0x40, 0x77, 0xe1, 0xc2, 0xc8, 0xfb, 0xbd, 0x9e, 0x43, 0x1e, 0x0b,
+	0x23, 0x3f, 0x20, 0x08, 0x8c, 0xfc, 0x1a, 0xa4, 0x98, 0xfa, 0x54, 0x4b, 0xff, 0x9a, 0xcd, 0x8a,
+	0x71, 0x05, 0x18, 0xa8, 0xa6, 0x7f, 0x8d, 0xd1, 0x7d, 0x48, 0x73, 0x04, 0x5f, 0xd7, 0xbe, 0x3e,
+	0xac, 0x6b, 0x9d, 0x8a, 0x94, 0x79, 0x46, 0xcb, 0x7a, 0x18, 0xdd, 0x06, 0xe4, 0xe5, 0xa5, 0xb2,
+	0x74, 0x50, 0x82, 0xd6, 0x99, 0xf5, 0x60, 0x16, 0x08, 0x3c, 0xf7, 0x4d, 0xc2, 0x1b, 0xa9, 0x72,
+	0x4b, 0xf8, 0x4d, 0x09, 0x6e, 0xe0, 0xa7, 0x7d, 0xfd, 0x99, 0xd6, 0xc6, 0xdd, 0x06, 0x56, 0x1b,
+	0x6d, 0xcd, 0xb2, 0x22, 0x6d, 0xe1, 0xab, 0x97, 0xe1, 0x7c, 0x3c, 0x80, 0x60, 0xff, 0x5f, 0xf7,
+	0x88, 0x52, 0x20, 0x92, 0x0c, 0x58, 0xc0, 0xaf, 0x48, 0x90, 0x73, 0xe9, 0x4b, 0x01, 0x74, 0x74,
+	0x0f, 0xb2, 0x4e, 0x48, 0xa1, 0x4e, 0x70, 0xa4, 0x27, 0x23, 0x02, 0x04, 0xae, 0xd9, 0xf7, 0x60,
+	0x65, 0x50, 0x2b, 0xb4, 0x47, 0x99, 0x01, 0x5c, 0x08, 0x0a, 0x4a, 0xfa, 0x36, 0xf7, 0x4b, 0x71,
+	0xb8, 0x14, 0xd9, 0x38, 0x74, 0x1f, 0xe4, 0x70, 0x9e, 0x21, 0xf6, 0xf9, 0x4a, 0x18, 0x7f, 0x8f,
+	0x95, 0x46, 0xf3, 0x1a, 0x34, 0xd6, 0x50, 0x5e, 0x93, 0x98, 0xec, 0x9f, 0x91, 0xc2, 0x6d, 0x56,
+	0x7d, 0xc9, 0xd6, 0x10, 0xec, 0xcd, 0x17, 0xb2, 0xf6, 0xbf, 0x39, 0xeb, 0x5d, 0x45, 0x71, 0x6b,
+	0xff, 0x5d, 0x09, 0xde, 0x72, 0x57, 0x42, 0xe3, 0x7a, 0xc0, 0xaf, 0x5e, 0xc6, 0xe4, 0xe7, 0x01,
+	0x04, 0xad, 0xfe, 0x0d, 0x47, 0xa4, 0x87, 0xc3, 0xdd, 0xdf, 0x6f, 0xc5, 0x20, 0xe7, 0xb2, 0xf9,
+	0xe3, 0x65, 0xfc, 0x28, 0x0f, 0x57, 0xbb, 0xfd, 0x8e, 0xda, 0xd4, 0x2d, 0x5b, 0xef, 0x36, 0x6c,
+	0x35, 0xa0, 0x67, 0x8b, 0x1b, 0x56, 0xae, 0xdb, 0xef, 0x14, 0x39, 0x4e, 0xcd, 0xd7, 0x6e, 0x0b,
+	0x7d, 0x0e, 0x17, 0x6c, 0xa3, 0x37, 0x48, 0x39, 0x91, 0x8b, 0x44, 0xb6, 0xd1, 0x0b, 0x30, 0xce,
+	0xfd, 0x20, 0x0e, 0x97, 0x22, 0xf5, 0x8f, 0xf6, 0xe1, 0xf5, 0x68, 0xa3, 0x18, 0x1c, 0x9b, 0xaf,
+	0x46, 0x74, 0x97, 0x67, 0x78, 0x0e, 0xe5, 0x38, 0x38, 0x42, 0xa3, 0x38, 0xfe, 0x91, 0x0d, 0xd2,
+	0x21, 0xc6, 0xfb, 0x52, 0x07, 0xe9, 0x5f, 0x4b, 0x04, 0xf3, 0x08, 0x7c, 0xa0, 0xfe, 0x2d, 0x09,
+	0x72, 0x03, 0x51, 0xa1, 0x33, 0x3e, 0xb9, 0x55, 0x1f, 0xbd, 0xac, 0xc0, 0x30, 0x00, 0x0c, 0x8e,
+	0xcf, 0x8b, 0x27, 0xe1, 0xc5, 0xb9, 0xbf, 0x22, 0xc1, 0x65, 0x3f, 0x29, 0x5f, 0x0c, 0x72, 0x65,
+	0xbc, 0xac, 0x01, 0xb9, 0x01, 0x4b, 0x6e, 0xf2, 0xdf, 0x59, 0x17, 0x70, 0xe3, 0x41, 0x4e, 0x91,
+	0xe3, 0x48, 0x73, 0xff, 0x3c, 0x06, 0x57, 0x87, 0xb6, 0x09, 0xdd, 0x80, 0x34, 0x89, 0x6c, 0x5d,
+	0x66, 0xcc, 0xb6, 0xe7, 0x3b, 0x7a, 0xd7, 0x61, 0x43, 0x91, 0xb4, 0xd3, 0x81, 0x1a, 0xe7, 0x3b,
+	0xda, 0xa9, 0x8b, 0x14, 0xb0, 0xcc, 0xc4, 0x80, 0x65, 0xfe, 0xd2, 0x80, 0x65, 0xb2, 0xf3, 0xf7,
+	0xcd, 0x6f, 0xa9, 0xfb, 0x7c, 0x7d, 0x30, 0x96, 0x79, 0xce, 0x86, 0x9b, 0xe7, 0x56, 0x52, 0xec,
+	0x5f, 0xc9, 0x8f, 0x21, 0xe3, 0x1f, 0x9a, 0x68, 0x53, 0x9c, 0xaa, 0x1e, 0x67, 0x59, 0xc0, 0x4f,
+	0x5c, 0x87, 0xef, 0xd8, 0xfd, 0x5a, 0x1c, 0x12, 0x2c, 0xf0, 0x7f, 0x1d, 0xd2, 0x7a, 0xd7, 0xc6,
+	0x2d, 0x6c, 0x7a, 0x96, 0x1c, 0xf1, 0xf2, 0x94, 0x32, 0xcf, 0xc1, 0x0c, 0xed, 0x55, 0x48, 0x1d,
+	0xb5, 0x0d, 0xcd, 0xf6, 0x2c, 0x2e, 0xa4, 0xf2, 0x94, 0x02, 0x14, 0xc8, 0x50, 0x6e, 0xc0, 0xbc,
+	0x65, 0x9b, 0x7a, 0xb7, 0xa5, 0xfa, 0x8f, 0x7e, 0xa7, 0x18, 0xd4, 0xa9, 0xee, 0xd0, 0x30, 0xda,
+	0x58, 0x13, 0x2b, 0x9c, 0x69, 0x7e, 0x04, 0x69, 0x9e, 0x83, 0x9d, 0xe5, 0x88, 0x73, 0xd0, 0x91,
+	0x23, 0x26, 0x46, 0x1d, 0x77, 0x2c, 0x4f, 0x29, 0x19, 0x87, 0x88, 0xb1, 0xf9, 0x0e, 0x00, 0x81,
+	0x70, 0x0e, 0x33, 0xfe, 0xdc, 0x93, 0x7d, 0xd6, 0xc3, 0x94, 0xba, 0x7a, 0x54, 0xd4, 0xce, 0xca,
+	0x53, 0xca, 0x1c, 0xc1, 0x65, 0x84, 0x9b, 0x00, 0x4d, 0xcd, 0x16, 0x84, 0x6c, 0x4d, 0xb8, 0xe8,
+	0x23, 0x2c, 0x6a, 0x36, 0x26, 0x34, 0x04, 0x8d, 0xd1, 0x14, 0x60, 0xb1, 0xa9, 0x9d, 0xa9, 0xc6,
+	0x91, 0xfa, 0x1c, 0xe3, 0x13, 0x4e, 0x9a, 0xa4, 0xfb, 0xcc, 0x2b, 0x01, 0xd2, 0xb3, 0xea, 0xd1,
+	0xe7, 0x18, 0x9f, 0x10, 0x89, 0x9b, 0xe2, 0x83, 0x32, 0x71, 0xf2, 0x2e, 0x3f, 0x03, 0x73, 0xce,
+	0x29, 0x61, 0xf4, 0x29, 0x3d, 0xb8, 0xce, 0x8f, 0x25, 0x0f, 0xcf, 0xd0, 0x15, 0xf9, 0x79, 0xe4,
+	0xf2, 0x94, 0x92, 0x6c, 0xf2, 0xdf, 0x5b, 0x19, 0x98, 0xef, 0x69, 0xa6, 0x85, 0x9b, 0xec, 0x8a,
+	0x8b, 0xfc, 0x17, 0x63, 0x90, 0x14, 0x88, 0xe8, 0x75, 0x7a, 0x87, 0x40, 0xd8, 0xd4, 0x60, 0x23,
+	0xe9, 0xb5, 0x02, 0x8c, 0x3e, 0x80, 0x94, 0xa7, 0x75, 0xfc, 0xea, 0x4e, 0x44, 0xbb, 0x88, 0x56,
+	0xf8, 0x4f, 0xb4, 0x06, 0xd3, 0x54, 0xec, 0xf8, 0x30, 0xe5, 0x2b, 0x14, 0x07, 0x95, 0x80, 0x76,
+	0x81, 0xfa, 0xb5, 0xd1, 0x15, 0x37, 0x04, 0x6e, 0x8d, 0x68, 0x27, 0xe5, 0xf1, 0xd8, 0xe8, 0x62,
+	0x25, 0x69, 0xf3, 0x5f, 0xb9, 0x77, 0x20, 0x29, 0xa0, 0xe8, 0x75, 0xc8, 0xb0, 0xc3, 0xa9, 0x6a,
+	0x47, 0xef, 0xf6, 0xc5, 0x8e, 0x67, 0x42, 0x49, 0x33, 0xe8, 0x2e, 0x03, 0xca, 0xff, 0x5b, 0x82,
+	0x6c, 0xf0, 0xcc, 0x0d, 0x6a, 0xc3, 0x25, 0x77, 0x47, 0xd3, 0xf6, 0x9d, 0xfd, 0xb0, 0xb8, 0xba,
+	0xd6, 0x47, 0x24, 0x4a, 0xfd, 0x27, 0x46, 0xac, 0xf2, 0x94, 0x72, 0x51, 0x0f, 0x2f, 0x42, 0x18,
+	0x56, 0xf8, 0xb9, 0xd8, 0x60, 0x55, 0xac, 0xc7, 0x6f, 0x0f, 0x3d, 0x23, 0x3b, 0x58, 0xd1, 0xb2,
+	0x19, 0x56, 0xb0, 0x95, 0x85, 0x8c, 0x9f, 0xbf, 0xfc, 0x93, 0x59, 0xb8, 0xb8, 0x6f, 0xea, 0x1d,
+	0x1a, 0x0c, 0xf8, 0xd1, 0x91, 0x02, 0x19, 0x13, 0xf7, 0xda, 0x1a, 0x09, 0xc9, 0xbc, 0x9b, 0x65,
+	0x6f, 0x46, 0x0a, 0x43, 0x91, 0xb9, 0x3f, 0xe3, 0x3b, 0x2c, 0x69, 0xce, 0x82, 0xab, 0xf5, 0x3e,
+	0xf0, 0xa3, 0x79, 0xfe, 0xad, 0xb0, 0x1b, 0x43, 0xcf, 0x64, 0x3a, 0xcc, 0xe6, 0x4d, 0xcf, 0x37,
+	0xfa, 0x53, 0xb0, 0xdc, 0x38, 0xd6, 0xe8, 0xf9, 0x3d, 0x93, 0xde, 0xa4, 0xf3, 0xef, 0x75, 0x45,
+	0xed, 0x92, 0x16, 0x04, 0xcd, 0xae, 0x66, 0x9d, 0x38, 0xac, 0x97, 0x1a, 0x83, 0x60, 0x64, 0xc3,
+	0xd5, 0x86, 0x79, 0xd6, 0xb3, 0x0d, 0x55, 0x28, 0xe2, 0xe8, 0xe8, 0x54, 0x3d, 0xea, 0x61, 0xff,
+	0x76, 0x57, 0xd4, 0x0d, 0x9e, 0x02, 0xa5, 0xe5, 0x6a, 0xb9, 0x77, 0x74, 0x7a, 0xaf, 0xe7, 0xea,
+	0xe5, 0x52, 0x23, 0xaa, 0x10, 0xf5, 0xe0, 0xf2, 0x91, 0x7e, 0x8a, 0x9b, 0x6c, 0x7d, 0xc5, 0x26,
+	0x09, 0xe2, 0x59, 0x7d, 0xdb, 0x5e, 0x1b, 0x91, 0x99, 0xde, 0x53, 0xdc, 0x24, 0xd3, 0xe0, 0x96,
+	0xa0, 0x73, 0xaa, 0x5c, 0x3d, 0x8a, 0x28, 0x43, 0x35, 0xc8, 0x0e, 0x54, 0x33, 0x33, 0xfc, 0x08,
+	0xeb, 0x00, 0xf7, 0x85, 0xc3, 0x00, 0x53, 0x1b, 0xae, 0x0a, 0xad, 0x3d, 0xd7, 0xed, 0x63, 0xf7,
+	0x96, 0x97, 0xa8, 0x61, 0x76, 0xa8, 0xf2, 0xb8, 0x66, 0x3e, 0xd7, 0xed, 0x63, 0x31, 0xa0, 0x5c,
+	0xe5, 0x99, 0x51, 0x85, 0xe8, 0x01, 0x64, 0xa9, 0x1b, 0xe9, 0x69, 0xa6, 0x63, 0x63, 0xc9, 0xa1,
+	0x37, 0x05, 0x88, 0xbb, 0xd8, 0xd7, 0x4c, 0xd7, 0xca, 0xe8, 0x44, 0xe2, 0x42, 0xd0, 0xe7, 0x80,
+	0xb8, 0x15, 0x1c, 0x6b, 0xd6, 0xb1, 0x60, 0x3a, 0x37, 0xf4, 0x50, 0x06, 0xeb, 0xfa, 0xb2, 0x66,
+	0x1d, 0xbb, 0x7b, 0x9b, 0x8d, 0x00, 0x8c, 0x1e, 0x1d, 0x25, 0xae, 0xdd, 0x3a, 0xd6, 0x8f, 0x1c,
+	0x61, 0x53, 0x43, 0xf5, 0x4e, 0x5c, 0x5f, 0x8d, 0xa0, 0xbb, 0x7a, 0x6f, 0xfa, 0x41, 0x21, 0x83,
+	0xfc, 0x1b, 0x09, 0x32, 0xfe, 0x56, 0xa2, 0x87, 0xb0, 0x40, 0x35, 0x64, 0x1b, 0x2a, 0x3f, 0x03,
+	0xcb, 0x6f, 0xa3, 0xad, 0x8f, 0xa5, 0x25, 0xe7, 0x53, 0x49, 0x13, 0x36, 0x75, 0xa3, 0xc4, 0x98,
+	0xc8, 0xdf, 0x93, 0x98, 0xff, 0x25, 0x65, 0xe8, 0x12, 0x2c, 0xd7, 0x2b, 0xbb, 0x25, 0x75, 0x3f,
+	0xaf, 0xd4, 0x03, 0xa7, 0xa0, 0x92, 0x30, 0xfd, 0xa8, 0x94, 0x57, 0xb2, 0x12, 0x9a, 0x83, 0xc4,
+	0x6e, 0x75, 0xaf, 0x5e, 0xce, 0xc6, 0x50, 0x16, 0xe6, 0x8b, 0xf9, 0x47, 0x6a, 0xf5, 0x9e, 0xca,
+	0x20, 0x71, 0xb4, 0x00, 0x29, 0x0e, 0xf9, 0xbc, 0x54, 0xfa, 0x2c, 0x3b, 0x4d, 0x50, 0xc8, 0x2f,
+	0x02, 0xa1, 0xf4, 0x09, 0x82, 0x52, 0xae, 0x1e, 0x28, 0x04, 0x52, 0xcc, 0x3f, 0xca, 0xce, 0xc8,
+	0x35, 0xc8, 0x06, 0xb5, 0x8f, 0x7e, 0x0a, 0x80, 0x77, 0xe1, 0xe8, 0x7b, 0x07, 0x8c, 0x98, 0xde,
+	0x3b, 0x68, 0x88, 0x9f, 0x72, 0x15, 0xd0, 0xa0, 0x7b, 0x43, 0x1f, 0xc1, 0x5c, 0x17, 0x3f, 0x9f,
+	0x24, 0x5d, 0xdb, 0xc5, 0xcf, 0xe9, 0x2f, 0xf9, 0x32, 0x5c, 0x8a, 0xb4, 0x70, 0x39, 0x03, 0xf3,
+	0x5e, 0xcf, 0x27, 0xff, 0x24, 0x06, 0x69, 0xe2, 0xb6, 0xac, 0xba, 0x51, 0x69, 0x75, 0x0d, 0x13,
+	0xa3, 0x75, 0x40, 0x8e, 0xc3, 0xb2, 0x48, 0x2f, 0x5a, 0x27, 0x3a, 0x3b, 0xc4, 0x3f, 0x47, 0x4d,
+	0xcd, 0x29, 0xab, 0x1b, 0xb5, 0x13, 0xbd, 0x87, 0xce, 0xe0, 0x72, 0xc3, 0xe8, 0x74, 0x8c, 0xae,
+	0xea, 0x27, 0xd3, 0x29, 0x3b, 0x3e, 0xa3, 0x7f, 0x38, 0xc4, 0x63, 0x3a, 0x55, 0xaf, 0x17, 0x28,
+	0x1f, 0x1f, 0x8c, 0x38, 0x97, 0x86, 0x03, 0x16, 0x15, 0xb3, 0x32, 0xf9, 0x87, 0x12, 0x2c, 0x85,
+	0xd0, 0xa0, 0x9b, 0x20, 0x17, 0xaa, 0xbb, 0xbb, 0xd5, 0x3d, 0xb5, 0x50, 0xce, 0x2b, 0x35, 0xb5,
+	0x5e, 0x55, 0x2b, 0xdb, 0x7b, 0x55, 0x25, 0x78, 0x55, 0x31, 0x05, 0xb3, 0x7b, 0x07, 0xbb, 0x25,
+	0xa5, 0x52, 0xc8, 0x4a, 0xe8, 0x02, 0x64, 0xf3, 0x3b, 0xfb, 0xe5, 0xbc, 0x7a, 0xb0, 0xbf, 0x5f,
+	0x52, 0xd4, 0x42, 0xbe, 0x56, 0xca, 0xc6, 0x5c, 0xe8, 0x4e, 0xf5, 0x73, 0x01, 0xa5, 0xc6, 0xb3,
+	0x7f, 0xb0, 0x57, 0xa8, 0x1f, 0xe4, 0xeb, 0x95, 0xea, 0x5e, 0x76, 0x1a, 0x65, 0x00, 0x3e, 0x2f,
+	0x57, 0xea, 0xa5, 0xda, 0x7e, 0xbe, 0x50, 0xca, 0x26, 0xb6, 0xe6, 0x01, 0x5c, 0x6d, 0xc8, 0xff,
+	0x95, 0xc8, 0x19, 0x32, 0x09, 0xbc, 0x05, 0x8b, 0x64, 0x72, 0xa1, 0xae, 0x51, 0x14, 0xf3, 0xb3,
+	0x3d, 0x59, 0x5e, 0xe0, 0x90, 0xa1, 0xd7, 0x20, 0xd3, 0xed, 0x77, 0x0e, 0xb1, 0x49, 0x94, 0x4b,
+	0x4a, 0xf9, 0x2d, 0x8a, 0x79, 0x06, 0xad, 0x1b, 0x84, 0x31, 0x59, 0xe7, 0x98, 0x98, 0xac, 0x6f,
+	0xb1, 0x6a, 0x98, 0x4d, 0xcc, 0x4e, 0xd8, 0x27, 0xc9, 0xf4, 0x46, 0x81, 0x55, 0x02, 0x43, 0x0f,
+	0xe1, 0x42, 0x68, 0x5f, 0x4d, 0x0f, 0x3d, 0x58, 0xe5, 0xd3, 0xb1, 0x82, 0x1a, 0x83, 0xfd, 0xf1,
+	0x3b, 0x12, 0xac, 0x46, 0xcd, 0x12, 0xe8, 0xbb, 0x90, 0x0a, 0x26, 0x20, 0x46, 0xd9, 0x34, 0xb4,
+	0xbd, 0xc9, 0xec, 0x54, 0x30, 0xdb, 0x30, 0x92, 0xbc, 0x3f, 0x34, 0xe9, 0x20, 0x79, 0x97, 0x76,
+	0xf2, 0x2f, 0xc7, 0x60, 0x21, 0x28, 0xf2, 0x36, 0xcc, 0x8a, 0xf4, 0x19, 0x5b, 0xeb, 0xde, 0x19,
+	0x6f, 0xce, 0xe2, 0xdf, 0x8a, 0xa0, 0xa6, 0x87, 0xe5, 0xf8, 0x6a, 0x75, 0x1d, 0xe2, 0x1d, 0xbd,
+	0x3b, 0x56, 0xf3, 0x09, 0x22, 0xc5, 0xd7, 0x4e, 0xc7, 0x6a, 0x2f, 0x41, 0x44, 0x15, 0x58, 0xe4,
+	0x53, 0x18, 0xbd, 0x30, 0xe6, 0xae, 0x99, 0x46, 0x51, 0x67, 0x3d, 0x64, 0xcc, 0x91, 0xfc, 0xde,
+	0x34, 0x5c, 0x8a, 0x0c, 0x34, 0x5e, 0xd8, 0xf1, 0xa1, 0x0f, 0x61, 0x96, 0xde, 0xe3, 0xe3, 0x77,
+	0x26, 0xc6, 0xb8, 0x6f, 0xc5, 0xd1, 0x91, 0x05, 0x0b, 0xdc, 0xe5, 0x68, 0xed, 0xde, 0xb1, 0x76,
+	0x88, 0xd9, 0x9e, 0x66, 0x26, 0x72, 0x7f, 0x2d, 0xb2, 0x15, 0xeb, 0xf7, 0x8e, 0x4e, 0x99, 0x07,
+	0xd9, 0xa3, 0xdb, 0xe1, 0x79, 0xce, 0x8f, 0xcc, 0xd5, 0xac, 0x0a, 0x01, 0x41, 0x6f, 0x02, 0xbf,
+	0x3e, 0xef, 0x56, 0x9a, 0xe0, 0x4e, 0x31, 0xc3, 0x0a, 0x1c, 0xd4, 0x15, 0x48, 0x98, 0x5a, 0x53,
+	0x3f, 0xa5, 0x91, 0x4e, 0xa2, 0x3c, 0xa5, 0xb0, 0x4f, 0x7a, 0x78, 0xa5, 0x6f, 0x9a, 0x46, 0x4b,
+	0xb3, 0x3d, 0x37, 0xfe, 0x79, 0x10, 0x31, 0xf2, 0xb8, 0xec, 0xa2, 0x43, 0x2b, 0x40, 0xf2, 0x5f,
+	0x96, 0xe0, 0x62, 0x44, 0x0b, 0xd0, 0x1a, 0xdc, 0xbc, 0x77, 0xef, 0x0b, 0x95, 0x3b, 0xc2, 0xbd,
+	0x7c, 0xbd, 0xf2, 0xb0, 0xa4, 0x52, 0x5f, 0xb6, 0x55, 0xaa, 0x0f, 0x73, 0x84, 0x64, 0xda, 0x2b,
+	0x7d, 0x91, 0x2f, 0x96, 0x0a, 0x95, 0xdd, 0xfc, 0x4e, 0x36, 0x86, 0xae, 0xc0, 0xaa, 0xeb, 0x13,
+	0x19, 0x0b, 0x55, 0xa0, 0xc7, 0xd1, 0x22, 0xa4, 0xfd, 0xa0, 0xe9, 0x2d, 0x80, 0xa4, 0xd0, 0x91,
+	0xfc, 0x7f, 0x24, 0x98, 0x73, 0xba, 0x1f, 0x55, 0x60, 0x8e, 0x46, 0x10, 0xba, 0x38, 0xb2, 0x1e,
+	0x1d, 0xf3, 0xd7, 0x05, 0x9e, 0x43, 0x4d, 0xd7, 0xd2, 0x02, 0x4a, 0x58, 0xf5, 0xbb, 0xcf, 0x4d,
+	0xad, 0xd7, 0xc3, 0xc2, 0x1d, 0x44, 0xb1, 0x3a, 0x10, 0x78, 0x3e, 0x56, 0x0e, 0x35, 0xda, 0x85,
+	0xd4, 0x49, 0xc7, 0x52, 0x05, 0xb3, 0xe1, 0x41, 0xfe, 0x67, 0x1d, 0xeb, 0xf3, 0x41, 0x6e, 0x70,
+	0xe2, 0x80, 0xb7, 0x92, 0x30, 0xc3, 0x4e, 0x14, 0xc8, 0xb7, 0x00, 0x0d, 0x36, 0x23, 0xec, 0xb0,
+	0xa9, 0x7c, 0x13, 0xd0, 0xa0, 0x94, 0x28, 0x0b, 0x71, 0x31, 0xb8, 0xe6, 0x15, 0xf2, 0x53, 0xfe,
+	0x0a, 0x96, 0x42, 0x04, 0x20, 0xee, 0x8d, 0x13, 0xab, 0x2e, 0x01, 0x70, 0x10, 0x41, 0xb8, 0x09,
+	0x0b, 0xee, 0x68, 0xf5, 0x9e, 0x67, 0x4d, 0x3b, 0x03, 0x92, 0x9e, 0xbf, 0xff, 0x43, 0x09, 0x16,
+	0x02, 0x91, 0x20, 0xba, 0x05, 0x59, 0x8f, 0xeb, 0x55, 0x9b, 0xda, 0x99, 0x58, 0xee, 0x66, 0x5c,
+	0x0f, 0x5b, 0xd4, 0xce, 0x2c, 0x82, 0xe9, 0xf1, 0xf1, 0x0c, 0x93, 0xcd, 0x52, 0x19, 0xd7, 0x95,
+	0x53, 0x4c, 0xcf, 0xe0, 0x8f, 0x4f, 0x36, 0xf8, 0xf3, 0x3e, 0xbf, 0x33, 0x3d, 0x9e, 0xdf, 0xa1,
+	0x27, 0x87, 0xc4, 0x07, 0xe9, 0xa0, 0x0e, 0xb6, 0x8f, 0x8d, 0xa6, 0xfc, 0xa3, 0x18, 0x5c, 0x8c,
+	0x58, 0x54, 0x23, 0x03, 0x16, 0x06, 0x57, 0xe7, 0xc3, 0x8e, 0x81, 0x45, 0x30, 0x8a, 0x80, 0x2b,
+	0x41, 0xee, 0xb9, 0x7f, 0x26, 0xc1, 0x4a, 0x38, 0xee, 0x0b, 0x3f, 0x92, 0xa2, 0xc3, 0x6a, 0x4f,
+	0xac, 0xc5, 0x03, 0x89, 0x00, 0x3e, 0x76, 0xd6, 0xa3, 0x8f, 0xd3, 0x84, 0x2d, 0xe1, 0x95, 0x8b,
+	0xbd, 0xf0, 0x02, 0xf9, 0x7b, 0x71, 0x58, 0xa2, 0x9d, 0x16, 0x68, 0xc2, 0x07, 0x30, 0x43, 0x8f,
+	0x08, 0x8d, 0x7b, 0xe6, 0x8f, 0x63, 0xa3, 0x22, 0xcc, 0x35, 0x8c, 0x6e, 0x53, 0xf7, 0xdc, 0xab,
+	0xbd, 0x39, 0x34, 0x67, 0x51, 0x10, 0xd8, 0x8a, 0x4b, 0x88, 0x4e, 0x86, 0x28, 0x60, 0xfa, 0x3c,
+	0x0a, 0x28, 0x4f, 0x45, 0xaa, 0x60, 0x78, 0x86, 0x27, 0xf1, 0x92, 0x33, 0x3c, 0x21, 0xab, 0xb2,
+	0x1f, 0x4b, 0xb0, 0x1c, 0x9a, 0xbf, 0x41, 0x2a, 0x2c, 0xb3, 0x4b, 0xce, 0xe1, 0x96, 0xbd, 0x36,
+	0xac, 0x4f, 0x02, 0x06, 0x70, 0xe1, 0x68, 0x10, 0x68, 0xa1, 0x47, 0xb0, 0xc4, 0xd3, 0x4d, 0x56,
+	0xbf, 0xd7, 0x33, 0xb1, 0x65, 0xf1, 0x5c, 0x53, 0x7c, 0x48, 0xd6, 0x8d, 0xc9, 0x5a, 0x73, 0x09,
+	0x14, 0x64, 0x06, 0x41, 0x96, 0xfc, 0x08, 0x16, 0x07, 0x10, 0xfd, 0xd6, 0x21, 0x9d, 0xd3, 0x3a,
+	0xe4, 0x5f, 0x4f, 0xc0, 0x42, 0xa0, 0x18, 0xd5, 0x21, 0x85, 0x4f, 0xdd, 0x16, 0x0c, 0x7f, 0x12,
+	0x28, 0x40, 0xbc, 0x5e, 0x72, 0x29, 0x15, 0x2f, 0x9b, 0xdc, 0xef, 0x92, 0xe9, 0xd0, 0xa9, 0xe3,
+	0x7c, 0x67, 0xec, 0x4a, 0x90, 0x34, 0x7a, 0xd8, 0xd4, 0x6c, 0x7e, 0x81, 0x36, 0x33, 0x24, 0x6f,
+	0xd6, 0xa6, 0xfd, 0xa2, 0xb5, 0xab, 0x9c, 0x40, 0x71, 0x48, 0xdd, 0xb4, 0xff, 0xf4, 0xd8, 0x69,
+	0xff, 0xdc, 0x57, 0x00, 0x8e, 0xf4, 0x16, 0xda, 0x07, 0x70, 0x74, 0x28, 0x4c, 0xe8, 0xed, 0x31,
+	0x35, 0xe4, 0xf6, 0x83, 0x87, 0x47, 0xee, 0x87, 0x31, 0x48, 0x79, 0x74, 0x87, 0x3a, 0x64, 0x42,
+	0x69, 0xd1, 0x23, 0x6c, 0x4e, 0x93, 0x59, 0x36, 0x61, 0x6b, 0xf2, 0x9e, 0x58, 0xdf, 0x61, 0xac,
+	0x1c, 0x5d, 0x2c, 0xb4, 0xfd, 0x00, 0x54, 0xf3, 0x35, 0x88, 0x75, 0xf9, 0x3b, 0x93, 0x36, 0x88,
+	0x0c, 0x56, 0x0f, 0x1b, 0xf9, 0x13, 0x58, 0x08, 0x54, 0x8c, 0xae, 0xc3, 0x95, 0x9d, 0xea, 0x76,
+	0xa5, 0x90, 0xdf, 0x51, 0xab, 0xfb, 0x25, 0x25, 0x5f, 0xaf, 0x2a, 0x81, 0x88, 0x6c, 0x16, 0xe2,
+	0xf9, 0xbd, 0x62, 0x56, 0x72, 0x32, 0xf7, 0x7f, 0x47, 0x82, 0x95, 0xf0, 0x8b, 0x82, 0x64, 0x19,
+	0xe9, 0x0c, 0xe7, 0xc0, 0x95, 0x9a, 0xac, 0xa7, 0x80, 0xdd, 0xa7, 0x69, 0xc1, 0xaa, 0x7f, 0xec,
+	0xab, 0x56, 0xbf, 0xd3, 0xd1, 0x4c, 0xdd, 0x39, 0x59, 0x7c, 0x7b, 0xac, 0x6b, 0x8a, 0x35, 0x4a,
+	0x75, 0xa6, 0x5c, 0xb4, 0x43, 0xc0, 0x3a, 0xb6, 0xe4, 0x1f, 0xce, 0xc0, 0x72, 0x28, 0xc9, 0x0b,
+	0xde, 0x15, 0x73, 0xc6, 0x4c, 0x6c, 0x92, 0x31, 0xf3, 0x30, 0xe8, 0x24, 0x79, 0xef, 0x4e, 0x3a,
+	0xed, 0x05, 0xb8, 0x44, 0x3b, 0xd4, 0xc4, 0x4b, 0x72, 0xa8, 0x0f, 0x9c, 0xe7, 0x49, 0x84, 0x43,
+	0xe5, 0xf9, 0xd3, 0xf1, 0x9d, 0x69, 0xc6, 0xef, 0x4c, 0x51, 0x1d, 0x66, 0xd9, 0x5e, 0xa0, 0xd8,
+	0x58, 0xbf, 0x3b, 0x49, 0x8f, 0xaf, 0x8b, 0x9e, 0x67, 0x17, 0xda, 0x04, 0xab, 0x70, 0x2b, 0x9c,
+	0x0d, 0xb7, 0xc2, 0xdc, 0xaf, 0x48, 0x90, 0xf6, 0xf1, 0x71, 0x37, 0x14, 0x25, 0xcf, 0x86, 0x22,
+	0x7a, 0x04, 0xd3, 0xce, 0xc9, 0xf8, 0x4c, 0x64, 0xe0, 0x15, 0x2e, 0x67, 0x40, 0xbd, 0xb4, 0x9a,
+	0x82, 0xd1, 0xc4, 0x0a, 0x65, 0x89, 0x56, 0x61, 0xb6, 0xc9, 0x76, 0x62, 0xd9, 0x96, 0xa2, 0x22,
+	0x3e, 0xe5, 0xaf, 0x60, 0x35, 0x8a, 0x96, 0xac, 0xaa, 0xea, 0x4a, 0x7e, 0xaf, 0x76, 0xaf, 0xaa,
+	0xec, 0xd2, 0xe4, 0x8f, 0xaa, 0x94, 0x6a, 0x07, 0x3b, 0x75, 0xb5, 0x50, 0x2d, 0x86, 0xa4, 0x97,
+	0x6a, 0x07, 0x85, 0x42, 0xa9, 0x56, 0x63, 0xc9, 0xc8, 0x92, 0xa2, 0x54, 0x95, 0x6c, 0x4c, 0x36,
+	0x20, 0x59, 0x6b, 0x1c, 0xe3, 0x66, 0xbf, 0x8d, 0xd1, 0x23, 0xc8, 0x99, 0xb8, 0xd1, 0x37, 0x4d,
+	0x7a, 0x3e, 0xa5, 0x87, 0x4d, 0xdd, 0x68, 0xaa, 0xe2, 0xf9, 0x3f, 0x3e, 0x38, 0x2e, 0x0d, 0x6c,
+	0x4e, 0x16, 0x39, 0x42, 0x79, 0x4a, 0x59, 0x75, 0xc9, 0xf7, 0x29, 0xb5, 0x28, 0x23, 0x51, 0x2e,
+	0xbb, 0x17, 0x29, 0xff, 0xbd, 0x18, 0x2c, 0x04, 0xef, 0x01, 0x9e, 0xf3, 0xc6, 0xdb, 0x75, 0x48,
+	0x35, 0xdd, 0x3b, 0x60, 0x5c, 0x73, 0x5e, 0x50, 0xf0, 0xb9, 0xa3, 0xe9, 0x89, 0x9e, 0x3b, 0xfa,
+	0x18, 0x52, 0xfd, 0x9e, 0xbb, 0x29, 0x99, 0x18, 0x4d, 0xcc, 0xd0, 0x29, 0xf1, 0xe0, 0xa5, 0xe7,
+	0x99, 0x73, 0x5f, 0x7a, 0x96, 0xff, 0x49, 0x0c, 0x50, 0x71, 0xe0, 0xbe, 0xf8, 0x9f, 0x44, 0xb5,
+	0x85, 0x3e, 0x33, 0x31, 0xf3, 0x82, 0xcf, 0x4c, 0xc8, 0x4f, 0x21, 0x51, 0x32, 0x4d, 0xc3, 0x44,
+	0xb7, 0xdd, 0x71, 0xc6, 0xcc, 0x19, 0x09, 0xa6, 0x66, 0xaf, 0xb1, 0x5e, 0xa3, 0xcf, 0x4d, 0x3a,
+	0x63, 0x0f, 0xdd, 0x65, 0x5b, 0xeb, 0x54, 0x4a, 0x11, 0x36, 0x0e, 0x6d, 0x88, 0x8b, 0x2d, 0xff,
+	0x28, 0x01, 0x70, 0xdf, 0x38, 0xac, 0x9b, 0x7a, 0xab, 0x85, 0xcd, 0x6f, 0xaf, 0xab, 0xee, 0x43,
+	0x4a, 0xd8, 0xd9, 0x13, 0xe3, 0x90, 0x77, 0xd5, 0xb8, 0x77, 0x68, 0x49, 0x70, 0xa0, 0x3b, 0x30,
+	0x12, 0xcb, 0xd9, 0x4c, 0x5e, 0x31, 0x65, 0x44, 0xc5, 0x72, 0x6e, 0xcb, 0xd6, 0xf9, 0x5f, 0xc5,
+	0x21, 0x45, 0xef, 0xc1, 0x0c, 0x26, 0xda, 0x16, 0x07, 0x52, 0xa2, 0x82, 0x39, 0xda, 0x25, 0x0a,
+	0xc7, 0x0d, 0xda, 0xdc, 0xec, 0x8b, 0xd8, 0x5c, 0x72, 0x22, 0x9b, 0xfb, 0x14, 0xd2, 0x6d, 0xcd,
+	0xb2, 0x55, 0xb3, 0xdf, 0x65, 0xe4, 0x73, 0x23, 0xc9, 0x53, 0x84, 0x40, 0xe9, 0x77, 0x29, 0xfd,
+	0x4f, 0xc3, 0x0c, 0x7b, 0xa8, 0x74, 0x15, 0xe8, 0xcc, 0x70, 0x6b, 0xb4, 0xd2, 0xb8, 0xa5, 0x71,
+	0xba, 0x5c, 0x0d, 0x66, 0x85, 0xa1, 0x7c, 0x17, 0x92, 0x16, 0xf7, 0xc7, 0x23, 0xc2, 0x11, 0xe1,
+	0xb6, 0xcb, 0x53, 0x8a, 0x43, 0xb2, 0x35, 0x07, 0xb3, 0xbc, 0x1f, 0xe4, 0x32, 0xcc, 0xb0, 0x6a,
+	0xd0, 0x0a, 0xa0, 0x5a, 0x3d, 0x5f, 0x3f, 0xa8, 0x0d, 0xce, 0x09, 0xe5, 0x52, 0x7e, 0xa7, 0x5e,
+	0x7e, 0x94, 0x95, 0x10, 0xc0, 0xcc, 0x7e, 0xfe, 0xa0, 0x56, 0x2a, 0xb2, 0x77, 0x11, 0x0b, 0xf9,
+	0xbd, 0x42, 0x69, 0x67, 0xa7, 0x54, 0xcc, 0xc6, 0xb7, 0x12, 0x10, 0x7f, 0x62, 0x1c, 0xca, 0xbf,
+	0x13, 0x83, 0x19, 0x76, 0x07, 0x15, 0x3d, 0x80, 0xb4, 0xa5, 0x3d, 0xc3, 0xaa, 0xe7, 0x59, 0xbe,
+	0x61, 0x69, 0x2a, 0x46, 0xb5, 0x5e, 0xd3, 0x9e, 0x61, 0xf1, 0x62, 0x64, 0x79, 0x4a, 0x99, 0xb7,
+	0x3c, 0xdf, 0xa8, 0x0c, 0xb3, 0xbd, 0xfe, 0xa1, 0x6a, 0xf5, 0x0f, 0x47, 0xbc, 0x50, 0xc1, 0x99,
+	0xed, 0xf7, 0x0f, 0xdb, 0xba, 0x75, 0x5c, 0x37, 0xf6, 0xfb, 0x87, 0xb5, 0xfe, 0x61, 0x79, 0x4a,
+	0x99, 0xe9, 0xd1, 0x5f, 0x39, 0x15, 0xe6, 0xbd, 0x35, 0xa1, 0xaa, 0xf3, 0x30, 0x82, 0x6f, 0x7f,
+	0x7f, 0x6d, 0xfc, 0x87, 0x11, 0xc4, 0x5b, 0x08, 0xfc, 0xe2, 0xe4, 0x1b, 0xb0, 0x10, 0xa8, 0x9d,
+	0x44, 0x0c, 0xb6, 0xd1, 0xe3, 0xf7, 0x81, 0xe6, 0x14, 0xf6, 0x41, 0x66, 0x3d, 0x76, 0x59, 0x57,
+	0xfe, 0x0d, 0x09, 0xae, 0x14, 0xa8, 0xbd, 0x06, 0x2f, 0xc7, 0x8f, 0x78, 0x3c, 0xe3, 0x01, 0x64,
+	0x07, 0x6e, 0xdf, 0xc7, 0x26, 0xba, 0x7d, 0xbf, 0x10, 0x78, 0xda, 0x02, 0x5d, 0x83, 0x94, 0xf3,
+	0x04, 0x86, 0xde, 0xe4, 0x4e, 0x05, 0x04, 0xa8, 0xd2, 0x94, 0x7f, 0x4f, 0x82, 0x2b, 0x07, 0x74,
+	0x7c, 0x44, 0x08, 0x1b, 0xe6, 0xcd, 0xbe, 0x05, 0x41, 0xdd, 0x51, 0x4d, 0xb7, 0x98, 0xe2, 0x11,
+	0xc3, 0x92, 0xc6, 0xaf, 0xbb, 0x9a, 0x75, 0x22, 0x46, 0x35, 0xf9, 0x2d, 0x6f, 0xc0, 0xa5, 0x6d,
+	0x6c, 0x8f, 0xdf, 0x00, 0xf9, 0x29, 0x5c, 0x66, 0x77, 0xd3, 0x7d, 0x14, 0xd6, 0xa8, 0x0e, 0xba,
+	0x0a, 0xd0, 0xd3, 0x5a, 0x58, 0xb5, 0x8d, 0x13, 0xfe, 0xc2, 0xd3, 0x9c, 0x32, 0x47, 0x20, 0x75,
+	0x02, 0x40, 0x97, 0x81, 0x7e, 0xb8, 0x3b, 0x3d, 0x09, 0x25, 0x49, 0x00, 0x74, 0x9f, 0xe7, 0x57,
+	0x25, 0xb8, 0x12, 0x5e, 0x27, 0xbf, 0x16, 0x5f, 0x83, 0xc5, 0xa0, 0x52, 0xc5, 0xda, 0x76, 0x5c,
+	0xad, 0x66, 0x03, 0x5a, 0xb5, 0xd0, 0x4d, 0x58, 0xe8, 0xe2, 0x53, 0x5b, 0x1d, 0x10, 0x3b, 0x4d,
+	0xc0, 0xfb, 0x42, 0x74, 0x79, 0x13, 0xae, 0x14, 0x71, 0x1b, 0x4f, 0x62, 0x05, 0x74, 0x13, 0x80,
+	0xd9, 0xb9, 0xeb, 0xed, 0x46, 0x69, 0x70, 0x0b, 0x52, 0x4f, 0x8c, 0x43, 0x95, 0xfb, 0x2d, 0x6e,
+	0x34, 0xaf, 0x8e, 0x74, 0xa2, 0x0a, 0x3c, 0x71, 0xe7, 0xd7, 0xab, 0x00, 0x9c, 0xde, 0x35, 0xe9,
+	0x39, 0x0e, 0xa9, 0x34, 0xc9, 0x82, 0xf5, 0x22, 0xb3, 0xe8, 0x41, 0xb1, 0xc2, 0x8c, 0xf9, 0x65,
+	0x88, 0xf4, 0x42, 0xd6, 0xbb, 0x06, 0x17, 0xb6, 0xb1, 0x3d, 0x96, 0xb0, 0xf2, 0x4f, 0x24, 0x58,
+	0x62, 0x3a, 0x2f, 0xb6, 0x7b, 0xf7, 0x8d, 0xc3, 0x51, 0xfa, 0x0e, 0x84, 0x0c, 0xb1, 0x17, 0x09,
+	0x19, 0x2a, 0x90, 0x34, 0x75, 0xeb, 0x84, 0x32, 0x8a, 0x0f, 0x3f, 0xc3, 0x15, 0xf6, 0x24, 0x43,
+	0x79, 0x4a, 0x99, 0x25, 0xf4, 0x84, 0xd5, 0x32, 0xcc, 0x10, 0x9d, 0xeb, 0x4d, 0xfe, 0x24, 0x4f,
+	0xe2, 0x89, 0x71, 0x58, 0x69, 0x8a, 0xc9, 0xe7, 0x17, 0x25, 0x58, 0x21, 0x43, 0xc5, 0x55, 0xc9,
+	0xb7, 0x39, 0x32, 0xd1, 0x25, 0x48, 0xd2, 0x2d, 0x6b, 0xf5, 0xf0, 0x8c, 0x8b, 0x33, 0x4b, 0xbf,
+	0xb7, 0xce, 0x88, 0x24, 0x17, 0x07, 0x24, 0xe1, 0xe3, 0xb5, 0x08, 0xf3, 0x1e, 0xbb, 0x11, 0x43,
+	0x75, 0x0c, 0xc3, 0x49, 0xb9, 0x86, 0x33, 0xfe, 0x00, 0xbd, 0x03, 0x17, 0xd9, 0x00, 0x1d, 0xcf,
+	0x4e, 0xfe, 0x6a, 0x0c, 0xb2, 0xc1, 0xee, 0x24, 0xeb, 0x14, 0xfe, 0xfe, 0xbb, 0x7f, 0x76, 0x8c,
+	0x5a, 0xa7, 0xf8, 0xe7, 0xc5, 0xb4, 0xe5, 0x7b, 0xc0, 0xe8, 0xa5, 0xbe, 0xf4, 0x14, 0xf9, 0x62,
+	0x53, 0x3c, 0xfa, 0xdd, 0x2d, 0xcf, 0x5b, 0x1a, 0xd3, 0x13, 0xbd, 0xa5, 0xf1, 0x2f, 0x13, 0x30,
+	0xc3, 0x46, 0x4f, 0xa8, 0x3f, 0x78, 0x9f, 0x3f, 0x65, 0x3d, 0xfc, 0x35, 0x77, 0xc6, 0xc0, 0xf3,
+	0x76, 0xf5, 0x27, 0xf4, 0x1d, 0x4c, 0x1b, 0xf3, 0xcc, 0xe8, 0xcd, 0xa1, 0x74, 0xc4, 0x1c, 0x48,
+	0xc0, 0x86, 0x15, 0x46, 0x84, 0xbe, 0x80, 0x79, 0x3a, 0xb6, 0xc4, 0x8a, 0x85, 0xc5, 0xf6, 0xef,
+	0x9e, 0xe3, 0x78, 0x77, 0x79, 0x4a, 0x49, 0x99, 0x9e, 0x0b, 0xcd, 0x8f, 0x41, 0xcc, 0xb5, 0x0e,
+	0xf3, 0xe1, 0xc7, 0xed, 0xa2, 0x5e, 0x12, 0x2a, 0x4f, 0x29, 0xa2, 0xc7, 0x05, 0xef, 0x17, 0x7a,
+	0x61, 0xf8, 0x23, 0x00, 0xfa, 0x56, 0xe8, 0xb8, 0x6b, 0x80, 0x39, 0x8a, 0x4d, 0x49, 0xdf, 0x87,
+	0x24, 0xee, 0x36, 0xc7, 0x8d, 0xff, 0x67, 0x71, 0xb7, 0x49, 0xc9, 0x6e, 0x41, 0xd6, 0x33, 0x62,
+	0x99, 0x81, 0x01, 0xed, 0xf9, 0x8c, 0x3b, 0x24, 0xa9, 0x6d, 0xb9, 0xcb, 0x9a, 0xd4, 0xf8, 0xcb,
+	0x1a, 0xb9, 0x01, 0x49, 0xd1, 0xaf, 0xe8, 0x12, 0x2c, 0xdf, 0xaf, 0x6e, 0xa9, 0x24, 0x16, 0x0f,
+	0x49, 0xcf, 0xec, 0x97, 0xf6, 0x8a, 0x95, 0xbd, 0xed, 0xac, 0x44, 0x3e, 0x94, 0x83, 0xbd, 0x3d,
+	0xf2, 0x11, 0x43, 0x49, 0x98, 0x2e, 0x56, 0xf7, 0x4a, 0xd9, 0x38, 0x9a, 0x87, 0x24, 0x8b, 0xca,
+	0x4b, 0xc5, 0xec, 0x34, 0x89, 0xd7, 0xef, 0xe5, 0x2b, 0xe4, 0x77, 0x82, 0x44, 0xfd, 0x22, 0x5f,
+	0x74, 0x13, 0xb2, 0xdb, 0xd8, 0xf6, 0x4f, 0x04, 0x61, 0xce, 0xe0, 0xb7, 0x25, 0x40, 0xc4, 0x8b,
+	0x31, 0xcc, 0x10, 0x5f, 0x3a, 0xed, 0xf3, 0xa5, 0xee, 0x83, 0x3e, 0x92, 0xf7, 0x41, 0x1f, 0xbf,
+	0x13, 0x8d, 0x05, 0x9c, 0xa8, 0xdf, 0x01, 0xc7, 0x83, 0x0e, 0x58, 0x0c, 0xaa, 0xc4, 0x44, 0x83,
+	0x4a, 0xee, 0xc1, 0x92, 0x4f, 0x70, 0xee, 0x7a, 0xdf, 0x81, 0xe9, 0x27, 0xc6, 0xa1, 0x70, 0xb9,
+	0x57, 0x87, 0x72, 0x53, 0x28, 0xea, 0xd8, 0x7e, 0xf6, 0x4d, 0x58, 0x2a, 0x68, 0xdd, 0x06, 0x6e,
+	0x8f, 0x56, 0xeb, 0x9b, 0xb0, 0xc4, 0x5c, 0xf2, 0x68, 0xd4, 0xdf, 0x92, 0xe0, 0x1a, 0x9f, 0xb6,
+	0x07, 0x52, 0x3b, 0xa3, 0xa6, 0xb6, 0xc7, 0xb0, 0x14, 0xf2, 0xfc, 0xe4, 0x88, 0x93, 0x07, 0x21,
+	0xd5, 0xa0, 0xc1, 0x47, 0x2a, 0x47, 0x2f, 0x0f, 0xfe, 0x9d, 0x04, 0xd7, 0x58, 0x30, 0x15, 0x2d,
+	0x78, 0x98, 0x13, 0xfd, 0x36, 0x85, 0x7e, 0xa1, 0x60, 0x6b, 0x13, 0xae, 0x90, 0x31, 0x33, 0x49,
+	0x63, 0x64, 0x1b, 0x5e, 0xa1, 0x56, 0x38, 0x40, 0xf4, 0xad, 0x2e, 0x18, 0xfe, 0xb6, 0x04, 0xd7,
+	0x22, 0xab, 0xe5, 0x03, 0xe1, 0x4b, 0xb8, 0x10, 0xa2, 0x66, 0x31, 0x30, 0x26, 0xd0, 0xf3, 0xd2,
+	0xa0, 0x9e, 0xc7, 0x1f, 0x33, 0xef, 0xc3, 0x35, 0x3e, 0x10, 0x26, 0x51, 0xeb, 0xda, 0x2e, 0xa4,
+	0x7d, 0xff, 0xd6, 0x03, 0x5d, 0x84, 0xa5, 0x42, 0x75, 0xaf, 0x5e, 0xda, 0x0b, 0x1e, 0x13, 0xca,
+	0xc2, 0xbc, 0x28, 0xa8, 0x97, 0xbe, 0xa8, 0x67, 0x25, 0xb4, 0x08, 0x69, 0x01, 0xa1, 0xff, 0xc6,
+	0x21, 0x1b, 0x5b, 0xdb, 0x77, 0x5f, 0x58, 0xf3, 0x3c, 0x74, 0x46, 0x1c, 0x71, 0x69, 0xef, 0x60,
+	0x37, 0xec, 0x3f, 0x46, 0xa4, 0x60, 0xb6, 0x42, 0x01, 0x9c, 0xa3, 0x52, 0xa9, 0x7d, 0xa6, 0xe6,
+	0xf7, 0xf2, 0x3b, 0x8f, 0x6a, 0x95, 0x5a, 0x36, 0xb6, 0xf6, 0x8f, 0x25, 0x40, 0x83, 0x3b, 0x99,
+	0xe8, 0x06, 0x5c, 0x53, 0x4a, 0x3b, 0x34, 0x09, 0x1f, 0xbd, 0x8f, 0x36, 0x0f, 0xc9, 0xd2, 0x83,
+	0x83, 0xfc, 0x8e, 0x5a, 0xaf, 0x66, 0x25, 0xd2, 0x80, 0xbd, 0x6a, 0x5d, 0x75, 0x20, 0xf4, 0x60,
+	0xf0, 0xb6, 0x52, 0xca, 0xd7, 0x4b, 0x8a, 0x5a, 0x2f, 0xe7, 0xf7, 0xd8, 0x7f, 0xa4, 0xd8, 0x29,
+	0xd5, 0x6a, 0xec, 0x73, 0x1a, 0xe5, 0x60, 0xc5, 0x8b, 0xa0, 0x56, 0x15, 0x46, 0x5e, 0xcb, 0x26,
+	0x88, 0xa2, 0x1c, 0x54, 0x4f, 0xc1, 0x0c, 0x99, 0x28, 0x4a, 0x5f, 0x54, 0x6a, 0xf5, 0x5a, 0x76,
+	0x76, 0x4d, 0x01, 0x70, 0xfd, 0x29, 0xba, 0x02, 0xab, 0xc5, 0x9d, 0x7d, 0x95, 0xcc, 0x49, 0x21,
+	0x9a, 0x58, 0x80, 0x14, 0xd7, 0x04, 0xc1, 0xc8, 0x4a, 0x68, 0x19, 0x16, 0x7d, 0xda, 0xa0, 0xe0,
+	0xd8, 0xe6, 0xff, 0x93, 0x29, 0xd3, 0x1a, 0x36, 0x9f, 0xe9, 0x0d, 0x8c, 0xfe, 0x86, 0x04, 0x19,
+	0xff, 0xab, 0x99, 0xe8, 0xf6, 0xc8, 0xf0, 0xcf, 0xf3, 0x8c, 0x68, 0xee, 0xce, 0x98, 0xd8, 0xcc,
+	0xdc, 0xe5, 0xcd, 0x3f, 0xfd, 0xe3, 0xff, 0xf2, 0x97, 0x62, 0xb7, 0xe5, 0x37, 0x36, 0x9e, 0x6d,
+	0x6e, 0xfc, 0x2c, 0x1b, 0x63, 0xdf, 0xed, 0x99, 0xc6, 0x13, 0xdc, 0xb0, 0xad, 0x8d, 0xb5, 0x9f,
+	0xdf, 0xe0, 0xef, 0xf3, 0xdf, 0xe5, 0x71, 0xca, 0x5d, 0x69, 0x0d, 0xfd, 0x40, 0x82, 0x94, 0xe7,
+	0x9d, 0x65, 0xf4, 0xe6, 0xd8, 0x6f, 0x65, 0xe7, 0xd6, 0xc6, 0x41, 0xe5, 0xa2, 0x6d, 0x50, 0xd1,
+	0xde, 0x94, 0x5f, 0x8b, 0x12, 0x8d, 0xbe, 0xe5, 0x7c, 0x97, 0xdd, 0xf6, 0x20, 0x72, 0xfd, 0xa6,
+	0x04, 0x8b, 0x03, 0x6f, 0x03, 0xa3, 0x8d, 0x71, 0x12, 0xdf, 0x5e, 0x0d, 0xbe, 0x3d, 0x3e, 0x01,
+	0x97, 0xf4, 0x7d, 0x2a, 0xe9, 0x86, 0xbc, 0x36, 0x4a, 0x89, 0xae, 0x4b, 0x10, 0xf2, 0x2a, 0x63,
+	0xcb, 0xab, 0x4c, 0x2a, 0xaf, 0xf2, 0xe2, 0xf2, 0x9a, 0x3e, 0x79, 0x7f, 0x41, 0x82, 0xb4, 0xef,
+	0xfd, 0x41, 0xf4, 0x56, 0xe4, 0xff, 0xde, 0x18, 0x7c, 0xfa, 0x30, 0x77, 0x7b, 0x3c, 0x64, 0x2e,
+	0xe3, 0x32, 0x95, 0x71, 0x01, 0xa5, 0x89, 0x8c, 0xee, 0xe9, 0xa7, 0xff, 0x28, 0xc1, 0x72, 0x68,
+	0x26, 0x10, 0xbd, 0x1b, 0x79, 0x70, 0x2c, 0x3a, 0x6f, 0x98, 0x1b, 0x33, 0x0d, 0x24, 0xb7, 0xa8,
+	0x34, 0x9a, 0x7c, 0xc7, 0xab, 0x31, 0xc3, 0x6c, 0x69, 0x5d, 0xfd, 0x6b, 0xb6, 0xbb, 0x4b, 0x0d,
+	0x32, 0x90, 0x2b, 0xba, 0x2b, 0xad, 0x3d, 0xbe, 0x23, 0xdf, 0x8a, 0xb4, 0xdf, 0x41, 0x74, 0xda,
+	0xbe, 0xd0, 0xe4, 0x61, 0x64, 0xfb, 0x86, 0xa5, 0x1a, 0x27, 0x6d, 0xdf, 0x26, 0x6b, 0x1f, 0x99,
+	0x4b, 0x82, 0xad, 0x1b, 0x90, 0x76, 0x63, 0xed, 0xe7, 0x69, 0xfb, 0x36, 0x6f, 0xb9, 0x34, 0x6e,
+	0xeb, 0x22, 0xd0, 0xd1, 0xef, 0x4b, 0x80, 0x06, 0x13, 0x8b, 0x28, 0xca, 0x86, 0x23, 0x73, 0x90,
+	0x63, 0xb7, 0x4c, 0xa3, 0x2d, 0xfb, 0x19, 0x34, 0x59, 0xcb, 0x1e, 0xaf, 0xa1, 0xb1, 0x9b, 0x85,
+	0x7e, 0x22, 0x89, 0xc7, 0x3e, 0x03, 0xa9, 0xc2, 0xcd, 0xa1, 0x16, 0x1f, 0x9a, 0x28, 0xcd, 0xbd,
+	0x3b, 0x11, 0x0d, 0x1f, 0x2c, 0xfe, 0x46, 0x8e, 0x6b, 0x9e, 0x4e, 0x23, 0xc7, 0xb0, 0x4d, 0xf4,
+	0xaf, 0x24, 0x58, 0x0e, 0xcd, 0x67, 0x46, 0x1a, 0xe6, 0xb0, 0xec, 0x67, 0x2e, 0xe2, 0x7d, 0x37,
+	0xd1, 0x92, 0xb5, 0x49, 0xbb, 0x6b, 0x6d, 0xfc, 0xee, 0xfa, 0x43, 0x09, 0x56, 0xa3, 0x56, 0x0e,
+	0xe8, 0x83, 0xa1, 0x5e, 0x24, 0x32, 0x1a, 0xcb, 0x8d, 0x1f, 0x18, 0xca, 0x1d, 0xda, 0xc4, 0x96,
+	0xfc, 0xf6, 0xd0, 0xce, 0x0a, 0x89, 0x1e, 0xc9, 0x70, 0x7b, 0x5b, 0x7e, 0x2b, 0xaa, 0xcb, 0xc2,
+	0x29, 0x68, 0x73, 0xa3, 0xd6, 0x1b, 0x91, 0xcd, 0x1d, 0xb1, 0x40, 0x39, 0x47, 0x73, 0x37, 0xdf,
+	0x8e, 0xee, 0xd1, 0x10, 0xc9, 0xb9, 0x77, 0x79, 0x7b, 0xf3, 0xad, 0xd0, 0x7e, 0x8d, 0xa4, 0x40,
+	0x7f, 0x20, 0xc1, 0x72, 0xe8, 0x72, 0x24, 0xd2, 0x4e, 0x87, 0x2d, 0x5e, 0x26, 0x69, 0x28, 0xf7,
+	0xa1, 0x68, 0xe2, 0x86, 0x3e, 0xbe, 0x83, 0x26, 0x69, 0x25, 0xfa, 0x1f, 0x3c, 0x85, 0x1a, 0xb2,
+	0x8c, 0x41, 0xef, 0x0f, 0x71, 0x1f, 0xd1, 0xab, 0xad, 0xdc, 0x07, 0x93, 0x92, 0x71, 0xc7, 0xe3,
+	0x6f, 0xf3, 0x04, 0xb6, 0xec, 0xb4, 0x79, 0x3c, 0x43, 0x46, 0x3f, 0x96, 0x60, 0x35, 0x6a, 0x45,
+	0x14, 0x69, 0xc5, 0x23, 0x96, 0x50, 0x91, 0x4e, 0x88, 0xb7, 0x6a, 0xed, 0x1c, 0x3d, 0xb9, 0x36,
+	0x51, 0x4f, 0xfe, 0x40, 0x82, 0x6c, 0x70, 0xbf, 0x07, 0xad, 0x0f, 0x75, 0x41, 0x03, 0xc9, 0xea,
+	0xdc, 0xe8, 0xfc, 0xb8, 0xbc, 0x4e, 0x1b, 0x74, 0x4b, 0xbe, 0x11, 0xa5, 0x72, 0x4f, 0xfe, 0x9c,
+	0x47, 0xf8, 0xd9, 0xe0, 0x86, 0x4f, 0xa4, 0x5c, 0x11, 0x3b, 0x43, 0x13, 0xc8, 0xb5, 0x79, 0x23,
+	0x54, 0x69, 0x1e, 0xa1, 0xf8, 0xe0, 0xfe, 0x0b, 0x12, 0xa4, 0x7d, 0x1b, 0x3b, 0x91, 0x11, 0x68,
+	0xd8, 0xf6, 0xcf, 0x38, 0x12, 0xbd, 0x45, 0x25, 0x7a, 0x1d, 0x8d, 0x23, 0x11, 0xfa, 0xeb, 0x12,
+	0x2c, 0x04, 0xf6, 0x32, 0xd0, 0x9d, 0x21, 0x23, 0x69, 0x70, 0xf7, 0x25, 0xb7, 0x3e, 0x2e, 0x3a,
+	0x1f, 0x70, 0x7e, 0xf9, 0x86, 0xf7, 0x24, 0xfa, 0x45, 0xfa, 0x66, 0x81, 0x7f, 0x8b, 0x23, 0xb2,
+	0x1b, 0x23, 0xf6, 0x42, 0x22, 0x07, 0x09, 0x97, 0x64, 0x6d, 0x2c, 0x4d, 0xfd, 0x59, 0x09, 0xe6,
+	0xbd, 0x9b, 0x6c, 0x68, 0x6d, 0xf8, 0x3c, 0xeb, 0x4d, 0xff, 0xe5, 0x86, 0x67, 0x23, 0xe5, 0x35,
+	0x2a, 0xc8, 0x6b, 0xf2, 0xb5, 0x48, 0x7f, 0xc2, 0x72, 0x9d, 0xc4, 0x80, 0xbe, 0x2f, 0x41, 0xca,
+	0x93, 0xfe, 0x8c, 0x5c, 0xba, 0x0e, 0xe6, 0x76, 0x23, 0x97, 0xae, 0x21, 0xd9, 0x54, 0xf9, 0x0d,
+	0x2a, 0xd2, 0xab, 0x68, 0x94, 0x48, 0xe8, 0xe7, 0x60, 0xce, 0xc9, 0x37, 0xa3, 0x37, 0x86, 0x4c,
+	0x50, 0x93, 0x28, 0xc4, 0x5f, 0xfb, 0x80, 0x2b, 0x62, 0x55, 0x93, 0x5e, 0xf9, 0x59, 0x98, 0xf7,
+	0xa6, 0x5b, 0x23, 0x3b, 0x25, 0x24, 0x27, 0x1b, 0x69, 0x16, 0xbc, 0xf2, 0xb5, 0x91, 0x95, 0x53,
+	0x93, 0xf0, 0xe4, 0x85, 0xa3, 0x4d, 0x62, 0x30, 0x79, 0x1c, 0x59, 0xfb, 0x3b, 0xb4, 0xf6, 0xb7,
+	0xe4, 0x9b, 0x23, 0x6a, 0xbf, 0xdb, 0xa0, 0x4c, 0xef, 0x4a, 0x6b, 0x5b, 0xdf, 0x97, 0xe0, 0x52,
+	0xc3, 0xe8, 0x84, 0x57, 0xbe, 0x95, 0x2c, 0xb6, 0x7b, 0xfb, 0xa4, 0x8e, 0x7d, 0xe9, 0xf1, 0x87,
+	0x1c, 0xa5, 0x65, 0xb4, 0xb5, 0x6e, 0x6b, 0xdd, 0x30, 0x5b, 0x1b, 0x2d, 0xdc, 0xa5, 0x12, 0x6c,
+	0xb0, 0x22, 0xad, 0xa7, 0x5b, 0x81, 0xff, 0x0f, 0xfd, 0x71, 0xb3, 0xdd, 0xfb, 0x8d, 0xd8, 0xd2,
+	0x36, 0x23, 0x2d, 0xb4, 0x8d, 0x7e, 0x93, 0xf4, 0xd3, 0xfa, 0xc3, 0xcd, 0x7f, 0x23, 0xa0, 0x5f,
+	0x52, 0xe8, 0x97, 0xc5, 0x76, 0xef, 0xcb, 0x87, 0x9b, 0x87, 0x33, 0x94, 0xe1, 0xbb, 0xff, 0x3f,
+	0x00, 0x00, 0xff, 0xff, 0x1d, 0x42, 0x75, 0x5c, 0xc5, 0x7a, 0x00, 0x00,
+}
diff --git a/googleapis/privacy/dlp/v2/storage.pb.go b/googleapis/privacy/dlp/v2/storage.pb.go
new file mode 100644
index 00000000..7431e172
--- /dev/null
+++ b/googleapis/privacy/dlp/v2/storage.pb.go
@@ -0,0 +1,1614 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/privacy/dlp/v2/storage.proto
+
+package dlp
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// Categorization of results based on how likely they are to represent a match,
+// based on the number of elements they contain which imply a match.
+type Likelihood int32
+
+const (
+	// Default value; information with all likelihoods is included.
+	Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0
+	// Few matching elements.
+	Likelihood_VERY_UNLIKELY Likelihood = 1
+	Likelihood_UNLIKELY      Likelihood = 2
+	// Some matching elements.
+	Likelihood_POSSIBLE Likelihood = 3
+	Likelihood_LIKELY   Likelihood = 4
+	// Many matching elements.
+	Likelihood_VERY_LIKELY Likelihood = 5
+)
+
+var Likelihood_name = map[int32]string{
+	0: "LIKELIHOOD_UNSPECIFIED",
+	1: "VERY_UNLIKELY",
+	2: "UNLIKELY",
+	3: "POSSIBLE",
+	4: "LIKELY",
+	5: "VERY_LIKELY",
+}
+var Likelihood_value = map[string]int32{
+	"LIKELIHOOD_UNSPECIFIED": 0,
+	"VERY_UNLIKELY":          1,
+	"UNLIKELY":               2,
+	"POSSIBLE":               3,
+	"LIKELY":                 4,
+	"VERY_LIKELY":            5,
+}
+
+func (x Likelihood) String() string {
+	return proto.EnumName(Likelihood_name, int32(x))
+}
+func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} }
+
+// Type of information detected by the API.
+type InfoType struct {
+	// Name of the information type.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *InfoType) Reset()                    { *m = InfoType{} }
+func (m *InfoType) String() string            { return proto.CompactTextString(m) }
+func (*InfoType) ProtoMessage()               {}
+func (*InfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} }
+
+func (m *InfoType) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Custom information type provided by the user. Used to find domain-specific
+// sensitive information configurable to the data in question.
+type CustomInfoType struct {
+	// Info type configuration. All custom info types must have configurations
+	// that do not conflict with built-in info types or other custom info types.
+	InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"`
+	// Likelihood to return for this custom info type. This base value can be
+	// altered by a detection rule if the finding meets the criteria specified by
+	// the rule. Defaults to `VERY_LIKELY` if not specified.
+	Likelihood Likelihood `protobuf:"varint,6,opt,name=likelihood,enum=google.privacy.dlp.v2.Likelihood" json:"likelihood,omitempty"`
+	// Types that are valid to be assigned to Type:
+	//	*CustomInfoType_Dictionary_
+	//	*CustomInfoType_Regex_
+	//	*CustomInfoType_SurrogateType_
+	Type isCustomInfoType_Type `protobuf_oneof:"type"`
+	// Set of detection rules to apply to all findings of this custom info type.
+	// Rules are applied in order that they are specified. Not supported for the
+	// `surrogate_type` custom info type.
+	DetectionRules []*CustomInfoType_DetectionRule `protobuf:"bytes,7,rep,name=detection_rules,json=detectionRules" json:"detection_rules,omitempty"`
+}
+
+func (m *CustomInfoType) Reset()                    { *m = CustomInfoType{} }
+func (m *CustomInfoType) String() string            { return proto.CompactTextString(m) }
+func (*CustomInfoType) ProtoMessage()               {}
+func (*CustomInfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} }
+
+type isCustomInfoType_Type interface {
+	isCustomInfoType_Type()
+}
+
+type CustomInfoType_Dictionary_ struct {
+	Dictionary *CustomInfoType_Dictionary `protobuf:"bytes,2,opt,name=dictionary,oneof"`
+}
+type CustomInfoType_Regex_ struct {
+	Regex *CustomInfoType_Regex `protobuf:"bytes,3,opt,name=regex,oneof"`
+}
+type CustomInfoType_SurrogateType_ struct {
+	SurrogateType *CustomInfoType_SurrogateType `protobuf:"bytes,4,opt,name=surrogate_type,json=surrogateType,oneof"`
+}
+
+func (*CustomInfoType_Dictionary_) isCustomInfoType_Type()    {}
+func (*CustomInfoType_Regex_) isCustomInfoType_Type()         {}
+func (*CustomInfoType_SurrogateType_) isCustomInfoType_Type() {}
+
+func (m *CustomInfoType) GetType() isCustomInfoType_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *CustomInfoType) GetInfoType() *InfoType {
+	if m != nil {
+		return m.InfoType
+	}
+	return nil
+}
+
+func (m *CustomInfoType) GetLikelihood() Likelihood {
+	if m != nil {
+		return m.Likelihood
+	}
+	return Likelihood_LIKELIHOOD_UNSPECIFIED
+}
+
+func (m *CustomInfoType) GetDictionary() *CustomInfoType_Dictionary {
+	if x, ok := m.GetType().(*CustomInfoType_Dictionary_); ok {
+		return x.Dictionary
+	}
+	return nil
+}
+
+func (m *CustomInfoType) GetRegex() *CustomInfoType_Regex {
+	if x, ok := m.GetType().(*CustomInfoType_Regex_); ok {
+		return x.Regex
+	}
+	return nil
+}
+
+func (m *CustomInfoType) GetSurrogateType() *CustomInfoType_SurrogateType {
+	if x, ok := m.GetType().(*CustomInfoType_SurrogateType_); ok {
+		return x.SurrogateType
+	}
+	return nil
+}
+
+func (m *CustomInfoType) GetDetectionRules() []*CustomInfoType_DetectionRule {
+	if m != nil {
+		return m.DetectionRules
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CustomInfoType) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CustomInfoType_OneofMarshaler, _CustomInfoType_OneofUnmarshaler, _CustomInfoType_OneofSizer, []interface{}{
+		(*CustomInfoType_Dictionary_)(nil),
+		(*CustomInfoType_Regex_)(nil),
+		(*CustomInfoType_SurrogateType_)(nil),
+	}
+}
+
+func _CustomInfoType_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CustomInfoType)
+	// type
+	switch x := m.Type.(type) {
+	case *CustomInfoType_Dictionary_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Dictionary); err != nil {
+			return err
+		}
+	case *CustomInfoType_Regex_:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Regex); err != nil {
+			return err
+		}
+	case *CustomInfoType_SurrogateType_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SurrogateType); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CustomInfoType.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CustomInfoType_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CustomInfoType)
+	switch tag {
+	case 2: // type.dictionary
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CustomInfoType_Dictionary)
+		err := b.DecodeMessage(msg)
+		m.Type = &CustomInfoType_Dictionary_{msg}
+		return true, err
+	case 3: // type.regex
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CustomInfoType_Regex)
+		err := b.DecodeMessage(msg)
+		m.Type = &CustomInfoType_Regex_{msg}
+		return true, err
+	case 4: // type.surrogate_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CustomInfoType_SurrogateType)
+		err := b.DecodeMessage(msg)
+		m.Type = &CustomInfoType_SurrogateType_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CustomInfoType_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CustomInfoType)
+	// type
+	switch x := m.Type.(type) {
+	case *CustomInfoType_Dictionary_:
+		s := proto.Size(x.Dictionary)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CustomInfoType_Regex_:
+		s := proto.Size(x.Regex)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CustomInfoType_SurrogateType_:
+		s := proto.Size(x.SurrogateType)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Custom information type based on a dictionary of words or phrases. This can
+// be used to match sensitive information specific to the data, such as a list
+// of employee IDs or job titles.
+//
+// Dictionary words are case-insensitive and all characters other than letters
+// and digits in the unicode [Basic Multilingual
+// Plane](https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane)
+// will be replaced with whitespace when scanning for matches, so the
+// dictionary phrase "Sam Johnson" will match all three phrases "sam johnson",
+// "Sam, Johnson", and "Sam (Johnson)". Additionally, the characters
+// surrounding any match must be of a different type than the adjacent
+// characters within the word, so letters must be next to non-letters and
+// digits next to non-digits. For example, the dictionary word "jen" will
+// match the first three letters of the text "jen123" but will return no
+// matches for "jennifer".
+//
+// Dictionary words containing a large number of characters that are not
+// letters or digits may result in unexpected findings because such characters
+// are treated as whitespace.
+type CustomInfoType_Dictionary struct {
+	// Types that are valid to be assigned to Source:
+	//	*CustomInfoType_Dictionary_WordList_
+	Source isCustomInfoType_Dictionary_Source `protobuf_oneof:"source"`
+}
+
+func (m *CustomInfoType_Dictionary) Reset()                    { *m = CustomInfoType_Dictionary{} }
+func (m *CustomInfoType_Dictionary) String() string            { return proto.CompactTextString(m) }
+func (*CustomInfoType_Dictionary) ProtoMessage()               {}
+func (*CustomInfoType_Dictionary) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} }
+
+type isCustomInfoType_Dictionary_Source interface {
+	isCustomInfoType_Dictionary_Source()
+}
+
+type CustomInfoType_Dictionary_WordList_ struct {
+	WordList *CustomInfoType_Dictionary_WordList `protobuf:"bytes,1,opt,name=word_list,json=wordList,oneof"`
+}
+
+func (*CustomInfoType_Dictionary_WordList_) isCustomInfoType_Dictionary_Source() {}
+
+func (m *CustomInfoType_Dictionary) GetSource() isCustomInfoType_Dictionary_Source {
+	if m != nil {
+		return m.Source
+	}
+	return nil
+}
+
+func (m *CustomInfoType_Dictionary) GetWordList() *CustomInfoType_Dictionary_WordList {
+	if x, ok := m.GetSource().(*CustomInfoType_Dictionary_WordList_); ok {
+		return x.WordList
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CustomInfoType_Dictionary) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CustomInfoType_Dictionary_OneofMarshaler, _CustomInfoType_Dictionary_OneofUnmarshaler, _CustomInfoType_Dictionary_OneofSizer, []interface{}{
+		(*CustomInfoType_Dictionary_WordList_)(nil),
+	}
+}
+
+func _CustomInfoType_Dictionary_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CustomInfoType_Dictionary)
+	// source
+	switch x := m.Source.(type) {
+	case *CustomInfoType_Dictionary_WordList_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WordList); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CustomInfoType_Dictionary.Source has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CustomInfoType_Dictionary_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CustomInfoType_Dictionary)
+	switch tag {
+	case 1: // source.word_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CustomInfoType_Dictionary_WordList)
+		err := b.DecodeMessage(msg)
+		m.Source = &CustomInfoType_Dictionary_WordList_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CustomInfoType_Dictionary_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CustomInfoType_Dictionary)
+	// source
+	switch x := m.Source.(type) {
+	case *CustomInfoType_Dictionary_WordList_:
+		s := proto.Size(x.WordList)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message defining a list of words or phrases to search for in the data.
+type CustomInfoType_Dictionary_WordList struct {
+	// Words or phrases defining the dictionary. The dictionary must contain
+	// at least one phrase and every phrase must contain at least 2 characters
+	// that are letters or digits. [required]
+	Words []string `protobuf:"bytes,1,rep,name=words" json:"words,omitempty"`
+}
+
+func (m *CustomInfoType_Dictionary_WordList) Reset()         { *m = CustomInfoType_Dictionary_WordList{} }
+func (m *CustomInfoType_Dictionary_WordList) String() string { return proto.CompactTextString(m) }
+func (*CustomInfoType_Dictionary_WordList) ProtoMessage()    {}
+func (*CustomInfoType_Dictionary_WordList) Descriptor() ([]byte, []int) {
+	return fileDescriptor1, []int{1, 0, 0}
+}
+
+func (m *CustomInfoType_Dictionary_WordList) GetWords() []string {
+	if m != nil {
+		return m.Words
+	}
+	return nil
+}
+
+// Message defining a custom regular expression.
+type CustomInfoType_Regex struct {
+	// Pattern defining the regular expression.
+	Pattern string `protobuf:"bytes,1,opt,name=pattern" json:"pattern,omitempty"`
+}
+
+func (m *CustomInfoType_Regex) Reset()                    { *m = CustomInfoType_Regex{} }
+func (m *CustomInfoType_Regex) String() string            { return proto.CompactTextString(m) }
+func (*CustomInfoType_Regex) ProtoMessage()               {}
+func (*CustomInfoType_Regex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 1} }
+
+func (m *CustomInfoType_Regex) GetPattern() string {
+	if m != nil {
+		return m.Pattern
+	}
+	return ""
+}
+
+// Message for detecting output from deidentification transformations
+// such as
+// [`CryptoReplaceFfxFpeConfig`](/dlp/docs/reference/rest/v2/content/deidentify#CryptoReplaceFfxFpeConfig).
+// These types of transformations are
+// those that perform pseudonymization, thereby producing a "surrogate" as
+// output. This should be used in conjunction with a field on the
+// transformation such as `surrogate_info_type`. This custom info type does
+// not support the use of `detection_rules`.
+type CustomInfoType_SurrogateType struct {
+}
+
+func (m *CustomInfoType_SurrogateType) Reset()                    { *m = CustomInfoType_SurrogateType{} }
+func (m *CustomInfoType_SurrogateType) String() string            { return proto.CompactTextString(m) }
+func (*CustomInfoType_SurrogateType) ProtoMessage()               {}
+func (*CustomInfoType_SurrogateType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 2} }
+
+// Rule for modifying a custom info type to alter behavior under certain
+// circumstances, depending on the specific details of the rule. Not supported
+// for the `surrogate_type` custom info type.
+type CustomInfoType_DetectionRule struct {
+	// Types that are valid to be assigned to Type:
+	//	*CustomInfoType_DetectionRule_HotwordRule_
+	Type isCustomInfoType_DetectionRule_Type `protobuf_oneof:"type"`
+}
+
+func (m *CustomInfoType_DetectionRule) Reset()                    { *m = CustomInfoType_DetectionRule{} }
+func (m *CustomInfoType_DetectionRule) String() string            { return proto.CompactTextString(m) }
+func (*CustomInfoType_DetectionRule) ProtoMessage()               {}
+func (*CustomInfoType_DetectionRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 3} }
+
+type isCustomInfoType_DetectionRule_Type interface {
+	isCustomInfoType_DetectionRule_Type()
+}
+
+type CustomInfoType_DetectionRule_HotwordRule_ struct {
+	HotwordRule *CustomInfoType_DetectionRule_HotwordRule `protobuf:"bytes,1,opt,name=hotword_rule,json=hotwordRule,oneof"`
+}
+
+func (*CustomInfoType_DetectionRule_HotwordRule_) isCustomInfoType_DetectionRule_Type() {}
+
+func (m *CustomInfoType_DetectionRule) GetType() isCustomInfoType_DetectionRule_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *CustomInfoType_DetectionRule) GetHotwordRule() *CustomInfoType_DetectionRule_HotwordRule {
+	if x, ok := m.GetType().(*CustomInfoType_DetectionRule_HotwordRule_); ok {
+		return x.HotwordRule
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CustomInfoType_DetectionRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CustomInfoType_DetectionRule_OneofMarshaler, _CustomInfoType_DetectionRule_OneofUnmarshaler, _CustomInfoType_DetectionRule_OneofSizer, []interface{}{
+		(*CustomInfoType_DetectionRule_HotwordRule_)(nil),
+	}
+}
+
+func _CustomInfoType_DetectionRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CustomInfoType_DetectionRule)
+	// type
+	switch x := m.Type.(type) {
+	case *CustomInfoType_DetectionRule_HotwordRule_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotwordRule); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CustomInfoType_DetectionRule.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CustomInfoType_DetectionRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CustomInfoType_DetectionRule)
+	switch tag {
+	case 1: // type.hotword_rule
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CustomInfoType_DetectionRule_HotwordRule)
+		err := b.DecodeMessage(msg)
+		m.Type = &CustomInfoType_DetectionRule_HotwordRule_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CustomInfoType_DetectionRule_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CustomInfoType_DetectionRule)
+	// type
+	switch x := m.Type.(type) {
+	case *CustomInfoType_DetectionRule_HotwordRule_:
+		s := proto.Size(x.HotwordRule)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message for specifying a window around a finding to apply a detection
+// rule.
+type CustomInfoType_DetectionRule_Proximity struct {
+	// Number of characters before the finding to consider.
+	WindowBefore int32 `protobuf:"varint,1,opt,name=window_before,json=windowBefore" json:"window_before,omitempty"`
+	// Number of characters after the finding to consider.
+	WindowAfter int32 `protobuf:"varint,2,opt,name=window_after,json=windowAfter" json:"window_after,omitempty"`
+}
+
+func (m *CustomInfoType_DetectionRule_Proximity) Reset() {
+	*m = CustomInfoType_DetectionRule_Proximity{}
+}
+func (m *CustomInfoType_DetectionRule_Proximity) String() string { return proto.CompactTextString(m) }
+func (*CustomInfoType_DetectionRule_Proximity) ProtoMessage()    {}
+func (*CustomInfoType_DetectionRule_Proximity) Descriptor() ([]byte, []int) {
+	return fileDescriptor1, []int{1, 3, 0}
+}
+
+func (m *CustomInfoType_DetectionRule_Proximity) GetWindowBefore() int32 {
+	if m != nil {
+		return m.WindowBefore
+	}
+	return 0
+}
+
+func (m *CustomInfoType_DetectionRule_Proximity) GetWindowAfter() int32 {
+	if m != nil {
+		return m.WindowAfter
+	}
+	return 0
+}
+
+// Message for specifying an adjustment to the likelihood of a finding as
+// part of a detection rule.
+type CustomInfoType_DetectionRule_LikelihoodAdjustment struct {
+	// Types that are valid to be assigned to Adjustment:
+	//	*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood
+	//	*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood
+	Adjustment isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment `protobuf_oneof:"adjustment"`
+}
+
+func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) Reset() {
+	*m = CustomInfoType_DetectionRule_LikelihoodAdjustment{}
+}
+func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) ProtoMessage() {}
+func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) Descriptor() ([]byte, []int) {
+	return fileDescriptor1, []int{1, 3, 1}
+}
+
+type isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment interface {
+	isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment()
+}
+
+type CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood struct {
+	FixedLikelihood Likelihood `protobuf:"varint,1,opt,name=fixed_likelihood,json=fixedLikelihood,enum=google.privacy.dlp.v2.Likelihood,oneof"`
+}
+type CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood struct {
+	RelativeLikelihood int32 `protobuf:"varint,2,opt,name=relative_likelihood,json=relativeLikelihood,oneof"`
+}
+
+func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() {
+}
+func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() {
+}
+
+func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetAdjustment() isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment {
+	if m != nil {
+		return m.Adjustment
+	}
+	return nil
+}
+
+func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetFixedLikelihood() Likelihood {
+	if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood); ok {
+		return x.FixedLikelihood
+	}
+	return Likelihood_LIKELIHOOD_UNSPECIFIED
+}
+
+func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetRelativeLikelihood() int32 {
+	if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood); ok {
+		return x.RelativeLikelihood
+	}
+	return 0
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer, []interface{}{
+		(*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood)(nil),
+		(*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood)(nil),
+	}
+}
+
+func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment)
+	// adjustment
+	switch x := m.Adjustment.(type) {
+	case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood:
+		b.EncodeVarint(1<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FixedLikelihood))
+	case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RelativeLikelihood))
+	case nil:
+	default:
+		return fmt.Errorf("CustomInfoType_DetectionRule_LikelihoodAdjustment.Adjustment has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment)
+	switch tag {
+	case 1: // adjustment.fixed_likelihood
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood{Likelihood(x)}
+		return true, err
+	case 2: // adjustment.relative_likelihood
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood{int32(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment)
+	// adjustment
+	switch x := m.Adjustment.(type) {
+	case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood:
+		n += proto.SizeVarint(1<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.FixedLikelihood))
+	case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood:
+		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.RelativeLikelihood))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Detection rule that adjusts the likelihood of findings within a certain
+// proximity of hotwords.
+type CustomInfoType_DetectionRule_HotwordRule struct {
+	// Regex pattern defining what qualifies as a hotword.
+	HotwordRegex *CustomInfoType_Regex `protobuf:"bytes,1,opt,name=hotword_regex,json=hotwordRegex" json:"hotword_regex,omitempty"`
+	// Proximity of the finding within which the entire hotword must reside.
+	// The total length of the window cannot exceed 1000 characters. Note that
+	// the finding itself will be included in the window, so that hotwords may
+	// be used to match substrings of the finding itself. For example, the
+	// certainty of a phone number regex "\(\d{3}\) \d{3}-\d{4}" could be
+	// adjusted upwards if the area code is known to be the local area code of
+	// a company office using the hotword regex "\(xxx\)", where "xxx"
+	// is the area code in question.
+	Proximity *CustomInfoType_DetectionRule_Proximity `protobuf:"bytes,2,opt,name=proximity" json:"proximity,omitempty"`
+	// Likelihood adjustment to apply to all matching findings.
+	LikelihoodAdjustment *CustomInfoType_DetectionRule_LikelihoodAdjustment `protobuf:"bytes,3,opt,name=likelihood_adjustment,json=likelihoodAdjustment" json:"likelihood_adjustment,omitempty"`
+}
+
+func (m *CustomInfoType_DetectionRule_HotwordRule) Reset() {
+	*m = CustomInfoType_DetectionRule_HotwordRule{}
+}
+func (m *CustomInfoType_DetectionRule_HotwordRule) String() string { return proto.CompactTextString(m) }
+func (*CustomInfoType_DetectionRule_HotwordRule) ProtoMessage()    {}
+func (*CustomInfoType_DetectionRule_HotwordRule) Descriptor() ([]byte, []int) {
+	return fileDescriptor1, []int{1, 3, 2}
+}
+
+func (m *CustomInfoType_DetectionRule_HotwordRule) GetHotwordRegex() *CustomInfoType_Regex {
+	if m != nil {
+		return m.HotwordRegex
+	}
+	return nil
+}
+
+func (m *CustomInfoType_DetectionRule_HotwordRule) GetProximity() *CustomInfoType_DetectionRule_Proximity {
+	if m != nil {
+		return m.Proximity
+	}
+	return nil
+}
+
+func (m *CustomInfoType_DetectionRule_HotwordRule) GetLikelihoodAdjustment() *CustomInfoType_DetectionRule_LikelihoodAdjustment {
+	if m != nil {
+		return m.LikelihoodAdjustment
+	}
+	return nil
+}
+
+// General identifier of a data field in a storage service.
+type FieldId struct {
+	// Name describing the field.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *FieldId) Reset()                    { *m = FieldId{} }
+func (m *FieldId) String() string            { return proto.CompactTextString(m) }
+func (*FieldId) ProtoMessage()               {}
+func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} }
+
+func (m *FieldId) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Datastore partition ID.
+// A partition ID identifies a grouping of entities. The grouping is always
+// by project and namespace, however the namespace ID may be empty.
+//
+// A partition ID contains several dimensions:
+// project ID and namespace ID.
+type PartitionId struct {
+	// The ID of the project to which the entities belong.
+	ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"`
+	// If not empty, the ID of the namespace to which the entities belong.
+	NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"`
+}
+
+func (m *PartitionId) Reset()                    { *m = PartitionId{} }
+func (m *PartitionId) String() string            { return proto.CompactTextString(m) }
+func (*PartitionId) ProtoMessage()               {}
+func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} }
+
+func (m *PartitionId) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+func (m *PartitionId) GetNamespaceId() string {
+	if m != nil {
+		return m.NamespaceId
+	}
+	return ""
+}
+
+// A representation of a Datastore kind.
+type KindExpression struct {
+	// The name of the kind.
+	Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+}
+
+func (m *KindExpression) Reset()                    { *m = KindExpression{} }
+func (m *KindExpression) String() string            { return proto.CompactTextString(m) }
+func (*KindExpression) ProtoMessage()               {}
+func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} }
+
+func (m *KindExpression) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Options defining a data set within Google Cloud Datastore.
+type DatastoreOptions struct {
+	// A partition ID identifies a grouping of entities. The grouping is always
+	// by project and namespace, however the namespace ID may be empty.
+	PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"`
+	// The kind to process.
+	Kind *KindExpression `protobuf:"bytes,2,opt,name=kind" json:"kind,omitempty"`
+}
+
+func (m *DatastoreOptions) Reset()                    { *m = DatastoreOptions{} }
+func (m *DatastoreOptions) String() string            { return proto.CompactTextString(m) }
+func (*DatastoreOptions) ProtoMessage()               {}
+func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} }
+
+func (m *DatastoreOptions) GetPartitionId() *PartitionId {
+	if m != nil {
+		return m.PartitionId
+	}
+	return nil
+}
+
+func (m *DatastoreOptions) GetKind() *KindExpression {
+	if m != nil {
+		return m.Kind
+	}
+	return nil
+}
+
+// Options defining a file or a set of files (path ending with *) within
+// a Google Cloud Storage bucket.
+type CloudStorageOptions struct {
+	FileSet *CloudStorageOptions_FileSet `protobuf:"bytes,1,opt,name=file_set,json=fileSet" json:"file_set,omitempty"`
+	// Max number of bytes to scan from a file. If a scanned file's size is bigger
+	// than this value then the rest of the bytes are omitted.
+	BytesLimitPerFile int64 `protobuf:"varint,4,opt,name=bytes_limit_per_file,json=bytesLimitPerFile" json:"bytes_limit_per_file,omitempty"`
+}
+
+func (m *CloudStorageOptions) Reset()                    { *m = CloudStorageOptions{} }
+func (m *CloudStorageOptions) String() string            { return proto.CompactTextString(m) }
+func (*CloudStorageOptions) ProtoMessage()               {}
+func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} }
+
+func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet {
+	if m != nil {
+		return m.FileSet
+	}
+	return nil
+}
+
+func (m *CloudStorageOptions) GetBytesLimitPerFile() int64 {
+	if m != nil {
+		return m.BytesLimitPerFile
+	}
+	return 0
+}
+
+// Set of files to scan.
+type CloudStorageOptions_FileSet struct {
+	// The url, in the format `gs://<bucket>/<path>`. Trailing wildcard in the
+	// path is allowed.
+	Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
+}
+
+func (m *CloudStorageOptions_FileSet) Reset()                    { *m = CloudStorageOptions_FileSet{} }
+func (m *CloudStorageOptions_FileSet) String() string            { return proto.CompactTextString(m) }
+func (*CloudStorageOptions_FileSet) ProtoMessage()               {}
+func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6, 0} }
+
+func (m *CloudStorageOptions_FileSet) GetUrl() string {
+	if m != nil {
+		return m.Url
+	}
+	return ""
+}
+
+// Options defining BigQuery table and row identifiers.
+type BigQueryOptions struct {
+	// Complete BigQuery table reference.
+	TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"`
+	// References to fields uniquely identifying rows within the table.
+	// Nested fields in the format, like `person.birthdate.year`, are allowed.
+	IdentifyingFields []*FieldId `protobuf:"bytes,2,rep,name=identifying_fields,json=identifyingFields" json:"identifying_fields,omitempty"`
+}
+
+func (m *BigQueryOptions) Reset()                    { *m = BigQueryOptions{} }
+func (m *BigQueryOptions) String() string            { return proto.CompactTextString(m) }
+func (*BigQueryOptions) ProtoMessage()               {}
+func (*BigQueryOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} }
+
+func (m *BigQueryOptions) GetTableReference() *BigQueryTable {
+	if m != nil {
+		return m.TableReference
+	}
+	return nil
+}
+
+func (m *BigQueryOptions) GetIdentifyingFields() []*FieldId {
+	if m != nil {
+		return m.IdentifyingFields
+	}
+	return nil
+}
+
+// Shared message indicating Cloud storage type.
+type StorageConfig struct {
+	// Types that are valid to be assigned to Type:
+	//	*StorageConfig_DatastoreOptions
+	//	*StorageConfig_CloudStorageOptions
+	//	*StorageConfig_BigQueryOptions
+	Type           isStorageConfig_Type          `protobuf_oneof:"type"`
+	TimespanConfig *StorageConfig_TimespanConfig `protobuf:"bytes,6,opt,name=timespan_config,json=timespanConfig" json:"timespan_config,omitempty"`
+}
+
+func (m *StorageConfig) Reset()                    { *m = StorageConfig{} }
+func (m *StorageConfig) String() string            { return proto.CompactTextString(m) }
+func (*StorageConfig) ProtoMessage()               {}
+func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} }
+
+type isStorageConfig_Type interface {
+	isStorageConfig_Type()
+}
+
+type StorageConfig_DatastoreOptions struct {
+	DatastoreOptions *DatastoreOptions `protobuf:"bytes,2,opt,name=datastore_options,json=datastoreOptions,oneof"`
+}
+type StorageConfig_CloudStorageOptions struct {
+	CloudStorageOptions *CloudStorageOptions `protobuf:"bytes,3,opt,name=cloud_storage_options,json=cloudStorageOptions,oneof"`
+}
+type StorageConfig_BigQueryOptions struct {
+	BigQueryOptions *BigQueryOptions `protobuf:"bytes,4,opt,name=big_query_options,json=bigQueryOptions,oneof"`
+}
+
+func (*StorageConfig_DatastoreOptions) isStorageConfig_Type()    {}
+func (*StorageConfig_CloudStorageOptions) isStorageConfig_Type() {}
+func (*StorageConfig_BigQueryOptions) isStorageConfig_Type()     {}
+
+func (m *StorageConfig) GetType() isStorageConfig_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *StorageConfig) GetDatastoreOptions() *DatastoreOptions {
+	if x, ok := m.GetType().(*StorageConfig_DatastoreOptions); ok {
+		return x.DatastoreOptions
+	}
+	return nil
+}
+
+func (m *StorageConfig) GetCloudStorageOptions() *CloudStorageOptions {
+	if x, ok := m.GetType().(*StorageConfig_CloudStorageOptions); ok {
+		return x.CloudStorageOptions
+	}
+	return nil
+}
+
+func (m *StorageConfig) GetBigQueryOptions() *BigQueryOptions {
+	if x, ok := m.GetType().(*StorageConfig_BigQueryOptions); ok {
+		return x.BigQueryOptions
+	}
+	return nil
+}
+
+func (m *StorageConfig) GetTimespanConfig() *StorageConfig_TimespanConfig {
+	if m != nil {
+		return m.TimespanConfig
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*StorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _StorageConfig_OneofMarshaler, _StorageConfig_OneofUnmarshaler, _StorageConfig_OneofSizer, []interface{}{
+		(*StorageConfig_DatastoreOptions)(nil),
+		(*StorageConfig_CloudStorageOptions)(nil),
+		(*StorageConfig_BigQueryOptions)(nil),
+	}
+}
+
+func _StorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*StorageConfig)
+	// type
+	switch x := m.Type.(type) {
+	case *StorageConfig_DatastoreOptions:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DatastoreOptions); err != nil {
+			return err
+		}
+	case *StorageConfig_CloudStorageOptions:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CloudStorageOptions); err != nil {
+			return err
+		}
+	case *StorageConfig_BigQueryOptions:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BigQueryOptions); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("StorageConfig.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _StorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*StorageConfig)
+	switch tag {
+	case 2: // type.datastore_options
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DatastoreOptions)
+		err := b.DecodeMessage(msg)
+		m.Type = &StorageConfig_DatastoreOptions{msg}
+		return true, err
+	case 3: // type.cloud_storage_options
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CloudStorageOptions)
+		err := b.DecodeMessage(msg)
+		m.Type = &StorageConfig_CloudStorageOptions{msg}
+		return true, err
+	case 4: // type.big_query_options
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BigQueryOptions)
+		err := b.DecodeMessage(msg)
+		m.Type = &StorageConfig_BigQueryOptions{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _StorageConfig_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*StorageConfig)
+	// type
+	switch x := m.Type.(type) {
+	case *StorageConfig_DatastoreOptions:
+		s := proto.Size(x.DatastoreOptions)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StorageConfig_CloudStorageOptions:
+		s := proto.Size(x.CloudStorageOptions)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StorageConfig_BigQueryOptions:
+		s := proto.Size(x.BigQueryOptions)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Configuration of the timespan of the items to include in scanning.
+// Currently only supported when inspecting Google Cloud Storage and BigQuery.
+type StorageConfig_TimespanConfig struct {
+	// Exclude files older than this value.
+	StartTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
+	// Exclude files newer than this value.
+	// If set to zero, no upper time limit is applied.
+	EndTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+	// Specification of the field containing the timestamp of scanned items.
+	// Required for data sources like Datastore or BigQuery.
+	// The valid data types of the timestamp field are:
+	// for BigQuery - timestamp, date, datetime;
+	// for Datastore - timestamp.
+	// Datastore entity will be scanned if the timestamp property does not exist
+	// or its value is empty or invalid.
+	TimestampField *FieldId `protobuf:"bytes,3,opt,name=timestamp_field,json=timestampField" json:"timestamp_field,omitempty"`
+	// When the job is started by a JobTrigger we will automatically figure out
+	// a valid start_time to avoid scanning files that have not been modified
+	// since the last time the JobTrigger executed. This will be based on the
+	// time of the execution of the last run of the JobTrigger.
+	EnableAutoPopulationOfTimespanConfig bool `protobuf:"varint,4,opt,name=enable_auto_population_of_timespan_config,json=enableAutoPopulationOfTimespanConfig" json:"enable_auto_population_of_timespan_config,omitempty"`
+}
+
+func (m *StorageConfig_TimespanConfig) Reset()                    { *m = StorageConfig_TimespanConfig{} }
+func (m *StorageConfig_TimespanConfig) String() string            { return proto.CompactTextString(m) }
+func (*StorageConfig_TimespanConfig) ProtoMessage()               {}
+func (*StorageConfig_TimespanConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8, 0} }
+
+func (m *StorageConfig_TimespanConfig) GetStartTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *StorageConfig_TimespanConfig) GetEndTime() *google_protobuf1.Timestamp {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *StorageConfig_TimespanConfig) GetTimestampField() *FieldId {
+	if m != nil {
+		return m.TimestampField
+	}
+	return nil
+}
+
+func (m *StorageConfig_TimespanConfig) GetEnableAutoPopulationOfTimespanConfig() bool {
+	if m != nil {
+		return m.EnableAutoPopulationOfTimespanConfig
+	}
+	return false
+}
+
+// Row key for identifying a record in BigQuery table.
+type BigQueryKey struct {
+	// Complete BigQuery table reference.
+	TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"`
+	// Absolute number of the row from the beginning of the table at the time
+	// of scanning.
+	RowNumber int64 `protobuf:"varint,2,opt,name=row_number,json=rowNumber" json:"row_number,omitempty"`
+}
+
+func (m *BigQueryKey) Reset()                    { *m = BigQueryKey{} }
+func (m *BigQueryKey) String() string            { return proto.CompactTextString(m) }
+func (*BigQueryKey) ProtoMessage()               {}
+func (*BigQueryKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} }
+
+func (m *BigQueryKey) GetTableReference() *BigQueryTable {
+	if m != nil {
+		return m.TableReference
+	}
+	return nil
+}
+
+func (m *BigQueryKey) GetRowNumber() int64 {
+	if m != nil {
+		return m.RowNumber
+	}
+	return 0
+}
+
+// Record key for a finding in Cloud Datastore.
+type DatastoreKey struct {
+	// Datastore entity key.
+	EntityKey *Key `protobuf:"bytes,1,opt,name=entity_key,json=entityKey" json:"entity_key,omitempty"`
+}
+
+func (m *DatastoreKey) Reset()                    { *m = DatastoreKey{} }
+func (m *DatastoreKey) String() string            { return proto.CompactTextString(m) }
+func (*DatastoreKey) ProtoMessage()               {}
+func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} }
+
+func (m *DatastoreKey) GetEntityKey() *Key {
+	if m != nil {
+		return m.EntityKey
+	}
+	return nil
+}
+
+// A unique identifier for a Datastore entity.
+// If a key's partition ID or any of its path kinds or names are
+// reserved/read-only, the key is reserved/read-only.
+// A reserved/read-only key is forbidden in certain documented contexts.
+type Key struct {
+	// Entities are partitioned into subsets, currently identified by a project
+	// ID and namespace ID.
+	// Queries are scoped to a single partition.
+	PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"`
+	// The entity path.
+	// An entity path consists of one or more elements composed of a kind and a
+	// string or numerical identifier, which identify entities. The first
+	// element identifies a _root entity_, the second element identifies
+	// a _child_ of the root entity, the third element identifies a child of the
+	// second entity, and so forth. The entities identified by all prefixes of
+	// the path are called the element's _ancestors_.
+	//
+	// A path can never be empty, and a path can have at most 100 elements.
+	Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"`
+}
+
+func (m *Key) Reset()                    { *m = Key{} }
+func (m *Key) String() string            { return proto.CompactTextString(m) }
+func (*Key) ProtoMessage()               {}
+func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} }
+
+func (m *Key) GetPartitionId() *PartitionId {
+	if m != nil {
+		return m.PartitionId
+	}
+	return nil
+}
+
+func (m *Key) GetPath() []*Key_PathElement {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+// A (kind, ID/name) pair used to construct a key path.
+//
+// If either name or ID is set, the element is complete.
+// If neither is set, the element is incomplete.
+type Key_PathElement struct {
+	// The kind of the entity.
+	// A kind matching regex `__.*__` is reserved/read-only.
+	// A kind must not contain more than 1500 bytes when UTF-8 encoded.
+	// Cannot be `""`.
+	Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"`
+	// The type of ID.
+	//
+	// Types that are valid to be assigned to IdType:
+	//	*Key_PathElement_Id
+	//	*Key_PathElement_Name
+	IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"`
+}
+
+func (m *Key_PathElement) Reset()                    { *m = Key_PathElement{} }
+func (m *Key_PathElement) String() string            { return proto.CompactTextString(m) }
+func (*Key_PathElement) ProtoMessage()               {}
+func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11, 0} }
+
+type isKey_PathElement_IdType interface {
+	isKey_PathElement_IdType()
+}
+
+type Key_PathElement_Id struct {
+	Id int64 `protobuf:"varint,2,opt,name=id,oneof"`
+}
+type Key_PathElement_Name struct {
+	Name string `protobuf:"bytes,3,opt,name=name,oneof"`
+}
+
+func (*Key_PathElement_Id) isKey_PathElement_IdType()   {}
+func (*Key_PathElement_Name) isKey_PathElement_IdType() {}
+
+func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType {
+	if m != nil {
+		return m.IdType
+	}
+	return nil
+}
+
+func (m *Key_PathElement) GetKind() string {
+	if m != nil {
+		return m.Kind
+	}
+	return ""
+}
+
+func (m *Key_PathElement) GetId() int64 {
+	if x, ok := m.GetIdType().(*Key_PathElement_Id); ok {
+		return x.Id
+	}
+	return 0
+}
+
+func (m *Key_PathElement) GetName() string {
+	if x, ok := m.GetIdType().(*Key_PathElement_Name); ok {
+		return x.Name
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{
+		(*Key_PathElement_Id)(nil),
+		(*Key_PathElement_Name)(nil),
+	}
+}
+
+func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Key_PathElement)
+	// id_type
+	switch x := m.IdType.(type) {
+	case *Key_PathElement_Id:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Id))
+	case *Key_PathElement_Name:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Name)
+	case nil:
+	default:
+		return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Key_PathElement)
+	switch tag {
+	case 2: // id_type.id
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.IdType = &Key_PathElement_Id{int64(x)}
+		return true, err
+	case 3: // id_type.name
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.IdType = &Key_PathElement_Name{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Key_PathElement_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Key_PathElement)
+	// id_type
+	switch x := m.IdType.(type) {
+	case *Key_PathElement_Id:
+		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Id))
+	case *Key_PathElement_Name:
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Name)))
+		n += len(x.Name)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message for a unique key indicating a record that contains a finding.
+type RecordKey struct {
+	// Types that are valid to be assigned to Type:
+	//	*RecordKey_DatastoreKey
+	//	*RecordKey_BigQueryKey
+	Type isRecordKey_Type `protobuf_oneof:"type"`
+}
+
+func (m *RecordKey) Reset()                    { *m = RecordKey{} }
+func (m *RecordKey) String() string            { return proto.CompactTextString(m) }
+func (*RecordKey) ProtoMessage()               {}
+func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} }
+
+type isRecordKey_Type interface {
+	isRecordKey_Type()
+}
+
+type RecordKey_DatastoreKey struct {
+	DatastoreKey *DatastoreKey `protobuf:"bytes,2,opt,name=datastore_key,json=datastoreKey,oneof"`
+}
+type RecordKey_BigQueryKey struct {
+	BigQueryKey *BigQueryKey `protobuf:"bytes,3,opt,name=big_query_key,json=bigQueryKey,oneof"`
+}
+
+func (*RecordKey_DatastoreKey) isRecordKey_Type() {}
+func (*RecordKey_BigQueryKey) isRecordKey_Type()  {}
+
+func (m *RecordKey) GetType() isRecordKey_Type {
+	if m != nil {
+		return m.Type
+	}
+	return nil
+}
+
+func (m *RecordKey) GetDatastoreKey() *DatastoreKey {
+	if x, ok := m.GetType().(*RecordKey_DatastoreKey); ok {
+		return x.DatastoreKey
+	}
+	return nil
+}
+
+func (m *RecordKey) GetBigQueryKey() *BigQueryKey {
+	if x, ok := m.GetType().(*RecordKey_BigQueryKey); ok {
+		return x.BigQueryKey
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*RecordKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _RecordKey_OneofMarshaler, _RecordKey_OneofUnmarshaler, _RecordKey_OneofSizer, []interface{}{
+		(*RecordKey_DatastoreKey)(nil),
+		(*RecordKey_BigQueryKey)(nil),
+	}
+}
+
+func _RecordKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*RecordKey)
+	// type
+	switch x := m.Type.(type) {
+	case *RecordKey_DatastoreKey:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DatastoreKey); err != nil {
+			return err
+		}
+	case *RecordKey_BigQueryKey:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BigQueryKey); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("RecordKey.Type has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _RecordKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*RecordKey)
+	switch tag {
+	case 2: // type.datastore_key
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DatastoreKey)
+		err := b.DecodeMessage(msg)
+		m.Type = &RecordKey_DatastoreKey{msg}
+		return true, err
+	case 3: // type.big_query_key
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BigQueryKey)
+		err := b.DecodeMessage(msg)
+		m.Type = &RecordKey_BigQueryKey{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _RecordKey_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*RecordKey)
+	// type
+	switch x := m.Type.(type) {
+	case *RecordKey_DatastoreKey:
+		s := proto.Size(x.DatastoreKey)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *RecordKey_BigQueryKey:
+		s := proto.Size(x.BigQueryKey)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Message defining the location of a BigQuery table. A table is uniquely
+// identified  by its project_id, dataset_id, and table_name. Within a query
+// a table is often referenced with a string in the format of:
+// `<project_id>:<dataset_id>.<table_id>` or
+// `<project_id>.<dataset_id>.<table_id>`.
+type BigQueryTable struct {
+	// The Google Cloud Platform project ID of the project containing the table.
+	// If omitted, project ID is inferred from the API call.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"`
+	// Dataset ID of the table.
+	DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"`
+	// Name of the table.
+	TableId string `protobuf:"bytes,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+}
+
+func (m *BigQueryTable) Reset()                    { *m = BigQueryTable{} }
+func (m *BigQueryTable) String() string            { return proto.CompactTextString(m) }
+func (*BigQueryTable) ProtoMessage()               {}
+func (*BigQueryTable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} }
+
+func (m *BigQueryTable) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+func (m *BigQueryTable) GetDatasetId() string {
+	if m != nil {
+		return m.DatasetId
+	}
+	return ""
+}
+
+func (m *BigQueryTable) GetTableId() string {
+	if m != nil {
+		return m.TableId
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*InfoType)(nil), "google.privacy.dlp.v2.InfoType")
+	proto.RegisterType((*CustomInfoType)(nil), "google.privacy.dlp.v2.CustomInfoType")
+	proto.RegisterType((*CustomInfoType_Dictionary)(nil), "google.privacy.dlp.v2.CustomInfoType.Dictionary")
+	proto.RegisterType((*CustomInfoType_Dictionary_WordList)(nil), "google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList")
+	proto.RegisterType((*CustomInfoType_Regex)(nil), "google.privacy.dlp.v2.CustomInfoType.Regex")
+	proto.RegisterType((*CustomInfoType_SurrogateType)(nil), "google.privacy.dlp.v2.CustomInfoType.SurrogateType")
+	proto.RegisterType((*CustomInfoType_DetectionRule)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule")
+	proto.RegisterType((*CustomInfoType_DetectionRule_Proximity)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.Proximity")
+	proto.RegisterType((*CustomInfoType_DetectionRule_LikelihoodAdjustment)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.LikelihoodAdjustment")
+	proto.RegisterType((*CustomInfoType_DetectionRule_HotwordRule)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.HotwordRule")
+	proto.RegisterType((*FieldId)(nil), "google.privacy.dlp.v2.FieldId")
+	proto.RegisterType((*PartitionId)(nil), "google.privacy.dlp.v2.PartitionId")
+	proto.RegisterType((*KindExpression)(nil), "google.privacy.dlp.v2.KindExpression")
+	proto.RegisterType((*DatastoreOptions)(nil), "google.privacy.dlp.v2.DatastoreOptions")
+	proto.RegisterType((*CloudStorageOptions)(nil), "google.privacy.dlp.v2.CloudStorageOptions")
+	proto.RegisterType((*CloudStorageOptions_FileSet)(nil), "google.privacy.dlp.v2.CloudStorageOptions.FileSet")
+	proto.RegisterType((*BigQueryOptions)(nil), "google.privacy.dlp.v2.BigQueryOptions")
+	proto.RegisterType((*StorageConfig)(nil), "google.privacy.dlp.v2.StorageConfig")
+	proto.RegisterType((*StorageConfig_TimespanConfig)(nil), "google.privacy.dlp.v2.StorageConfig.TimespanConfig")
+	proto.RegisterType((*BigQueryKey)(nil), "google.privacy.dlp.v2.BigQueryKey")
+	proto.RegisterType((*DatastoreKey)(nil), "google.privacy.dlp.v2.DatastoreKey")
+	proto.RegisterType((*Key)(nil), "google.privacy.dlp.v2.Key")
+	proto.RegisterType((*Key_PathElement)(nil), "google.privacy.dlp.v2.Key.PathElement")
+	proto.RegisterType((*RecordKey)(nil), "google.privacy.dlp.v2.RecordKey")
+	proto.RegisterType((*BigQueryTable)(nil), "google.privacy.dlp.v2.BigQueryTable")
+	proto.RegisterEnum("google.privacy.dlp.v2.Likelihood", Likelihood_name, Likelihood_value)
+}
+
+func init() { proto.RegisterFile("google/privacy/dlp/v2/storage.proto", fileDescriptor1) }
+
+var fileDescriptor1 = []byte{
+	// 1517 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xef, 0x6e, 0x1b, 0x37,
+	0x12, 0xd7, 0x4a, 0x96, 0x2d, 0x8d, 0xac, 0x3f, 0xa6, 0x9d, 0x83, 0xa2, 0x3b, 0x27, 0x8e, 0x92,
+	0xcb, 0xe5, 0x72, 0x80, 0x74, 0x75, 0x50, 0xa0, 0xee, 0x1f, 0x14, 0x96, 0xa5, 0x44, 0xaa, 0x1d,
+	0x5b, 0xa5, 0x1d, 0xa7, 0x69, 0x0d, 0x6c, 0x57, 0x22, 0x25, 0x33, 0x59, 0x2d, 0xb7, 0xbb, 0x94,
+	0x6d, 0xa1, 0xe8, 0x33, 0x14, 0x28, 0xfa, 0x08, 0x05, 0x8a, 0x16, 0x05, 0x0a, 0xf4, 0x63, 0xfb,
+	0x06, 0x7d, 0x88, 0x3e, 0x45, 0x1f, 0xa0, 0x20, 0xb9, 0xbb, 0x92, 0x1c, 0xab, 0x76, 0x82, 0x7c,
+	0xd2, 0xce, 0x70, 0x7e, 0xc3, 0xe1, 0x6f, 0x86, 0x33, 0x14, 0xdc, 0xee, 0x73, 0xde, 0xb7, 0x69,
+	0xd5, 0xf5, 0xd8, 0x89, 0xd5, 0x1d, 0x55, 0x89, 0xed, 0x56, 0x4f, 0xd6, 0xab, 0xbe, 0xe0, 0x9e,
+	0xd5, 0xa7, 0x15, 0xd7, 0xe3, 0x82, 0xa3, 0x6b, 0xda, 0xa8, 0x12, 0x18, 0x55, 0x88, 0xed, 0x56,
+	0x4e, 0xd6, 0x4b, 0xff, 0x0a, 0xb0, 0x96, 0xcb, 0xaa, 0x96, 0xe3, 0x70, 0x61, 0x09, 0xc6, 0x1d,
+	0x5f, 0x83, 0x4a, 0x37, 0x23, 0xcf, 0x5c, 0xf0, 0xce, 0xb0, 0x57, 0x15, 0x6c, 0x40, 0x7d, 0x61,
+	0x0d, 0x5c, 0x6d, 0x50, 0xbe, 0x01, 0xa9, 0x96, 0xd3, 0xe3, 0x07, 0x23, 0x97, 0x22, 0x04, 0x73,
+	0x8e, 0x35, 0xa0, 0x45, 0x63, 0xcd, 0xb8, 0x97, 0xc6, 0xea, 0xbb, 0xfc, 0x27, 0x40, 0x6e, 0x6b,
+	0xe8, 0x0b, 0x3e, 0x88, 0xcc, 0xde, 0x87, 0x34, 0x73, 0x7a, 0xdc, 0x14, 0x23, 0x57, 0xdb, 0x66,
+	0xd6, 0x6f, 0x56, 0x2e, 0x0c, 0xae, 0x12, 0x62, 0x70, 0x8a, 0x85, 0xe8, 0x4d, 0x00, 0x9b, 0xbd,
+	0xa0, 0x36, 0x3b, 0xe6, 0x9c, 0x14, 0xe7, 0xd7, 0x8c, 0x7b, 0xb9, 0xf5, 0x5b, 0x33, 0xe0, 0x3b,
+	0x91, 0x21, 0x9e, 0x00, 0x21, 0x0c, 0x40, 0x58, 0x57, 0x1e, 0xd3, 0xf2, 0x46, 0xc5, 0xb8, 0x8a,
+	0xe0, 0xff, 0x33, 0x5c, 0x4c, 0xc7, 0x5e, 0xa9, 0x47, 0xb8, 0x66, 0x0c, 0x4f, 0x78, 0x41, 0x5b,
+	0x90, 0xf4, 0x68, 0x9f, 0x9e, 0x15, 0x13, 0xca, 0xdd, 0xff, 0xae, 0xe6, 0x0e, 0x4b, 0x48, 0x33,
+	0x86, 0x35, 0x16, 0x1d, 0x41, 0xce, 0x1f, 0x7a, 0x1e, 0xef, 0x5b, 0x82, 0x6a, 0x7a, 0xe6, 0x94,
+	0xb7, 0x07, 0x57, 0xf3, 0xb6, 0x1f, 0x62, 0xa5, 0xd4, 0x8c, 0xe1, 0xac, 0x3f, 0xa9, 0x40, 0x47,
+	0x90, 0x27, 0x54, 0x50, 0x15, 0xb2, 0xe9, 0x0d, 0x6d, 0xea, 0x17, 0x17, 0xd6, 0x12, 0x57, 0x77,
+	0x5f, 0x0f, 0xc1, 0x78, 0x68, 0x53, 0x9c, 0x23, 0x93, 0xa2, 0x5f, 0xfa, 0xc6, 0x00, 0x18, 0xb3,
+	0x83, 0x3e, 0x81, 0xf4, 0x29, 0xf7, 0x88, 0x69, 0x33, 0x5f, 0x04, 0x49, 0xde, 0x78, 0x55, 0x8a,
+	0x2b, 0x4f, 0xb9, 0x47, 0x76, 0x98, 0x2f, 0x9a, 0x31, 0x9c, 0x3a, 0x0d, 0xbe, 0x4b, 0x6b, 0x90,
+	0x0a, 0xf5, 0x68, 0x05, 0x92, 0x52, 0xef, 0x17, 0x8d, 0xb5, 0xc4, 0xbd, 0x34, 0xd6, 0x42, 0x2d,
+	0x05, 0xf3, 0x3e, 0x1f, 0x7a, 0x5d, 0x5a, 0xba, 0x05, 0x49, 0x45, 0x31, 0x2a, 0xc2, 0x82, 0x6b,
+	0x09, 0x41, 0x3d, 0x27, 0xa8, 0xce, 0x50, 0x2c, 0xe5, 0x21, 0x3b, 0xc5, 0x5b, 0xe9, 0xd7, 0x24,
+	0x64, 0xa7, 0x8e, 0x8a, 0x08, 0x2c, 0x1e, 0x73, 0xa1, 0x8e, 0x23, 0x69, 0x0b, 0x8e, 0xf3, 0xe1,
+	0x6b, 0xb0, 0x56, 0x69, 0x6a, 0x3f, 0xf2, 0xbb, 0x19, 0xc3, 0x99, 0xe3, 0xb1, 0x58, 0xda, 0x87,
+	0x74, 0xdb, 0xe3, 0x67, 0x6c, 0xc0, 0xc4, 0x08, 0xdd, 0x86, 0xec, 0x29, 0x73, 0x08, 0x3f, 0x35,
+	0x3b, 0xb4, 0xc7, 0x3d, 0xbd, 0x67, 0x12, 0x2f, 0x6a, 0x65, 0x4d, 0xe9, 0xd0, 0x2d, 0x08, 0x64,
+	0xd3, 0xea, 0x09, 0xea, 0xa9, 0x4a, 0x4e, 0xe2, 0x8c, 0xd6, 0x6d, 0x4a, 0x55, 0xe9, 0x7b, 0x03,
+	0x56, 0xc6, 0xb7, 0x60, 0x93, 0x3c, 0x1f, 0xfa, 0x62, 0x40, 0x1d, 0x81, 0x76, 0xa1, 0xd0, 0x63,
+	0x67, 0x54, 0x26, 0x28, 0xba, 0x4c, 0xc6, 0x15, 0x2f, 0x53, 0x33, 0x86, 0xf3, 0x0a, 0x3c, 0x56,
+	0xa1, 0xb7, 0x60, 0xd9, 0xa3, 0xb6, 0x25, 0xd8, 0x09, 0x9d, 0x74, 0xa9, 0x42, 0x6a, 0xc6, 0x30,
+	0x0a, 0x17, 0xc7, 0x90, 0xda, 0x22, 0x80, 0x15, 0x05, 0x54, 0xfa, 0x2d, 0x0e, 0x99, 0x09, 0x76,
+	0x50, 0x1b, 0xb2, 0x11, 0xe9, 0xea, 0x62, 0x19, 0xaf, 0x7c, 0xb1, 0x70, 0x98, 0x36, 0x5d, 0x03,
+	0x9f, 0x41, 0xda, 0x0d, 0x09, 0x0e, 0x6e, 0xfd, 0x07, 0xaf, 0x93, 0xc3, 0x28, 0x4b, 0x78, 0xec,
+	0x0f, 0x7d, 0x05, 0xd7, 0xc6, 0xc7, 0x36, 0xc7, 0xe7, 0x0a, 0xfa, 0x41, 0xf3, 0x75, 0x36, 0xba,
+	0x28, 0x71, 0x78, 0xc5, 0xbe, 0x40, 0x5b, 0x9b, 0x87, 0x39, 0xd9, 0x2f, 0xc2, 0xdf, 0xf2, 0x2a,
+	0x2c, 0x3c, 0x64, 0xd4, 0x26, 0x2d, 0x72, 0x61, 0x57, 0xde, 0x83, 0x4c, 0xdb, 0xf2, 0x04, 0x93,
+	0x5b, 0xb5, 0x08, 0x5a, 0x05, 0x70, 0x3d, 0xfe, 0x9c, 0x76, 0x85, 0xc9, 0x74, 0xce, 0xd2, 0xea,
+	0x6c, 0x52, 0xd3, 0x22, 0xb2, 0xce, 0x24, 0xca, 0x77, 0xad, 0x2e, 0x95, 0x06, 0x73, 0xca, 0x20,
+	0x13, 0xe9, 0x5a, 0xa4, 0x7c, 0x07, 0x72, 0xdb, 0xcc, 0x21, 0x8d, 0x33, 0xd7, 0xa3, 0xbe, 0xcf,
+	0xb8, 0x73, 0xe1, 0xb6, 0xdf, 0x1a, 0x50, 0xa8, 0x5b, 0xc2, 0x92, 0x83, 0x89, 0xee, 0xb9, 0x6a,
+	0xd0, 0xa0, 0x06, 0x2c, 0xba, 0x61, 0x2c, 0xd2, 0xbb, 0xce, 0x73, 0x79, 0x06, 0x61, 0x13, 0x61,
+	0xe3, 0x8c, 0x3b, 0x71, 0x86, 0x0d, 0x98, 0x7b, 0xc1, 0x1c, 0x12, 0x24, 0xf6, 0xdf, 0x33, 0xe0,
+	0xd3, 0x41, 0x62, 0x05, 0x29, 0xff, 0x62, 0xc0, 0xf2, 0x96, 0xcd, 0x87, 0x64, 0x5f, 0x0f, 0xcc,
+	0x30, 0xb2, 0xc7, 0x90, 0xea, 0x31, 0x9b, 0x9a, 0x3e, 0x0d, 0x5b, 0xd8, 0xfa, 0xac, 0x34, 0xbe,
+	0x8c, 0xae, 0x3c, 0x64, 0x36, 0xdd, 0xa7, 0x02, 0x2f, 0xf4, 0xf4, 0x07, 0xaa, 0xc2, 0x4a, 0x67,
+	0x24, 0xa8, 0x6f, 0xda, 0xb2, 0x64, 0x4c, 0x97, 0x7a, 0xa6, 0x5c, 0x52, 0x74, 0x26, 0xf0, 0x92,
+	0x5a, 0xdb, 0x91, 0x4b, 0x6d, 0xea, 0x49, 0x70, 0xe9, 0x9f, 0x32, 0x89, 0x1a, 0x5b, 0x80, 0xc4,
+	0xd0, 0xb3, 0x03, 0x32, 0xe5, 0x67, 0xf9, 0x67, 0x03, 0xf2, 0x35, 0xd6, 0xff, 0x78, 0x48, 0xbd,
+	0xd1, 0x38, 0xe0, 0xbc, 0xb0, 0x3a, 0x36, 0x35, 0x3d, 0xda, 0xa3, 0x1e, 0x75, 0xba, 0x61, 0xaf,
+	0xba, 0x33, 0x23, 0xee, 0xd0, 0xc1, 0x81, 0x44, 0xe1, 0x9c, 0x02, 0xe3, 0x10, 0x8b, 0x1e, 0x03,
+	0x62, 0x84, 0x3a, 0x82, 0xf5, 0x46, 0xcc, 0xe9, 0x9b, 0x3d, 0x59, 0x50, 0x7e, 0x31, 0xae, 0x66,
+	0xc6, 0x8d, 0x19, 0x1e, 0x83, 0xaa, 0xc3, 0x4b, 0x13, 0x48, 0xa5, 0xf3, 0xcb, 0x3f, 0x25, 0x21,
+	0x1b, 0x70, 0xb4, 0xc5, 0x9d, 0x1e, 0xeb, 0xa3, 0x43, 0x58, 0x22, 0x61, 0x39, 0x98, 0x5c, 0x1f,
+	0x22, 0x48, 0xe0, 0x7f, 0x66, 0xf8, 0x3f, 0x5f, 0x3e, 0xcd, 0x18, 0x2e, 0x90, 0xf3, 0x25, 0xf5,
+	0x39, 0x5c, 0xeb, 0xca, 0x8c, 0x98, 0xc1, 0x0b, 0x28, 0xf2, 0xad, 0x2f, 0xe3, 0xfd, 0xab, 0x67,
+	0xb1, 0x19, 0xc3, 0xcb, 0xdd, 0x0b, 0x4a, 0xe3, 0x00, 0x96, 0x3a, 0xac, 0x6f, 0x7e, 0x21, 0xc9,
+	0x8b, 0xbc, 0xeb, 0x61, 0x7d, 0xf7, 0x12, 0xae, 0xc7, 0x9e, 0xf3, 0x9d, 0x73, 0xf9, 0x3b, 0x82,
+	0xbc, 0x7a, 0x5f, 0xb9, 0x96, 0x63, 0x76, 0x15, 0x45, 0xea, 0x81, 0x33, 0x7b, 0x42, 0x4f, 0xd1,
+	0x59, 0x39, 0x08, 0xb0, 0x5a, 0xc4, 0x39, 0x31, 0x25, 0x97, 0xbe, 0x8b, 0x43, 0x6e, 0xda, 0x04,
+	0x6d, 0x00, 0xf8, 0xc2, 0xf2, 0x84, 0x29, 0x4d, 0x83, 0x5a, 0x29, 0x8d, 0xf7, 0xd2, 0x6f, 0x3e,
+	0xed, 0x57, 0xbe, 0xf9, 0x70, 0x5a, 0x59, 0x4b, 0x19, 0xbd, 0x0d, 0x29, 0xea, 0x10, 0x0d, 0x8c,
+	0x5f, 0x0a, 0x5c, 0xa0, 0x0e, 0x51, 0xb0, 0x47, 0xc1, 0x11, 0xa5, 0x56, 0x57, 0x54, 0x90, 0x94,
+	0xcb, 0x0a, 0x2a, 0x17, 0xc1, 0x94, 0x06, 0x3d, 0x85, 0xff, 0x52, 0x47, 0x15, 0xbb, 0x35, 0x14,
+	0xdc, 0x74, 0xb9, 0x3b, 0xb4, 0xd5, 0xd3, 0xd5, 0xe4, 0x3d, 0xf3, 0x3c, 0x8b, 0x32, 0x33, 0x29,
+	0x7c, 0x47, 0x03, 0x36, 0x87, 0x82, 0xb7, 0x23, 0xf3, 0xbd, 0xde, 0x34, 0x27, 0x51, 0x0b, 0xfd,
+	0x12, 0x32, 0x61, 0xca, 0xb6, 0xe9, 0xe8, 0x4d, 0xdf, 0xad, 0x55, 0x00, 0x8f, 0x9f, 0x9a, 0xce,
+	0x70, 0xd0, 0x09, 0x26, 0x77, 0x02, 0xa7, 0x3d, 0x7e, 0xba, 0xab, 0x14, 0xe5, 0x16, 0x2c, 0x46,
+	0x95, 0x2e, 0x77, 0xdf, 0x00, 0x90, 0xd7, 0x49, 0x8c, 0xcc, 0x17, 0x74, 0xf4, 0x72, 0xa2, 0xa6,
+	0x7b, 0x1c, 0x1d, 0xe1, 0xb4, 0xb6, 0xde, 0xa6, 0xa3, 0xf2, 0x1f, 0x06, 0x24, 0xa4, 0x8b, 0x37,
+	0xd4, 0x67, 0xdf, 0x85, 0x39, 0xd7, 0x12, 0xc7, 0x41, 0x1b, 0xb8, 0x3b, 0x3b, 0x86, 0x4a, 0xdb,
+	0x12, 0xc7, 0x0d, 0x9b, 0xaa, 0xa9, 0xa5, 0x30, 0xa5, 0x03, 0x39, 0x76, 0x22, 0xa5, 0x1c, 0x11,
+	0xaa, 0x65, 0x07, 0x23, 0x42, 0x7e, 0xa3, 0x02, 0xc4, 0x83, 0x11, 0x94, 0x68, 0xc6, 0x70, 0x9c,
+	0x11, 0xb4, 0x12, 0x0c, 0x12, 0x59, 0x26, 0xe9, 0x66, 0x4c, 0x8f, 0x92, 0x5a, 0x1a, 0x16, 0x18,
+	0x51, 0x6f, 0xe4, 0xf2, 0x0f, 0x06, 0xa4, 0x31, 0xed, 0x72, 0x8f, 0xc8, 0x63, 0x7e, 0x04, 0xd9,
+	0x71, 0x4f, 0x91, 0x64, 0xe9, 0xe2, 0xbc, 0x7d, 0x59, 0x3f, 0xd9, 0xa6, 0xf2, 0x49, 0xbf, 0x48,
+	0x26, 0x59, 0x6f, 0x42, 0x76, 0x7c, 0xcb, 0xa5, 0xaf, 0xc4, 0xdf, 0x72, 0x36, 0x51, 0x2e, 0xf2,
+	0x71, 0xd7, 0x19, 0x8b, 0x51, 0x51, 0x1d, 0x43, 0x76, 0xaa, 0x2e, 0xce, 0x8d, 0x5e, 0xe3, 0xfc,
+	0xe8, 0x5d, 0x05, 0x50, 0x11, 0xd1, 0xc9, 0xc9, 0x1c, 0x68, 0x5a, 0x04, 0x5d, 0x87, 0x94, 0x2e,
+	0x4a, 0xa6, 0xaf, 0x51, 0x1a, 0x2f, 0x28, 0xb9, 0x45, 0xee, 0x0b, 0x80, 0x89, 0xe7, 0x59, 0x09,
+	0xfe, 0xb1, 0xd3, 0xda, 0x6e, 0xec, 0xb4, 0x9a, 0x7b, 0x7b, 0x75, 0xf3, 0xc9, 0xee, 0x7e, 0xbb,
+	0xb1, 0xd5, 0x7a, 0xd8, 0x6a, 0xd4, 0x0b, 0x31, 0xb4, 0x04, 0xd9, 0xc3, 0x06, 0x7e, 0x66, 0x3e,
+	0xd9, 0x55, 0x26, 0xcf, 0x0a, 0x06, 0x5a, 0x84, 0x54, 0x24, 0xc5, 0xa5, 0xd4, 0xde, 0xdb, 0xdf,
+	0x6f, 0xd5, 0x76, 0x1a, 0x85, 0x04, 0x02, 0x98, 0x0f, 0x56, 0xe6, 0x50, 0x1e, 0x32, 0x0a, 0x1a,
+	0x28, 0x92, 0xb5, 0xaf, 0x0d, 0xb8, 0xde, 0xe5, 0x83, 0x8b, 0x09, 0xaa, 0x41, 0xdd, 0x76, 0x83,
+	0x96, 0xd5, 0x36, 0x3e, 0x7d, 0x27, 0x30, 0xea, 0x73, 0xdb, 0x72, 0xfa, 0x15, 0xee, 0xf5, 0xab,
+	0x7d, 0xea, 0xa8, 0xe6, 0x51, 0xd5, 0x4b, 0x96, 0xcb, 0xfc, 0x73, 0x7f, 0x6a, 0xdf, 0x23, 0xb6,
+	0xfb, 0x63, 0x7c, 0xf9, 0x91, 0x86, 0xaa, 0x8e, 0x5d, 0xa9, 0xdb, 0x6e, 0xe5, 0x70, 0xfd, 0xf7,
+	0x50, 0x7b, 0xa4, 0xb4, 0x47, 0x75, 0xdb, 0x3d, 0x3a, 0x5c, 0xef, 0xcc, 0x2b, 0x87, 0x0f, 0xfe,
+	0x0a, 0x00, 0x00, 0xff, 0xff, 0x23, 0xed, 0x0b, 0x18, 0x24, 0x0f, 0x00, 0x00,
+}
-- 
GitLab