diff --git a/api/api.go b/api/api.go
index ba2e0bb..d419c40 100644
--- a/api/api.go
+++ b/api/api.go
@@ -783,7 +783,7 @@
 
 	var resp empty.Empty
 	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
-		return fmt.Errorf("DeleteWaitlistEntry: Could not parse HTTP response to pb3: %v", err)
+		return fmt.Errorf("DeleteWaitlistEntry: Could not parse HTTP response to pb3: %v. Body should be: {}", err)
 	}
 
 	return nil
diff --git a/feeds/feeds.pb.go b/feeds/feeds.pb.go
index d64e87c..0ce2445 100644
--- a/feeds/feeds.pb.go
+++ b/feeds/feeds.pb.go
@@ -1,39 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
-// source: github.com/maps-booking-v3/feeds/feeds.proto
+// source: feeds.proto
 
-/*
-Package maps_booking_feeds is a generated protocol buffer package.
-
-It is generated from these files:
-	github.com/maps-booking-v3/feeds/feeds.proto
-
-It has these top-level messages:
-	FeedMetadata
-	AvailabilityFeed
-	ServiceAvailability
-	Availability
-	Resources
-	TimeRange
-	ServiceFeed
-	Service
-	Price
-	SchedulingRules
-	TaxRate
-	ServiceIntakeFormField
-	ServiceIntakeForm
-	Deposit
-	NoShowFee
-	ActionLink
-	TicketType
-	RelatedMedia
-	ServiceAttributeValueId
-	WaitlistRules
-*/
 package maps_booking_feeds
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -44,7 +18,7 @@
 // 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
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 // Defines how a total price is determined from an availability.
 type PriceType int32
@@ -65,6 +39,7 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
+
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -73,7 +48,10 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
-func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (PriceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0}
+}
 
 // Defines whether a credit card is required in order to book an appointment.
 type RequireCreditCard int32
@@ -98,6 +76,7 @@
 	1: "REQUIRE_CREDIT_CARD_CONDITIONAL",
 	2: "REQUIRE_CREDIT_CARD_ALWAYS",
 }
+
 var RequireCreditCard_value = map[string]int32{
 	"REQUIRE_CREDIT_CARD_UNSPECIFIED": 0,
 	"REQUIRE_CREDIT_CARD_CONDITIONAL": 1,
@@ -107,7 +86,10 @@
 func (x RequireCreditCard) String() string {
 	return proto.EnumName(RequireCreditCard_name, int32(x))
 }
-func (RequireCreditCard) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (RequireCreditCard) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{1}
+}
 
 // The platform that the action is performed on. Web application is the general
 // fallback. It is recommended to have at least one ActionLink with
@@ -135,6 +117,7 @@
 	3: "ACTION_PLATFORM_ANDROID",
 	4: "ACTION_PLATFORM_IOS",
 }
+
 var ActionPlatform_value = map[string]int32{
 	"ACTION_PLATFORM_UNSPECIFIED":     0,
 	"ACTION_PLATFORM_WEB_APPLICATION": 1,
@@ -146,7 +129,10 @@
 func (x ActionPlatform) String() string {
 	return proto.EnumName(ActionPlatform_name, int32(x))
 }
-func (ActionPlatform) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (ActionPlatform) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{2}
+}
 
 type FeedMetadata_ProcessingInstruction int32
 
@@ -167,6 +153,7 @@
 	1: "PROCESS_AS_COMPLETE",
 	2: "PROCESS_AS_INCREMENTAL",
 }
+
 var FeedMetadata_ProcessingInstruction_value = map[string]int32{
 	"PROCESS_UNKNOWN":        0,
 	"PROCESS_AS_COMPLETE":    1,
@@ -176,8 +163,42 @@
 func (x FeedMetadata_ProcessingInstruction) String() string {
 	return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x))
 }
+
 func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{0, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0, 0}
+}
+
+// The confirmation modes used when booking availabilities.
+type Availability_ConfirmationMode int32
+
+const (
+	// The confirmation mode was not specified.
+	// Synchronous confirmation will be assumed.
+	Availability_CONFIRMATION_MODE_UNSPECIFIED Availability_ConfirmationMode = 0
+	// Bookings for this availability will be confirmed synchronously.
+	Availability_CONFIRMATION_MODE_SYNCHRONOUS Availability_ConfirmationMode = 1
+	// Bookings for this availability will be confirmed asynchronously.
+	Availability_CONFIRMATION_MODE_ASYNCHRONOUS Availability_ConfirmationMode = 2
+)
+
+var Availability_ConfirmationMode_name = map[int32]string{
+	0: "CONFIRMATION_MODE_UNSPECIFIED",
+	1: "CONFIRMATION_MODE_SYNCHRONOUS",
+	2: "CONFIRMATION_MODE_ASYNCHRONOUS",
+}
+
+var Availability_ConfirmationMode_value = map[string]int32{
+	"CONFIRMATION_MODE_UNSPECIFIED":  0,
+	"CONFIRMATION_MODE_SYNCHRONOUS":  1,
+	"CONFIRMATION_MODE_ASYNCHRONOUS": 2,
+}
+
+func (x Availability_ConfirmationMode) String() string {
+	return proto.EnumName(Availability_ConfirmationMode_name, int32(x))
+}
+
+func (Availability_ConfirmationMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 0}
 }
 
 // Enum to indicate the prepayment type.
@@ -201,6 +222,7 @@
 	2: "OPTIONAL",
 	3: "NOT_SUPPORTED",
 }
+
 var Service_PrepaymentType_value = map[string]int32{
 	"PREPAYMENT_TYPE_UNSPECIFIED": 0,
 	"REQUIRED":                    1,
@@ -211,7 +233,10 @@
 func (x Service_PrepaymentType) String() string {
 	return proto.EnumName(Service_PrepaymentType_name, int32(x))
 }
-func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} }
+
+func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 0}
+}
 
 type Service_ServiceType int32
 
@@ -230,6 +255,7 @@
 	3: "SERVICE_TYPE_EVENT_TICKET",
 	4: "SERVICE_TYPE_TRIP_TOUR",
 }
+
 var Service_ServiceType_value = map[string]int32{
 	"SERVICE_TYPE_UNSPECIFIED":        0,
 	"SERVICE_TYPE_DINING_RESERVATION": 1,
@@ -241,7 +267,10 @@
 func (x Service_ServiceType) String() string {
 	return proto.EnumName(Service_ServiceType_name, int32(x))
 }
-func (Service_ServiceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 1} }
+
+func (Service_ServiceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 1}
+}
 
 // The admission policy of this service.
 type SchedulingRules_AdmissionPolicy int32
@@ -285,6 +314,7 @@
 	2: "TIME_FLEXIBLE",
 	3: "TIMED_ENTRY_WITH_FLEXIBLE_DURATION",
 }
+
 var SchedulingRules_AdmissionPolicy_value = map[string]int32{
 	"ADMISSION_POLICY_UNSPECIFIED":       0,
 	"TIME_STRICT":                        1,
@@ -295,8 +325,9 @@
 func (x SchedulingRules_AdmissionPolicy) String() string {
 	return proto.EnumName(SchedulingRules_AdmissionPolicy_name, int32(x))
 }
+
 func (SchedulingRules_AdmissionPolicy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{9, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{9, 0}
 }
 
 // Enum to indicate the type of field.
@@ -328,6 +359,7 @@
 	5: "DROPDOWN",
 	6: "BOOLEAN",
 }
+
 var ServiceIntakeFormField_FieldType_value = map[string]int32{
 	"FIELD_TYPE_UNSPECIFIED": 0,
 	"SHORT_ANSWER":           1,
@@ -341,8 +373,9 @@
 func (x ServiceIntakeFormField_FieldType) String() string {
 	return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x))
 }
+
 func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{11, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{11, 0}
 }
 
 // Enum to indicate the type of this media source. Only photos are supported.
@@ -361,6 +394,7 @@
 	0: "TYPE_UNSPECIFIED",
 	1: "PHOTO",
 }
+
 var RelatedMedia_MediaType_value = map[string]int32{
 	"TYPE_UNSPECIFIED": 0,
 	"PHOTO":            1,
@@ -369,12 +403,15 @@
 func (x RelatedMedia_MediaType) String() string {
 	return proto.EnumName(RelatedMedia_MediaType_name, int32(x))
 }
-func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 0} }
+
+func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0}
+}
 
 type FeedMetadata struct {
 	// Instructs us how to process the feed: either as a shard of a complete feed,
 	// or as a shard of an incremental update.
-	ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"`
+	ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,proto3,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"`
 	// The current shard and total number of shards for this feed.
 	//
 	// Shard number is assumed to be zero-based.
@@ -383,8 +420,8 @@
 	//
 	// Shards do not need to be transferred in order, and they may not be
 	// processed in order.
-	ShardNumber int32 `protobuf:"varint,2,opt,name=shard_number,json=shardNumber" json:"shard_number,omitempty"`
-	TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards" json:"total_shards,omitempty"`
+	ShardNumber int32 `protobuf:"varint,2,opt,name=shard_number,json=shardNumber,proto3" json:"shard_number,omitempty"`
+	TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards,proto3" json:"total_shards,omitempty"`
 	// An identifier that must be consistent across all shards in a feed.
 	// This value must be globally unique across each feed type.
 	//
@@ -396,17 +433,40 @@
 	// total_shards).
 	//
 	// Feeds that span multiple shards must set this nonce to the same value.
-	Nonce uint64 `protobuf:"varint,5,opt,name=nonce" json:"nonce,omitempty"`
+	Nonce uint64 `protobuf:"varint,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
 	// The timestamp at which this feed shard was generated.
 	//
 	// In Unix time format (seconds since the epoch).
-	GenerationTimestamp int64 `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp" json:"generation_timestamp,omitempty"`
+	GenerationTimestamp  int64    `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp,proto3" json:"generation_timestamp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *FeedMetadata) Reset()                    { *m = FeedMetadata{} }
-func (m *FeedMetadata) String() string            { return proto.CompactTextString(m) }
-func (*FeedMetadata) ProtoMessage()               {}
-func (*FeedMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+func (m *FeedMetadata) Reset()         { *m = FeedMetadata{} }
+func (m *FeedMetadata) String() string { return proto.CompactTextString(m) }
+func (*FeedMetadata) ProtoMessage()    {}
+func (*FeedMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0}
+}
+
+func (m *FeedMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMetadata.Unmarshal(m, b)
+}
+func (m *FeedMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMetadata.Marshal(b, m, deterministic)
+}
+func (m *FeedMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMetadata.Merge(m, src)
+}
+func (m *FeedMetadata) XXX_Size() int {
+	return xxx_messageInfo_FeedMetadata.Size(m)
+}
+func (m *FeedMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMetadata proto.InternalMessageInfo
 
 func (m *FeedMetadata) GetProcessingInstruction() FeedMetadata_ProcessingInstruction {
 	if m != nil {
@@ -444,14 +504,37 @@
 }
 
 type AvailabilityFeed struct {
-	Metadata            *FeedMetadata          `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
-	ServiceAvailability []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability" json:"service_availability,omitempty"`
+	Metadata             *FeedMetadata          `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	ServiceAvailability  []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability,proto3" json:"service_availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
 }
 
-func (m *AvailabilityFeed) Reset()                    { *m = AvailabilityFeed{} }
-func (m *AvailabilityFeed) String() string            { return proto.CompactTextString(m) }
-func (*AvailabilityFeed) ProtoMessage()               {}
-func (*AvailabilityFeed) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+func (m *AvailabilityFeed) Reset()         { *m = AvailabilityFeed{} }
+func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) }
+func (*AvailabilityFeed) ProtoMessage()    {}
+func (*AvailabilityFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{1}
+}
+
+func (m *AvailabilityFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AvailabilityFeed.Unmarshal(m, b)
+}
+func (m *AvailabilityFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AvailabilityFeed.Marshal(b, m, deterministic)
+}
+func (m *AvailabilityFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AvailabilityFeed.Merge(m, src)
+}
+func (m *AvailabilityFeed) XXX_Size() int {
+	return xxx_messageInfo_AvailabilityFeed.Size(m)
+}
+func (m *AvailabilityFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_AvailabilityFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AvailabilityFeed proto.InternalMessageInfo
 
 func (m *AvailabilityFeed) GetMetadata() *FeedMetadata {
 	if m != nil {
@@ -491,8 +574,8 @@
 	// is interpreted to mean all time up to the end_timestamp_restrict.
 	//
 	// In Unix time format (seconds since the epoch).
-	StartTimestampRestrict int64 `protobuf:"varint,1,opt,name=start_timestamp_restrict,json=startTimestampRestrict" json:"start_timestamp_restrict,omitempty"`
-	EndTimestampRestrict   int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict" json:"end_timestamp_restrict,omitempty"`
+	StartTimestampRestrict int64 `protobuf:"varint,1,opt,name=start_timestamp_restrict,json=startTimestampRestrict,proto3" json:"start_timestamp_restrict,omitempty"`
+	EndTimestampRestrict   int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict,proto3" json:"end_timestamp_restrict,omitempty"`
 	// If provided, the timestamp restricts will be applied only to the given
 	// merchant or service.
 	//
@@ -502,19 +585,42 @@
 	//
 	// Leaving these fields unset, or setting these to the empty string or null,
 	// is interpreted to mean that no restrict is intended.
-	MerchantIdRestrict string `protobuf:"bytes,3,opt,name=merchant_id_restrict,json=merchantIdRestrict" json:"merchant_id_restrict,omitempty"`
-	ServiceIdRestrict  string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict" json:"service_id_restrict,omitempty"`
+	MerchantIdRestrict string `protobuf:"bytes,3,opt,name=merchant_id_restrict,json=merchantIdRestrict,proto3" json:"merchant_id_restrict,omitempty"`
+	ServiceIdRestrict  string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict,proto3" json:"service_id_restrict,omitempty"`
 	// Setting resources_restrict further restricts the scope of the update to
 	// just this set of resources. All id fields of the resources must match
 	// exactly.
-	ResourcesRestrict *Resources      `protobuf:"bytes,6,opt,name=resources_restrict,json=resourcesRestrict" json:"resources_restrict,omitempty"`
-	Availability      []*Availability `protobuf:"bytes,5,rep,name=availability" json:"availability,omitempty"`
+	ResourcesRestrict    *Resources      `protobuf:"bytes,6,opt,name=resources_restrict,json=resourcesRestrict,proto3" json:"resources_restrict,omitempty"`
+	Availability         []*Availability `protobuf:"bytes,5,rep,name=availability,proto3" json:"availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *ServiceAvailability) Reset()                    { *m = ServiceAvailability{} }
-func (m *ServiceAvailability) String() string            { return proto.CompactTextString(m) }
-func (*ServiceAvailability) ProtoMessage()               {}
-func (*ServiceAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+func (m *ServiceAvailability) Reset()         { *m = ServiceAvailability{} }
+func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) }
+func (*ServiceAvailability) ProtoMessage()    {}
+func (*ServiceAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{2}
+}
+
+func (m *ServiceAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceAvailability.Unmarshal(m, b)
+}
+func (m *ServiceAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceAvailability.Marshal(b, m, deterministic)
+}
+func (m *ServiceAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceAvailability.Merge(m, src)
+}
+func (m *ServiceAvailability) XXX_Size() int {
+	return xxx_messageInfo_ServiceAvailability.Size(m)
+}
+func (m *ServiceAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceAvailability proto.InternalMessageInfo
 
 func (m *ServiceAvailability) GetStartTimestampRestrict() int64 {
 	if m != nil {
@@ -573,16 +679,16 @@
 //
 type Availability struct {
 	// An opaque string from an aggregator to identify a merchant. (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// An opaque string from aggregator to identify a service of the
 	// merchant. (required)
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of this availability, using epoch time in seconds in UTC.
-	// (required)
-	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	//(required)
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the service in seconds, e.g. 30 minutes for a chair massage.
 	// (required)
-	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Number of total spots and open spots of this availability.
 	// E.g. a Yoga class of 10 spots with 3 booked.
 	//   availability {spots_total: 10, spots_open: 7 ...}
@@ -594,12 +700,12 @@
 	//       implies spots_total=1 and spots_open=1. A ScheduleException implies
 	//       spots_total=1 and spots_open=0.
 	// (both required if recurrence not set)
-	SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal" json:"spots_total,omitempty"`
-	SpotsOpen  int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
+	SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal,proto3" json:"spots_total,omitempty"`
+	SpotsOpen  int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
 	// An optional opaque string to identify this availability slot. If set, it
 	// will be included in the requests that book/update/cancel appointments.
 	// (optional)
-	AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
 	// Optional resources used to disambiguate this availability slot from
 	// others when different staff, room, or party_size values are part
 	// of the service.
@@ -610,7 +716,7 @@
 	//  availability { resources { staff_id: "2" staff_name: "John" }
 	//                 spots_total: 5 spots_open: 2 }
 	// (optional)
-	Resources *Resources `protobuf:"bytes,8,opt,name=resources" json:"resources,omitempty"`
+	Resources *Resources `protobuf:"bytes,8,opt,name=resources,proto3" json:"resources,omitempty"`
 	// A list of IDs referencing the payment options which can be used to pay
 	// for this slot. The actual payment options are defined at the Merchant
 	// level, and can also be shared among multiple Merchants.
@@ -623,28 +729,28 @@
 	// one element. Multiple payment_option_id are still allowed at the Service
 	// level, but an override at the availability slot level, is limited to a
 	// single payment_option_id. (optional)
-	PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+	PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
 	// The recurrence information for the availability, representing more than one
 	// start time. A recurrence should contain appointments for one working day.
 	// (optional)
-	Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence" json:"recurrence,omitempty"`
+	Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence,proto3" json:"recurrence,omitempty"`
 	// Times when this service cannot be scheduled. To limit the number of
 	// schedule_exception messages, consider joining adjacent exceptions.
 	// (optional)
-	ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException" json:"schedule_exception,omitempty"`
+	ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException,proto3" json:"schedule_exception,omitempty"`
 	// Defines how a deposit may be charged to the user. Overrides the service
 	// deposit if one was specified. Setting this to an empty Deposit message
 	// removes any service-level deposit. (optional)
-	Deposit *Deposit `protobuf:"bytes,12,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,12,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. Overrides the
 	// service no show fee if one was specified. Setting this to an empty
 	// NoShowFee message removes any service-level no show fee. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,13,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,13,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
 	// Indicates whether the user must provide a credit card in order to book this
 	// availability slot.
 	// If the value is not set, it is inherited from the service level if it's set
 	// there. (optional)
-	RequireCreditCard RequireCreditCard `protobuf:"varint,14,opt,name=require_credit_card,json=requireCreditCard,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
+	RequireCreditCard RequireCreditCard `protobuf:"varint,14,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
 	// Indicates a list of supported ticket types for this availability slot. If
 	// unset, all ticket types in the parent service are available for this slot.
 	// Note that the values of this field must be defined in the parent service.
@@ -674,16 +780,46 @@
 	//   `availability {...}' (do not set ticket_type_id in this slot).
 	//
 	//  (optional)
-	TicketTypeId []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
+	TicketTypeId []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
 	// Availability scheduling rules. If fields are populated, they will override
 	// any corresponding scheduling rules on the service-level SchedulingRules.
-	SchedulingRuleOverrides *Availability_SchedulingRuleOverrides `protobuf:"bytes,16,opt,name=scheduling_rule_overrides,json=schedulingRuleOverrides" json:"scheduling_rule_overrides,omitempty"`
+	SchedulingRuleOverrides *Availability_SchedulingRuleOverrides `protobuf:"bytes,16,opt,name=scheduling_rule_overrides,json=schedulingRuleOverrides,proto3" json:"scheduling_rule_overrides,omitempty"`
+	// The confirmation mode that will be used when booking this availability.
+	// Attempts to create bookings for availabilities with a confirmation mode
+	// of CONFIRMATION_MODE_SYNCHRONOUS must be immediatlely confirmed or denied.
+	// Attempts to create bookings for availabilities with confirmation mode
+	// of CONFIRMATION_MODE_ASYNCHRONOUS must be either immediately denied
+	// or created with status PENDING.
+	ConfirmationMode     Availability_ConfirmationMode `protobuf:"varint,17,opt,name=confirmation_mode,json=confirmationMode,proto3,enum=maps.booking.feeds.Availability_ConfirmationMode" json:"confirmation_mode,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
 }
 
-func (m *Availability) Reset()                    { *m = Availability{} }
-func (m *Availability) String() string            { return proto.CompactTextString(m) }
-func (*Availability) ProtoMessage()               {}
-func (*Availability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+func (m *Availability) Reset()         { *m = Availability{} }
+func (m *Availability) String() string { return proto.CompactTextString(m) }
+func (*Availability) ProtoMessage()    {}
+func (*Availability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3}
+}
+
+func (m *Availability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Availability.Unmarshal(m, b)
+}
+func (m *Availability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Availability.Marshal(b, m, deterministic)
+}
+func (m *Availability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability.Merge(m, src)
+}
+func (m *Availability) XXX_Size() int {
+	return xxx_messageInfo_Availability.Size(m)
+}
+func (m *Availability) XXX_DiscardUnknown() {
+	xxx_messageInfo_Availability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Availability proto.InternalMessageInfo
 
 func (m *Availability) GetMerchantId() string {
 	if m != nil {
@@ -797,6 +933,13 @@
 	return nil
 }
 
+func (m *Availability) GetConfirmationMode() Availability_ConfirmationMode {
+	if m != nil {
+		return m.ConfirmationMode
+	}
+	return Availability_CONFIRMATION_MODE_UNSPECIFIED
+}
+
 // Recurrence messages are optional, but allow for a more compact
 // representation of consistently repeating availability slots. They typically
 // represent a day's working schedule.
@@ -811,23 +954,47 @@
 //      slots of a single service. Recurrence benefits merchants/services that
 //      offer appointments. The standard format is geared towards
 //      merchants/services with regularly scheduled classes.
+//   3. Recurrences should not last for more than 24 hours.
 type Availability_Recurrence struct {
 	// The inclusive maximum UTC timestamp the availability repeats until.
 	// (required)
-	RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec" json:"repeat_until_sec,omitempty"`
+	RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec,proto3" json:"repeat_until_sec,omitempty"`
 	// Defines the time between successive availability slots.
 	//
 	// Example: An availability with a duration of 20 min, a repeat_every_sec of
 	// 30 min, a start_sec of 9:00am, and a repeat_until_sec of 11:00am will
 	// yield slots at 9-9:20am, 9:30-9:50am, 10-10:20am, 10:30-10:50am,
 	// 11-11:20am. (required)
-	RepeatEverySec int32 `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec" json:"repeat_every_sec,omitempty"`
+	RepeatEverySec       int32    `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec,proto3" json:"repeat_every_sec,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Availability_Recurrence) Reset()                    { *m = Availability_Recurrence{} }
-func (m *Availability_Recurrence) String() string            { return proto.CompactTextString(m) }
-func (*Availability_Recurrence) ProtoMessage()               {}
-func (*Availability_Recurrence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} }
+func (m *Availability_Recurrence) Reset()         { *m = Availability_Recurrence{} }
+func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) }
+func (*Availability_Recurrence) ProtoMessage()    {}
+func (*Availability_Recurrence) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 0}
+}
+
+func (m *Availability_Recurrence) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Availability_Recurrence.Unmarshal(m, b)
+}
+func (m *Availability_Recurrence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Availability_Recurrence.Marshal(b, m, deterministic)
+}
+func (m *Availability_Recurrence) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability_Recurrence.Merge(m, src)
+}
+func (m *Availability_Recurrence) XXX_Size() int {
+	return xxx_messageInfo_Availability_Recurrence.Size(m)
+}
+func (m *Availability_Recurrence) XXX_DiscardUnknown() {
+	xxx_messageInfo_Availability_Recurrence.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Availability_Recurrence proto.InternalMessageInfo
 
 func (m *Availability_Recurrence) GetRepeatUntilSec() int64 {
 	if m != nil {
@@ -860,16 +1027,37 @@
 	//
 	// Note that because the time range is closed-open, the slot beginning at
 	// 11am slot would not be impacted.
-	TimeRange *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange" json:"time_range,omitempty"`
+	TimeRange            *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange,proto3" json:"time_range,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
 }
 
 func (m *Availability_ScheduleException) Reset()         { *m = Availability_ScheduleException{} }
 func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) }
 func (*Availability_ScheduleException) ProtoMessage()    {}
 func (*Availability_ScheduleException) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{3, 1}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 1}
 }
 
+func (m *Availability_ScheduleException) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Availability_ScheduleException.Unmarshal(m, b)
+}
+func (m *Availability_ScheduleException) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Availability_ScheduleException.Marshal(b, m, deterministic)
+}
+func (m *Availability_ScheduleException) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability_ScheduleException.Merge(m, src)
+}
+func (m *Availability_ScheduleException) XXX_Size() int {
+	return xxx_messageInfo_Availability_ScheduleException.Size(m)
+}
+func (m *Availability_ScheduleException) XXX_DiscardUnknown() {
+	xxx_messageInfo_Availability_ScheduleException.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Availability_ScheduleException proto.InternalMessageInfo
+
 func (m *Availability_ScheduleException) GetTimeRange() *TimeRange {
 	if m != nil {
 		return m.TimeRange
@@ -885,16 +1073,37 @@
 	// SchedulingRules.min_booking_before_end_time). If present, will override
 	// anything specified in the min_booking_buffer of the corresponding
 	// Service's SchedulingRules.
-	LastBookableSec int64 `protobuf:"varint,1,opt,name=last_bookable_sec,json=lastBookableSec" json:"last_bookable_sec,omitempty"`
+	LastBookableSec      int64    `protobuf:"varint,1,opt,name=last_bookable_sec,json=lastBookableSec,proto3" json:"last_bookable_sec,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *Availability_SchedulingRuleOverrides) Reset()         { *m = Availability_SchedulingRuleOverrides{} }
 func (m *Availability_SchedulingRuleOverrides) String() string { return proto.CompactTextString(m) }
 func (*Availability_SchedulingRuleOverrides) ProtoMessage()    {}
 func (*Availability_SchedulingRuleOverrides) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{3, 2}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 2}
 }
 
+func (m *Availability_SchedulingRuleOverrides) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Unmarshal(m, b)
+}
+func (m *Availability_SchedulingRuleOverrides) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Marshal(b, m, deterministic)
+}
+func (m *Availability_SchedulingRuleOverrides) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability_SchedulingRuleOverrides.Merge(m, src)
+}
+func (m *Availability_SchedulingRuleOverrides) XXX_Size() int {
+	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Size(m)
+}
+func (m *Availability_SchedulingRuleOverrides) XXX_DiscardUnknown() {
+	xxx_messageInfo_Availability_SchedulingRuleOverrides.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Availability_SchedulingRuleOverrides proto.InternalMessageInfo
+
 func (m *Availability_SchedulingRuleOverrides) GetLastBookableSec() int64 {
 	if m != nil {
 		return m.LastBookableSec
@@ -912,34 +1121,57 @@
 	// It also needs to be stable over time to allow correlation with past
 	// bookings.
 	// This field must be present if staff_name is present.
-	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" json:"staff_id,omitempty"`
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
 	// Optional name of a staff member providing the service. This field will be
 	// displayed to users making a booking, and should be human readable, as
 	// opposed to an opaque identifier.
 	// This field must be present if staff_id is present.
-	StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName" json:"staff_name,omitempty"`
+	StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName,proto3" json:"staff_name,omitempty"`
 	// An optional id for the room the service is located in. This field
 	// identifies the room across all merchants, services, and availability
 	// records. It also needs to be stable over time to allow correlation with
 	// past bookings.
 	// This field must be present if room_name is present.
-	RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId" json:"room_id,omitempty"`
+	RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
 	// An optional name for the room the service is located in. This
 	// field will be displayed to users making a booking, and should be human
 	// readable, as opposed to an opaque identifier.
 	// This field must be present if room_id is present.
-	RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName" json:"room_name,omitempty"`
+	RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"`
 	// Applicable only for Dining: The party size which can be accommodated
 	// during this time slot. A restaurant can be associated with multiple Slots
 	// for the same time, each specifying a different party_size, if for instance
 	// 2, 3, or 4 people can be seated with a reservation.
-	PartySize int32 `protobuf:"varint,5,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
+	PartySize            int32    `protobuf:"varint,5,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Resources) Reset()                    { *m = Resources{} }
-func (m *Resources) String() string            { return proto.CompactTextString(m) }
-func (*Resources) ProtoMessage()               {}
-func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+func (m *Resources) Reset()         { *m = Resources{} }
+func (m *Resources) String() string { return proto.CompactTextString(m) }
+func (*Resources) ProtoMessage()    {}
+func (*Resources) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{4}
+}
+
+func (m *Resources) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Resources.Unmarshal(m, b)
+}
+func (m *Resources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Resources.Marshal(b, m, deterministic)
+}
+func (m *Resources) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Resources.Merge(m, src)
+}
+func (m *Resources) XXX_Size() int {
+	return xxx_messageInfo_Resources.Size(m)
+}
+func (m *Resources) XXX_DiscardUnknown() {
+	xxx_messageInfo_Resources.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Resources proto.InternalMessageInfo
 
 func (m *Resources) GetStaffId() string {
 	if m != nil {
@@ -977,14 +1209,37 @@
 }
 
 type TimeRange struct {
-	BeginSec int64 `protobuf:"varint,1,opt,name=begin_sec,json=beginSec" json:"begin_sec,omitempty"`
-	EndSec   int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec" json:"end_sec,omitempty"`
+	BeginSec             int64    `protobuf:"varint,1,opt,name=begin_sec,json=beginSec,proto3" json:"begin_sec,omitempty"`
+	EndSec               int64    `protobuf:"varint,2,opt,name=end_sec,json=endSec,proto3" json:"end_sec,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *TimeRange) Reset()                    { *m = TimeRange{} }
-func (m *TimeRange) String() string            { return proto.CompactTextString(m) }
-func (*TimeRange) ProtoMessage()               {}
-func (*TimeRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (m *TimeRange) Reset()         { *m = TimeRange{} }
+func (m *TimeRange) String() string { return proto.CompactTextString(m) }
+func (*TimeRange) ProtoMessage()    {}
+func (*TimeRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{5}
+}
+
+func (m *TimeRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimeRange.Unmarshal(m, b)
+}
+func (m *TimeRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimeRange.Marshal(b, m, deterministic)
+}
+func (m *TimeRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeRange.Merge(m, src)
+}
+func (m *TimeRange) XXX_Size() int {
+	return xxx_messageInfo_TimeRange.Size(m)
+}
+func (m *TimeRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimeRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimeRange proto.InternalMessageInfo
 
 func (m *TimeRange) GetBeginSec() int64 {
 	if m != nil {
@@ -1001,14 +1256,37 @@
 }
 
 type ServiceFeed struct {
-	Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
-	Service  []*Service    `protobuf:"bytes,2,rep,name=service" json:"service,omitempty"`
+	Metadata             *FeedMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	Service              []*Service    `protobuf:"bytes,2,rep,name=service,proto3" json:"service,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
 }
 
-func (m *ServiceFeed) Reset()                    { *m = ServiceFeed{} }
-func (m *ServiceFeed) String() string            { return proto.CompactTextString(m) }
-func (*ServiceFeed) ProtoMessage()               {}
-func (*ServiceFeed) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+func (m *ServiceFeed) Reset()         { *m = ServiceFeed{} }
+func (m *ServiceFeed) String() string { return proto.CompactTextString(m) }
+func (*ServiceFeed) ProtoMessage()    {}
+func (*ServiceFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{6}
+}
+
+func (m *ServiceFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceFeed.Unmarshal(m, b)
+}
+func (m *ServiceFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceFeed.Marshal(b, m, deterministic)
+}
+func (m *ServiceFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceFeed.Merge(m, src)
+}
+func (m *ServiceFeed) XXX_Size() int {
+	return xxx_messageInfo_ServiceFeed.Size(m)
+}
+func (m *ServiceFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceFeed proto.InternalMessageInfo
 
 func (m *ServiceFeed) GetMetadata() *FeedMetadata {
 	if m != nil {
@@ -1028,13 +1306,13 @@
 type Service struct {
 	// An opaque string from an aggregator partner which uniquely identifies a
 	// merchant. (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// An opaque string from an aggregator partner which uniquely identifies the
 	// service. (required)
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// The name of the service, suitable for display to users, e.g. "Men's
 	// haircut". (required)
-	Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
+	Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
 	// The description of the service, suitable for display to users.
 	//
 	// This field now supports both plain text and HTML-like formatting rules to
@@ -1103,68 +1381,91 @@
 	//   approach for you.
 	//
 	// (required)
-	Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
+	Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
 	// The price of the service. (optional, overridden when payment options or
 	// ticket types present)
-	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
 	// Rules to book/cancel an appointment. (optional)
-	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules" json:"rules,omitempty"`
+	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules,proto3" json:"rules,omitempty"`
 	// Intake forms to customize the service. (optional)
 	//
 	// Deprecated. Please see intake_form and per_ticket_intake_form.
-	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form" json:"form,omitempty"`
+	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form,proto3" json:"form,omitempty"` // Deprecated: Do not use.
 	// A form requesting additional information from the user when they book this
 	// service. (optional)
-	IntakeForm *ServiceIntakeForm `protobuf:"bytes,20,opt,name=intake_form,json=intakeForm" json:"intake_form,omitempty"`
+	IntakeForm *ServiceIntakeForm `protobuf:"bytes,20,opt,name=intake_form,json=intakeForm,proto3" json:"intake_form,omitempty"`
 	// A form requesting additional information from the user when they book this
 	// service. This form must be filled out once for each ticket the user is
 	// booking. (optional)
-	PerTicketIntakeForm *ServiceIntakeForm `protobuf:"bytes,21,opt,name=per_ticket_intake_form,json=perTicketIntakeForm" json:"per_ticket_intake_form,omitempty"`
+	PerTicketIntakeForm *ServiceIntakeForm `protobuf:"bytes,21,opt,name=per_ticket_intake_form,json=perTicketIntakeForm,proto3" json:"per_ticket_intake_form,omitempty"`
 	// Whether a prepayment is required, optional or not supported. (optional)
-	PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
+	PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,proto3,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
 	// The service's tax rate. If present this field overrides any tax_rate set at
 	// the merchant level. An empty message (i.e. tax_rate { }) will reset the
 	// applied tax rate to zero. (optional)
-	TaxRate *TaxRate `protobuf:"bytes,9,opt,name=tax_rate,json=taxRate" json:"tax_rate,omitempty"`
+	TaxRate *TaxRate `protobuf:"bytes,9,opt,name=tax_rate,json=taxRate,proto3" json:"tax_rate,omitempty"`
 	// A list of ids referencing the payment options which can be used to pay
 	// for this service. The actual payment options are defined at the Merchant
 	// level, and can also be shared among multiple Merchants. (optional)
-	PaymentOptionId []string `protobuf:"bytes,10,rep,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+	PaymentOptionId []string `protobuf:"bytes,10,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
 	// Defines how a deposit may be charged to the user. Can be overridden at the
 	// availability level. (optional)
-	Deposit *Deposit `protobuf:"bytes,11,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,11,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. Can be overridden
 	// at the availability level. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,12,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,12,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
 	// Indicates whether the user must provide a credit card in order to book this
 	// service.
 	// This value can be overridden at the availability level. (optional)
-	RequireCreditCard RequireCreditCard `protobuf:"varint,13,opt,name=require_credit_card,json=requireCreditCard,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
+	RequireCreditCard RequireCreditCard `protobuf:"varint,13,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
 	// An action link related to this service.
-	ActionLink []*ActionLink `protobuf:"bytes,14,rep,name=action_link,json=actionLink" json:"action_link,omitempty"`
+	ActionLink []*ActionLink `protobuf:"bytes,14,rep,name=action_link,json=actionLink,proto3" json:"action_link,omitempty"`
 	// The predefined type of this service. Currently, only used with action_link.
-	Type Service_ServiceType `protobuf:"varint,15,opt,name=type,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"`
+	Type Service_ServiceType `protobuf:"varint,15,opt,name=type,proto3,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"`
 	// Types of tickets that can be booked/purchased for this service, if tickets
 	// are supported. (optional)
-	TicketType []*TicketType `protobuf:"bytes,16,rep,name=ticket_type,json=ticketType" json:"ticket_type,omitempty"`
+	TicketType []*TicketType `protobuf:"bytes,16,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
 	// Photos related to this service. Google will crawl these media to
 	// ensure that they are displayed to end-users in the most efficient way.
 	// (optional)
-	RelatedMedia []*RelatedMedia `protobuf:"bytes,17,rep,name=related_media,json=relatedMedia" json:"related_media,omitempty"`
+	RelatedMedia []*RelatedMedia `protobuf:"bytes,17,rep,name=related_media,json=relatedMedia,proto3" json:"related_media,omitempty"`
 	// Service attribute values that apply to this service (optional).
 	// Each Service may have zero or more values for each service attribute
 	// defined in the corresponding Merchant.
-	ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId" json:"service_attribute_value_id,omitempty"`
+	ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId,proto3" json:"service_attribute_value_id,omitempty"`
 	// Rules related to joining the waitlist. Should be populated if the service
 	// and merchant support waitlist functionality. Should not be populated
 	// otherwise.
-	WaitlistRules *WaitlistRules `protobuf:"bytes,19,opt,name=waitlist_rules,json=waitlistRules" json:"waitlist_rules,omitempty"`
+	WaitlistRules        *WaitlistRules `protobuf:"bytes,19,opt,name=waitlist_rules,json=waitlistRules,proto3" json:"waitlist_rules,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
 }
 
-func (m *Service) Reset()                    { *m = Service{} }
-func (m *Service) String() string            { return proto.CompactTextString(m) }
-func (*Service) ProtoMessage()               {}
-func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+func (m *Service) Reset()         { *m = Service{} }
+func (m *Service) String() string { return proto.CompactTextString(m) }
+func (*Service) ProtoMessage()    {}
+func (*Service) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7}
+}
+
+func (m *Service) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Service.Unmarshal(m, b)
+}
+func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Service.Marshal(b, m, deterministic)
+}
+func (m *Service) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Service.Merge(m, src)
+}
+func (m *Service) XXX_Size() int {
+	return xxx_messageInfo_Service.Size(m)
+}
+func (m *Service) XXX_DiscardUnknown() {
+	xxx_messageInfo_Service.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Service proto.InternalMessageInfo
 
 func (m *Service) GetMerchantId() string {
 	if m != nil {
@@ -1208,6 +1509,7 @@
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *Service) GetForm() []*ServiceIntakeForm {
 	if m != nil {
 		return m.Form
@@ -1320,18 +1622,41 @@
 	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
 	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
 	// (required)
-	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros" json:"price_micros,omitempty"`
+	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"`
 	// The currency of the price that is defined in ISO 4217. (required)
-	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode" json:"currency_code,omitempty"`
+	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
 	// An optional and opaque string that identifies the pricing option that is
 	// associated with the extended price. (optional)
-	PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag" json:"pricing_option_tag,omitempty"`
+	PricingOptionTag     string   `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Price) Reset()                    { *m = Price{} }
-func (m *Price) String() string            { return proto.CompactTextString(m) }
-func (*Price) ProtoMessage()               {}
-func (*Price) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+func (m *Price) Reset()         { *m = Price{} }
+func (m *Price) String() string { return proto.CompactTextString(m) }
+func (*Price) ProtoMessage()    {}
+func (*Price) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{8}
+}
+
+func (m *Price) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Price.Unmarshal(m, b)
+}
+func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Price.Marshal(b, m, deterministic)
+}
+func (m *Price) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Price.Merge(m, src)
+}
+func (m *Price) XXX_Size() int {
+	return xxx_messageInfo_Price.Size(m)
+}
+func (m *Price) XXX_DiscardUnknown() {
+	xxx_messageInfo_Price.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Price proto.InternalMessageInfo
 
 func (m *Price) GetPriceMicros() int64 {
 	if m != nil {
@@ -1384,33 +1709,58 @@
 	MinBookingBuffer isSchedulingRules_MinBookingBuffer `protobuf_oneof:"min_booking_buffer"`
 	// The minimum advance notice in seconds required to cancel a booked
 	// appointment online. (optional)
-	MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling" json:"min_advance_online_canceling,omitempty"`
+	MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling,proto3" json:"min_advance_online_canceling,omitempty"`
 	// The fee for canceling within the minimum advance notice period.
-	LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee" json:"late_cancellation_fee,omitempty"`
+	LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee,proto3" json:"late_cancellation_fee,omitempty"` // Deprecated: Do not use.
 	// The fee for no-show without canceling.
-	NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee" json:"noshow_fee,omitempty"`
+	NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee,proto3" json:"noshow_fee,omitempty"` // Deprecated: Do not use.
 	// The admission policy that applied to this service. If unset, defaults to
 	// TIME_STRICT. (optional)
-	AdmissionPolicy SchedulingRules_AdmissionPolicy `protobuf:"varint,5,opt,name=admission_policy,json=admissionPolicy,enum=maps.booking.feeds.SchedulingRules_AdmissionPolicy" json:"admission_policy,omitempty"`
+	AdmissionPolicy      SchedulingRules_AdmissionPolicy `protobuf:"varint,5,opt,name=admission_policy,json=admissionPolicy,proto3,enum=maps.booking.feeds.SchedulingRules_AdmissionPolicy" json:"admission_policy,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
 }
 
-func (m *SchedulingRules) Reset()                    { *m = SchedulingRules{} }
-func (m *SchedulingRules) String() string            { return proto.CompactTextString(m) }
-func (*SchedulingRules) ProtoMessage()               {}
-func (*SchedulingRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+func (m *SchedulingRules) Reset()         { *m = SchedulingRules{} }
+func (m *SchedulingRules) String() string { return proto.CompactTextString(m) }
+func (*SchedulingRules) ProtoMessage()    {}
+func (*SchedulingRules) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{9}
+}
+
+func (m *SchedulingRules) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SchedulingRules.Unmarshal(m, b)
+}
+func (m *SchedulingRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SchedulingRules.Marshal(b, m, deterministic)
+}
+func (m *SchedulingRules) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SchedulingRules.Merge(m, src)
+}
+func (m *SchedulingRules) XXX_Size() int {
+	return xxx_messageInfo_SchedulingRules.Size(m)
+}
+func (m *SchedulingRules) XXX_DiscardUnknown() {
+	xxx_messageInfo_SchedulingRules.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SchedulingRules proto.InternalMessageInfo
 
 type isSchedulingRules_MinBookingBuffer interface {
 	isSchedulingRules_MinBookingBuffer()
 }
 
 type SchedulingRules_MinAdvanceBooking struct {
-	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,oneof"`
-}
-type SchedulingRules_MinBookingBufferBeforeEndTime struct {
-	MinBookingBufferBeforeEndTime int64 `protobuf:"varint,6,opt,name=min_booking_buffer_before_end_time,json=minBookingBufferBeforeEndTime,oneof"`
+	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,proto3,oneof"`
 }
 
-func (*SchedulingRules_MinAdvanceBooking) isSchedulingRules_MinBookingBuffer()             {}
+type SchedulingRules_MinBookingBufferBeforeEndTime struct {
+	MinBookingBufferBeforeEndTime int64 `protobuf:"varint,6,opt,name=min_booking_buffer_before_end_time,json=minBookingBufferBeforeEndTime,proto3,oneof"`
+}
+
+func (*SchedulingRules_MinAdvanceBooking) isSchedulingRules_MinBookingBuffer() {}
+
 func (*SchedulingRules_MinBookingBufferBeforeEndTime) isSchedulingRules_MinBookingBuffer() {}
 
 func (m *SchedulingRules) GetMinBookingBuffer() isSchedulingRules_MinBookingBuffer {
@@ -1441,6 +1791,7 @@
 	return 0
 }
 
+// Deprecated: Do not use.
 func (m *SchedulingRules) GetLateCancellationFee() *Price {
 	if m != nil {
 		return m.LateCancellationFee
@@ -1448,6 +1799,7 @@
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *SchedulingRules) GetNoshowFee() *Price {
 	if m != nil {
 		return m.NoshowFee
@@ -1462,70 +1814,14 @@
 	return SchedulingRules_ADMISSION_POLICY_UNSPECIFIED
 }
 
-// XXX_OneofFuncs is for the internal use of the proto package.
-func (*SchedulingRules) 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 _SchedulingRules_OneofMarshaler, _SchedulingRules_OneofUnmarshaler, _SchedulingRules_OneofSizer, []interface{}{
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*SchedulingRules) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
 		(*SchedulingRules_MinAdvanceBooking)(nil),
 		(*SchedulingRules_MinBookingBufferBeforeEndTime)(nil),
 	}
 }
 
-func _SchedulingRules_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
-	m := msg.(*SchedulingRules)
-	// min_booking_buffer
-	switch x := m.MinBookingBuffer.(type) {
-	case *SchedulingRules_MinAdvanceBooking:
-		b.EncodeVarint(1<<3 | proto.WireVarint)
-		b.EncodeVarint(uint64(x.MinAdvanceBooking))
-	case *SchedulingRules_MinBookingBufferBeforeEndTime:
-		b.EncodeVarint(6<<3 | proto.WireVarint)
-		b.EncodeVarint(uint64(x.MinBookingBufferBeforeEndTime))
-	case nil:
-	default:
-		return fmt.Errorf("SchedulingRules.MinBookingBuffer has unexpected type %T", x)
-	}
-	return nil
-}
-
-func _SchedulingRules_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
-	m := msg.(*SchedulingRules)
-	switch tag {
-	case 1: // min_booking_buffer.min_advance_booking
-		if wire != proto.WireVarint {
-			return true, proto.ErrInternalBadWireType
-		}
-		x, err := b.DecodeVarint()
-		m.MinBookingBuffer = &SchedulingRules_MinAdvanceBooking{int64(x)}
-		return true, err
-	case 6: // min_booking_buffer.min_booking_buffer_before_end_time
-		if wire != proto.WireVarint {
-			return true, proto.ErrInternalBadWireType
-		}
-		x, err := b.DecodeVarint()
-		m.MinBookingBuffer = &SchedulingRules_MinBookingBufferBeforeEndTime{int64(x)}
-		return true, err
-	default:
-		return false, nil
-	}
-}
-
-func _SchedulingRules_OneofSizer(msg proto.Message) (n int) {
-	m := msg.(*SchedulingRules)
-	// min_booking_buffer
-	switch x := m.MinBookingBuffer.(type) {
-	case *SchedulingRules_MinAdvanceBooking:
-		n += proto.SizeVarint(1<<3 | proto.WireVarint)
-		n += proto.SizeVarint(uint64(x.MinAdvanceBooking))
-	case *SchedulingRules_MinBookingBufferBeforeEndTime:
-		n += proto.SizeVarint(6<<3 | proto.WireVarint)
-		n += proto.SizeVarint(uint64(x.MinBookingBufferBeforeEndTime))
-	case nil:
-	default:
-		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
-	}
-	return n
-}
-
 // A tax rate applied when charging the user for a service, and which can be set
 // on either a per merchant, or per service basis.
 type TaxRate struct {
@@ -1545,13 +1841,36 @@
 	// the smallest currency unit (for example, fractions of one cent) will be
 	// rounded using nearest even rounding. Taxes will be shown to the user as a
 	// separate line item. (required)
-	MicroPercent int32 `protobuf:"varint,1,opt,name=micro_percent,json=microPercent" json:"micro_percent,omitempty"`
+	MicroPercent         int32    `protobuf:"varint,1,opt,name=micro_percent,json=microPercent,proto3" json:"micro_percent,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *TaxRate) Reset()                    { *m = TaxRate{} }
-func (m *TaxRate) String() string            { return proto.CompactTextString(m) }
-func (*TaxRate) ProtoMessage()               {}
-func (*TaxRate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+func (m *TaxRate) Reset()         { *m = TaxRate{} }
+func (m *TaxRate) String() string { return proto.CompactTextString(m) }
+func (*TaxRate) ProtoMessage()    {}
+func (*TaxRate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{10}
+}
+
+func (m *TaxRate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TaxRate.Unmarshal(m, b)
+}
+func (m *TaxRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TaxRate.Marshal(b, m, deterministic)
+}
+func (m *TaxRate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TaxRate.Merge(m, src)
+}
+func (m *TaxRate) XXX_Size() int {
+	return xxx_messageInfo_TaxRate.Size(m)
+}
+func (m *TaxRate) XXX_DiscardUnknown() {
+	xxx_messageInfo_TaxRate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TaxRate proto.InternalMessageInfo
 
 func (m *TaxRate) GetMicroPercent() int32 {
 	if m != nil {
@@ -1565,22 +1884,45 @@
 	// A string from an aggregator partner which uniquely identifies a form field.
 	// This id should be the same as the id in the corresponding form field
 	// answer. (required)
-	Id string `protobuf:"bytes,5,opt,name=id" json:"id,omitempty"`
+	Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"`
 	// The type of this field. (required)
-	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
+	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,proto3,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
 	// The text shown to the user for this field. (required)
-	Label string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"`
+	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
 	// For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate.
 	// (optional)
-	Value []string `protobuf:"bytes,3,rep,name=value" json:"value,omitempty"`
+	Value []string `protobuf:"bytes,3,rep,name=value,proto3" json:"value,omitempty"`
 	// Indicates whether an answer to this field is required by a user. (optional)
-	IsRequired bool `protobuf:"varint,4,opt,name=is_required,json=isRequired" json:"is_required,omitempty"`
+	IsRequired           bool     `protobuf:"varint,4,opt,name=is_required,json=isRequired,proto3" json:"is_required,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ServiceIntakeFormField) Reset()                    { *m = ServiceIntakeFormField{} }
-func (m *ServiceIntakeFormField) String() string            { return proto.CompactTextString(m) }
-func (*ServiceIntakeFormField) ProtoMessage()               {}
-func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+func (m *ServiceIntakeFormField) Reset()         { *m = ServiceIntakeFormField{} }
+func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) }
+func (*ServiceIntakeFormField) ProtoMessage()    {}
+func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{11}
+}
+
+func (m *ServiceIntakeFormField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceIntakeFormField.Unmarshal(m, b)
+}
+func (m *ServiceIntakeFormField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceIntakeFormField.Marshal(b, m, deterministic)
+}
+func (m *ServiceIntakeFormField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceIntakeFormField.Merge(m, src)
+}
+func (m *ServiceIntakeFormField) XXX_Size() int {
+	return xxx_messageInfo_ServiceIntakeFormField.Size(m)
+}
+func (m *ServiceIntakeFormField) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceIntakeFormField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceIntakeFormField proto.InternalMessageInfo
 
 func (m *ServiceIntakeFormField) GetId() string {
 	if m != nil {
@@ -1620,19 +1962,42 @@
 // Defines an intake form that customizes the service provided by a merchant.
 type ServiceIntakeForm struct {
 	// Fields that will be displayed to the user. (required)
-	Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field" json:"field,omitempty"`
+	Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"`
 	// If true, this form will be shown to first time customers.
 	// Deprecated. This functionality is not supported for intake forms.
-	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers" json:"first_time_customers,omitempty"`
+	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers,proto3" json:"first_time_customers,omitempty"` // Deprecated: Do not use.
 	// If true, this form will be shown to repeat customers.
 	// Deprecated. This functionality is not supported for intake forms.
-	ReturningCustomers bool `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers" json:"returning_customers,omitempty"`
+	ReturningCustomers   bool     `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers,proto3" json:"returning_customers,omitempty"` // Deprecated: Do not use.
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ServiceIntakeForm) Reset()                    { *m = ServiceIntakeForm{} }
-func (m *ServiceIntakeForm) String() string            { return proto.CompactTextString(m) }
-func (*ServiceIntakeForm) ProtoMessage()               {}
-func (*ServiceIntakeForm) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (m *ServiceIntakeForm) Reset()         { *m = ServiceIntakeForm{} }
+func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) }
+func (*ServiceIntakeForm) ProtoMessage()    {}
+func (*ServiceIntakeForm) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{12}
+}
+
+func (m *ServiceIntakeForm) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceIntakeForm.Unmarshal(m, b)
+}
+func (m *ServiceIntakeForm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceIntakeForm.Marshal(b, m, deterministic)
+}
+func (m *ServiceIntakeForm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceIntakeForm.Merge(m, src)
+}
+func (m *ServiceIntakeForm) XXX_Size() int {
+	return xxx_messageInfo_ServiceIntakeForm.Size(m)
+}
+func (m *ServiceIntakeForm) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceIntakeForm.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceIntakeForm proto.InternalMessageInfo
 
 func (m *ServiceIntakeForm) GetField() []*ServiceIntakeFormField {
 	if m != nil {
@@ -1641,6 +2006,7 @@
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool {
 	if m != nil {
 		return m.FirstTimeCustomers
@@ -1648,6 +2014,7 @@
 	return false
 }
 
+// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetReturningCustomers() bool {
 	if m != nil {
 		return m.ReturningCustomers
@@ -1659,17 +2026,40 @@
 // for.
 type Deposit struct {
 	// Deposit amount.
-	Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Minimum advance cancellation for the deposit.
-	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" json:"min_advance_cancellation_sec,omitempty"`
+	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
 	// Defines how the deposit is determined from the availability.
-	DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
+	DepositType          PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *Deposit) Reset()                    { *m = Deposit{} }
-func (m *Deposit) String() string            { return proto.CompactTextString(m) }
-func (*Deposit) ProtoMessage()               {}
-func (*Deposit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (m *Deposit) Reset()         { *m = Deposit{} }
+func (m *Deposit) String() string { return proto.CompactTextString(m) }
+func (*Deposit) ProtoMessage()    {}
+func (*Deposit) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{13}
+}
+
+func (m *Deposit) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Deposit.Unmarshal(m, b)
+}
+func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Deposit.Marshal(b, m, deterministic)
+}
+func (m *Deposit) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Deposit.Merge(m, src)
+}
+func (m *Deposit) XXX_Size() int {
+	return xxx_messageInfo_Deposit.Size(m)
+}
+func (m *Deposit) XXX_DiscardUnknown() {
+	xxx_messageInfo_Deposit.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Deposit proto.InternalMessageInfo
 
 func (m *Deposit) GetDeposit() *Price {
 	if m != nil {
@@ -1697,15 +2087,38 @@
 type NoShowFee struct {
 	// The amount the user may be charged if they do not show up for their
 	// reservation.
-	Fee *Price `protobuf:"bytes,1,opt,name=fee" json:"fee,omitempty"`
+	Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"`
 	// Defines how the fee is determined from the availability.
-	FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"`
+	FeeType              PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *NoShowFee) Reset()                    { *m = NoShowFee{} }
-func (m *NoShowFee) String() string            { return proto.CompactTextString(m) }
-func (*NoShowFee) ProtoMessage()               {}
-func (*NoShowFee) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (m *NoShowFee) Reset()         { *m = NoShowFee{} }
+func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
+func (*NoShowFee) ProtoMessage()    {}
+func (*NoShowFee) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{14}
+}
+
+func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
+}
+func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic)
+}
+func (m *NoShowFee) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NoShowFee.Merge(m, src)
+}
+func (m *NoShowFee) XXX_Size() int {
+	return xxx_messageInfo_NoShowFee.Size(m)
+}
+func (m *NoShowFee) XXX_DiscardUnknown() {
+	xxx_messageInfo_NoShowFee.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NoShowFee proto.InternalMessageInfo
 
 func (m *NoShowFee) GetFee() *Price {
 	if m != nil {
@@ -1726,21 +2139,44 @@
 // performed on.
 type ActionLink struct {
 	// The entry point URL for this action link.
-	Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
+	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
 	// The BCP-47 language tag identifying the language in which the content
 	// from this URI is available.
-	Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"`
+	Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"`
 	// ISO 3166-1 alpha-2 country code. Leave empty for unrestricted visibility.
-	RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry" json:"restricted_country,omitempty"`
+	RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry,proto3" json:"restricted_country,omitempty"`
 	// The platform that this action should be performed on. If this field is
 	// unset, ACTION_PLATFORM_WEB_APPLICATION will be used as fallback.
-	Platform ActionPlatform `protobuf:"varint,4,opt,name=platform,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
+	Platform             ActionPlatform `protobuf:"varint,4,opt,name=platform,proto3,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
 }
 
-func (m *ActionLink) Reset()                    { *m = ActionLink{} }
-func (m *ActionLink) String() string            { return proto.CompactTextString(m) }
-func (*ActionLink) ProtoMessage()               {}
-func (*ActionLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+func (m *ActionLink) Reset()         { *m = ActionLink{} }
+func (m *ActionLink) String() string { return proto.CompactTextString(m) }
+func (*ActionLink) ProtoMessage()    {}
+func (*ActionLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{15}
+}
+
+func (m *ActionLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ActionLink.Unmarshal(m, b)
+}
+func (m *ActionLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ActionLink.Marshal(b, m, deterministic)
+}
+func (m *ActionLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ActionLink.Merge(m, src)
+}
+func (m *ActionLink) XXX_Size() int {
+	return xxx_messageInfo_ActionLink.Size(m)
+}
+func (m *ActionLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_ActionLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ActionLink proto.InternalMessageInfo
 
 func (m *ActionLink) GetUrl() string {
 	if m != nil {
@@ -1770,25 +2206,87 @@
 	return ActionPlatform_ACTION_PLATFORM_UNSPECIFIED
 }
 
-// TicketType is used to differentiate among tickets (where a ticket can be a
-// spot on a raft trip, an admission to a museum, etc.) with different prices
-// and/or availabilities due to different user types or different service
-// attributes.
+// TicketType is used to differentiate among tickets with different prices
+// and/or availabilities due to different user types, different
+// service attributes, or different options/add-ons.
+//
+// A ticket is the minimal bookable unit to a service, e.g. a spot on a rafting
+// trip, an admission to a museum, a full day double kayak rental.
 type TicketType struct {
 	// The ticket id is used to differentiate among different ticket types of the
 	// same service, and is only expected to be unique within a service.
-	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
+	// A short description to this TicketType.
+	//
 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" json:"short_description,omitempty"`
+	// Required, each ticket type should have a description to be user visible.
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
 	// The price of a single ticket of this type, exclusive of any taxes. The tax
 	// rate of Service is applied to its tickets.
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
+	// Description of any additional option which this ticket type represents, if
+	// any.
+	//
+	// This is useful when the ticket type represents multiple dimensions.
+	//
+	// Example 1: an admission ticket with different types 'adult', 'child' and
+	// language as an additional option, the expected TicketType list would be:
+	//     - { ticket_type_id: "ticket_type_1" short_description: "adult"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_2" short_description: "adult"
+	//         option_description: "spanish" }
+	//     - { ticket_type_id: "ticket_type_3" short_description: "child"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_4" short_description: "child"
+	//         option_description: "spanish" }
+	//
+	// Example 2: an multi-hour kayak rental with optional dry bag add-on, the
+	// short_description could be "3 hours" and the option_description could be
+	// either "with dry bag" or "without dry bag":
+	//     - { ticket_type_id: "ticket_type_1" short_description: "2 hours"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_2" short_description: "3 hours"
+	//         option_description: "spanish" }
+	//     - { ticket_type_id: "ticket_type_3" short_description: "2 hours"
+	//          option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_4" short_description: "3 hours"
+	//          option_description: "spanish" }
+	//
+	// Optional, but if any ticket type within the service has this field set, we
+	// expect all other ticket types to have this field set as well (a default
+	// option_description could be used). E.g.
+	// [{ticket_type_1, adult, english}, {ticket_type_1, adult, ''}] is not a
+	// valid list.
+	OptionDescription    string   `protobuf:"bytes,4,opt,name=option_description,json=optionDescription,proto3" json:"option_description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *TicketType) Reset()                    { *m = TicketType{} }
-func (m *TicketType) String() string            { return proto.CompactTextString(m) }
-func (*TicketType) ProtoMessage()               {}
-func (*TicketType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+func (m *TicketType) Reset()         { *m = TicketType{} }
+func (m *TicketType) String() string { return proto.CompactTextString(m) }
+func (*TicketType) ProtoMessage()    {}
+func (*TicketType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{16}
+}
+
+func (m *TicketType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TicketType.Unmarshal(m, b)
+}
+func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TicketType.Marshal(b, m, deterministic)
+}
+func (m *TicketType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TicketType.Merge(m, src)
+}
+func (m *TicketType) XXX_Size() int {
+	return xxx_messageInfo_TicketType.Size(m)
+}
+func (m *TicketType) XXX_DiscardUnknown() {
+	xxx_messageInfo_TicketType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TicketType proto.InternalMessageInfo
 
 func (m *TicketType) GetTicketTypeId() string {
 	if m != nil {
@@ -1811,27 +2309,57 @@
 	return nil
 }
 
+func (m *TicketType) GetOptionDescription() string {
+	if m != nil {
+		return m.OptionDescription
+	}
+	return ""
+}
+
 // Defines a media source. This field only contains the URL of this media source
 // (only photos are supported for now). Google will crawl the media data to
 // ensure that they are displayed to end-users in the most efficient way.
 type RelatedMedia struct {
 	// URL of this media source. Google will crawl the media hosted at this URL.
-	Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
+	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
 	// Type of this media source.
-	Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,enum=maps.booking.feeds.RelatedMedia_MediaType" json:"type,omitempty"`
+	Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,proto3,enum=maps.booking.feeds.RelatedMedia_MediaType" json:"type,omitempty"`
 	// Caption of the media, only plain text is supported. Any HTML components
 	// will be stripped. (optional)
-	Caption string `protobuf:"bytes,3,opt,name=caption" json:"caption,omitempty"`
+	Caption string `protobuf:"bytes,3,opt,name=caption,proto3" json:"caption,omitempty"`
 	// Attribution information about the source of the media. Note that if
 	// the attribution is required to display with the media to give credit to
 	// photographer or agency, this field must be set. (optional)
-	Attribution *RelatedMedia_Attribution `protobuf:"bytes,4,opt,name=attribution" json:"attribution,omitempty"`
+	Attribution          *RelatedMedia_Attribution `protobuf:"bytes,4,opt,name=attribution,proto3" json:"attribution,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
 }
 
-func (m *RelatedMedia) Reset()                    { *m = RelatedMedia{} }
-func (m *RelatedMedia) String() string            { return proto.CompactTextString(m) }
-func (*RelatedMedia) ProtoMessage()               {}
-func (*RelatedMedia) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (m *RelatedMedia) Reset()         { *m = RelatedMedia{} }
+func (m *RelatedMedia) String() string { return proto.CompactTextString(m) }
+func (*RelatedMedia) ProtoMessage()    {}
+func (*RelatedMedia) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{17}
+}
+
+func (m *RelatedMedia) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RelatedMedia.Unmarshal(m, b)
+}
+func (m *RelatedMedia) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RelatedMedia.Marshal(b, m, deterministic)
+}
+func (m *RelatedMedia) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RelatedMedia.Merge(m, src)
+}
+func (m *RelatedMedia) XXX_Size() int {
+	return xxx_messageInfo_RelatedMedia.Size(m)
+}
+func (m *RelatedMedia) XXX_DiscardUnknown() {
+	xxx_messageInfo_RelatedMedia.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RelatedMedia proto.InternalMessageInfo
 
 func (m *RelatedMedia) GetUrl() string {
 	if m != nil {
@@ -1867,13 +2395,36 @@
 	// displayed together with the source media. Note that only plain text is
 	// supported for this field, any HTML components will be stripped (hyperlink
 	// based attribution is not supported).
-	Text string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"`
+	Text                 string   `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *RelatedMedia_Attribution) Reset()                    { *m = RelatedMedia_Attribution{} }
-func (m *RelatedMedia_Attribution) String() string            { return proto.CompactTextString(m) }
-func (*RelatedMedia_Attribution) ProtoMessage()               {}
-func (*RelatedMedia_Attribution) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 0} }
+func (m *RelatedMedia_Attribution) Reset()         { *m = RelatedMedia_Attribution{} }
+func (m *RelatedMedia_Attribution) String() string { return proto.CompactTextString(m) }
+func (*RelatedMedia_Attribution) ProtoMessage()    {}
+func (*RelatedMedia_Attribution) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0}
+}
+
+func (m *RelatedMedia_Attribution) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RelatedMedia_Attribution.Unmarshal(m, b)
+}
+func (m *RelatedMedia_Attribution) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RelatedMedia_Attribution.Marshal(b, m, deterministic)
+}
+func (m *RelatedMedia_Attribution) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RelatedMedia_Attribution.Merge(m, src)
+}
+func (m *RelatedMedia_Attribution) XXX_Size() int {
+	return xxx_messageInfo_RelatedMedia_Attribution.Size(m)
+}
+func (m *RelatedMedia_Attribution) XXX_DiscardUnknown() {
+	xxx_messageInfo_RelatedMedia_Attribution.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RelatedMedia_Attribution proto.InternalMessageInfo
 
 func (m *RelatedMedia_Attribution) GetText() string {
 	if m != nil {
@@ -1887,16 +2438,39 @@
 type ServiceAttributeValueId struct {
 	// ID of an attribute as defined in Merchant.service_attribute, e.g.
 	// "service-type".
-	AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId" json:"attribute_id,omitempty"`
+	AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"`
 	// ID of the value for this attribute, e.g. "haircut". Must match a value_id
 	// in the service attribute definition.
-	ValueId string `protobuf:"bytes,2,opt,name=value_id,json=valueId" json:"value_id,omitempty"`
+	ValueId              string   `protobuf:"bytes,2,opt,name=value_id,json=valueId,proto3" json:"value_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ServiceAttributeValueId) Reset()                    { *m = ServiceAttributeValueId{} }
-func (m *ServiceAttributeValueId) String() string            { return proto.CompactTextString(m) }
-func (*ServiceAttributeValueId) ProtoMessage()               {}
-func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+func (m *ServiceAttributeValueId) Reset()         { *m = ServiceAttributeValueId{} }
+func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) }
+func (*ServiceAttributeValueId) ProtoMessage()    {}
+func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{18}
+}
+
+func (m *ServiceAttributeValueId) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceAttributeValueId.Unmarshal(m, b)
+}
+func (m *ServiceAttributeValueId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceAttributeValueId.Marshal(b, m, deterministic)
+}
+func (m *ServiceAttributeValueId) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceAttributeValueId.Merge(m, src)
+}
+func (m *ServiceAttributeValueId) XXX_Size() int {
+	return xxx_messageInfo_ServiceAttributeValueId.Size(m)
+}
+func (m *ServiceAttributeValueId) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceAttributeValueId.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceAttributeValueId proto.InternalMessageInfo
 
 func (m *ServiceAttributeValueId) GetAttributeId() string {
 	if m != nil {
@@ -1917,20 +2491,43 @@
 	// Required. Must be a positive integer for services providing waitlist
 	// functionality. If the service or merchant does not provide waitlist
 	// functionality, this must not be populated.
-	MinPartySize int32 `protobuf:"varint,1,opt,name=min_party_size,json=minPartySize" json:"min_party_size,omitempty"`
+	MinPartySize int32 `protobuf:"varint,1,opt,name=min_party_size,json=minPartySize,proto3" json:"min_party_size,omitempty"`
 	// Required. Must be a positive integer for services providing waitlist
 	// functionality. If the service or merchant does not provide waitlist
 	// functionality, this must not be populated.
-	MaxPartySize int32 `protobuf:"varint,2,opt,name=max_party_size,json=maxPartySize" json:"max_party_size,omitempty"`
+	MaxPartySize int32 `protobuf:"varint,2,opt,name=max_party_size,json=maxPartySize,proto3" json:"max_party_size,omitempty"`
 	// If true, the user will be able to send a free-form additional text request
 	// when joining the waitlist for this service.
-	SupportsAdditionalRequest bool `protobuf:"varint,3,opt,name=supports_additional_request,json=supportsAdditionalRequest" json:"supports_additional_request,omitempty"`
+	SupportsAdditionalRequest bool     `protobuf:"varint,3,opt,name=supports_additional_request,json=supportsAdditionalRequest,proto3" json:"supports_additional_request,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
+	XXX_unrecognized          []byte   `json:"-"`
+	XXX_sizecache             int32    `json:"-"`
 }
 
-func (m *WaitlistRules) Reset()                    { *m = WaitlistRules{} }
-func (m *WaitlistRules) String() string            { return proto.CompactTextString(m) }
-func (*WaitlistRules) ProtoMessage()               {}
-func (*WaitlistRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (m *WaitlistRules) Reset()         { *m = WaitlistRules{} }
+func (m *WaitlistRules) String() string { return proto.CompactTextString(m) }
+func (*WaitlistRules) ProtoMessage()    {}
+func (*WaitlistRules) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{19}
+}
+
+func (m *WaitlistRules) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitlistRules.Unmarshal(m, b)
+}
+func (m *WaitlistRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitlistRules.Marshal(b, m, deterministic)
+}
+func (m *WaitlistRules) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitlistRules.Merge(m, src)
+}
+func (m *WaitlistRules) XXX_Size() int {
+	return xxx_messageInfo_WaitlistRules.Size(m)
+}
+func (m *WaitlistRules) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitlistRules.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitlistRules proto.InternalMessageInfo
 
 func (m *WaitlistRules) GetMinPartySize() int32 {
 	if m != nil {
@@ -1954,6 +2551,16 @@
 }
 
 func init() {
+	proto.RegisterEnum("maps.booking.feeds.PriceType", PriceType_name, PriceType_value)
+	proto.RegisterEnum("maps.booking.feeds.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value)
+	proto.RegisterEnum("maps.booking.feeds.ActionPlatform", ActionPlatform_name, ActionPlatform_value)
+	proto.RegisterEnum("maps.booking.feeds.FeedMetadata_ProcessingInstruction", FeedMetadata_ProcessingInstruction_name, FeedMetadata_ProcessingInstruction_value)
+	proto.RegisterEnum("maps.booking.feeds.Availability_ConfirmationMode", Availability_ConfirmationMode_name, Availability_ConfirmationMode_value)
+	proto.RegisterEnum("maps.booking.feeds.Service_PrepaymentType", Service_PrepaymentType_name, Service_PrepaymentType_value)
+	proto.RegisterEnum("maps.booking.feeds.Service_ServiceType", Service_ServiceType_name, Service_ServiceType_value)
+	proto.RegisterEnum("maps.booking.feeds.SchedulingRules_AdmissionPolicy", SchedulingRules_AdmissionPolicy_name, SchedulingRules_AdmissionPolicy_value)
+	proto.RegisterEnum("maps.booking.feeds.ServiceIntakeFormField_FieldType", ServiceIntakeFormField_FieldType_name, ServiceIntakeFormField_FieldType_value)
+	proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value)
 	proto.RegisterType((*FeedMetadata)(nil), "maps.booking.feeds.FeedMetadata")
 	proto.RegisterType((*AvailabilityFeed)(nil), "maps.booking.feeds.AvailabilityFeed")
 	proto.RegisterType((*ServiceAvailability)(nil), "maps.booking.feeds.ServiceAvailability")
@@ -1978,189 +2585,184 @@
 	proto.RegisterType((*RelatedMedia_Attribution)(nil), "maps.booking.feeds.RelatedMedia.Attribution")
 	proto.RegisterType((*ServiceAttributeValueId)(nil), "maps.booking.feeds.ServiceAttributeValueId")
 	proto.RegisterType((*WaitlistRules)(nil), "maps.booking.feeds.WaitlistRules")
-	proto.RegisterEnum("maps.booking.feeds.PriceType", PriceType_name, PriceType_value)
-	proto.RegisterEnum("maps.booking.feeds.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value)
-	proto.RegisterEnum("maps.booking.feeds.ActionPlatform", ActionPlatform_name, ActionPlatform_value)
-	proto.RegisterEnum("maps.booking.feeds.FeedMetadata_ProcessingInstruction", FeedMetadata_ProcessingInstruction_name, FeedMetadata_ProcessingInstruction_value)
-	proto.RegisterEnum("maps.booking.feeds.Service_PrepaymentType", Service_PrepaymentType_name, Service_PrepaymentType_value)
-	proto.RegisterEnum("maps.booking.feeds.Service_ServiceType", Service_ServiceType_name, Service_ServiceType_value)
-	proto.RegisterEnum("maps.booking.feeds.SchedulingRules_AdmissionPolicy", SchedulingRules_AdmissionPolicy_name, SchedulingRules_AdmissionPolicy_value)
-	proto.RegisterEnum("maps.booking.feeds.ServiceIntakeFormField_FieldType", ServiceIntakeFormField_FieldType_name, ServiceIntakeFormField_FieldType_value)
-	proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value)
 }
 
-func init() { proto.RegisterFile("github.com/maps-booking-v3/feeds/feeds.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("feeds.proto", fileDescriptor_7aa923a38d4cd9d3) }
 
-var fileDescriptor0 = []byte{
-	// 2706 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x73, 0xe3, 0xc6,
-	0xb1, 0x5f, 0x92, 0xd2, 0x92, 0x6c, 0x52, 0x12, 0x34, 0xd2, 0x4a, 0x94, 0xd6, 0xeb, 0x95, 0xe1,
-	0xe7, 0xf7, 0xf6, 0xed, 0xae, 0x69, 0x3f, 0xad, 0xed, 0xf2, 0x2b, 0xff, 0xa5, 0x48, 0xc8, 0x42,
-	0x2d, 0x45, 0xc0, 0x43, 0xc8, 0xf2, 0xfa, 0x90, 0x31, 0x04, 0x8c, 0x24, 0xd4, 0x92, 0x00, 0x03,
-	0x80, 0xda, 0x95, 0xab, 0x5c, 0xa9, 0xca, 0x29, 0xc7, 0x9c, 0xe3, 0xaa, 0xdc, 0x53, 0xf1, 0x87,
-	0x48, 0xae, 0xf9, 0x06, 0xf9, 0x14, 0x39, 0xe6, 0x90, 0x4b, 0x6a, 0x7a, 0x00, 0x10, 0x94, 0xa8,
-	0x95, 0x1c, 0xfb, 0x42, 0x01, 0xdd, 0xbf, 0xee, 0x99, 0xe9, 0x99, 0xfe, 0x75, 0x0f, 0x04, 0x8f,
-	0x4f, 0xbc, 0xf8, 0x74, 0x7c, 0xd4, 0x74, 0x82, 0xe1, 0x3b, 0x43, 0x7b, 0x14, 0xbd, 0x7d, 0x14,
-	0x04, 0xcf, 0x3d, 0xff, 0xe4, 0xed, 0xb3, 0x27, 0xef, 0x1c, 0x73, 0xee, 0x46, 0xf2, 0xb7, 0x39,
-	0x0a, 0x83, 0x38, 0x20, 0x44, 0x40, 0x9a, 0x09, 0xa4, 0x89, 0x1a, 0xf5, 0x1f, 0x45, 0xa8, 0xef,
-	0x72, 0xee, 0xee, 0xf3, 0xd8, 0x76, 0xed, 0xd8, 0x26, 0x43, 0x58, 0x1b, 0x85, 0x81, 0xc3, 0xa3,
-	0xc8, 0xf3, 0x4f, 0x98, 0xe7, 0x47, 0x71, 0x38, 0x76, 0x62, 0x2f, 0xf0, 0x1b, 0x85, 0xad, 0xc2,
-	0x83, 0xc5, 0xed, 0x0f, 0x9a, 0x97, 0xbd, 0x34, 0xf3, 0x1e, 0x9a, 0x66, 0x66, 0xae, 0x4f, 0xac,
-	0xe9, 0x9d, 0xd1, 0x2c, 0x31, 0x79, 0x03, 0xea, 0xd1, 0xa9, 0x1d, 0xba, 0xcc, 0x1f, 0x0f, 0x8f,
-	0x78, 0xd8, 0x28, 0x6e, 0x15, 0x1e, 0xcc, 0xd3, 0x1a, 0xca, 0x7a, 0x28, 0x12, 0x90, 0x38, 0x88,
-	0xed, 0x01, 0x43, 0x61, 0xd4, 0x28, 0x49, 0x08, 0xca, 0xfa, 0x28, 0x22, 0xab, 0x30, 0xef, 0x07,
-	0xbe, 0xc3, 0x1b, 0xf3, 0x5b, 0x85, 0x07, 0x73, 0x54, 0xbe, 0x90, 0xff, 0x83, 0xd5, 0x13, 0xee,
-	0xf3, 0xd0, 0x16, 0x23, 0xb1, 0xd8, 0x1b, 0xf2, 0x28, 0xb6, 0x87, 0xa3, 0xc6, 0xdc, 0x56, 0xe1,
-	0x41, 0x89, 0xae, 0x4c, 0x74, 0x56, 0xaa, 0x52, 0x6d, 0xb8, 0x33, 0x73, 0xfa, 0x64, 0x05, 0x96,
-	0x4c, 0x6a, 0xb4, 0xb5, 0x7e, 0x9f, 0x1d, 0xf4, 0x9e, 0xf6, 0x8c, 0xc3, 0x9e, 0x72, 0x8b, 0xac,
-	0xc3, 0x4a, 0x2a, 0x6c, 0xf5, 0x59, 0xdb, 0xd8, 0x37, 0xbb, 0x9a, 0xa5, 0x29, 0x05, 0xb2, 0x09,
-	0x6b, 0x39, 0x85, 0xde, 0x6b, 0x53, 0x6d, 0x5f, 0xeb, 0x59, 0xad, 0xae, 0x52, 0x54, 0x7f, 0x2c,
-	0x80, 0xd2, 0x3a, 0xb3, 0xbd, 0x81, 0x7d, 0xe4, 0x0d, 0xbc, 0xf8, 0x5c, 0xc4, 0x8e, 0x7c, 0x0c,
-	0x95, 0x61, 0x12, 0x3f, 0x8c, 0x73, 0x6d, 0x7b, 0xeb, 0xba, 0x38, 0xd3, 0xcc, 0x82, 0x7c, 0x03,
-	0xab, 0x11, 0x0f, 0xcf, 0x3c, 0x87, 0x33, 0x3b, 0xe7, 0xb9, 0x51, 0xdc, 0x2a, 0x3d, 0xa8, 0x6d,
-	0xff, 0xcf, 0x2c, 0x4f, 0x7d, 0x89, 0xcf, 0x4f, 0x84, 0xae, 0x44, 0x97, 0x85, 0xea, 0xbf, 0x8a,
-	0xb0, 0x32, 0x03, 0x4c, 0x3e, 0x84, 0x46, 0x14, 0xdb, 0x61, 0x3c, 0x89, 0x2b, 0x0b, 0x79, 0x14,
-	0x87, 0x9e, 0x13, 0xe3, 0x0a, 0x4a, 0x74, 0x0d, 0xf5, 0x59, 0x6c, 0x69, 0xa2, 0x25, 0xef, 0xc1,
-	0x1a, 0xf7, 0xdd, 0x59, 0x76, 0x45, 0xb4, 0x5b, 0xe5, 0xbe, 0x7b, 0xd9, 0xea, 0x5d, 0x58, 0x1d,
-	0xf2, 0xd0, 0x39, 0xb5, 0xfd, 0x98, 0x79, 0xee, 0xc4, 0x46, 0x9c, 0x86, 0x2a, 0x25, 0xa9, 0x4e,
-	0x77, 0x33, 0x8b, 0x26, 0xa4, 0x0b, 0x9a, 0x32, 0x98, 0x43, 0x83, 0xe5, 0x44, 0x95, 0xc3, 0x77,
-	0x81, 0x84, 0x3c, 0x0a, 0xc6, 0xa1, 0xc3, 0xa3, 0x09, 0xfc, 0x36, 0xee, 0xc6, 0xbd, 0x59, 0x31,
-	0xa4, 0x29, 0x9a, 0x2e, 0x67, 0x86, 0x99, 0xb7, 0x0e, 0xd4, 0xa7, 0xf6, 0x62, 0x1e, 0xf7, 0x62,
-	0xe6, 0xae, 0x4e, 0x6d, 0xc2, 0x94, 0x95, 0xfa, 0xcf, 0x0a, 0xd4, 0xa7, 0xc2, 0x7e, 0x1f, 0x6a,
-	0xb9, 0x30, 0x60, 0xa4, 0xab, 0x14, 0x26, 0xab, 0x27, 0xf7, 0x00, 0x26, 0xab, 0xc6, 0x88, 0x56,
-	0x69, 0x35, 0x5b, 0x2c, 0xb9, 0x0b, 0x55, 0xb9, 0x6d, 0x11, 0x77, 0x30, 0x76, 0x25, 0x5a, 0x41,
-	0x41, 0x9f, 0x3b, 0x22, 0xd3, 0xdc, 0x71, 0x92, 0x2e, 0x42, 0x2f, 0x13, 0xa5, 0x96, 0xca, 0x04,
-	0xe4, 0x3e, 0xd4, 0xa2, 0x51, 0x10, 0x47, 0x0c, 0xd3, 0x0f, 0xf3, 0xad, 0x44, 0x01, 0x45, 0x96,
-	0x90, 0xe0, 0xf8, 0x08, 0x08, 0x46, 0xdc, 0xc7, 0xe8, 0x95, 0x68, 0x15, 0x25, 0xc6, 0x88, 0xfb,
-	0xe4, 0x7f, 0x41, 0xc9, 0x2f, 0x90, 0xc5, 0xf6, 0x49, 0xa3, 0x8c, 0x93, 0x5c, 0xca, 0xcb, 0x2d,
-	0xfb, 0x84, 0x7c, 0x04, 0xd5, 0x2c, 0xac, 0x8d, 0xca, 0x4d, 0xb6, 0x61, 0x82, 0x27, 0x0f, 0x61,
-	0x79, 0x64, 0x9f, 0x0f, 0xb9, 0x1f, 0xb3, 0x60, 0x84, 0x0b, 0xf2, 0xdc, 0x46, 0x75, 0xab, 0x24,
-	0x06, 0x4a, 0x14, 0x06, 0xca, 0x75, 0x97, 0x3c, 0x05, 0x08, 0xb9, 0x33, 0x0e, 0x43, 0x2e, 0x28,
-	0x04, 0x70, 0xa4, 0x47, 0xd7, 0x6d, 0x54, 0x93, 0x66, 0x26, 0x34, 0x67, 0x4e, 0x6c, 0x20, 0x91,
-	0x73, 0xca, 0xdd, 0xf1, 0x80, 0x33, 0xfe, 0xd2, 0xe1, 0x38, 0x48, 0xa3, 0x86, 0xbb, 0xbf, 0x7d,
-	0xad, 0xd3, 0x7e, 0x62, 0xaa, 0xa5, 0x96, 0x74, 0x39, 0xba, 0x28, 0x22, 0xef, 0x43, 0xd9, 0xe5,
-	0xa3, 0x20, 0xf2, 0xe2, 0x46, 0x1d, 0x27, 0x7b, 0x77, 0x96, 0xdf, 0x8e, 0x84, 0xd0, 0x14, 0x4b,
-	0x3e, 0x81, 0x9a, 0x1f, 0xb0, 0xe8, 0x34, 0x78, 0xc1, 0x8e, 0x39, 0x6f, 0x2c, 0x5c, 0x1d, 0xd1,
-	0x5e, 0xd0, 0x3f, 0x0d, 0x5e, 0xec, 0x72, 0x4e, 0xab, 0x7e, 0xfa, 0x48, 0x0e, 0x60, 0x25, 0xe4,
-	0xbf, 0x1e, 0x7b, 0x21, 0x67, 0x4e, 0xc8, 0x5d, 0x2f, 0x66, 0x8e, 0x1d, 0xba, 0x8d, 0x45, 0xac,
-	0x0a, 0x6f, 0xcd, 0xde, 0x18, 0x84, 0xb7, 0x11, 0xdd, 0xb6, 0x43, 0x57, 0xe4, 0xc9, 0x05, 0x11,
-	0xf9, 0x2f, 0x58, 0x8c, 0x3d, 0xe7, 0x39, 0x8f, 0x59, 0x7c, 0x3e, 0xc2, 0x33, 0xbb, 0x84, 0xbb,
-	0x54, 0x97, 0x52, 0xeb, 0x7c, 0x24, 0x8e, 0x6d, 0x0c, 0x1b, 0x49, 0x1c, 0x44, 0x55, 0x0a, 0x45,
-	0x70, 0x83, 0x33, 0x1e, 0x86, 0x9e, 0xcb, 0xa3, 0x86, 0x82, 0x2b, 0xf9, 0xf0, 0xa6, 0xc1, 0xf5,
-	0xfc, 0x13, 0x3a, 0x1e, 0x70, 0x23, 0xb5, 0xa7, 0xeb, 0xd1, 0x6c, 0xc5, 0xe6, 0xb7, 0x00, 0x93,
-	0x5d, 0x26, 0x0f, 0x40, 0x09, 0xf9, 0x88, 0xdb, 0x31, 0x1b, 0xfb, 0xb1, 0x37, 0xc0, 0x0c, 0x91,
-	0x4c, 0xb7, 0x28, 0xe5, 0x07, 0x42, 0x2c, 0x92, 0x64, 0x82, 0xe4, 0x67, 0x3c, 0x3c, 0x47, 0xa4,
-	0x2c, 0x6c, 0x09, 0x52, 0x13, 0xe2, 0x3e, 0x77, 0x36, 0xbf, 0x84, 0xe5, 0x4b, 0x5b, 0x4e, 0x3e,
-	0x06, 0x10, 0xe4, 0xc8, 0x42, 0xdb, 0x3f, 0xe1, 0x49, 0x39, 0x98, 0xb9, 0x4f, 0x82, 0x25, 0xa9,
-	0x00, 0xd1, 0x6a, 0x9c, 0x3e, 0x6e, 0x6a, 0xb0, 0x7e, 0xc5, 0x42, 0x45, 0x52, 0x0c, 0xec, 0x28,
-	0x66, 0xc2, 0x8b, 0x7d, 0x34, 0xe0, 0xb9, 0x25, 0x2c, 0x09, 0xc5, 0x4e, 0x22, 0xef, 0x73, 0x47,
-	0xfd, 0x43, 0x01, 0xaa, 0x59, 0x66, 0x91, 0x0d, 0x10, 0x2c, 0x71, 0x7c, 0x3c, 0xe1, 0x9c, 0x32,
-	0xbe, 0x27, 0x84, 0x83, 0x2a, 0xdf, 0x1e, 0xf2, 0x8c, 0x70, 0x84, 0xa4, 0x67, 0x0f, 0x39, 0x59,
-	0x87, 0x72, 0x18, 0x04, 0x43, 0x61, 0x28, 0xa9, 0xfa, 0xb6, 0x78, 0x95, 0x4c, 0x84, 0x0a, 0x34,
-	0x93, 0xa4, 0x5c, 0x11, 0x02, 0xb4, 0xba, 0x07, 0x30, 0xb2, 0xc3, 0xf8, 0x9c, 0x45, 0xde, 0x77,
-	0xb2, 0xaa, 0xcf, 0xd3, 0x2a, 0x4a, 0xfa, 0xde, 0x77, 0x5c, 0x6d, 0x41, 0x35, 0x5b, 0xbb, 0x70,
-	0x74, 0xc4, 0x4f, 0x3c, 0x3f, 0xb7, 0x9a, 0x0a, 0x0a, 0xc4, 0x56, 0xac, 0x43, 0x59, 0x14, 0x9b,
-	0x74, 0x07, 0x4a, 0xf4, 0x36, 0xf7, 0x5d, 0xb1, 0xbe, 0xdf, 0x16, 0xa0, 0x96, 0xd4, 0xb5, 0x5f,
-	0xa0, 0x02, 0xbf, 0x0f, 0xe5, 0x84, 0x63, 0x93, 0xa2, 0x7b, 0xf7, 0x15, 0x45, 0x97, 0xa6, 0x58,
-	0xf5, 0x8f, 0x75, 0x28, 0x27, 0xc2, 0x9f, 0xcd, 0xec, 0x04, 0xe6, 0x30, 0x94, 0x32, 0xca, 0xf8,
-	0x4c, 0xb6, 0xa0, 0xe6, 0xf2, 0xc8, 0x09, 0x3d, 0xc9, 0x42, 0x32, 0xca, 0x79, 0x11, 0x79, 0x07,
-	0xe6, 0x47, 0xa1, 0x97, 0x74, 0x4e, 0xb5, 0xed, 0x8d, 0x59, 0xd3, 0x36, 0x05, 0x80, 0x4a, 0x1c,
-	0xf9, 0x7f, 0x98, 0x17, 0xe9, 0x17, 0x25, 0x85, 0xf1, 0xcd, 0x99, 0xeb, 0x9c, 0x3a, 0x7f, 0x11,
-	0x95, 0x16, 0xe4, 0x13, 0x98, 0x3b, 0x0e, 0xc2, 0x61, 0xa3, 0x8c, 0x11, 0x7a, 0xeb, 0x15, 0x11,
-	0xd2, 0xfd, 0xd8, 0x7e, 0xce, 0x77, 0x83, 0x70, 0xb8, 0x53, 0x6c, 0x14, 0x28, 0x9a, 0x91, 0x5d,
-	0xa8, 0x79, 0x28, 0x67, 0xe8, 0x65, 0x15, 0xc7, 0xbf, 0x99, 0x17, 0x0a, 0x5e, 0xf6, 0x4c, 0xbe,
-	0x81, 0xb5, 0x11, 0x0f, 0x59, 0xc2, 0x3a, 0x79, 0x97, 0x77, 0x7e, 0x8a, 0xcb, 0x95, 0x11, 0x0f,
-	0x2d, 0xf4, 0x31, 0x11, 0x92, 0x3e, 0x2c, 0x8d, 0x42, 0x9e, 0x56, 0x1e, 0xc1, 0x68, 0x58, 0xb9,
-	0x16, 0xb7, 0x1f, 0xbe, 0xc2, 0x69, 0xd3, 0xcc, 0x4c, 0x04, 0xdd, 0xd1, 0xc5, 0xd1, 0xd4, 0x3b,
-	0xf9, 0x00, 0x2a, 0xb1, 0xfd, 0x92, 0x85, 0x76, 0xcc, 0x1b, 0xd5, 0xab, 0x09, 0xdf, 0xb2, 0x5f,
-	0x52, 0x3b, 0xe6, 0xb4, 0x1c, 0xcb, 0x87, 0xd9, 0x35, 0x10, 0x66, 0xd7, 0xc0, 0x5c, 0x4d, 0xa9,
-	0xfd, 0xe7, 0x35, 0xa5, 0xfe, 0xcb, 0xd4, 0x94, 0x85, 0x9f, 0x59, 0x53, 0x3e, 0x83, 0x9a, 0x8d,
-	0x6d, 0x3b, 0x1b, 0x78, 0xfe, 0xf3, 0xc6, 0x22, 0x9e, 0xb7, 0xd7, 0x67, 0xd6, 0x07, 0x84, 0x75,
-	0x3d, 0xff, 0x39, 0x05, 0x3b, 0x7b, 0x26, 0x1f, 0xc1, 0x1c, 0xee, 0xdd, 0x12, 0x4e, 0xe4, 0x55,
-	0x0d, 0x74, 0xfa, 0x17, 0x37, 0x0e, 0x8d, 0xc4, 0xe8, 0xb9, 0x8a, 0xd6, 0x50, 0xae, 0x1e, 0xdd,
-	0xca, 0x4a, 0x1c, 0x85, 0x49, 0xb9, 0x23, 0x1a, 0x2c, 0x84, 0x7c, 0x60, 0xc7, 0xdc, 0x65, 0x43,
-	0xee, 0x7a, 0x76, 0x63, 0xf9, 0xea, 0xde, 0x91, 0x4a, 0xe0, 0xbe, 0xc0, 0xd1, 0x7a, 0x98, 0x7b,
-	0x23, 0xa7, 0xb0, 0x99, 0xdd, 0x0a, 0xe2, 0x38, 0xf4, 0x8e, 0xc6, 0x31, 0x67, 0x67, 0xf6, 0x60,
-	0x8c, 0xfc, 0x41, 0xd0, 0xe7, 0xa3, 0x57, 0xdd, 0x0d, 0x52, 0xa3, 0xaf, 0x84, 0x8d, 0xee, 0xd2,
-	0xf5, 0x68, 0xb6, 0x82, 0xec, 0xc1, 0xe2, 0x0b, 0xdb, 0x8b, 0x07, 0x5e, 0x14, 0x33, 0x49, 0x0e,
-	0x2b, 0x78, 0x10, 0xde, 0x98, 0xe5, 0xfd, 0x30, 0x41, 0x4a, 0x6a, 0x58, 0x78, 0x91, 0x7f, 0x55,
-	0xbf, 0x85, 0xc5, 0xe9, 0x64, 0x20, 0xf7, 0xe1, 0xae, 0x49, 0x35, 0xb3, 0xf5, 0x4c, 0x5c, 0xa0,
-	0x98, 0xf5, 0xcc, 0xd4, 0xd8, 0x41, 0xaf, 0x6f, 0x6a, 0x6d, 0x7d, 0x57, 0xd7, 0x3a, 0xca, 0x2d,
-	0x52, 0x87, 0x0a, 0xd5, 0xbe, 0x3c, 0xd0, 0xa9, 0xd6, 0x51, 0x0a, 0xe2, 0xcd, 0x30, 0x2d, 0xdd,
-	0xe8, 0x89, 0xbb, 0x16, 0x59, 0x86, 0x85, 0x9e, 0x61, 0xb1, 0xfe, 0x81, 0x69, 0x1a, 0xd4, 0xd2,
-	0x3a, 0x4a, 0x49, 0xfd, 0xf3, 0x84, 0xf7, 0xd1, 0xff, 0x6b, 0xd0, 0xe8, 0x6b, 0xf4, 0x2b, 0xbd,
-	0xad, 0xcd, 0x72, 0xfe, 0x26, 0xdc, 0x9f, 0xd2, 0x76, 0xf4, 0x9e, 0xde, 0xfb, 0x82, 0x51, 0x4d,
-	0x48, 0x5b, 0x62, 0x1c, 0xa5, 0x40, 0x5e, 0x87, 0xcd, 0x29, 0xd0, 0xae, 0x61, 0x74, 0x98, 0x41,
-	0x3b, 0x1a, 0xd5, 0x7b, 0x5f, 0x28, 0x45, 0x72, 0x0f, 0x36, 0xa6, 0xf4, 0xda, 0x57, 0xb8, 0x14,
-	0xbd, 0xfd, 0x54, 0xb3, 0x94, 0x92, 0xb8, 0x2c, 0x4e, 0xa9, 0x2d, 0xaa, 0x9b, 0xcc, 0x32, 0x0e,
-	0xa8, 0x32, 0xa7, 0x7e, 0x0f, 0xf3, 0xc8, 0xbe, 0xa2, 0x35, 0x47, 0xfe, 0x65, 0x43, 0xcf, 0x09,
-	0x83, 0x28, 0xa9, 0x73, 0x35, 0x94, 0xed, 0xa3, 0x88, 0xbc, 0x09, 0x0b, 0x49, 0xaf, 0x72, 0xce,
-	0x9c, 0xc0, 0x4d, 0x6b, 0x71, 0x3d, 0x15, 0xb6, 0x03, 0x97, 0x93, 0xc7, 0x40, 0x84, 0x8d, 0xe8,
-	0xa2, 0x12, 0x4e, 0x10, 0x1d, 0xb8, 0xac, 0x19, 0x4a, 0xa2, 0x91, 0xa4, 0x60, 0xd9, 0x27, 0xea,
-	0xdf, 0xe7, 0x60, 0xe9, 0x02, 0x99, 0x93, 0x77, 0x61, 0x65, 0xe8, 0xf9, 0xcc, 0x76, 0xcf, 0x6c,
-	0xdf, 0xe1, 0x2c, 0xd9, 0x5c, 0x39, 0xa1, 0xbd, 0x5b, 0x74, 0x79, 0xe8, 0xf9, 0x2d, 0xa9, 0xdb,
-	0x91, 0x2a, 0xf2, 0x14, 0x54, 0x61, 0x91, 0x20, 0xd9, 0xd1, 0xf8, 0xf8, 0x98, 0x87, 0xec, 0x88,
-	0x1f, 0x07, 0x21, 0x67, 0xe9, 0x55, 0x50, 0x5e, 0x15, 0xf6, 0x6e, 0xd1, 0x7b, 0x43, 0xcf, 0x4f,
-	0x2c, 0x77, 0x10, 0xb9, 0x83, 0x40, 0x4d, 0x5e, 0x0a, 0xc9, 0x67, 0xf0, 0x5a, 0x7e, 0xf8, 0xc0,
-	0x1f, 0x78, 0x3e, 0x67, 0x8e, 0x78, 0x11, 0x73, 0x4c, 0xaa, 0xfc, 0xc6, 0x64, 0x16, 0x06, 0x22,
-	0xda, 0x29, 0x80, 0x7c, 0x09, 0x77, 0x44, 0x92, 0x24, 0x26, 0x03, 0x79, 0xdb, 0x11, 0xe4, 0x55,
-	0xba, 0xa6, 0x02, 0x62, 0x29, 0x5a, 0x11, 0xb6, 0xed, 0x9c, 0xa9, 0xa0, 0xb1, 0x8f, 0x01, 0xfc,
-	0x20, 0x23, 0xc1, 0xb9, 0x9b, 0xf8, 0xa9, 0x4a, 0x03, 0x61, 0xfd, 0x2b, 0x50, 0x6c, 0x77, 0xe8,
-	0x45, 0x91, 0x98, 0xc8, 0x28, 0x18, 0x78, 0xce, 0x39, 0x56, 0xe3, 0xc5, 0xed, 0x27, 0x37, 0x28,
-	0xae, 0xcd, 0x56, 0x6a, 0x6b, 0xa2, 0x29, 0x5d, 0xb2, 0xa7, 0x05, 0xea, 0x6f, 0x60, 0xe9, 0x02,
-	0x86, 0x6c, 0xc1, 0x6b, 0xad, 0xce, 0xbe, 0xde, 0xef, 0xeb, 0x46, 0x8f, 0x99, 0x46, 0x57, 0x6f,
-	0x3f, 0xbb, 0x70, 0xf0, 0x97, 0xa0, 0x66, 0xe9, 0xfb, 0x1a, 0xeb, 0x5b, 0x54, 0x6f, 0x5b, 0x4a,
-	0x41, 0xa4, 0x12, 0x0a, 0x76, 0xbb, 0xda, 0xd7, 0xfa, 0x4e, 0x57, 0x53, 0x8a, 0xe4, 0xbf, 0x41,
-	0x15, 0xa2, 0x0e, 0xd3, 0x7a, 0x16, 0x7d, 0xc6, 0x0e, 0x75, 0x6b, 0x2f, 0x53, 0xb3, 0xce, 0x01,
-	0x95, 0xf9, 0x51, 0xda, 0x59, 0x05, 0x72, 0x79, 0xff, 0xd5, 0x26, 0x94, 0x93, 0x8a, 0x25, 0x4e,
-	0x2e, 0x1e, 0x6b, 0x36, 0xe2, 0xa1, 0xc3, 0x7d, 0xf9, 0x01, 0x61, 0x9e, 0xd6, 0x51, 0x68, 0x4a,
-	0x99, 0xfa, 0xb7, 0x22, 0xac, 0x5d, 0xaa, 0xc2, 0xbb, 0x1e, 0x1f, 0xb8, 0x64, 0x11, 0x8a, 0x9e,
-	0x8b, 0x31, 0xab, 0xd2, 0xa2, 0x27, 0xf8, 0x48, 0xd2, 0xb7, 0xfc, 0x62, 0xf5, 0xde, 0x8d, 0xea,
-	0x39, 0x7a, 0x6a, 0xe2, 0x6f, 0x8e, 0xcb, 0x57, 0x61, 0x7e, 0x60, 0x1f, 0xf1, 0x41, 0x92, 0x4b,
-	0xf2, 0x45, 0x48, 0x91, 0x47, 0x1b, 0x25, 0x2c, 0xa6, 0xf2, 0x45, 0x34, 0x70, 0x5e, 0xc4, 0x92,
-	0x6a, 0xe4, 0xe2, 0x31, 0xa8, 0x50, 0xf0, 0xa2, 0xa4, 0x64, 0xb9, 0xea, 0xef, 0x0a, 0x50, 0xcd,
-	0x06, 0x10, 0x69, 0xbf, 0xab, 0x6b, 0xdd, 0xce, 0x2c, 0xda, 0x51, 0xa0, 0xde, 0xdf, 0x33, 0xa8,
-	0xc5, 0x5a, 0xbd, 0xfe, 0xa1, 0x46, 0x95, 0x02, 0x59, 0x80, 0xaa, 0xd9, 0xa2, 0xad, 0x2f, 0x68,
-	0xcb, 0xdc, 0x53, 0x8a, 0x64, 0x05, 0x96, 0xf6, 0x0f, 0xba, 0x96, 0x6e, 0x76, 0x35, 0xd6, 0xde,
-	0x33, 0xf4, 0xb6, 0xa6, 0x94, 0xc8, 0x22, 0x40, 0x7b, 0x4f, 0x6b, 0x3f, 0xdd, 0x31, 0xbe, 0xd6,
-	0xfa, 0xca, 0x9c, 0xe0, 0xc2, 0x0e, 0x35, 0xcc, 0x8e, 0x71, 0xd8, 0x53, 0xe6, 0x49, 0x0d, 0xca,
-	0x3b, 0x86, 0xd1, 0xd5, 0x5a, 0x3d, 0xe5, 0xb6, 0xfa, 0x97, 0x02, 0x2c, 0x5f, 0x0a, 0x01, 0xf9,
-	0x1c, 0xe6, 0x8f, 0xc5, 0xfc, 0x1a, 0x05, 0x2c, 0x0e, 0x0f, 0x6f, 0x1e, 0x38, 0x2a, 0x0d, 0xc9,
-	0x7b, 0xb0, 0x7a, 0xec, 0x85, 0x91, 0xfc, 0x2a, 0xc4, 0x9c, 0x71, 0x14, 0x07, 0x43, 0x1e, 0x46,
-	0x18, 0xbe, 0x0a, 0x1e, 0x7c, 0x82, 0x7a, 0x91, 0xca, 0xed, 0x54, 0x4b, 0x9e, 0x88, 0x36, 0x20,
-	0x1e, 0x87, 0xbe, 0x38, 0x1e, 0x13, 0xa3, 0xd2, 0xc4, 0x28, 0x53, 0x67, 0x46, 0xea, 0x5f, 0x0b,
-	0x50, 0x4e, 0xfa, 0x11, 0xf2, 0x64, 0xd2, 0xbd, 0x14, 0xae, 0xeb, 0x63, 0xb3, 0xde, 0xe5, 0x02,
-	0x93, 0x4c, 0xf1, 0xc1, 0xe4, 0xbe, 0x90, 0x63, 0x92, 0x7c, 0xda, 0x8b, 0xbb, 0xc5, 0xe7, 0x50,
-	0x4f, 0x7c, 0xc9, 0x4a, 0x5f, 0xc2, 0xe3, 0x76, 0xef, 0xca, 0xa1, 0xf1, 0x5c, 0xd5, 0x12, 0x13,
-	0xf1, 0xa2, 0x86, 0x50, 0xcd, 0xfa, 0x22, 0xf2, 0x08, 0x4a, 0x82, 0x3e, 0xae, 0x5d, 0x80, 0x40,
-	0x91, 0x0f, 0xa1, 0x72, 0xcc, 0xf9, 0x4f, 0x18, 0xb7, 0x7c, 0xcc, 0xf1, 0x41, 0xfd, 0x53, 0x01,
-	0x60, 0xd2, 0xf6, 0x10, 0x05, 0x4a, 0xe3, 0x70, 0x90, 0x5c, 0x37, 0xc4, 0x23, 0xd9, 0x84, 0xca,
-	0xc0, 0xf6, 0x4f, 0xc6, 0xf6, 0x49, 0x5a, 0x42, 0xb2, 0x77, 0xf2, 0x36, 0x7e, 0x23, 0xc3, 0x2f,
-	0x5c, 0xdc, 0x65, 0x4e, 0x30, 0xf6, 0xe3, 0xf0, 0x3c, 0x49, 0x83, 0xe5, 0x89, 0xa6, 0x2d, 0x15,
-	0xe4, 0x53, 0xa8, 0x8c, 0x06, 0x76, 0x8c, 0xcd, 0xf5, 0x1c, 0xce, 0x52, 0xbd, 0xba, 0x0b, 0x33,
-	0x13, 0x24, 0xcd, 0x6c, 0xd4, 0xdf, 0x17, 0x00, 0x26, 0x4d, 0xd2, 0x8c, 0x6f, 0x05, 0x72, 0xda,
-	0xd3, 0xdf, 0x0a, 0x1e, 0xc1, 0x72, 0x74, 0x1a, 0x84, 0x31, 0xcb, 0x5f, 0x7d, 0xe4, 0x42, 0x14,
-	0x54, 0x74, 0x66, 0xdd, 0x7f, 0x4a, 0x37, 0xbb, 0xff, 0xa8, 0x3f, 0x14, 0xa1, 0x9e, 0x6f, 0xba,
-	0x66, 0x04, 0xf0, 0xd3, 0x84, 0x7e, 0x8a, 0x57, 0x77, 0xfe, 0x79, 0x0f, 0x4d, 0xfc, 0xcd, 0x91,
-	0x4e, 0x03, 0xca, 0x8e, 0x2d, 0xa7, 0x2d, 0x0b, 0x73, 0xfa, 0x4a, 0x7a, 0x50, 0x4b, 0x5b, 0xb9,
-	0xf4, 0x3e, 0x57, 0xdb, 0x7e, 0x7c, 0xed, 0x00, 0xad, 0x89, 0x0d, 0xcd, 0x3b, 0xd8, 0x7c, 0x03,
-	0x6a, 0x39, 0x9d, 0xb8, 0x42, 0xc6, 0xfc, 0x65, 0x9c, 0xac, 0x05, 0x9f, 0xd5, 0xc7, 0x50, 0xcd,
-	0xe6, 0x47, 0x56, 0x41, 0x99, 0xc1, 0x56, 0x55, 0x98, 0x37, 0xf7, 0x0c, 0xcb, 0x50, 0x0a, 0xea,
-	0x21, 0xac, 0x5f, 0xd1, 0x3d, 0x8a, 0x0e, 0x66, 0xd2, 0x86, 0x66, 0x5b, 0x97, 0x4d, 0x47, 0x40,
-	0x36, 0xa0, 0x92, 0xf5, 0xa7, 0x72, 0xc3, 0xca, 0x67, 0xd2, 0x5a, 0xfd, 0xa1, 0x00, 0x0b, 0x53,
-	0x9d, 0xa3, 0x38, 0x0c, 0x22, 0x7d, 0x73, 0x9f, 0x09, 0xb2, 0xaa, 0xe1, 0x9b, 0xe9, 0x97, 0x02,
-	0x44, 0xd9, 0x2f, 0xf3, 0xa8, 0x62, 0x82, 0xb2, 0x5f, 0x4e, 0x50, 0x9f, 0xc2, 0xdd, 0x68, 0x3c,
-	0x1a, 0x05, 0x61, 0x1c, 0x31, 0xdb, 0x75, 0x3d, 0x11, 0x0d, 0x7b, 0x80, 0x5c, 0xce, 0x23, 0xf9,
-	0x8d, 0xb9, 0x42, 0x37, 0x52, 0x48, 0x2b, 0x43, 0x50, 0x09, 0x78, 0xf8, 0x04, 0xaa, 0x59, 0xa6,
-	0x91, 0x35, 0x20, 0xbb, 0xfa, 0xd7, 0x5a, 0x87, 0xd1, 0x96, 0xa5, 0xb1, 0x8e, 0xb6, 0xdb, 0x3a,
-	0xe8, 0x5a, 0xca, 0x2d, 0x41, 0xcf, 0xa6, 0x46, 0x99, 0xa9, 0xd1, 0xbe, 0x68, 0x1b, 0x1f, 0x7e,
-	0x0f, 0xcb, 0x97, 0x6e, 0x33, 0xa2, 0xe1, 0x4c, 0xba, 0x59, 0xd6, 0xa6, 0x5a, 0x47, 0xb7, 0x58,
-	0xbb, 0x45, 0x3b, 0x97, 0xbb, 0xd2, 0x59, 0xa0, 0xb6, 0xd1, 0xeb, 0xe8, 0x49, 0xef, 0x8b, 0x5d,
-	0xe9, 0x2c, 0x50, 0xab, 0x7b, 0xd8, 0x7a, 0xd6, 0x57, 0x8a, 0x0f, 0x7f, 0x2c, 0xc0, 0xe2, 0x74,
-	0xe2, 0x89, 0x5e, 0xbb, 0xd5, 0xb6, 0xb0, 0x27, 0xe8, 0xb6, 0xac, 0x5d, 0x83, 0xee, 0x5f, 0x1e,
-	0xf8, 0x22, 0xe0, 0x50, 0xdb, 0x61, 0x2d, 0xd3, 0xec, 0xea, 0xed, 0x5c, 0x3b, 0x7c, 0x11, 0xb4,
-	0x6f, 0xec, 0xe8, 0x5d, 0x4d, 0x60, 0x95, 0x22, 0xb9, 0x0b, 0xeb, 0x17, 0xf5, 0xad, 0x5e, 0x87,
-	0x1a, 0x7a, 0x47, 0x29, 0x91, 0x75, 0x58, 0xb9, 0xa8, 0xd4, 0x8d, 0xbe, 0x32, 0x77, 0x74, 0x1b,
-	0xff, 0x87, 0xf5, 0xe4, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x88, 0x76, 0xcd, 0xf3, 0x1a,
-	0x00, 0x00,
+var fileDescriptor_7aa923a38d4cd9d3 = []byte{
+	// 2773 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xdf, 0x72, 0xdb, 0xc6,
+	0xd5, 0x37, 0x49, 0xc9, 0x24, 0x0f, 0x29, 0x09, 0x5c, 0xc9, 0x16, 0x2d, 0x47, 0xb1, 0x8c, 0x7c,
+	0xf9, 0xea, 0xda, 0x89, 0x9a, 0xc8, 0x49, 0x26, 0x9d, 0xfc, 0xa5, 0x48, 0x28, 0xc2, 0x98, 0x22,
+	0x90, 0x25, 0x14, 0xc5, 0xb9, 0xc8, 0x06, 0x02, 0x56, 0x12, 0xc6, 0x24, 0xc0, 0x02, 0xa0, 0x6c,
+	0x65, 0x9a, 0xe9, 0x4c, 0xaf, 0xfa, 0x0c, 0xcd, 0x4c, 0xef, 0x3b, 0xcd, 0x3b, 0xb4, 0xbd, 0xed,
+	0x7d, 0x2f, 0xfa, 0x14, 0x7d, 0x80, 0xde, 0x74, 0xf6, 0x2c, 0x08, 0x82, 0x12, 0x64, 0x29, 0x4d,
+	0x6e, 0x28, 0xec, 0x39, 0xbf, 0x73, 0x76, 0xf7, 0xec, 0xee, 0xf9, 0x9d, 0x5d, 0x41, 0xed, 0x88,
+	0x73, 0x37, 0xda, 0x1c, 0x85, 0x41, 0x1c, 0x10, 0x32, 0xb4, 0x47, 0xd1, 0xe6, 0x61, 0x10, 0x3c,
+	0xf3, 0xfc, 0xe3, 0x4d, 0xd4, 0xa8, 0xff, 0x2e, 0x42, 0x7d, 0x87, 0x73, 0x77, 0x8f, 0xc7, 0xb6,
+	0x6b, 0xc7, 0x36, 0x19, 0xc2, 0xed, 0x51, 0x18, 0x38, 0x3c, 0x8a, 0x3c, 0xff, 0x98, 0x79, 0x7e,
+	0x14, 0x87, 0x63, 0x27, 0xf6, 0x02, 0xbf, 0x59, 0xd8, 0x28, 0x3c, 0x58, 0xdc, 0x7a, 0x6f, 0xf3,
+	0xa2, 0x97, 0xcd, 0xac, 0x87, 0x4d, 0x33, 0x35, 0xd7, 0xa7, 0xd6, 0xf4, 0xd6, 0x28, 0x4f, 0x4c,
+	0xee, 0x43, 0x3d, 0x3a, 0xb1, 0x43, 0x97, 0xf9, 0xe3, 0xe1, 0x21, 0x0f, 0x9b, 0xc5, 0x8d, 0xc2,
+	0x83, 0x79, 0x5a, 0x43, 0x59, 0x0f, 0x45, 0x02, 0x12, 0x07, 0xb1, 0x3d, 0x60, 0x28, 0x8c, 0x9a,
+	0x25, 0x09, 0x41, 0x59, 0x1f, 0x45, 0x64, 0x05, 0xe6, 0xfd, 0xc0, 0x77, 0x78, 0x73, 0x7e, 0xa3,
+	0xf0, 0x60, 0x8e, 0xca, 0x06, 0x79, 0x1b, 0x56, 0x8e, 0xb9, 0xcf, 0x43, 0x5b, 0xf4, 0xc4, 0x62,
+	0x6f, 0xc8, 0xa3, 0xd8, 0x1e, 0x8e, 0x9a, 0x73, 0x1b, 0x85, 0x07, 0x25, 0xba, 0x3c, 0xd5, 0x59,
+	0x13, 0x95, 0x6a, 0xc3, 0xad, 0xdc, 0xe1, 0x93, 0x65, 0x58, 0x32, 0xa9, 0xd1, 0xd6, 0xfa, 0x7d,
+	0xb6, 0xdf, 0x7b, 0xd2, 0x33, 0x0e, 0x7a, 0xca, 0x0d, 0xb2, 0x0a, 0xcb, 0x13, 0x61, 0xab, 0xcf,
+	0xda, 0xc6, 0x9e, 0xd9, 0xd5, 0x2c, 0x4d, 0x29, 0x90, 0x35, 0xb8, 0x9d, 0x51, 0xe8, 0xbd, 0x36,
+	0xd5, 0xf6, 0xb4, 0x9e, 0xd5, 0xea, 0x2a, 0x45, 0xf5, 0x87, 0x02, 0x28, 0xad, 0x53, 0xdb, 0x1b,
+	0xd8, 0x87, 0xde, 0xc0, 0x8b, 0xcf, 0x44, 0xec, 0xc8, 0x87, 0x50, 0x19, 0x26, 0xf1, 0xc3, 0x38,
+	0xd7, 0xb6, 0x36, 0xae, 0x8a, 0x33, 0x4d, 0x2d, 0xc8, 0x57, 0xb0, 0x12, 0xf1, 0xf0, 0xd4, 0x73,
+	0x38, 0xb3, 0x33, 0x9e, 0x9b, 0xc5, 0x8d, 0xd2, 0x83, 0xda, 0xd6, 0x2f, 0xf2, 0x3c, 0xf5, 0x25,
+	0x3e, 0x3b, 0x10, 0xba, 0x1c, 0x5d, 0x14, 0xaa, 0xff, 0x29, 0xc2, 0x72, 0x0e, 0x98, 0xbc, 0x0f,
+	0xcd, 0x28, 0xb6, 0xc3, 0x78, 0x1a, 0x57, 0x16, 0xf2, 0x28, 0x0e, 0x3d, 0x27, 0xc6, 0x19, 0x94,
+	0xe8, 0x6d, 0xd4, 0xa7, 0xb1, 0xa5, 0x89, 0x96, 0xbc, 0x03, 0xb7, 0xb9, 0xef, 0xe6, 0xd9, 0x15,
+	0xd1, 0x6e, 0x85, 0xfb, 0xee, 0x45, 0xab, 0xb7, 0x60, 0x65, 0xc8, 0x43, 0xe7, 0xc4, 0xf6, 0x63,
+	0xe6, 0xb9, 0x53, 0x1b, 0xb1, 0x1b, 0xaa, 0x94, 0x4c, 0x74, 0xba, 0x9b, 0x5a, 0x6c, 0xc2, 0x64,
+	0x42, 0x33, 0x06, 0x73, 0x68, 0xd0, 0x48, 0x54, 0x19, 0x7c, 0x17, 0x48, 0xc8, 0xa3, 0x60, 0x1c,
+	0x3a, 0x3c, 0x9a, 0xc2, 0x6f, 0xe2, 0x6a, 0xac, 0xe7, 0xc5, 0x90, 0x4e, 0xd0, 0xb4, 0x91, 0x1a,
+	0xa6, 0xde, 0x3a, 0x50, 0x9f, 0x59, 0x8b, 0x79, 0x5c, 0x8b, 0xdc, 0x55, 0x9d, 0x59, 0x84, 0x19,
+	0x2b, 0xf5, 0x9f, 0x00, 0xf5, 0x99, 0xb0, 0xdf, 0x83, 0x5a, 0x26, 0x0c, 0x18, 0xe9, 0x2a, 0x85,
+	0xe9, 0xec, 0xc9, 0x3a, 0xc0, 0x74, 0xd6, 0x18, 0xd1, 0x2a, 0xad, 0xa6, 0x93, 0x25, 0x77, 0xa1,
+	0x2a, 0x97, 0x2d, 0xe2, 0x0e, 0xc6, 0xae, 0x44, 0x2b, 0x28, 0xe8, 0x73, 0x47, 0x9c, 0x34, 0x77,
+	0x9c, 0x1c, 0x17, 0xa1, 0x97, 0x07, 0xa5, 0x36, 0x91, 0x09, 0xc8, 0x3d, 0xa8, 0x45, 0xa3, 0x20,
+	0x8e, 0x18, 0x1e, 0x3f, 0x3c, 0x6f, 0x25, 0x0a, 0x28, 0xb2, 0x84, 0x04, 0xfb, 0x47, 0x40, 0x30,
+	0xe2, 0x3e, 0x46, 0xaf, 0x44, 0xab, 0x28, 0x31, 0x46, 0xdc, 0x27, 0xbf, 0x04, 0x25, 0x3b, 0x41,
+	0x16, 0xdb, 0xc7, 0xcd, 0x32, 0x0e, 0x72, 0x29, 0x2b, 0xb7, 0xec, 0x63, 0xf2, 0x01, 0x54, 0xd3,
+	0xb0, 0x36, 0x2b, 0xd7, 0x59, 0x86, 0x29, 0x9e, 0x3c, 0x84, 0xc6, 0xc8, 0x3e, 0x1b, 0x72, 0x3f,
+	0x66, 0xc1, 0x08, 0x27, 0xe4, 0xb9, 0xcd, 0xea, 0x46, 0x49, 0x74, 0x94, 0x28, 0x0c, 0x94, 0xeb,
+	0x2e, 0x79, 0x02, 0x10, 0x72, 0x67, 0x1c, 0x86, 0x5c, 0xa4, 0x10, 0xc0, 0x9e, 0x1e, 0x5d, 0xb5,
+	0x50, 0x9b, 0x34, 0x35, 0xa1, 0x19, 0x73, 0x62, 0x03, 0x89, 0x9c, 0x13, 0xee, 0x8e, 0x07, 0x9c,
+	0xf1, 0x17, 0x0e, 0xc7, 0x4e, 0x9a, 0x35, 0x5c, 0xfd, 0xad, 0x2b, 0x9d, 0xf6, 0x13, 0x53, 0x6d,
+	0x62, 0x49, 0x1b, 0xd1, 0x79, 0x11, 0x79, 0x17, 0xca, 0x2e, 0x1f, 0x05, 0x91, 0x17, 0x37, 0xeb,
+	0x38, 0xd8, 0xbb, 0x79, 0x7e, 0x3b, 0x12, 0x42, 0x27, 0x58, 0xf2, 0x11, 0xd4, 0xfc, 0x80, 0x45,
+	0x27, 0xc1, 0x73, 0x76, 0xc4, 0x79, 0x73, 0xe1, 0xf2, 0x88, 0xf6, 0x82, 0xfe, 0x49, 0xf0, 0x7c,
+	0x87, 0x73, 0x5a, 0xf5, 0x27, 0x9f, 0x64, 0x1f, 0x96, 0x43, 0xfe, 0x9b, 0xb1, 0x17, 0x72, 0xe6,
+	0x84, 0xdc, 0xf5, 0x62, 0xe6, 0xd8, 0xa1, 0xdb, 0x5c, 0x44, 0x56, 0x78, 0x3d, 0x7f, 0x61, 0x10,
+	0xde, 0x46, 0x74, 0xdb, 0x0e, 0x5d, 0x71, 0x4e, 0xce, 0x89, 0xc8, 0xff, 0xc1, 0x62, 0xec, 0x39,
+	0xcf, 0x78, 0xcc, 0xe2, 0xb3, 0x11, 0xee, 0xd9, 0x25, 0x5c, 0xa5, 0xba, 0x94, 0x5a, 0x67, 0x23,
+	0xb1, 0x6d, 0x63, 0xb8, 0x93, 0xc4, 0x41, 0xb0, 0x52, 0x28, 0x82, 0x1b, 0x9c, 0xf2, 0x30, 0xf4,
+	0x5c, 0x1e, 0x35, 0x15, 0x9c, 0xc9, 0xfb, 0xd7, 0x0d, 0xae, 0xe7, 0x1f, 0xd3, 0xf1, 0x80, 0x1b,
+	0x13, 0x7b, 0xba, 0x1a, 0xe5, 0x2b, 0xc8, 0xd7, 0xd0, 0x70, 0x02, 0xff, 0xc8, 0x0b, 0x87, 0xf2,
+	0x4c, 0x0c, 0x03, 0x97, 0x37, 0x1b, 0x38, 0xe1, 0xb7, 0xaf, 0xec, 0xad, 0x9d, 0xb1, 0xdc, 0x0b,
+	0x5c, 0x4e, 0x15, 0xe7, 0x9c, 0x64, 0xed, 0x1b, 0x80, 0xe9, 0x2e, 0x22, 0x0f, 0x40, 0x09, 0xf9,
+	0x88, 0xdb, 0x31, 0x1b, 0xfb, 0xb1, 0x37, 0xc0, 0x13, 0x28, 0x33, 0xe9, 0xa2, 0x94, 0xef, 0x0b,
+	0xb1, 0x38, 0x84, 0x53, 0x24, 0x3f, 0xe5, 0xe1, 0x19, 0x22, 0x25, 0x71, 0x26, 0x48, 0x4d, 0x88,
+	0xfb, 0xdc, 0x59, 0xfb, 0x1c, 0x1a, 0x17, 0xb6, 0x14, 0xf9, 0x10, 0x40, 0x24, 0x5f, 0x16, 0xda,
+	0xfe, 0x31, 0x4f, 0xe8, 0x26, 0x77, 0x1f, 0x88, 0x2c, 0x4c, 0x05, 0x88, 0x56, 0xe3, 0xc9, 0xe7,
+	0x9a, 0x06, 0xab, 0x97, 0x04, 0x52, 0x1c, 0xba, 0x81, 0x1d, 0xc5, 0x4c, 0x78, 0xb1, 0x0f, 0x07,
+	0x3c, 0x33, 0x85, 0x25, 0xa1, 0xd8, 0x4e, 0xe4, 0x7d, 0xee, 0xa8, 0xbf, 0x05, 0xe5, 0x7c, 0x84,
+	0xc8, 0x7d, 0x58, 0x6f, 0x1b, 0xbd, 0x1d, 0x9d, 0xee, 0xb5, 0x2c, 0xdd, 0xe8, 0xb1, 0x3d, 0xa3,
+	0xa3, 0xb1, 0xfd, 0x5e, 0xdf, 0xd4, 0xda, 0xfa, 0x8e, 0xae, 0x75, 0x94, 0x1b, 0xf9, 0x90, 0xfe,
+	0xd3, 0x5e, 0x7b, 0x97, 0x1a, 0x3d, 0x63, 0xbf, 0xaf, 0x14, 0x88, 0x0a, 0xaf, 0x5e, 0x84, 0xb4,
+	0xb2, 0x98, 0xa2, 0xfa, 0xc7, 0x02, 0x54, 0xd3, 0xbc, 0x41, 0xee, 0x80, 0xc8, 0x81, 0x47, 0x47,
+	0xd3, 0x8c, 0x5a, 0xc6, 0x76, 0x92, 0x4e, 0x51, 0xe5, 0xdb, 0x43, 0x9e, 0xa6, 0x53, 0x21, 0xe9,
+	0xd9, 0x43, 0x4e, 0x56, 0xa1, 0x1c, 0x06, 0xc1, 0x50, 0x18, 0x4a, 0x22, 0xba, 0x29, 0x9a, 0x32,
+	0xcf, 0xa2, 0x02, 0xcd, 0x24, 0xe5, 0x54, 0x84, 0x00, 0xad, 0xd6, 0x01, 0x46, 0x76, 0x18, 0x9f,
+	0xb1, 0xc8, 0xfb, 0x56, 0xd6, 0x2c, 0xf3, 0xb4, 0x8a, 0x92, 0xbe, 0xf7, 0x2d, 0x57, 0x5b, 0x50,
+	0x4d, 0x23, 0x2f, 0x1c, 0x1d, 0xf2, 0x63, 0xcf, 0xcf, 0xc4, 0xb2, 0x82, 0x02, 0xb1, 0x11, 0x56,
+	0xa1, 0x2c, 0xa8, 0x74, 0xb2, 0xfe, 0x25, 0x7a, 0x93, 0xfb, 0xae, 0x88, 0xee, 0xef, 0x0b, 0x50,
+	0x4b, 0x58, 0xfb, 0x67, 0xa8, 0x2f, 0xde, 0x85, 0x72, 0xc2, 0x20, 0x49, 0x49, 0x71, 0xf7, 0x25,
+	0x25, 0x05, 0x9d, 0x60, 0xd5, 0x3f, 0xd5, 0xa1, 0x9c, 0x08, 0x7f, 0x32, 0x6f, 0x11, 0x98, 0xc3,
+	0x50, 0xca, 0x28, 0xe3, 0x37, 0xd9, 0x80, 0x9a, 0xcb, 0x23, 0x27, 0xf4, 0x64, 0x8e, 0x95, 0x51,
+	0xce, 0x8a, 0xc8, 0xaf, 0x60, 0x7e, 0x14, 0x7a, 0x49, 0x5d, 0x58, 0xdb, 0xba, 0x93, 0x37, 0x6c,
+	0x53, 0x00, 0xa8, 0xc4, 0x91, 0x5f, 0xc3, 0xbc, 0x48, 0x2e, 0x51, 0x42, 0xfb, 0xaf, 0xe5, 0xce,
+	0x73, 0x66, 0xf7, 0x47, 0x54, 0x5a, 0x90, 0x8f, 0x60, 0xee, 0x28, 0x08, 0x87, 0xcd, 0x32, 0x46,
+	0xe8, 0xf5, 0x97, 0x44, 0x48, 0xf7, 0x63, 0xfb, 0x19, 0xdf, 0x09, 0xc2, 0xe1, 0x76, 0xb1, 0x59,
+	0xa0, 0x68, 0x46, 0x76, 0xa0, 0xe6, 0xa1, 0x9c, 0xa1, 0x97, 0x15, 0xec, 0xff, 0x7a, 0x5e, 0x28,
+	0x78, 0xe9, 0x37, 0xf9, 0x0a, 0x6e, 0x8f, 0x78, 0xc8, 0x92, 0x9c, 0x9a, 0x75, 0x79, 0xeb, 0xc7,
+	0xb8, 0x5c, 0x1e, 0xf1, 0xd0, 0x42, 0x1f, 0x53, 0x21, 0xe9, 0xc3, 0xd2, 0x28, 0xe4, 0x13, 0x5e,
+	0x15, 0xf9, 0x1a, 0x79, 0x79, 0x71, 0xeb, 0xe1, 0x4b, 0x9c, 0x6e, 0x9a, 0xa9, 0x89, 0x48, 0xe6,
+	0x74, 0x71, 0x34, 0xd3, 0x26, 0xef, 0x41, 0x25, 0xb6, 0x5f, 0xb0, 0xd0, 0x8e, 0x79, 0xb3, 0x7a,
+	0x39, 0x9d, 0x59, 0xf6, 0x0b, 0x6a, 0xc7, 0x9c, 0x96, 0x63, 0xf9, 0x91, 0xcf, 0xf0, 0x90, 0xcf,
+	0xf0, 0x19, 0xc6, 0xac, 0xfd, 0xef, 0x8c, 0x59, 0xff, 0x79, 0x18, 0x73, 0xe1, 0x27, 0x32, 0xe6,
+	0x27, 0x50, 0xb3, 0xf1, 0x52, 0xc2, 0x06, 0x9e, 0xff, 0xac, 0xb9, 0x88, 0xfb, 0xed, 0xd5, 0x5c,
+	0x3e, 0x42, 0x58, 0xd7, 0xf3, 0x9f, 0x51, 0xb0, 0xd3, 0x6f, 0xf2, 0x01, 0xcc, 0xe1, 0xda, 0x2d,
+	0xe1, 0x40, 0x5e, 0x76, 0x3d, 0x98, 0xfc, 0xc5, 0x85, 0x43, 0x23, 0xd1, 0x7b, 0x86, 0xaf, 0x9b,
+	0xca, 0xe5, 0xbd, 0x5b, 0x29, 0x81, 0x53, 0x98, 0x92, 0x39, 0xd1, 0x60, 0x21, 0xe4, 0x03, 0x3b,
+	0xe6, 0x2e, 0x1b, 0x72, 0xd7, 0xb3, 0x9b, 0x8d, 0xcb, 0x2b, 0x63, 0x2a, 0x81, 0x7b, 0x02, 0x47,
+	0xeb, 0x61, 0xa6, 0x45, 0x4e, 0x60, 0x2d, 0xbd, 0xf3, 0xc4, 0x71, 0xe8, 0x1d, 0x8e, 0x63, 0xce,
+	0x4e, 0xed, 0xc1, 0x18, 0xf3, 0x07, 0x41, 0x9f, 0x8f, 0x5e, 0x76, 0xf3, 0x99, 0x18, 0x7d, 0x21,
+	0x6c, 0x74, 0x97, 0xae, 0x46, 0xf9, 0x0a, 0xb2, 0x0b, 0x8b, 0xcf, 0x6d, 0x2f, 0x1e, 0x78, 0x51,
+	0xcc, 0x64, 0x72, 0x58, 0xc6, 0x8d, 0x70, 0x3f, 0xcf, 0xfb, 0x41, 0x82, 0x94, 0xa9, 0x61, 0xe1,
+	0x79, 0xb6, 0xa9, 0x7e, 0x03, 0x8b, 0xb3, 0x87, 0x81, 0xdc, 0x83, 0xbb, 0x26, 0xd5, 0xcc, 0xd6,
+	0x53, 0x71, 0x3d, 0x64, 0xd6, 0x53, 0xf3, 0x3c, 0xdf, 0xd5, 0xa1, 0x42, 0xb5, 0xcf, 0xf7, 0x75,
+	0xaa, 0x75, 0x94, 0x82, 0x68, 0x19, 0xa6, 0x20, 0x35, 0x71, 0x93, 0x24, 0x0d, 0x58, 0xe8, 0x19,
+	0x16, 0xeb, 0xef, 0x9b, 0xa6, 0x41, 0x2d, 0xad, 0xa3, 0x94, 0xd4, 0xbf, 0x4c, 0xf3, 0x3e, 0xfa,
+	0x7f, 0x05, 0x9a, 0x7d, 0x8d, 0x7e, 0xa1, 0xb7, 0xb5, 0x3c, 0xe7, 0xaf, 0xc1, 0xbd, 0x19, 0x6d,
+	0x47, 0xef, 0xe9, 0xbd, 0xcf, 0x18, 0xd5, 0x84, 0x14, 0xc9, 0x53, 0x29, 0x90, 0x57, 0x61, 0x6d,
+	0x06, 0xb4, 0x63, 0x18, 0x1d, 0x66, 0xd0, 0x8e, 0x46, 0xf5, 0xde, 0x67, 0x4a, 0x91, 0xac, 0xc3,
+	0x9d, 0x19, 0xbd, 0xf6, 0x05, 0x4e, 0x45, 0x6f, 0x3f, 0xd1, 0x2c, 0xa5, 0x24, 0xae, 0xc2, 0x33,
+	0x6a, 0x8b, 0xea, 0x26, 0xb3, 0x8c, 0x7d, 0xaa, 0xcc, 0xa9, 0xdf, 0xc1, 0x3c, 0x66, 0x5f, 0x71,
+	0xf1, 0xc0, 0xfc, 0xcb, 0x86, 0x9e, 0x13, 0x06, 0x51, 0xc2, 0x73, 0x35, 0x94, 0xed, 0xa1, 0x88,
+	0xbc, 0x06, 0x0b, 0x49, 0xa5, 0x74, 0xc6, 0x1c, 0x51, 0x87, 0x49, 0x8a, 0xa8, 0x4f, 0x84, 0x6d,
+	0x51, 0x40, 0xbc, 0x01, 0x44, 0xd8, 0x88, 0x1a, 0x31, 0xc9, 0x09, 0xe2, 0x7e, 0x21, 0x39, 0x43,
+	0x49, 0x34, 0x32, 0x29, 0x58, 0xf6, 0xb1, 0xfa, 0xaf, 0x39, 0x58, 0x3a, 0x97, 0xcc, 0xc9, 0x5b,
+	0xb0, 0x3c, 0xf4, 0x7c, 0x66, 0xbb, 0xa7, 0xb6, 0xef, 0x70, 0x96, 0x2c, 0xae, 0x1c, 0xd0, 0xee,
+	0x0d, 0xda, 0x18, 0x7a, 0x7e, 0x4b, 0xea, 0xb6, 0xa5, 0x8a, 0x3c, 0x01, 0x55, 0x58, 0x24, 0x48,
+	0x76, 0x38, 0x3e, 0x3a, 0xe2, 0x21, 0x3b, 0xe4, 0x47, 0x41, 0xc8, 0xd9, 0xe4, 0xa2, 0x2b, 0x2f,
+	0x42, 0xbb, 0x37, 0xe8, 0xfa, 0xd0, 0xf3, 0x13, 0xcb, 0x6d, 0x44, 0x6e, 0x23, 0x50, 0x93, 0x57,
+	0x5e, 0xf2, 0x09, 0xbc, 0x92, 0xed, 0x3e, 0xf0, 0x07, 0x9e, 0xcf, 0x99, 0x23, 0x1a, 0x62, 0x8c,
+	0x09, 0xcb, 0xdf, 0x99, 0x8e, 0xc2, 0x40, 0x44, 0x7b, 0x02, 0x20, 0x9f, 0xc3, 0x2d, 0x71, 0x48,
+	0x12, 0x93, 0x81, 0xac, 0x5b, 0x45, 0xf2, 0x2a, 0x5d, 0xc1, 0x80, 0x48, 0x45, 0xcb, 0xc2, 0xb6,
+	0x9d, 0x31, 0x15, 0x69, 0xec, 0x43, 0x00, 0x3f, 0x48, 0x93, 0xe0, 0xdc, 0x75, 0xfc, 0x54, 0xa5,
+	0x81, 0xb0, 0xfe, 0x1a, 0x14, 0xdb, 0x1d, 0x7a, 0x51, 0x24, 0x06, 0x32, 0x0a, 0x06, 0x9e, 0x73,
+	0x86, 0x6c, 0xbc, 0xb8, 0xf5, 0xf8, 0x1a, 0xe4, 0xba, 0xd9, 0x9a, 0xd8, 0x9a, 0x68, 0x4a, 0x97,
+	0xec, 0x59, 0x81, 0xfa, 0x3b, 0x58, 0x3a, 0x87, 0x21, 0x1b, 0xf0, 0x4a, 0xab, 0xb3, 0xa7, 0xf7,
+	0xfb, 0xa2, 0xfa, 0x33, 0x8d, 0xae, 0xde, 0x7e, 0x7a, 0x6e, 0xe3, 0x2f, 0x41, 0xcd, 0xd2, 0xf7,
+	0x34, 0xd6, 0xb7, 0xa8, 0xde, 0xb6, 0x94, 0x82, 0x38, 0x4a, 0x28, 0xd8, 0xe9, 0x6a, 0x5f, 0xea,
+	0xdb, 0x5d, 0x4d, 0x29, 0x92, 0xff, 0x07, 0x55, 0x88, 0x3a, 0x4c, 0xeb, 0x59, 0xf4, 0x29, 0x3b,
+	0xd0, 0xad, 0xdd, 0x54, 0xcd, 0x3a, 0xfb, 0x54, 0x9e, 0x8f, 0xd2, 0xf6, 0x0a, 0x90, 0x8b, 0xeb,
+	0xaf, 0x6e, 0x42, 0x39, 0x61, 0x2c, 0xb1, 0x73, 0x71, 0x5b, 0xb3, 0x11, 0x0f, 0x1d, 0xee, 0xcb,
+	0xe7, 0x91, 0x79, 0x5a, 0x47, 0xa1, 0x29, 0x65, 0xea, 0x3f, 0x8a, 0x70, 0xfb, 0x02, 0x0b, 0xef,
+	0x78, 0x7c, 0xe0, 0x92, 0x45, 0x28, 0x7a, 0x2e, 0xc6, 0xac, 0x4a, 0x8b, 0x9e, 0xc8, 0x47, 0x32,
+	0x7d, 0xcb, 0xf7, 0xb8, 0x77, 0xae, 0xc5, 0xe7, 0xe8, 0x69, 0x13, 0x7f, 0x33, 0xb9, 0x7c, 0x05,
+	0xe6, 0x07, 0xf6, 0x21, 0x1f, 0x24, 0x67, 0x49, 0x36, 0x84, 0x14, 0xf3, 0x68, 0xb3, 0x84, 0x64,
+	0x2a, 0x1b, 0xa2, 0x80, 0xf3, 0x22, 0x96, 0xb0, 0x91, 0x8b, 0xdb, 0xa0, 0x42, 0xc1, 0x8b, 0x12,
+	0xca, 0x72, 0xd5, 0x3f, 0x14, 0xa0, 0x9a, 0x76, 0x20, 0x8e, 0xfd, 0x8e, 0xae, 0x75, 0x3b, 0x79,
+	0x69, 0x47, 0x81, 0x7a, 0x7f, 0xd7, 0xa0, 0x16, 0x6b, 0xf5, 0xfa, 0x07, 0x1a, 0x55, 0x0a, 0x64,
+	0x01, 0xaa, 0x66, 0x8b, 0xb6, 0x3e, 0xa3, 0x2d, 0x73, 0x57, 0x29, 0x92, 0x65, 0x58, 0xda, 0xdb,
+	0xef, 0x5a, 0xba, 0xd9, 0xd5, 0x58, 0x7b, 0xd7, 0xd0, 0xdb, 0x9a, 0x52, 0x22, 0x8b, 0x00, 0xed,
+	0x5d, 0xad, 0xfd, 0x64, 0xdb, 0xf8, 0x52, 0xeb, 0x2b, 0x73, 0x22, 0x17, 0x76, 0xa8, 0x61, 0x76,
+	0x8c, 0x83, 0x9e, 0x32, 0x4f, 0x6a, 0x50, 0xde, 0x36, 0x8c, 0xae, 0xd6, 0xea, 0x29, 0x37, 0xd5,
+	0xbf, 0x15, 0xa0, 0x71, 0x21, 0x04, 0xe4, 0x53, 0x98, 0x3f, 0x12, 0xe3, 0x6b, 0x16, 0x90, 0x1c,
+	0x1e, 0x5e, 0x3f, 0x70, 0x54, 0x1a, 0x92, 0x77, 0x60, 0xe5, 0xc8, 0x0b, 0x23, 0xf9, 0xe6, 0xc5,
+	0x9c, 0x71, 0x14, 0x07, 0x43, 0x1e, 0x46, 0x18, 0xbe, 0x0a, 0x6e, 0x7c, 0x82, 0x7a, 0x71, 0x94,
+	0xdb, 0x13, 0x2d, 0x79, 0x2c, 0xca, 0x80, 0x78, 0x1c, 0xfa, 0x62, 0x7b, 0x4c, 0x8d, 0x4a, 0x53,
+	0xa3, 0x54, 0x9d, 0x1a, 0xa9, 0x7f, 0x2f, 0x40, 0x39, 0xa9, 0x47, 0xc8, 0xe3, 0x69, 0xf5, 0x52,
+	0xb8, 0xaa, 0x8e, 0x4d, 0x6b, 0x97, 0x73, 0x99, 0x64, 0x26, 0x1f, 0x4c, 0xef, 0x0b, 0x99, 0x4c,
+	0x92, 0x3d, 0xf6, 0xe2, 0x6e, 0xf1, 0x29, 0xd4, 0x13, 0x5f, 0x92, 0xe9, 0x4b, 0xb8, 0xdd, 0xd6,
+	0x2f, 0xed, 0x1a, 0xf7, 0x55, 0x2d, 0x31, 0x11, 0x0d, 0x35, 0x84, 0x6a, 0x5a, 0x17, 0x91, 0x47,
+	0x50, 0x12, 0xe9, 0xe3, 0xca, 0x09, 0x08, 0x14, 0x79, 0x1f, 0x2a, 0x47, 0x9c, 0xff, 0x88, 0x7e,
+	0xcb, 0x47, 0x1c, 0x3f, 0xd4, 0x3f, 0x17, 0x00, 0xa6, 0x65, 0x0f, 0x51, 0xa0, 0x34, 0x0e, 0x07,
+	0xc9, 0x75, 0x43, 0x7c, 0x92, 0x35, 0xa8, 0x0c, 0x6c, 0xff, 0x78, 0x6c, 0x1f, 0x4f, 0x28, 0x24,
+	0x6d, 0x93, 0x37, 0xf1, 0x05, 0x10, 0xdf, 0xef, 0xb8, 0xcb, 0x9c, 0x60, 0xec, 0xc7, 0xe1, 0x59,
+	0x72, 0x0c, 0x1a, 0x53, 0x4d, 0x5b, 0x2a, 0xc8, 0xc7, 0x50, 0x19, 0x0d, 0xec, 0x18, 0x8b, 0xeb,
+	0x39, 0x1c, 0xa5, 0x7a, 0x79, 0x15, 0x66, 0x26, 0x48, 0x9a, 0xda, 0xa8, 0x7f, 0x2d, 0x00, 0x4c,
+	0x8b, 0xa4, 0x9c, 0x97, 0x10, 0x39, 0xec, 0xd9, 0x97, 0x90, 0x47, 0xd0, 0x88, 0x4e, 0x82, 0x30,
+	0x66, 0xd9, 0xab, 0x8f, 0x9c, 0x88, 0x82, 0x8a, 0x4e, 0xde, 0xfd, 0xa7, 0x74, 0xcd, 0xfb, 0xcf,
+	0x9b, 0x40, 0x12, 0xe2, 0xbc, 0x78, 0xb3, 0x6a, 0x48, 0x4d, 0xc6, 0xbf, 0xfa, 0x7d, 0x11, 0xea,
+	0xd9, 0x1a, 0x2d, 0x27, 0xde, 0x1f, 0x27, 0xd9, 0xaa, 0x78, 0xf9, 0x45, 0x21, 0xeb, 0x61, 0x13,
+	0x7f, 0x33, 0x39, 0xaa, 0x09, 0x65, 0xc7, 0x96, 0xc3, 0x90, 0x3c, 0x3e, 0x69, 0x92, 0x1e, 0xd4,
+	0x26, 0x95, 0xdf, 0x64, 0x90, 0xb5, 0xad, 0x37, 0xae, 0xec, 0xa0, 0x35, 0xb5, 0xa1, 0x59, 0x07,
+	0x6b, 0xf7, 0xa1, 0x96, 0xd1, 0x89, 0x1b, 0x67, 0xcc, 0x5f, 0xc4, 0xc9, 0x5c, 0xf0, 0x5b, 0x7d,
+	0x03, 0xaa, 0xe9, 0xf8, 0xc8, 0x0a, 0x28, 0x39, 0xc9, 0xad, 0x0a, 0xf3, 0xe6, 0xae, 0x61, 0x19,
+	0x4a, 0x41, 0x3d, 0x80, 0xd5, 0x4b, 0x8a, 0x4d, 0x51, 0xf0, 0x4c, 0xab, 0xd6, 0x74, 0xa5, 0xd3,
+	0xe1, 0x08, 0xc8, 0x1d, 0xa8, 0xa4, 0xe5, 0xac, 0x5c, 0xdf, 0xf2, 0xa9, 0xb4, 0x56, 0xbf, 0x2f,
+	0xc0, 0xc2, 0x4c, 0xa1, 0x29, 0xf6, 0x8e, 0x38, 0xed, 0x99, 0x57, 0x85, 0x94, 0x64, 0x7c, 0x73,
+	0xf2, 0xb0, 0x80, 0x28, 0xfb, 0x45, 0x16, 0x55, 0x4c, 0x50, 0xf6, 0x8b, 0x29, 0xea, 0x63, 0xb8,
+	0x1b, 0x8d, 0x47, 0xa3, 0x20, 0x8c, 0x23, 0x66, 0xbb, 0xae, 0x27, 0xa2, 0x61, 0x0f, 0x30, 0xf5,
+	0xf3, 0x48, 0x3e, 0xb8, 0x57, 0xe8, 0x9d, 0x09, 0xa4, 0x95, 0x22, 0xa8, 0x04, 0x3c, 0x7c, 0x0c,
+	0xd5, 0xf4, 0x60, 0x92, 0xdb, 0x40, 0x76, 0xf4, 0x2f, 0xb5, 0x0e, 0xa3, 0x2d, 0x4b, 0x63, 0x1d,
+	0x6d, 0xa7, 0xb5, 0xdf, 0xb5, 0x94, 0x1b, 0x22, 0x9b, 0x9b, 0x1a, 0x65, 0xa6, 0x46, 0xfb, 0xa2,
+	0xca, 0x7c, 0xf8, 0x1d, 0x34, 0x2e, 0x5c, 0x7e, 0x44, 0x7d, 0x9a, 0x14, 0xbf, 0xac, 0x4d, 0xb5,
+	0x8e, 0x6e, 0xb1, 0x76, 0x8b, 0x76, 0x2e, 0x16, 0xb1, 0x79, 0xa0, 0xb6, 0xd1, 0xeb, 0xe8, 0x49,
+	0xa9, 0x8c, 0x45, 0x6c, 0x1e, 0xa8, 0xd5, 0x3d, 0x68, 0x3d, 0xed, 0x2b, 0xc5, 0x87, 0x3f, 0x14,
+	0x60, 0x71, 0xf6, 0x9c, 0x8a, 0xd2, 0xbc, 0xd5, 0xc6, 0x07, 0x24, 0xb3, 0xdb, 0xb2, 0x76, 0x0c,
+	0xba, 0x77, 0xb1, 0xe3, 0xf3, 0x80, 0x03, 0x6d, 0x9b, 0xb5, 0x4c, 0xb3, 0xab, 0xb7, 0x33, 0xd5,
+	0xf3, 0x79, 0xd0, 0x9e, 0xb1, 0xad, 0x77, 0x35, 0x81, 0x55, 0x8a, 0xe4, 0x2e, 0xac, 0x9e, 0xd7,
+	0xb7, 0x7a, 0x1d, 0x6a, 0xe8, 0x1d, 0xa5, 0x44, 0x56, 0x61, 0xf9, 0xbc, 0x52, 0x37, 0xfa, 0xca,
+	0xdc, 0xe1, 0x4d, 0xfc, 0x87, 0xde, 0xe3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x85, 0x5f, 0xfa,
+	0x7b, 0xdf, 0x1b, 0x00, 0x00,
 }
diff --git a/feeds/feeds.proto b/feeds/feeds.proto
index 5b8b9f5..e86f85b 100644
--- a/feeds/feeds.proto
+++ b/feeds/feeds.proto
@@ -289,6 +289,25 @@
   // Availability scheduling rules. If fields are populated, they will override
   // any corresponding scheduling rules on the service-level SchedulingRules.
   SchedulingRuleOverrides scheduling_rule_overrides = 16;
+
+  // The confirmation modes used when booking availabilities.
+  enum ConfirmationMode {
+    // The confirmation mode was not specified.
+    // Synchronous confirmation will be assumed.
+    CONFIRMATION_MODE_UNSPECIFIED = 0;
+    // Bookings for this availability will be confirmed synchronously.
+    CONFIRMATION_MODE_SYNCHRONOUS = 1;
+    // Bookings for this availability will be confirmed asynchronously.
+    CONFIRMATION_MODE_ASYNCHRONOUS = 2;
+  }
+
+  // The confirmation mode that will be used when booking this availability.
+  // Attempts to create bookings for availabilities with a confirmation mode
+  // of CONFIRMATION_MODE_SYNCHRONOUS must be immediatlely confirmed or denied.
+  // Attempts to create bookings for availabilities with confirmation mode
+  // of CONFIRMATION_MODE_ASYNCHRONOUS must be either immediately denied
+  // or created with status PENDING.
+  ConfirmationMode confirmation_mode = 17;
 }
 
 // A resource is used to disambiguate availability slots from one another when
diff --git a/proto/v3.proto b/proto/v3.proto
index 81e40dd..0ad686c 100644
--- a/proto/v3.proto
+++ b/proto/v3.proto
@@ -92,10 +92,13 @@
 
 // BatchAvailabilityLookup method
 
-// Identifies a Slot start time and optionally, the Slot duration, for a =
-// specific service and merchant. Note that this differs from the definition of
-// Slot, as it does not include merchant_id and service_id identifiers.
+// Identifies a Slot service_id and start time and optionally, the Slot duration
+// and resources, for a specific merchant. Note that this differs from the
+// definition of Slot, as it does not include merchant_id identifier.
 message SlotTime {
+  // ID of the service. (required)
+  string service_id = 5;
+
   // Start time of the appointment slot in seconds of UTC time since Unix epoch
   // (required)
   int64 start_sec = 1;
@@ -127,12 +130,11 @@
   // ID of the merchant.
   string merchant_id = 1;
 
-  // ID of the service.
-  string service_id = 2;
-
   // Multiple slot times to be checked for availability. All queried times apply
   // to the same merchant_id and service_id.
   repeated SlotTime slot_time = 3;
+
+  reserved 2;
 }
 
 // Response for the BatchAvailabilityLookupRequest RPC with the availabilities
@@ -424,7 +426,7 @@
 // Updating booking status does not change the status of the associated payment.
 // Prepayment status updates should be done using the PrepaymentStatus enum.
 //
-// nextID: 6
+// nextID: 8
 enum BookingStatus {
   // Not specified.
   BOOKING_STATUS_UNSPECIFIED = 0;
@@ -441,6 +443,10 @@
   // User did not show for the appointment in violation of the cancellation
   // policy.
   NO_SHOW_PENALIZED = 5;
+  // Booking could not be completed by the backend due to a failure.
+  FAILED = 6;
+  // Booking was asynchronously declined by the merchant.
+  DECLINED_BY_MERCHANT = 7;
 }
 
 // BookingFailure specification
@@ -510,6 +516,17 @@
   JCB = 5;
 }
 
+// Mode by which bookings for an availability slot are confirmed.
+enum ConfirmationMode {
+  // The confirmation mode was not specified.
+  // Synchronous confirmation will be assumed.
+  CONFIRMATION_MODE_UNSPECIFIED = 0;
+  // Bookings for this availability will be confirmed synchronously.
+  CONFIRMATION_MODE_SYNCHRONOUS = 1;
+  // Bookings for this availability will be confirmed asynchronously.
+  CONFIRMATION_MODE_ASYNCHRONOUS = 2;
+}
+
 // Order specification
 
 // An order for service appointments with a merchant.
@@ -1030,6 +1047,11 @@
   // The set of resources that disambiguates the appointment slot, e.g. by
   // indicating the staff member and room selected by the user (optional)
   ResourceIds resources = 6;
+
+  // Indicates whether bookings of this slot will be confirmed
+  // synchronously or asynchronously. An UNSPECIFIED value will be interpreted
+  // as synchronous.
+  ConfirmationMode confirmation_mode = 7;
 }
 
 // User specification
diff --git a/proto/waitlist.proto b/proto/waitlist.proto
index 47975a5..218e868 100644
--- a/proto/waitlist.proto
+++ b/proto/waitlist.proto
@@ -186,9 +186,11 @@
   // The waitlist entry was created and the user is currently waiting in the
   // waitlist.
   WAITING = 1;
-  // The waitlist entry has been canceled. Cancellation for no-shows should use
-  // the NO_SHOW state.
+  // The waitlist entry has been canceled by the user. Cancellation for no-shows
+  // should use the NO_SHOW state.
   CANCELED = 2;
+  // The waitlist entry has been declined by the merchant.
+  DECLINED_BY_MERCHANT = 7;
   // The merchant is ready to serve the user.
   SERVICE_READY = 3;
   // The user has checked in with the host and is waiting to be seated.
@@ -276,6 +278,14 @@
     // The waitlist is at capacity and new users are not being accepted at this
     // time.
     WAITLIST_FULL = 6;
+
+    // The country of the phone number is not supported.
+    PHONE_NUMBER_COUNTRY_UNSUPPORTED = 7;
+
+    // The waitlist is closed and not accepting new users. This is expected when
+    // the waitlist enters state CLOSED_OTHER after the user has already seen a
+    // wait estimate.
+    WAITLIST_CLOSED = 8;
   }
   // Required. The reason why the booking failed.
   Cause cause = 1;
diff --git a/utils/utils.go b/utils/utils.go
index 1016dd0..d355832 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -267,8 +267,13 @@
 	if diff := cmp.Diff(got.GetPaymentInformation(), want.GetPaymentInformation(), cmp.Comparer(proto.Equal)); diff != "" {
 		return fmt.Errorf("payment information differs (-got +want)\n%s", diff)
 	}
-	// BookingStatus_CONFIRMED is the default case unless want overrides it.
+	// BookingStatus_CONFIRMED is the default case unless the slot is async, in which
+	// case the default is BookingStatus_PENDING_MERCHANT_CONFIRMATION.
 	wantStatus := mpb.BookingStatus_CONFIRMED
+	if want.GetSlot().GetConfirmationMode() == mpb.ConfirmationMode_CONFIRMATION_MODE_ASYNCHRONOUS {
+		wantStatus = mpb.BookingStatus_PENDING_MERCHANT_CONFIRMATION
+	}
+	// If an alternate status is specified, we compare against it instead of the default.
 	if want.GetStatus() != mpb.BookingStatus_BOOKING_STATUS_UNSPECIFIED {
 		wantStatus = want.GetStatus()
 	}
@@ -411,12 +416,19 @@
 // BuildSlotFrom creates a bookingservice slot from an feed availability record.
 func BuildSlotFrom(a *fpb.Availability) (*mpb.Slot, error) {
 	r := a.GetResources()
+	confirmationMode := mpb.ConfirmationMode_CONFIRMATION_MODE_UNSPECIFIED
+	if a.GetConfirmationMode() == fpb.Availability_CONFIRMATION_MODE_SYNCHRONOUS {
+		confirmationMode = mpb.ConfirmationMode_CONFIRMATION_MODE_SYNCHRONOUS
+	} else if a.GetConfirmationMode() == fpb.Availability_CONFIRMATION_MODE_ASYNCHRONOUS {
+		confirmationMode = mpb.ConfirmationMode_CONFIRMATION_MODE_ASYNCHRONOUS
+	}
 	return &mpb.Slot{
-		MerchantId:      a.GetMerchantId(),
-		ServiceId:       a.GetServiceId(),
-		StartSec:        a.GetStartSec(),
-		DurationSec:     a.GetDurationSec(),
-		AvailabilityTag: a.GetAvailabilityTag(),
+		MerchantId:       a.GetMerchantId(),
+		ServiceId:        a.GetServiceId(),
+		StartSec:         a.GetStartSec(),
+		DurationSec:      a.GetDurationSec(),
+		AvailabilityTag:  a.GetAvailabilityTag(),
+		ConfirmationMode: confirmationMode,
 		Resources: &mpb.ResourceIds{
 			StaffId:   r.GetStaffId(),
 			RoomId:    r.GetRoomId(),
@@ -441,6 +453,7 @@
 		}
 		r := a.GetResources()
 		st = append(st, &mpb.SlotTime{
+			ServiceId:       s,
 			StartSec:        a.GetStartSec(),
 			DurationSec:     a.GetDurationSec(),
 			AvailabilityTag: a.GetAvailabilityTag(),
@@ -453,7 +466,6 @@
 	}
 	return &mpb.BatchAvailabilityLookupRequest{
 		MerchantId: m,
-		ServiceId:  s,
 		SlotTime:   st,
 	}, nil
 }
diff --git a/v3/v3.pb.go b/v3/v3.pb.go
index 53f8064..abca0c1 100644
--- a/v3/v3.pb.go
+++ b/v3/v3.pb.go
@@ -1,64 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: v3.proto
 
-/*
-Package ext_maps_booking_partner_v3 is a generated protocol buffer package.
-
-It is generated from these files:
-	v3.proto
-
-It has these top-level messages:
-	CheckAvailabilityRequest
-	CheckAvailabilityResponse
-	AvailabilityUpdate
-	SlotAvailability
-	SlotTime
-	SlotTimeAvailability
-	BatchAvailabilityLookupRequest
-	BatchAvailabilityLookupResponse
-	CheckOrderFulfillabilityRequest
-	CheckOrderFulfillabilityResponse
-	GetBookingStatusRequest
-	GetBookingStatusResponse
-	CreateBookingRequest
-	CreateBookingResponse
-	CreateLeaseRequest
-	CreateLeaseResponse
-	Lease
-	LeaseReference
-	CreateOrderRequest
-	CreateOrderResponse
-	ListBookingsRequest
-	ListBookingsResponse
-	ListOrdersRequest
-	ListOrdersResponse
-	UpdateBookingRequest
-	UpdateBookingResponse
-	Booking
-	BookingFailure
-	Order
-	LineItem
-	OrderFailure
-	OrderFulfillability
-	LineItemFulfillability
-	TicketType
-	ResourceIds
-	TokenizationConfig
-	PaymentProcessingParameters
-	UserPaymentOption
-	PaymentInformation
-	Price
-	NoShowFee
-	Deposit
-	Slot
-	UserInformation
-	PostalAddress
-*/
 package ext_maps_booking_partner_v3
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -69,14 +18,14 @@
 // 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
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 // Status of a booking.
 //
 // Updating booking status does not change the status of the associated payment.
 // Prepayment status updates should be done using the PrepaymentStatus enum.
 //
-// nextID: 6
+// nextID: 8
 type BookingStatus int32
 
 const (
@@ -95,6 +44,10 @@
 	// User did not show for the appointment in violation of the cancellation
 	// policy.
 	BookingStatus_NO_SHOW_PENALIZED BookingStatus = 5
+	// Booking could not be completed by the backend due to a failure.
+	BookingStatus_FAILED BookingStatus = 6
+	// Booking was asynchronously declined by the merchant.
+	BookingStatus_DECLINED_BY_MERCHANT BookingStatus = 7
 )
 
 var BookingStatus_name = map[int32]string{
@@ -104,7 +57,10 @@
 	3: "CANCELED",
 	4: "NO_SHOW",
 	5: "NO_SHOW_PENALIZED",
+	6: "FAILED",
+	7: "DECLINED_BY_MERCHANT",
 }
+
 var BookingStatus_value = map[string]int32{
 	"BOOKING_STATUS_UNSPECIFIED":    0,
 	"CONFIRMED":                     1,
@@ -112,12 +68,17 @@
 	"CANCELED":                      3,
 	"NO_SHOW":                       4,
 	"NO_SHOW_PENALIZED":             5,
+	"FAILED":                        6,
+	"DECLINED_BY_MERCHANT":          7,
 }
 
 func (x BookingStatus) String() string {
 	return proto.EnumName(BookingStatus_name, int32(x))
 }
-func (BookingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (BookingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
+}
 
 // Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
 // indicate the type of credit card that was rejected.
@@ -141,19 +102,56 @@
 	4: "DISCOVER",
 	5: "JCB",
 }
+
 var CreditCardType_value = map[string]int32{
 	"CREDIT_CARD_TYPE_UNSPECIFIED": 0,
-	"VISA":             1,
-	"MASTERCARD":       2,
-	"AMERICAN_EXPRESS": 3,
-	"DISCOVER":         4,
-	"JCB":              5,
+	"VISA":                         1,
+	"MASTERCARD":                   2,
+	"AMERICAN_EXPRESS":             3,
+	"DISCOVER":                     4,
+	"JCB":                          5,
 }
 
 func (x CreditCardType) String() string {
 	return proto.EnumName(CreditCardType_name, int32(x))
 }
-func (CreditCardType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (CreditCardType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
+}
+
+// Mode by which bookings for an availability slot are confirmed.
+type ConfirmationMode int32
+
+const (
+	// The confirmation mode was not specified.
+	// Synchronous confirmation will be assumed.
+	ConfirmationMode_CONFIRMATION_MODE_UNSPECIFIED ConfirmationMode = 0
+	// Bookings for this availability will be confirmed synchronously.
+	ConfirmationMode_CONFIRMATION_MODE_SYNCHRONOUS ConfirmationMode = 1
+	// Bookings for this availability will be confirmed asynchronously.
+	ConfirmationMode_CONFIRMATION_MODE_ASYNCHRONOUS ConfirmationMode = 2
+)
+
+var ConfirmationMode_name = map[int32]string{
+	0: "CONFIRMATION_MODE_UNSPECIFIED",
+	1: "CONFIRMATION_MODE_SYNCHRONOUS",
+	2: "CONFIRMATION_MODE_ASYNCHRONOUS",
+}
+
+var ConfirmationMode_value = map[string]int32{
+	"CONFIRMATION_MODE_UNSPECIFIED":  0,
+	"CONFIRMATION_MODE_SYNCHRONOUS":  1,
+	"CONFIRMATION_MODE_ASYNCHRONOUS": 2,
+}
+
+func (x ConfirmationMode) String() string {
+	return proto.EnumName(ConfirmationMode_name, int32(x))
+}
+
+func (ConfirmationMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
+}
 
 type PaymentOptionType int32
 
@@ -170,6 +168,7 @@
 	2: "PAYMENT_OPTION_MULTI_USE",
 	3: "PAYMENT_OPTION_UNLIMITED_USE",
 }
+
 var PaymentOptionType_value = map[string]int32{
 	"PAYMENT_OPTION_TYPE_UNSPECIFIED": 0,
 	"PAYMENT_OPTION_SINGLE_USE":       1,
@@ -180,7 +179,10 @@
 func (x PaymentOptionType) String() string {
 	return proto.EnumName(PaymentOptionType_name, int32(x))
 }
-func (PaymentOptionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (PaymentOptionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
+}
 
 // Prepayment status of a booking.
 // Updating payment status will trigger an update on the payment status of the
@@ -213,6 +215,7 @@
 	3: "PREPAYMENT_REFUNDED",
 	4: "PREPAYMENT_CREDITED",
 }
+
 var PrepaymentStatus_value = map[string]int32{
 	"PREPAYMENT_STATUS_UNSPECIFIED": 0,
 	"PREPAYMENT_PROVIDED":           1,
@@ -224,7 +227,10 @@
 func (x PrepaymentStatus) String() string {
 	return proto.EnumName(PrepaymentStatus_name, int32(x))
 }
-func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{4}
+}
 
 // Defines how a total price is determined from an availability.
 type PriceType int32
@@ -245,6 +251,7 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
+
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -253,7 +260,10 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
-func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (PriceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{5}
+}
 
 // This enum indicates what requirements exist for the user to acknowledge or
 // view the requested slots duration/end time.
@@ -274,6 +284,7 @@
 	1: "DO_NOT_SHOW_DURATION",
 	2: "MUST_SHOW_DURATION",
 }
+
 var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
 	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
 	"DO_NOT_SHOW_DURATION":             1,
@@ -283,8 +294,9 @@
 func (x CheckAvailabilityResponse_DurationRequirement) String() string {
 	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
 }
+
 func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{1, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{1, 0}
 }
 
 type BookingFailure_Cause int32
@@ -343,6 +355,7 @@
 	11: "BOOKING_NOT_CANCELLABLE",
 	12: "OVERLAPPING_RESERVATION",
 }
+
 var BookingFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"SLOT_UNAVAILABLE":                 1,
@@ -362,7 +375,10 @@
 func (x BookingFailure_Cause) String() string {
 	return proto.EnumName(BookingFailure_Cause_name, int32(x))
 }
-func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{27, 0} }
+
+func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{27, 0}
+}
 
 type OrderFailure_Cause int32
 
@@ -391,6 +407,7 @@
 	3: "PAYMENT_ERROR_CARD_DECLINED",
 	4: "PAYMENT_ERROR",
 }
+
 var OrderFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"ORDER_UNFULFILLABLE":              1,
@@ -402,7 +419,10 @@
 func (x OrderFailure_Cause) String() string {
 	return proto.EnumName(OrderFailure_Cause_name, int32(x))
 }
-func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{30, 0} }
+
+func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{30, 0}
+}
 
 // The result of an order fulfillability check.
 type OrderFulfillability_OrderFulfillabilityResult int32
@@ -429,19 +449,21 @@
 	3: "UNFULFILLABLE_SERVICE_COMBINATION",
 	4: "ORDER_UNFULFILLABLE_OTHER_REASON",
 }
+
 var OrderFulfillability_OrderFulfillabilityResult_value = map[string]int32{
 	"ORDER_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
-	"CAN_FULFILL":                             1,
-	"UNFULFILLABLE_LINE_ITEM":                 2,
-	"UNFULFILLABLE_SERVICE_COMBINATION":       3,
-	"ORDER_UNFULFILLABLE_OTHER_REASON":        4,
+	"CAN_FULFILL":                       1,
+	"UNFULFILLABLE_LINE_ITEM":           2,
+	"UNFULFILLABLE_SERVICE_COMBINATION": 3,
+	"ORDER_UNFULFILLABLE_OTHER_REASON":  4,
 }
 
 func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
 	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
 }
+
 func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{31, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{31, 0}
 }
 
 // The result of a line item fulfillability check.
@@ -474,6 +496,7 @@
 	4: "INCORRECT_PRICE",
 	5: "ITEM_UNFULFILLABLE_OTHER_REASON",
 }
+
 var LineItemFulfillability_ItemFulfillabilityResult_value = map[string]int32{
 	"ITEM_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
 	"CAN_FULFILL":                            1,
@@ -487,8 +510,9 @@
 func (x LineItemFulfillability_ItemFulfillabilityResult) String() string {
 	return proto.EnumName(LineItemFulfillability_ItemFulfillabilityResult_name, int32(x))
 }
+
 func (LineItemFulfillability_ItemFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{32, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{32, 0}
 }
 
 // Control how much billing information to include in the
@@ -509,17 +533,19 @@
 	1: "MIN",
 	2: "FULL",
 }
+
 var TokenizationConfig_BillingInformationFormat_value = map[string]int32{
 	"BILLING_INFORMATION_FORMAT_UNSPECIFIED": 0,
-	"MIN":  1,
-	"FULL": 2,
+	"MIN":                                    1,
+	"FULL":                                   2,
 }
 
 func (x TokenizationConfig_BillingInformationFormat) String() string {
 	return proto.EnumName(TokenizationConfig_BillingInformationFormat_name, int32(x))
 }
+
 func (TokenizationConfig_BillingInformationFormat) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{35, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{35, 0}
 }
 
 type PaymentProcessingParameters_PaymentProcessor int32
@@ -535,6 +561,7 @@
 	1: "PROCESSOR_STRIPE",
 	2: "PROCESSOR_BRAINTREE",
 }
+
 var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
 	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
 	"PROCESSOR_STRIPE":              1,
@@ -544,8 +571,9 @@
 func (x PaymentProcessingParameters_PaymentProcessor) String() string {
 	return proto.EnumName(PaymentProcessingParameters_PaymentProcessor_name, int32(x))
 }
+
 func (PaymentProcessingParameters_PaymentProcessor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{36, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{36, 0}
 }
 
 // Who handles payment processing?
@@ -565,6 +593,7 @@
 	1: "PROCESSED_BY_GOOGLE",
 	2: "PROCESSED_BY_PARTNER",
 }
+
 var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
 	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
 	"PROCESSED_BY_GOOGLE":              1,
@@ -574,20 +603,44 @@
 func (x PaymentInformation_PaymentProcessedBy) String() string {
 	return proto.EnumName(PaymentInformation_PaymentProcessedBy_name, int32(x))
 }
+
 func (PaymentInformation_PaymentProcessedBy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{38, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{38, 0}
 }
 
 // Request to check availability for a Slot.
 type CheckAvailabilityRequest struct {
 	// The appointment slot that is being checked (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot                 *Slot    `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CheckAvailabilityRequest) Reset()                    { *m = CheckAvailabilityRequest{} }
-func (m *CheckAvailabilityRequest) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityRequest) ProtoMessage()               {}
-func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+func (m *CheckAvailabilityRequest) Reset()         { *m = CheckAvailabilityRequest{} }
+func (m *CheckAvailabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityRequest) ProtoMessage()    {}
+func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
+}
+
+func (m *CheckAvailabilityRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckAvailabilityRequest.Unmarshal(m, b)
+}
+func (m *CheckAvailabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckAvailabilityRequest.Marshal(b, m, deterministic)
+}
+func (m *CheckAvailabilityRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityRequest.Merge(m, src)
+}
+func (m *CheckAvailabilityRequest) XXX_Size() int {
+	return xxx_messageInfo_CheckAvailabilityRequest.Size(m)
+}
+func (m *CheckAvailabilityRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckAvailabilityRequest proto.InternalMessageInfo
 
 func (m *CheckAvailabilityRequest) GetSlot() *Slot {
 	if m != nil {
@@ -600,26 +653,49 @@
 // appointment slot.
 type CheckAvailabilityResponse struct {
 	// The requested slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
+	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
 	// The requirement to show the slots duration and/or endtime. This field will
 	// be ignored if the slot is unavailable. (optional)
-	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
+	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,proto3,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
 	// Optionally, the partner can return additional updated information about the
 	// availability for this merchant if this information is present when
 	// responding to the CheckAvailabilityRequest and if there is no negative
 	// impact on the CheckAvailability request latency.
 	// For instance an entire day of merchant availability for a superset of
 	// resources can be returned here.
-	AvailabilityUpdate *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate" json:"availability_update,omitempty"`
+	AvailabilityUpdate   *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate,proto3" json:"availability_update,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *CheckAvailabilityResponse) Reset()                    { *m = CheckAvailabilityResponse{} }
-func (m *CheckAvailabilityResponse) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityResponse) ProtoMessage()               {}
-func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+func (m *CheckAvailabilityResponse) Reset()         { *m = CheckAvailabilityResponse{} }
+func (m *CheckAvailabilityResponse) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityResponse) ProtoMessage()    {}
+func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
+}
+
+func (m *CheckAvailabilityResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckAvailabilityResponse.Unmarshal(m, b)
+}
+func (m *CheckAvailabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckAvailabilityResponse.Marshal(b, m, deterministic)
+}
+func (m *CheckAvailabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityResponse.Merge(m, src)
+}
+func (m *CheckAvailabilityResponse) XXX_Size() int {
+	return xxx_messageInfo_CheckAvailabilityResponse.Size(m)
+}
+func (m *CheckAvailabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckAvailabilityResponse proto.InternalMessageInfo
 
 func (m *CheckAvailabilityResponse) GetSlot() *Slot {
 	if m != nil {
@@ -652,13 +728,36 @@
 // An update to one ore more slots indicating that the availability for the
 // associated time has potentially changed.
 type AvailabilityUpdate struct {
-	SlotAvailability []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability" json:"slot_availability,omitempty"`
+	SlotAvailability     []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability,proto3" json:"slot_availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *AvailabilityUpdate) Reset()                    { *m = AvailabilityUpdate{} }
-func (m *AvailabilityUpdate) String() string            { return proto.CompactTextString(m) }
-func (*AvailabilityUpdate) ProtoMessage()               {}
-func (*AvailabilityUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+func (m *AvailabilityUpdate) Reset()         { *m = AvailabilityUpdate{} }
+func (m *AvailabilityUpdate) String() string { return proto.CompactTextString(m) }
+func (*AvailabilityUpdate) ProtoMessage()    {}
+func (*AvailabilityUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
+}
+
+func (m *AvailabilityUpdate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AvailabilityUpdate.Unmarshal(m, b)
+}
+func (m *AvailabilityUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AvailabilityUpdate.Marshal(b, m, deterministic)
+}
+func (m *AvailabilityUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AvailabilityUpdate.Merge(m, src)
+}
+func (m *AvailabilityUpdate) XXX_Size() int {
+	return xxx_messageInfo_AvailabilityUpdate.Size(m)
+}
+func (m *AvailabilityUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_AvailabilityUpdate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AvailabilityUpdate proto.InternalMessageInfo
 
 func (m *AvailabilityUpdate) GetSlotAvailability() []*SlotAvailability {
 	if m != nil {
@@ -669,16 +768,39 @@
 
 // An inventory slot and associated count of open spots.
 type SlotAvailability struct {
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
+	CountAvailable       int32    `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SlotAvailability) Reset()                    { *m = SlotAvailability{} }
-func (m *SlotAvailability) String() string            { return proto.CompactTextString(m) }
-func (*SlotAvailability) ProtoMessage()               {}
-func (*SlotAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+func (m *SlotAvailability) Reset()         { *m = SlotAvailability{} }
+func (m *SlotAvailability) String() string { return proto.CompactTextString(m) }
+func (*SlotAvailability) ProtoMessage()    {}
+func (*SlotAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
+}
+
+func (m *SlotAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotAvailability.Unmarshal(m, b)
+}
+func (m *SlotAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotAvailability.Marshal(b, m, deterministic)
+}
+func (m *SlotAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotAvailability.Merge(m, src)
+}
+func (m *SlotAvailability) XXX_Size() int {
+	return xxx_messageInfo_SlotAvailability.Size(m)
+}
+func (m *SlotAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotAvailability proto.InternalMessageInfo
 
 func (m *SlotAvailability) GetSlot() *Slot {
 	if m != nil {
@@ -694,28 +816,60 @@
 	return 0
 }
 
-// Identifies a Slot start time and optionally, the Slot duration, for a =
-// specific service and merchant. Note that this differs from the definition of
-// Slot, as it does not include merchant_id and service_id identifiers.
+// Identifies a Slot service_id and start time and optionally, the Slot duration
+// and resources, for a specific merchant. Note that this differs from the
+// definition of Slot, as it does not include merchant_id identifier.
 type SlotTime struct {
+	// ID of the service. (required)
+	ServiceId string `protobuf:"bytes,5,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch
 	// (required)
-	StartSec int64 `protobuf:"varint,1,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,1,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the appointment slot in seconds (optional)
-	DurationSec int64 `protobuf:"varint,2,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,2,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Opaque tag that identifies the availability slot and matches the value
 	// provided in the availability feed (optional)
-	AvailabilityTag string `protobuf:"bytes,3,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,3,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
 	// The set of resources that specifies the appointment slot, e.g. by
 	// indicating the staff member and room selected by the user, or party size
 	// for dining slots (optional)
-	ResourceIds *ResourceIds `protobuf:"bytes,4,opt,name=resource_ids,json=resourceIds" json:"resource_ids,omitempty"`
+	ResourceIds          *ResourceIds `protobuf:"bytes,4,opt,name=resource_ids,json=resourceIds,proto3" json:"resource_ids,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
 }
 
-func (m *SlotTime) Reset()                    { *m = SlotTime{} }
-func (m *SlotTime) String() string            { return proto.CompactTextString(m) }
-func (*SlotTime) ProtoMessage()               {}
-func (*SlotTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+func (m *SlotTime) Reset()         { *m = SlotTime{} }
+func (m *SlotTime) String() string { return proto.CompactTextString(m) }
+func (*SlotTime) ProtoMessage()    {}
+func (*SlotTime) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{4}
+}
+
+func (m *SlotTime) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotTime.Unmarshal(m, b)
+}
+func (m *SlotTime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotTime.Marshal(b, m, deterministic)
+}
+func (m *SlotTime) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotTime.Merge(m, src)
+}
+func (m *SlotTime) XXX_Size() int {
+	return xxx_messageInfo_SlotTime.Size(m)
+}
+func (m *SlotTime) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotTime.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotTime proto.InternalMessageInfo
+
+func (m *SlotTime) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
 
 func (m *SlotTime) GetStartSec() int64 {
 	if m != nil {
@@ -747,15 +901,38 @@
 
 type SlotTimeAvailability struct {
 	// The SlotTime for which availability was checked.
-	SlotTime *SlotTime `protobuf:"bytes,1,opt,name=slot_time,json=slotTime" json:"slot_time,omitempty"`
+	SlotTime *SlotTime `protobuf:"bytes,1,opt,name=slot_time,json=slotTime,proto3" json:"slot_time,omitempty"`
 	// Whether the requested SlotTime is available
-	Available bool `protobuf:"varint,2,opt,name=available" json:"available,omitempty"`
+	Available            bool     `protobuf:"varint,2,opt,name=available,proto3" json:"available,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SlotTimeAvailability) Reset()                    { *m = SlotTimeAvailability{} }
-func (m *SlotTimeAvailability) String() string            { return proto.CompactTextString(m) }
-func (*SlotTimeAvailability) ProtoMessage()               {}
-func (*SlotTimeAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (m *SlotTimeAvailability) Reset()         { *m = SlotTimeAvailability{} }
+func (m *SlotTimeAvailability) String() string { return proto.CompactTextString(m) }
+func (*SlotTimeAvailability) ProtoMessage()    {}
+func (*SlotTimeAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{5}
+}
+
+func (m *SlotTimeAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotTimeAvailability.Unmarshal(m, b)
+}
+func (m *SlotTimeAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotTimeAvailability.Marshal(b, m, deterministic)
+}
+func (m *SlotTimeAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotTimeAvailability.Merge(m, src)
+}
+func (m *SlotTimeAvailability) XXX_Size() int {
+	return xxx_messageInfo_SlotTimeAvailability.Size(m)
+}
+func (m *SlotTimeAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotTimeAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotTimeAvailability proto.InternalMessageInfo
 
 func (m *SlotTimeAvailability) GetSlotTime() *SlotTime {
 	if m != nil {
@@ -775,18 +952,39 @@
 // given merchant/service.
 type BatchAvailabilityLookupRequest struct {
 	// ID of the merchant.
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
-	// ID of the service.
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// Multiple slot times to be checked for availability. All queried times apply
 	// to the same merchant_id and service_id.
-	SlotTime []*SlotTime `protobuf:"bytes,3,rep,name=slot_time,json=slotTime" json:"slot_time,omitempty"`
+	SlotTime             []*SlotTime `protobuf:"bytes,3,rep,name=slot_time,json=slotTime,proto3" json:"slot_time,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *BatchAvailabilityLookupRequest) Reset()                    { *m = BatchAvailabilityLookupRequest{} }
-func (m *BatchAvailabilityLookupRequest) String() string            { return proto.CompactTextString(m) }
-func (*BatchAvailabilityLookupRequest) ProtoMessage()               {}
-func (*BatchAvailabilityLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+func (m *BatchAvailabilityLookupRequest) Reset()         { *m = BatchAvailabilityLookupRequest{} }
+func (m *BatchAvailabilityLookupRequest) String() string { return proto.CompactTextString(m) }
+func (*BatchAvailabilityLookupRequest) ProtoMessage()    {}
+func (*BatchAvailabilityLookupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{6}
+}
+
+func (m *BatchAvailabilityLookupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchAvailabilityLookupRequest.Unmarshal(m, b)
+}
+func (m *BatchAvailabilityLookupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchAvailabilityLookupRequest.Marshal(b, m, deterministic)
+}
+func (m *BatchAvailabilityLookupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchAvailabilityLookupRequest.Merge(m, src)
+}
+func (m *BatchAvailabilityLookupRequest) XXX_Size() int {
+	return xxx_messageInfo_BatchAvailabilityLookupRequest.Size(m)
+}
+func (m *BatchAvailabilityLookupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchAvailabilityLookupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchAvailabilityLookupRequest proto.InternalMessageInfo
 
 func (m *BatchAvailabilityLookupRequest) GetMerchantId() string {
 	if m != nil {
@@ -795,13 +993,6 @@
 	return ""
 }
 
-func (m *BatchAvailabilityLookupRequest) GetServiceId() string {
-	if m != nil {
-		return m.ServiceId
-	}
-	return ""
-}
-
 func (m *BatchAvailabilityLookupRequest) GetSlotTime() []*SlotTime {
 	if m != nil {
 		return m.SlotTime
@@ -815,13 +1006,36 @@
 	// The availabilities for the requested SlotTime entries. There must be
 	// exactly one slot_time_availability for each SlotTime entry in the
 	// [ext.maps.booking.partner.v3.BatchAvailabilityLookupRequest].
-	SlotTimeAvailability []*SlotTimeAvailability `protobuf:"bytes,1,rep,name=slot_time_availability,json=slotTimeAvailability" json:"slot_time_availability,omitempty"`
+	SlotTimeAvailability []*SlotTimeAvailability `protobuf:"bytes,1,rep,name=slot_time_availability,json=slotTimeAvailability,proto3" json:"slot_time_availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
 }
 
-func (m *BatchAvailabilityLookupResponse) Reset()                    { *m = BatchAvailabilityLookupResponse{} }
-func (m *BatchAvailabilityLookupResponse) String() string            { return proto.CompactTextString(m) }
-func (*BatchAvailabilityLookupResponse) ProtoMessage()               {}
-func (*BatchAvailabilityLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+func (m *BatchAvailabilityLookupResponse) Reset()         { *m = BatchAvailabilityLookupResponse{} }
+func (m *BatchAvailabilityLookupResponse) String() string { return proto.CompactTextString(m) }
+func (*BatchAvailabilityLookupResponse) ProtoMessage()    {}
+func (*BatchAvailabilityLookupResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{7}
+}
+
+func (m *BatchAvailabilityLookupResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchAvailabilityLookupResponse.Unmarshal(m, b)
+}
+func (m *BatchAvailabilityLookupResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchAvailabilityLookupResponse.Marshal(b, m, deterministic)
+}
+func (m *BatchAvailabilityLookupResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchAvailabilityLookupResponse.Merge(m, src)
+}
+func (m *BatchAvailabilityLookupResponse) XXX_Size() int {
+	return xxx_messageInfo_BatchAvailabilityLookupResponse.Size(m)
+}
+func (m *BatchAvailabilityLookupResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchAvailabilityLookupResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchAvailabilityLookupResponse proto.InternalMessageInfo
 
 func (m *BatchAvailabilityLookupResponse) GetSlotTimeAvailability() []*SlotTimeAvailability {
 	if m != nil {
@@ -833,16 +1047,39 @@
 // Request to check the fulfillability of an order.
 type CheckOrderFulfillabilityRequest struct {
 	// The merchant that this order is intended for. (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// The line items in this order. All services requested must belong to the
 	// specified merchant. (required)
-	Item []*LineItem `protobuf:"bytes,2,rep,name=item" json:"item,omitempty"`
+	Item                 []*LineItem `protobuf:"bytes,2,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *CheckOrderFulfillabilityRequest) Reset()                    { *m = CheckOrderFulfillabilityRequest{} }
-func (m *CheckOrderFulfillabilityRequest) String() string            { return proto.CompactTextString(m) }
-func (*CheckOrderFulfillabilityRequest) ProtoMessage()               {}
-func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+func (m *CheckOrderFulfillabilityRequest) Reset()         { *m = CheckOrderFulfillabilityRequest{} }
+func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
+func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{8}
+}
+
+func (m *CheckOrderFulfillabilityRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Unmarshal(m, b)
+}
+func (m *CheckOrderFulfillabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Marshal(b, m, deterministic)
+}
+func (m *CheckOrderFulfillabilityRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckOrderFulfillabilityRequest.Merge(m, src)
+}
+func (m *CheckOrderFulfillabilityRequest) XXX_Size() int {
+	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Size(m)
+}
+func (m *CheckOrderFulfillabilityRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckOrderFulfillabilityRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckOrderFulfillabilityRequest proto.InternalMessageInfo
 
 func (m *CheckOrderFulfillabilityRequest) GetMerchantId() string {
 	if m != nil {
@@ -862,19 +1099,40 @@
 type CheckOrderFulfillabilityResponse struct {
 	// Fulfillability status of the order, potentially contains updated
 	// availabilities and prices of the requested line item. (required)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
 	// Total processing fees & taxes that need to be paid for this order.
 	// (required)
-	FeesAndTaxes *Price `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
+	FeesAndTaxes         *Price   `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *CheckOrderFulfillabilityResponse) Reset()         { *m = CheckOrderFulfillabilityResponse{} }
 func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
 func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
 func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{9}
+	return fileDescriptor_1820d8e1a9fad753, []int{9}
 }
 
+func (m *CheckOrderFulfillabilityResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Unmarshal(m, b)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Marshal(b, m, deterministic)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.Merge(m, src)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Size() int {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Size(m)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckOrderFulfillabilityResponse proto.InternalMessageInfo
+
 func (m *CheckOrderFulfillabilityResponse) GetFulfillability() *OrderFulfillability {
 	if m != nil {
 		return m.Fulfillability
@@ -892,13 +1150,36 @@
 // Request to get booking status and prepayment status for a Booking.
 type GetBookingStatusRequest struct {
 	// ID of the existing booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId            string   `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *GetBookingStatusRequest) Reset()                    { *m = GetBookingStatusRequest{} }
-func (m *GetBookingStatusRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusRequest) ProtoMessage()               {}
-func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+func (m *GetBookingStatusRequest) Reset()         { *m = GetBookingStatusRequest{} }
+func (m *GetBookingStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusRequest) ProtoMessage()    {}
+func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{10}
+}
+
+func (m *GetBookingStatusRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBookingStatusRequest.Unmarshal(m, b)
+}
+func (m *GetBookingStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBookingStatusRequest.Marshal(b, m, deterministic)
+}
+func (m *GetBookingStatusRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBookingStatusRequest.Merge(m, src)
+}
+func (m *GetBookingStatusRequest) XXX_Size() int {
+	return xxx_messageInfo_GetBookingStatusRequest.Size(m)
+}
+func (m *GetBookingStatusRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBookingStatusRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBookingStatusRequest proto.InternalMessageInfo
 
 func (m *GetBookingStatusRequest) GetBookingId() string {
 	if m != nil {
@@ -911,17 +1192,40 @@
 // status.
 type GetBookingStatusResponse struct {
 	// ID of the booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
 	// Status of the booking (required)
-	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
+	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
 	// Prepayment status of the booking (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus     PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
 }
 
-func (m *GetBookingStatusResponse) Reset()                    { *m = GetBookingStatusResponse{} }
-func (m *GetBookingStatusResponse) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusResponse) ProtoMessage()               {}
-func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+func (m *GetBookingStatusResponse) Reset()         { *m = GetBookingStatusResponse{} }
+func (m *GetBookingStatusResponse) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusResponse) ProtoMessage()    {}
+func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{11}
+}
+
+func (m *GetBookingStatusResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBookingStatusResponse.Unmarshal(m, b)
+}
+func (m *GetBookingStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBookingStatusResponse.Marshal(b, m, deterministic)
+}
+func (m *GetBookingStatusResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBookingStatusResponse.Merge(m, src)
+}
+func (m *GetBookingStatusResponse) XXX_Size() int {
+	return xxx_messageInfo_GetBookingStatusResponse.Size(m)
+}
+func (m *GetBookingStatusResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBookingStatusResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBookingStatusResponse proto.InternalMessageInfo
 
 func (m *GetBookingStatusResponse) GetBookingId() string {
 	if m != nil {
@@ -951,32 +1255,55 @@
 	// If lease_ref is provided, slot must match the lease; slot is provided for
 	// the partner to verify the lease information.
 	// If lease_ref is absent, then create the booking for the slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// The lease that is being confirmed to make this booking.
 	// If lease_ref is provided, then create the booking using the lease.
 	// (optional)
-	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef" json:"lease_ref,omitempty"`
+	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef,proto3" json:"lease_ref,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Information about payments. When payment authorizations are handled by
 	// Google, if the booking request does not succeed, payment authorizations are
 	// automatically canceled. (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (optional)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateBooking requests. (required)
-	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
+	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
 	// A string from the user which contains any special requests or additional
 	// information that they would like to notify the merchant about. (optional)
-	AdditionalRequest string `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest" json:"additional_request,omitempty"`
+	AdditionalRequest    string   `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest,proto3" json:"additional_request,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateBookingRequest) Reset()                    { *m = CreateBookingRequest{} }
-func (m *CreateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingRequest) ProtoMessage()               {}
-func (*CreateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (m *CreateBookingRequest) Reset()         { *m = CreateBookingRequest{} }
+func (m *CreateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingRequest) ProtoMessage()    {}
+func (*CreateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{12}
+}
+
+func (m *CreateBookingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateBookingRequest.Unmarshal(m, b)
+}
+func (m *CreateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateBookingRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateBookingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateBookingRequest.Merge(m, src)
+}
+func (m *CreateBookingRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateBookingRequest.Size(m)
+}
+func (m *CreateBookingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateBookingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateBookingRequest proto.InternalMessageInfo
 
 func (m *CreateBookingRequest) GetSlot() *Slot {
 	if m != nil {
@@ -1030,25 +1357,48 @@
 // Response with the created Booking for an inventory slot.
 type CreateBookingResponse struct {
 	// The created booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
 	// The updated user payment option used in this booking.
 	// If a new payment option was purchased to pay for the booking, this should
 	// be a newly created user payment option.
 	// If an already purchased user payment option was used for this booking,
 	// this should reflect an updated version of that user payment option.
 	// (optional)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
 	// If creating a booking fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and all other fields in the
 	// CreateBookingResponse message are expected to be unset. (required if
 	// failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *CreateBookingResponse) Reset()                    { *m = CreateBookingResponse{} }
-func (m *CreateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingResponse) ProtoMessage()               {}
-func (*CreateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (m *CreateBookingResponse) Reset()         { *m = CreateBookingResponse{} }
+func (m *CreateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingResponse) ProtoMessage()    {}
+func (*CreateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{13}
+}
+
+func (m *CreateBookingResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateBookingResponse.Unmarshal(m, b)
+}
+func (m *CreateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateBookingResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateBookingResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateBookingResponse.Merge(m, src)
+}
+func (m *CreateBookingResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateBookingResponse.Size(m)
+}
+func (m *CreateBookingResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateBookingResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateBookingResponse proto.InternalMessageInfo
 
 func (m *CreateBookingResponse) GetBooking() *Booking {
 	if m != nil {
@@ -1077,13 +1427,36 @@
 type CreateLeaseRequest struct {
 	// The lease to be created with information about the appointment slot
 	// (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
+	Lease                *Lease   `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateLeaseRequest) Reset()                    { *m = CreateLeaseRequest{} }
-func (m *CreateLeaseRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseRequest) ProtoMessage()               {}
-func (*CreateLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (m *CreateLeaseRequest) Reset()         { *m = CreateLeaseRequest{} }
+func (m *CreateLeaseRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseRequest) ProtoMessage()    {}
+func (*CreateLeaseRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{14}
+}
+
+func (m *CreateLeaseRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateLeaseRequest.Unmarshal(m, b)
+}
+func (m *CreateLeaseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateLeaseRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateLeaseRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateLeaseRequest.Merge(m, src)
+}
+func (m *CreateLeaseRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateLeaseRequest.Size(m)
+}
+func (m *CreateLeaseRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateLeaseRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateLeaseRequest proto.InternalMessageInfo
 
 func (m *CreateLeaseRequest) GetLease() *Lease {
 	if m != nil {
@@ -1095,17 +1468,40 @@
 // Response for the CreateLease RPC with the created Lease.
 type CreateLeaseResponse struct {
 	// The created Lease (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
+	Lease *Lease `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
 	// If creating a lease fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and lease field is expected to be
 	// unset. (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *CreateLeaseResponse) Reset()                    { *m = CreateLeaseResponse{} }
-func (m *CreateLeaseResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseResponse) ProtoMessage()               {}
-func (*CreateLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+func (m *CreateLeaseResponse) Reset()         { *m = CreateLeaseResponse{} }
+func (m *CreateLeaseResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseResponse) ProtoMessage()    {}
+func (*CreateLeaseResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{15}
+}
+
+func (m *CreateLeaseResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateLeaseResponse.Unmarshal(m, b)
+}
+func (m *CreateLeaseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateLeaseResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateLeaseResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateLeaseResponse.Merge(m, src)
+}
+func (m *CreateLeaseResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateLeaseResponse.Size(m)
+}
+func (m *CreateLeaseResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateLeaseResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateLeaseResponse proto.InternalMessageInfo
 
 func (m *CreateLeaseResponse) GetLease() *Lease {
 	if m != nil {
@@ -1126,20 +1522,43 @@
 	// ID of the lease.
 	// Not populated in CreateLeaseRequest. The value is chosen by the partner and
 	// has to be returned in the response of CreateLease. (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
 	// The appointment slot that the lease is created for. (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Unique identifier for this lease, chosen by Reserve with Google. Serves as
 	// an idempotency token for CreateLease requests. (required)
-	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference" json:"user_reference,omitempty"`
+	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference,proto3" json:"user_reference,omitempty"`
 	// Expiration time of the lease in UTC Timestamp (required)
-	LeaseExpirationTimeSec int64 `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec" json:"lease_expiration_time_sec,omitempty"`
+	LeaseExpirationTimeSec int64    `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec,proto3" json:"lease_expiration_time_sec,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
+	XXX_unrecognized       []byte   `json:"-"`
+	XXX_sizecache          int32    `json:"-"`
 }
 
-func (m *Lease) Reset()                    { *m = Lease{} }
-func (m *Lease) String() string            { return proto.CompactTextString(m) }
-func (*Lease) ProtoMessage()               {}
-func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+func (m *Lease) Reset()         { *m = Lease{} }
+func (m *Lease) String() string { return proto.CompactTextString(m) }
+func (*Lease) ProtoMessage()    {}
+func (*Lease) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{16}
+}
+
+func (m *Lease) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Lease.Unmarshal(m, b)
+}
+func (m *Lease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Lease.Marshal(b, m, deterministic)
+}
+func (m *Lease) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Lease.Merge(m, src)
+}
+func (m *Lease) XXX_Size() int {
+	return xxx_messageInfo_Lease.Size(m)
+}
+func (m *Lease) XXX_DiscardUnknown() {
+	xxx_messageInfo_Lease.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Lease proto.InternalMessageInfo
 
 func (m *Lease) GetLeaseId() string {
 	if m != nil {
@@ -1172,13 +1591,36 @@
 // Reference to a Lease that has been created via CreateLease.
 type LeaseReference struct {
 	// Lease ID (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId              string   `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *LeaseReference) Reset()                    { *m = LeaseReference{} }
-func (m *LeaseReference) String() string            { return proto.CompactTextString(m) }
-func (*LeaseReference) ProtoMessage()               {}
-func (*LeaseReference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (m *LeaseReference) Reset()         { *m = LeaseReference{} }
+func (m *LeaseReference) String() string { return proto.CompactTextString(m) }
+func (*LeaseReference) ProtoMessage()    {}
+func (*LeaseReference) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{17}
+}
+
+func (m *LeaseReference) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LeaseReference.Unmarshal(m, b)
+}
+func (m *LeaseReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LeaseReference.Marshal(b, m, deterministic)
+}
+func (m *LeaseReference) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LeaseReference.Merge(m, src)
+}
+func (m *LeaseReference) XXX_Size() int {
+	return xxx_messageInfo_LeaseReference.Size(m)
+}
+func (m *LeaseReference) XXX_DiscardUnknown() {
+	xxx_messageInfo_LeaseReference.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LeaseReference proto.InternalMessageInfo
 
 func (m *LeaseReference) GetLeaseId() string {
 	if m != nil {
@@ -1190,19 +1632,42 @@
 // Request to create an order.
 type CreateOrderRequest struct {
 	// The order to create. (required)
-	Order *Order `protobuf:"bytes,1,opt,name=order" json:"order,omitempty"`
+	Order *Order `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. order.payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateOrder requests. (required)
-	IdempotencyToken string `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
+	IdempotencyToken     string   `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateOrderRequest) Reset()                    { *m = CreateOrderRequest{} }
-func (m *CreateOrderRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderRequest) ProtoMessage()               {}
-func (*CreateOrderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+func (m *CreateOrderRequest) Reset()         { *m = CreateOrderRequest{} }
+func (m *CreateOrderRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderRequest) ProtoMessage()    {}
+func (*CreateOrderRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{18}
+}
+
+func (m *CreateOrderRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateOrderRequest.Unmarshal(m, b)
+}
+func (m *CreateOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateOrderRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateOrderRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateOrderRequest.Merge(m, src)
+}
+func (m *CreateOrderRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateOrderRequest.Size(m)
+}
+func (m *CreateOrderRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateOrderRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateOrderRequest proto.InternalMessageInfo
 
 func (m *CreateOrderRequest) GetOrder() *Order {
 	if m != nil {
@@ -1235,26 +1700,51 @@
 	// Types that are valid to be assigned to Result:
 	//	*CreateOrderResponse_Order
 	//	*CreateOrderResponse_OrderFailure
-	Result isCreateOrderResponse_Result `protobuf_oneof:"result"`
+	Result               isCreateOrderResponse_Result `protobuf_oneof:"result"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
 }
 
-func (m *CreateOrderResponse) Reset()                    { *m = CreateOrderResponse{} }
-func (m *CreateOrderResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderResponse) ProtoMessage()               {}
-func (*CreateOrderResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (m *CreateOrderResponse) Reset()         { *m = CreateOrderResponse{} }
+func (m *CreateOrderResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderResponse) ProtoMessage()    {}
+func (*CreateOrderResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{19}
+}
+
+func (m *CreateOrderResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateOrderResponse.Unmarshal(m, b)
+}
+func (m *CreateOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateOrderResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateOrderResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateOrderResponse.Merge(m, src)
+}
+func (m *CreateOrderResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateOrderResponse.Size(m)
+}
+func (m *CreateOrderResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateOrderResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateOrderResponse proto.InternalMessageInfo
 
 type isCreateOrderResponse_Result interface {
 	isCreateOrderResponse_Result()
 }
 
 type CreateOrderResponse_Order struct {
-	Order *Order `protobuf:"bytes,1,opt,name=order,oneof"`
-}
-type CreateOrderResponse_OrderFailure struct {
-	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,oneof"`
+	Order *Order `protobuf:"bytes,1,opt,name=order,proto3,oneof"`
 }
 
-func (*CreateOrderResponse_Order) isCreateOrderResponse_Result()        {}
+type CreateOrderResponse_OrderFailure struct {
+	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,proto3,oneof"`
+}
+
+func (*CreateOrderResponse_Order) isCreateOrderResponse_Result() {}
+
 func (*CreateOrderResponse_OrderFailure) isCreateOrderResponse_Result() {}
 
 func (m *CreateOrderResponse) GetResult() isCreateOrderResponse_Result {
@@ -1278,90 +1768,47 @@
 	return nil
 }
 
-// XXX_OneofFuncs is for the internal use of the proto package.
-func (*CreateOrderResponse) 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 _CreateOrderResponse_OneofMarshaler, _CreateOrderResponse_OneofUnmarshaler, _CreateOrderResponse_OneofSizer, []interface{}{
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CreateOrderResponse) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
 		(*CreateOrderResponse_Order)(nil),
 		(*CreateOrderResponse_OrderFailure)(nil),
 	}
 }
 
-func _CreateOrderResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
-	m := msg.(*CreateOrderResponse)
-	// result
-	switch x := m.Result.(type) {
-	case *CreateOrderResponse_Order:
-		b.EncodeVarint(1<<3 | proto.WireBytes)
-		if err := b.EncodeMessage(x.Order); err != nil {
-			return err
-		}
-	case *CreateOrderResponse_OrderFailure:
-		b.EncodeVarint(2<<3 | proto.WireBytes)
-		if err := b.EncodeMessage(x.OrderFailure); err != nil {
-			return err
-		}
-	case nil:
-	default:
-		return fmt.Errorf("CreateOrderResponse.Result has unexpected type %T", x)
-	}
-	return nil
-}
-
-func _CreateOrderResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
-	m := msg.(*CreateOrderResponse)
-	switch tag {
-	case 1: // result.order
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		msg := new(Order)
-		err := b.DecodeMessage(msg)
-		m.Result = &CreateOrderResponse_Order{msg}
-		return true, err
-	case 2: // result.order_failure
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		msg := new(OrderFailure)
-		err := b.DecodeMessage(msg)
-		m.Result = &CreateOrderResponse_OrderFailure{msg}
-		return true, err
-	default:
-		return false, nil
-	}
-}
-
-func _CreateOrderResponse_OneofSizer(msg proto.Message) (n int) {
-	m := msg.(*CreateOrderResponse)
-	// result
-	switch x := m.Result.(type) {
-	case *CreateOrderResponse_Order:
-		s := proto.Size(x.Order)
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
-		n += proto.SizeVarint(uint64(s))
-		n += s
-	case *CreateOrderResponse_OrderFailure:
-		s := proto.Size(x.OrderFailure)
-		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
-}
-
 // Request to list all bookings for a user
 type ListBookingsRequest struct {
 	// ID of the user (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListBookingsRequest) Reset()                    { *m = ListBookingsRequest{} }
-func (m *ListBookingsRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsRequest) ProtoMessage()               {}
-func (*ListBookingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+func (m *ListBookingsRequest) Reset()         { *m = ListBookingsRequest{} }
+func (m *ListBookingsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsRequest) ProtoMessage()    {}
+func (*ListBookingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{20}
+}
+
+func (m *ListBookingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListBookingsRequest.Unmarshal(m, b)
+}
+func (m *ListBookingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListBookingsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListBookingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListBookingsRequest.Merge(m, src)
+}
+func (m *ListBookingsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListBookingsRequest.Size(m)
+}
+func (m *ListBookingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListBookingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListBookingsRequest proto.InternalMessageInfo
 
 func (m *ListBookingsRequest) GetUserId() string {
 	if m != nil {
@@ -1373,13 +1820,36 @@
 // Response for the ListBookings RPC with all bookings for the requested user.
 type ListBookingsResponse struct {
 	// All bookings of the user (required)
-	Bookings []*Booking `protobuf:"bytes,1,rep,name=bookings" json:"bookings,omitempty"`
+	Bookings             []*Booking `protobuf:"bytes,1,rep,name=bookings,proto3" json:"bookings,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
 }
 
-func (m *ListBookingsResponse) Reset()                    { *m = ListBookingsResponse{} }
-func (m *ListBookingsResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsResponse) ProtoMessage()               {}
-func (*ListBookingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+func (m *ListBookingsResponse) Reset()         { *m = ListBookingsResponse{} }
+func (m *ListBookingsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsResponse) ProtoMessage()    {}
+func (*ListBookingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{21}
+}
+
+func (m *ListBookingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListBookingsResponse.Unmarshal(m, b)
+}
+func (m *ListBookingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListBookingsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListBookingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListBookingsResponse.Merge(m, src)
+}
+func (m *ListBookingsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListBookingsResponse.Size(m)
+}
+func (m *ListBookingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListBookingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListBookingsResponse proto.InternalMessageInfo
 
 func (m *ListBookingsResponse) GetBookings() []*Booking {
 	if m != nil {
@@ -1395,26 +1865,51 @@
 	// Types that are valid to be assigned to Ids:
 	//	*ListOrdersRequest_UserId
 	//	*ListOrdersRequest_OrderIds_
-	Ids isListOrdersRequest_Ids `protobuf_oneof:"ids"`
+	Ids                  isListOrdersRequest_Ids `protobuf_oneof:"ids"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
 }
 
-func (m *ListOrdersRequest) Reset()                    { *m = ListOrdersRequest{} }
-func (m *ListOrdersRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersRequest) ProtoMessage()               {}
-func (*ListOrdersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+func (m *ListOrdersRequest) Reset()         { *m = ListOrdersRequest{} }
+func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersRequest) ProtoMessage()    {}
+func (*ListOrdersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{22}
+}
+
+func (m *ListOrdersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOrdersRequest.Unmarshal(m, b)
+}
+func (m *ListOrdersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOrdersRequest.Marshal(b, m, deterministic)
+}
+func (m *ListOrdersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersRequest.Merge(m, src)
+}
+func (m *ListOrdersRequest) XXX_Size() int {
+	return xxx_messageInfo_ListOrdersRequest.Size(m)
+}
+func (m *ListOrdersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersRequest proto.InternalMessageInfo
 
 type isListOrdersRequest_Ids interface {
 	isListOrdersRequest_Ids()
 }
 
 type ListOrdersRequest_UserId struct {
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,oneof"`
-}
-type ListOrdersRequest_OrderIds_ struct {
-	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,oneof"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3,oneof"`
 }
 
-func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids()    {}
+type ListOrdersRequest_OrderIds_ struct {
+	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,proto3,oneof"`
+}
+
+func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids() {}
+
 func (*ListOrdersRequest_OrderIds_) isListOrdersRequest_Ids() {}
 
 func (m *ListOrdersRequest) GetIds() isListOrdersRequest_Ids {
@@ -1438,84 +1933,45 @@
 	return nil
 }
 
-// XXX_OneofFuncs is for the internal use of the proto package.
-func (*ListOrdersRequest) 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 _ListOrdersRequest_OneofMarshaler, _ListOrdersRequest_OneofUnmarshaler, _ListOrdersRequest_OneofSizer, []interface{}{
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ListOrdersRequest) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
 		(*ListOrdersRequest_UserId)(nil),
 		(*ListOrdersRequest_OrderIds_)(nil),
 	}
 }
 
-func _ListOrdersRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
-	m := msg.(*ListOrdersRequest)
-	// ids
-	switch x := m.Ids.(type) {
-	case *ListOrdersRequest_UserId:
-		b.EncodeVarint(1<<3 | proto.WireBytes)
-		b.EncodeStringBytes(x.UserId)
-	case *ListOrdersRequest_OrderIds_:
-		b.EncodeVarint(2<<3 | proto.WireBytes)
-		if err := b.EncodeMessage(x.OrderIds); err != nil {
-			return err
-		}
-	case nil:
-	default:
-		return fmt.Errorf("ListOrdersRequest.Ids has unexpected type %T", x)
-	}
-	return nil
-}
-
-func _ListOrdersRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
-	m := msg.(*ListOrdersRequest)
-	switch tag {
-	case 1: // ids.user_id
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		x, err := b.DecodeStringBytes()
-		m.Ids = &ListOrdersRequest_UserId{x}
-		return true, err
-	case 2: // ids.order_ids
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		msg := new(ListOrdersRequest_OrderIds)
-		err := b.DecodeMessage(msg)
-		m.Ids = &ListOrdersRequest_OrderIds_{msg}
-		return true, err
-	default:
-		return false, nil
-	}
-}
-
-func _ListOrdersRequest_OneofSizer(msg proto.Message) (n int) {
-	m := msg.(*ListOrdersRequest)
-	// ids
-	switch x := m.Ids.(type) {
-	case *ListOrdersRequest_UserId:
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
-		n += proto.SizeVarint(uint64(len(x.UserId)))
-		n += len(x.UserId)
-	case *ListOrdersRequest_OrderIds_:
-		s := proto.Size(x.OrderIds)
-		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
-}
-
 type ListOrdersRequest_OrderIds struct {
-	OrderId []string `protobuf:"bytes,1,rep,name=order_id,json=orderId" json:"order_id,omitempty"`
+	OrderId              []string `protobuf:"bytes,1,rep,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOrdersRequest_OrderIds) Reset()                    { *m = ListOrdersRequest_OrderIds{} }
-func (m *ListOrdersRequest_OrderIds) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersRequest_OrderIds) ProtoMessage()               {}
-func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22, 0} }
+func (m *ListOrdersRequest_OrderIds) Reset()         { *m = ListOrdersRequest_OrderIds{} }
+func (m *ListOrdersRequest_OrderIds) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersRequest_OrderIds) ProtoMessage()    {}
+func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{22, 0}
+}
+
+func (m *ListOrdersRequest_OrderIds) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOrdersRequest_OrderIds.Unmarshal(m, b)
+}
+func (m *ListOrdersRequest_OrderIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOrdersRequest_OrderIds.Marshal(b, m, deterministic)
+}
+func (m *ListOrdersRequest_OrderIds) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersRequest_OrderIds.Merge(m, src)
+}
+func (m *ListOrdersRequest_OrderIds) XXX_Size() int {
+	return xxx_messageInfo_ListOrdersRequest_OrderIds.Size(m)
+}
+func (m *ListOrdersRequest_OrderIds) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersRequest_OrderIds.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersRequest_OrderIds proto.InternalMessageInfo
 
 func (m *ListOrdersRequest_OrderIds) GetOrderId() []string {
 	if m != nil {
@@ -1527,13 +1983,36 @@
 // Response for the ListOrders RPC.
 type ListOrdersResponse struct {
 	// All requested orders (required)
-	Order []*Order `protobuf:"bytes,1,rep,name=order" json:"order,omitempty"`
+	Order                []*Order `protobuf:"bytes,1,rep,name=order,proto3" json:"order,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOrdersResponse) Reset()                    { *m = ListOrdersResponse{} }
-func (m *ListOrdersResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersResponse) ProtoMessage()               {}
-func (*ListOrdersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+func (m *ListOrdersResponse) Reset()         { *m = ListOrdersResponse{} }
+func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersResponse) ProtoMessage()    {}
+func (*ListOrdersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{23}
+}
+
+func (m *ListOrdersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOrdersResponse.Unmarshal(m, b)
+}
+func (m *ListOrdersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOrdersResponse.Marshal(b, m, deterministic)
+}
+func (m *ListOrdersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersResponse.Merge(m, src)
+}
+func (m *ListOrdersResponse) XXX_Size() int {
+	return xxx_messageInfo_ListOrdersResponse.Size(m)
+}
+func (m *ListOrdersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersResponse proto.InternalMessageInfo
 
 func (m *ListOrdersResponse) GetOrder() []*Order {
 	if m != nil {
@@ -1544,13 +2023,36 @@
 
 // Request to update a Booking.
 type UpdateBookingRequest struct {
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
+	Booking              *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UpdateBookingRequest) Reset()                    { *m = UpdateBookingRequest{} }
-func (m *UpdateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingRequest) ProtoMessage()               {}
-func (*UpdateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+func (m *UpdateBookingRequest) Reset()         { *m = UpdateBookingRequest{} }
+func (m *UpdateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingRequest) ProtoMessage()    {}
+func (*UpdateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{24}
+}
+
+func (m *UpdateBookingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateBookingRequest.Unmarshal(m, b)
+}
+func (m *UpdateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateBookingRequest.Marshal(b, m, deterministic)
+}
+func (m *UpdateBookingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateBookingRequest.Merge(m, src)
+}
+func (m *UpdateBookingRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateBookingRequest.Size(m)
+}
+func (m *UpdateBookingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateBookingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateBookingRequest proto.InternalMessageInfo
 
 func (m *UpdateBookingRequest) GetBooking() *Booking {
 	if m != nil {
@@ -1562,7 +2064,7 @@
 // Response with the updated Booking.
 type UpdateBookingResponse struct {
 	// The updated booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
 	// The updated user payment option originally used to pay for this booking.
 	// This should be set if the UpdateBookingRequest results in a change to
 	// the UserPaymentOption.
@@ -1572,16 +2074,39 @@
 	// allow the user to create another booking with this payment option. In the
 	// case of a single-use payment option, a new single-use user payment option
 	// should be returned. (required if altered in update)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
 	// If updating a booking fails, this field should reflect the business logic
 	// error (e.g., booking is not cancellable) (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *UpdateBookingResponse) Reset()                    { *m = UpdateBookingResponse{} }
-func (m *UpdateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingResponse) ProtoMessage()               {}
-func (*UpdateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+func (m *UpdateBookingResponse) Reset()         { *m = UpdateBookingResponse{} }
+func (m *UpdateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingResponse) ProtoMessage()    {}
+func (*UpdateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{25}
+}
+
+func (m *UpdateBookingResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateBookingResponse.Unmarshal(m, b)
+}
+func (m *UpdateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateBookingResponse.Marshal(b, m, deterministic)
+}
+func (m *UpdateBookingResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateBookingResponse.Merge(m, src)
+}
+func (m *UpdateBookingResponse) XXX_Size() int {
+	return xxx_messageInfo_UpdateBookingResponse.Size(m)
+}
+func (m *UpdateBookingResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateBookingResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateBookingResponse proto.InternalMessageInfo
 
 func (m *UpdateBookingResponse) GetBooking() *Booking {
 	if m != nil {
@@ -1607,22 +2132,45 @@
 // A booking for an inventory slot
 type Booking struct {
 	// ID of this booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
 	// The appointment slot of this booking (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Status of the booking (required)
-	Status BookingStatus `protobuf:"varint,4,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	Status BookingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
 	// Information about payment transactions that relate to the booking.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation   *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *Booking) Reset()                    { *m = Booking{} }
-func (m *Booking) String() string            { return proto.CompactTextString(m) }
-func (*Booking) ProtoMessage()               {}
-func (*Booking) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+func (m *Booking) Reset()         { *m = Booking{} }
+func (m *Booking) String() string { return proto.CompactTextString(m) }
+func (*Booking) ProtoMessage()    {}
+func (*Booking) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{26}
+}
+
+func (m *Booking) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Booking.Unmarshal(m, b)
+}
+func (m *Booking) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Booking.Marshal(b, m, deterministic)
+}
+func (m *Booking) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Booking.Merge(m, src)
+}
+func (m *Booking) XXX_Size() int {
+	return xxx_messageInfo_Booking.Size(m)
+}
+func (m *Booking) XXX_DiscardUnknown() {
+	xxx_messageInfo_Booking.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Booking proto.InternalMessageInfo
 
 func (m *Booking) GetBookingId() string {
 	if m != nil {
@@ -1664,18 +2212,41 @@
 // BookingFailure is intended to primarily capture business logic errors.
 type BookingFailure struct {
 	// The reason why the booking failed. (required)
-	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
+	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+	Description          string   `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *BookingFailure) Reset()                    { *m = BookingFailure{} }
-func (m *BookingFailure) String() string            { return proto.CompactTextString(m) }
-func (*BookingFailure) ProtoMessage()               {}
-func (*BookingFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+func (m *BookingFailure) Reset()         { *m = BookingFailure{} }
+func (m *BookingFailure) String() string { return proto.CompactTextString(m) }
+func (*BookingFailure) ProtoMessage()    {}
+func (*BookingFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{27}
+}
+
+func (m *BookingFailure) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BookingFailure.Unmarshal(m, b)
+}
+func (m *BookingFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BookingFailure.Marshal(b, m, deterministic)
+}
+func (m *BookingFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BookingFailure.Merge(m, src)
+}
+func (m *BookingFailure) XXX_Size() int {
+	return xxx_messageInfo_BookingFailure.Size(m)
+}
+func (m *BookingFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_BookingFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BookingFailure proto.InternalMessageInfo
 
 func (m *BookingFailure) GetCause() BookingFailure_Cause {
 	if m != nil {
@@ -1703,22 +2274,45 @@
 	// ID of this Order, chosen by the booking partner who handles the order
 	// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
 	// CreateOrderRequest)
-	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId" json:"order_id,omitempty"`
+	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
 	// Personal information of the user making the order (required)
-	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Information about payment transactions that relate to the Order.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
 	// The merchant that all services in this Order belong to.
-	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// Line items in this order.
-	Item []*LineItem `protobuf:"bytes,5,rep,name=item" json:"item,omitempty"`
+	Item                 []*LineItem `protobuf:"bytes,5,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *Order) Reset()                    { *m = Order{} }
-func (m *Order) String() string            { return proto.CompactTextString(m) }
-func (*Order) ProtoMessage()               {}
-func (*Order) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
+func (m *Order) Reset()         { *m = Order{} }
+func (m *Order) String() string { return proto.CompactTextString(m) }
+func (*Order) ProtoMessage()    {}
+func (*Order) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{28}
+}
+
+func (m *Order) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Order.Unmarshal(m, b)
+}
+func (m *Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Order.Marshal(b, m, deterministic)
+}
+func (m *Order) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Order.Merge(m, src)
+}
+func (m *Order) XXX_Size() int {
+	return xxx_messageInfo_Order.Size(m)
+}
+func (m *Order) XXX_DiscardUnknown() {
+	xxx_messageInfo_Order.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Order proto.InternalMessageInfo
 
 func (m *Order) GetOrderId() string {
 	if m != nil {
@@ -1759,30 +2353,53 @@
 // slot.
 type LineItem struct {
 	// ID of the merchant Service. (required)
-	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the appointment slot in seconds. (required)
-	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Number of tickets ordered by Ticket Type.
-	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets" json:"tickets,omitempty"`
+	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets,proto3" json:"tickets,omitempty"`
 	// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
 	// the total price (excluding taxes) of the item must be verified to guard
 	// against price changes. In CreateOrderResponse and
 	// CheckOrderFulfillabilityResponse, the price should be updated to the
 	// correct value if the value from the request was incorrect or outdated.
 	// (reqired)
-	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
 	// Status of the Line Item. (required in CreateOrderResponse and
 	// ListOrdersResponse; should not be set in requests)
-	Status BookingStatus `protobuf:"varint,6,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	Status               BookingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
 }
 
-func (m *LineItem) Reset()                    { *m = LineItem{} }
-func (m *LineItem) String() string            { return proto.CompactTextString(m) }
-func (*LineItem) ProtoMessage()               {}
-func (*LineItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
+func (m *LineItem) Reset()         { *m = LineItem{} }
+func (m *LineItem) String() string { return proto.CompactTextString(m) }
+func (*LineItem) ProtoMessage()    {}
+func (*LineItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{29}
+}
+
+func (m *LineItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LineItem.Unmarshal(m, b)
+}
+func (m *LineItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LineItem.Marshal(b, m, deterministic)
+}
+func (m *LineItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItem.Merge(m, src)
+}
+func (m *LineItem) XXX_Size() int {
+	return xxx_messageInfo_LineItem.Size(m)
+}
+func (m *LineItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItem proto.InternalMessageInfo
 
 func (m *LineItem) GetServiceId() string {
 	if m != nil {
@@ -1827,14 +2444,37 @@
 }
 
 type LineItem_OrderedTickets struct {
-	TicketId string `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId" json:"ticket_id,omitempty"`
-	Count    int32  `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+	TicketId             string   `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId,proto3" json:"ticket_id,omitempty"`
+	Count                int32    `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *LineItem_OrderedTickets) Reset()                    { *m = LineItem_OrderedTickets{} }
-func (m *LineItem_OrderedTickets) String() string            { return proto.CompactTextString(m) }
-func (*LineItem_OrderedTickets) ProtoMessage()               {}
-func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} }
+func (m *LineItem_OrderedTickets) Reset()         { *m = LineItem_OrderedTickets{} }
+func (m *LineItem_OrderedTickets) String() string { return proto.CompactTextString(m) }
+func (*LineItem_OrderedTickets) ProtoMessage()    {}
+func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{29, 0}
+}
+
+func (m *LineItem_OrderedTickets) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LineItem_OrderedTickets.Unmarshal(m, b)
+}
+func (m *LineItem_OrderedTickets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LineItem_OrderedTickets.Marshal(b, m, deterministic)
+}
+func (m *LineItem_OrderedTickets) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItem_OrderedTickets.Merge(m, src)
+}
+func (m *LineItem_OrderedTickets) XXX_Size() int {
+	return xxx_messageInfo_LineItem_OrderedTickets.Size(m)
+}
+func (m *LineItem_OrderedTickets) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItem_OrderedTickets.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItem_OrderedTickets proto.InternalMessageInfo
 
 func (m *LineItem_OrderedTickets) GetTicketId() string {
 	if m != nil {
@@ -1854,20 +2494,43 @@
 // OrderFailure is intended to primarily capture business logic errors.
 type OrderFailure struct {
 	// The reason why the order failed. (required)
-	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
+	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is ORDER_UNFULFILLABLE)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
+	Description          string   `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *OrderFailure) Reset()                    { *m = OrderFailure{} }
-func (m *OrderFailure) String() string            { return proto.CompactTextString(m) }
-func (*OrderFailure) ProtoMessage()               {}
-func (*OrderFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
+func (m *OrderFailure) Reset()         { *m = OrderFailure{} }
+func (m *OrderFailure) String() string { return proto.CompactTextString(m) }
+func (*OrderFailure) ProtoMessage()    {}
+func (*OrderFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{30}
+}
+
+func (m *OrderFailure) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OrderFailure.Unmarshal(m, b)
+}
+func (m *OrderFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OrderFailure.Marshal(b, m, deterministic)
+}
+func (m *OrderFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OrderFailure.Merge(m, src)
+}
+func (m *OrderFailure) XXX_Size() int {
+	return xxx_messageInfo_OrderFailure.Size(m)
+}
+func (m *OrderFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_OrderFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OrderFailure proto.InternalMessageInfo
 
 func (m *OrderFailure) GetCause() OrderFailure_Cause {
 	if m != nil {
@@ -1898,18 +2561,41 @@
 }
 
 type OrderFulfillability struct {
-	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
+	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
 	// Fulfillability results of all line items in this order (required).
-	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability" json:"item_fulfillability,omitempty"`
+	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability,proto3" json:"item_fulfillability,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
+	UnfulfillableReason  string   `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *OrderFulfillability) Reset()                    { *m = OrderFulfillability{} }
-func (m *OrderFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*OrderFulfillability) ProtoMessage()               {}
-func (*OrderFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
+func (m *OrderFulfillability) Reset()         { *m = OrderFulfillability{} }
+func (m *OrderFulfillability) String() string { return proto.CompactTextString(m) }
+func (*OrderFulfillability) ProtoMessage()    {}
+func (*OrderFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{31}
+}
+
+func (m *OrderFulfillability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OrderFulfillability.Unmarshal(m, b)
+}
+func (m *OrderFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OrderFulfillability.Marshal(b, m, deterministic)
+}
+func (m *OrderFulfillability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OrderFulfillability.Merge(m, src)
+}
+func (m *OrderFulfillability) XXX_Size() int {
+	return xxx_messageInfo_OrderFulfillability.Size(m)
+}
+func (m *OrderFulfillability) XXX_DiscardUnknown() {
+	xxx_messageInfo_OrderFulfillability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OrderFulfillability proto.InternalMessageInfo
 
 func (m *OrderFulfillability) GetResult() OrderFulfillability_OrderFulfillabilityResult {
 	if m != nil {
@@ -1935,25 +2621,48 @@
 // Fulfillability of a line item.
 type LineItemFulfillability struct {
 	// The line item of question. (required)
-	Item *LineItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
+	Item *LineItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
 	// (required)
-	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
+	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
+	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
 	// (optional)
-	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability" json:"availability,omitempty"`
+	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability,proto3" json:"availability,omitempty"`
 	// Updated ticket types can be piggybacked in
 	// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
 	// for this slot with up-to-date prices should be listed without omitting any.
 	// (optional)
-	TicketType []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType" json:"ticket_type,omitempty"`
+	TicketType           []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
 }
 
-func (m *LineItemFulfillability) Reset()                    { *m = LineItemFulfillability{} }
-func (m *LineItemFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*LineItemFulfillability) ProtoMessage()               {}
-func (*LineItemFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
+func (m *LineItemFulfillability) Reset()         { *m = LineItemFulfillability{} }
+func (m *LineItemFulfillability) String() string { return proto.CompactTextString(m) }
+func (*LineItemFulfillability) ProtoMessage()    {}
+func (*LineItemFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{32}
+}
+
+func (m *LineItemFulfillability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LineItemFulfillability.Unmarshal(m, b)
+}
+func (m *LineItemFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LineItemFulfillability.Marshal(b, m, deterministic)
+}
+func (m *LineItemFulfillability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItemFulfillability.Merge(m, src)
+}
+func (m *LineItemFulfillability) XXX_Size() int {
+	return xxx_messageInfo_LineItemFulfillability.Size(m)
+}
+func (m *LineItemFulfillability) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItemFulfillability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItemFulfillability proto.InternalMessageInfo
 
 func (m *LineItemFulfillability) GetItem() *LineItem {
 	if m != nil {
@@ -1995,7 +2704,10 @@
 type LineItemFulfillability_UpdatedAvailability struct {
 	// Number of available spots for the given slot. 0 indicates no
 	// availability. (required)
-	SpotsOpen int32 `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
+	SpotsOpen            int32    `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *LineItemFulfillability_UpdatedAvailability) Reset() {
@@ -2006,9 +2718,27 @@
 }
 func (*LineItemFulfillability_UpdatedAvailability) ProtoMessage() {}
 func (*LineItemFulfillability_UpdatedAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{32, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{32, 0}
 }
 
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Unmarshal(m, b)
+}
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Marshal(b, m, deterministic)
+}
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Merge(m, src)
+}
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_Size() int {
+	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Size(m)
+}
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItemFulfillability_UpdatedAvailability proto.InternalMessageInfo
+
 func (m *LineItemFulfillability_UpdatedAvailability) GetSpotsOpen() int32 {
 	if m != nil {
 		return m.SpotsOpen
@@ -2025,15 +2755,15 @@
 type TicketType struct {
 	// The ticket id is used to differentiate among different ticket types of the
 	// same service, and is only expected to be unique within a service.
-	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
 	// A short description to this TicketType.
 	//
 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
 	// Required, each ticket type should have a description to be user visible.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" json:"short_description,omitempty"`
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
 	// The price of a single ticket of this type, exclusive of any taxes. The tax
 	// rate of Service is applied to its tickets.
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
 	// Description of any additional option which this ticket type represents, if
 	// any.
 	//
@@ -2067,13 +2797,36 @@
 	// option_description could be used). E.g.
 	// [{ticket_type_1, adult, english}, {ticket_type_1, adult, ''}] is not a
 	// valid list.
-	OptionDescription string `protobuf:"bytes,4,opt,name=option_description,json=optionDescription" json:"option_description,omitempty"`
+	OptionDescription    string   `protobuf:"bytes,4,opt,name=option_description,json=optionDescription,proto3" json:"option_description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *TicketType) Reset()                    { *m = TicketType{} }
-func (m *TicketType) String() string            { return proto.CompactTextString(m) }
-func (*TicketType) ProtoMessage()               {}
-func (*TicketType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
+func (m *TicketType) Reset()         { *m = TicketType{} }
+func (m *TicketType) String() string { return proto.CompactTextString(m) }
+func (*TicketType) ProtoMessage()    {}
+func (*TicketType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{33}
+}
+
+func (m *TicketType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TicketType.Unmarshal(m, b)
+}
+func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TicketType.Marshal(b, m, deterministic)
+}
+func (m *TicketType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TicketType.Merge(m, src)
+}
+func (m *TicketType) XXX_Size() int {
+	return xxx_messageInfo_TicketType.Size(m)
+}
+func (m *TicketType) XXX_DiscardUnknown() {
+	xxx_messageInfo_TicketType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TicketType proto.InternalMessageInfo
 
 func (m *TicketType) GetTicketTypeId() string {
 	if m != nil {
@@ -2107,19 +2860,42 @@
 type ResourceIds struct {
 	// The staff ID as provided in the feed or empty if not applicable or no staff
 	// was selected. (optional)
-	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" json:"staff_id,omitempty"`
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
 	// The room ID as provided in the feed or empty if not applicable or no room
 	// was selected. (optional)
-	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId" json:"room_id,omitempty"`
+	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
 	// For Dining Reservations only: the number of seats requested in the booking.
 	// (optional)
-	PartySize int32 `protobuf:"varint,3,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
+	PartySize            int32    `protobuf:"varint,3,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ResourceIds) Reset()                    { *m = ResourceIds{} }
-func (m *ResourceIds) String() string            { return proto.CompactTextString(m) }
-func (*ResourceIds) ProtoMessage()               {}
-func (*ResourceIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
+func (m *ResourceIds) Reset()         { *m = ResourceIds{} }
+func (m *ResourceIds) String() string { return proto.CompactTextString(m) }
+func (*ResourceIds) ProtoMessage()    {}
+func (*ResourceIds) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{34}
+}
+
+func (m *ResourceIds) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceIds.Unmarshal(m, b)
+}
+func (m *ResourceIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceIds.Marshal(b, m, deterministic)
+}
+func (m *ResourceIds) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceIds.Merge(m, src)
+}
+func (m *ResourceIds) XXX_Size() int {
+	return xxx_messageInfo_ResourceIds.Size(m)
+}
+func (m *ResourceIds) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceIds.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceIds proto.InternalMessageInfo
 
 func (m *ResourceIds) GetStaffId() string {
 	if m != nil {
@@ -2148,16 +2924,39 @@
 	// A tokenization configuration will typically have one
 	// tokenization_parameter whose key is "gateway" and whose value is the
 	// name of the processor.
-	TokenizationParameter map[string]string `protobuf:"bytes,1,rep,name=tokenization_parameter,json=tokenizationParameter" json:"tokenization_parameter,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	TokenizationParameter map[string]string `protobuf:"bytes,1,rep,name=tokenization_parameter,json=tokenizationParameter,proto3" json:"tokenization_parameter,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 	// Include in the payment token the user's billing information as entered into
 	// Google Pay with their FOP (see above).
-	BillingInformationFormat TokenizationConfig_BillingInformationFormat `protobuf:"varint,2,opt,name=billing_information_format,json=billingInformationFormat,enum=ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat" json:"billing_information_format,omitempty"`
+	BillingInformationFormat TokenizationConfig_BillingInformationFormat `protobuf:"varint,2,opt,name=billing_information_format,json=billingInformationFormat,proto3,enum=ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat" json:"billing_information_format,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                                    `json:"-"`
+	XXX_unrecognized         []byte                                      `json:"-"`
+	XXX_sizecache            int32                                       `json:"-"`
 }
 
-func (m *TokenizationConfig) Reset()                    { *m = TokenizationConfig{} }
-func (m *TokenizationConfig) String() string            { return proto.CompactTextString(m) }
-func (*TokenizationConfig) ProtoMessage()               {}
-func (*TokenizationConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
+func (m *TokenizationConfig) Reset()         { *m = TokenizationConfig{} }
+func (m *TokenizationConfig) String() string { return proto.CompactTextString(m) }
+func (*TokenizationConfig) ProtoMessage()    {}
+func (*TokenizationConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{35}
+}
+
+func (m *TokenizationConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TokenizationConfig.Unmarshal(m, b)
+}
+func (m *TokenizationConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TokenizationConfig.Marshal(b, m, deterministic)
+}
+func (m *TokenizationConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TokenizationConfig.Merge(m, src)
+}
+func (m *TokenizationConfig) XXX_Size() int {
+	return xxx_messageInfo_TokenizationConfig.Size(m)
+}
+func (m *TokenizationConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_TokenizationConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TokenizationConfig proto.InternalMessageInfo
 
 func (m *TokenizationConfig) GetTokenizationParameter() map[string]string {
 	if m != nil {
@@ -2178,7 +2977,7 @@
 	// (required)
 	//
 	// Replaced by the payment_processor field.
-	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"`
+	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,proto3,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"` // Deprecated: Do not use.
 	// The token representing the payment method that will be used to pay
 	// for this booking. This token can be only used once. This token can be
 	// only used for the merchant associated with this booking.
@@ -2191,7 +2990,7 @@
 	// For example, for Stripe, unparsed_payment_method_token is a serialized
 	// JSON object documented at https://stripe.com/docs/api#token_object.
 	// payment_method_token is the 'id' field parsed out of that.
-	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken" json:"payment_method_token,omitempty"`
+	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken,proto3" json:"payment_method_token,omitempty"` // Deprecated: Do not use.
 	// The full token received from Google Payments.  This is typically a
 	// serialized JSON object.  See documentation from Google Payments and your
 	// payment processor for the JSON format of the token for your processor.
@@ -2199,28 +2998,52 @@
 	//
 	// This token can only be used once, and only for the merchant associated with
 	// this booking.
-	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken" json:"unparsed_payment_method_token,omitempty"`
+	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken,proto3" json:"unparsed_payment_method_token,omitempty"`
 	// The payment processor API version that the given payment token is valid
 	// for.
 	//
 	// Each processor may choose its own format for this field.
 	// Stripe uses a date (e.g. "2017-06-15"). (required)
 	// This is deprecated in favor of tokenization_parameters.
-	Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"`
+	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // Deprecated: Do not use.
 	// The payment processor whose configuration was used to generate this token.
 	// (required)
 	// This is deprecated in favor of tokenization_parameters.
-	PaymentProcessor string `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor" json:"payment_processor,omitempty"`
+	PaymentProcessor string `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor,proto3" json:"payment_processor,omitempty"` // Deprecated: Do not use.
 	// The tokenization_config supplied in the Merchant feed that was used
 	// to generate unparsed_payment_method_token.
-	TokenizationConfig *TokenizationConfig `protobuf:"bytes,6,opt,name=tokenization_config,json=tokenizationConfig" json:"tokenization_config,omitempty"`
+	TokenizationConfig   *TokenizationConfig `protobuf:"bytes,6,opt,name=tokenization_config,json=tokenizationConfig,proto3" json:"tokenization_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *PaymentProcessingParameters) Reset()                    { *m = PaymentProcessingParameters{} }
-func (m *PaymentProcessingParameters) String() string            { return proto.CompactTextString(m) }
-func (*PaymentProcessingParameters) ProtoMessage()               {}
-func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
+func (m *PaymentProcessingParameters) Reset()         { *m = PaymentProcessingParameters{} }
+func (m *PaymentProcessingParameters) String() string { return proto.CompactTextString(m) }
+func (*PaymentProcessingParameters) ProtoMessage()    {}
+func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{36}
+}
 
+func (m *PaymentProcessingParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentProcessingParameters.Unmarshal(m, b)
+}
+func (m *PaymentProcessingParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentProcessingParameters.Marshal(b, m, deterministic)
+}
+func (m *PaymentProcessingParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentProcessingParameters.Merge(m, src)
+}
+func (m *PaymentProcessingParameters) XXX_Size() int {
+	return xxx_messageInfo_PaymentProcessingParameters.Size(m)
+}
+func (m *PaymentProcessingParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentProcessingParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaymentProcessingParameters proto.InternalMessageInfo
+
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetProcessor() PaymentProcessingParameters_PaymentProcessor {
 	if m != nil {
 		return m.Processor
@@ -2228,6 +3051,7 @@
 	return PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED
 }
 
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetPaymentMethodToken() string {
 	if m != nil {
 		return m.PaymentMethodToken
@@ -2242,6 +3066,7 @@
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetVersion() string {
 	if m != nil {
 		return m.Version
@@ -2249,6 +3074,7 @@
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetPaymentProcessor() string {
 	if m != nil {
 		return m.PaymentProcessor
@@ -2270,32 +3096,55 @@
 type UserPaymentOption struct {
 	// A unique identifier for the user payment option. This Id MUST be unique
 	// for all UserPaymentOptions across all merchants and users. (required)
-	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId" json:"user_payment_option_id,omitempty"`
+	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3" json:"user_payment_option_id,omitempty"`
 	// The user payment option will be valid (usable) between start_time and
 	// end_time set in UTC. Attempts to use a user payment option to make a
 	// booking outside of this interval will fail. (both optional)
-	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec" json:"valid_start_time_sec,omitempty"`
-	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec" json:"valid_end_time_sec,omitempty"`
+	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec,proto3" json:"valid_start_time_sec,omitempty"`
+	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec,proto3" json:"valid_end_time_sec,omitempty"`
 	// The type of the payment option associated with this user payment option.
 	// This can be unlimited for a membership or subscription, multi-use for a
 	// pack, or single-use. (required)
-	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
+	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,proto3,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
 	// The original number of uses for this user payment option when it was
 	// purchased. This value is ignored for unlimited payment options. (required)
-	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount" json:"original_count,omitempty"`
+	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount,proto3" json:"original_count,omitempty"`
 	// The number of uses remaining for this user payment option. If this number
 	// is 0 for a pack, attempts to use this payment option to make a booking will
 	// fail. (required)
-	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount" json:"current_count,omitempty"`
+	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount,proto3" json:"current_count,omitempty"`
 	// The id of the payment option that has been used to purchase this user
 	// payment option. (required)
-	PaymentOptionId string `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+	PaymentOptionId      string   `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UserPaymentOption) Reset()                    { *m = UserPaymentOption{} }
-func (m *UserPaymentOption) String() string            { return proto.CompactTextString(m) }
-func (*UserPaymentOption) ProtoMessage()               {}
-func (*UserPaymentOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
+func (m *UserPaymentOption) Reset()         { *m = UserPaymentOption{} }
+func (m *UserPaymentOption) String() string { return proto.CompactTextString(m) }
+func (*UserPaymentOption) ProtoMessage()    {}
+func (*UserPaymentOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{37}
+}
+
+func (m *UserPaymentOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserPaymentOption.Unmarshal(m, b)
+}
+func (m *UserPaymentOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserPaymentOption.Marshal(b, m, deterministic)
+}
+func (m *UserPaymentOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserPaymentOption.Merge(m, src)
+}
+func (m *UserPaymentOption) XXX_Size() int {
+	return xxx_messageInfo_UserPaymentOption.Size(m)
+}
+func (m *UserPaymentOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserPaymentOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserPaymentOption proto.InternalMessageInfo
 
 func (m *UserPaymentOption) GetUserPaymentOptionId() string {
 	if m != nil {
@@ -2355,13 +3204,13 @@
 	// If the prepayment status is PREPAYMENT_REFUNDED, then
 	// payment_transaction_id contains the associated unique transaction id for
 	// the refund. (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
 	// Unique identifier for a payment transaction associated with the booking.
 	// If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
 	// If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
 	// Google's CreateBooking or CreateOrder requests to the partner, and it must
 	// be set by the partner in their responses.
-	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId" json:"payment_transaction_id,omitempty"`
+	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId,proto3" json:"payment_transaction_id,omitempty"`
 	// These fields must match the service price (specified in the Services feed)
 	// or the PaymentOption corresponding with this service.
 	// They are included in the booking request and response to verify that
@@ -2371,15 +3220,15 @@
 	// The price of the booking or order, exclusive of any taxes.
 	// Existence of price or taxes does not imply that they have been paid,
 	// prepayment_state should be used for that purpose. (required)
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
 	// Taxes that are calculated to be paid for this booking.
 	// This field can only be absent in one of the following cases:
 	// (1) the price is exempt from or already inclusive of applicable taxes; or
 	// (2) the break down between taxes and fees is not available.
 	// (required when neither of the above holds)
-	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount" json:"tax_amount,omitempty"`
+	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount,proto3" json:"tax_amount,omitempty"`
 	// Whether the partner or Google processed the payment. (required)
-	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
+	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,proto3,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
 	// The id of the payment option or user payment option associated with the
 	// booking.
 	// If a payment option is purchased as part of a booking, payment_option_id
@@ -2398,41 +3247,43 @@
 	PaymentId isPaymentInformation_PaymentId `protobuf_oneof:"payment_id"`
 	// Defines how a deposit may be charged to the user. If there is a deposit,
 	// this field should be set. (optional)
-	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. If the user can be
 	// charged a no show fee, this field should be set. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
 	// Total processing fees & taxes that the user needs to pay for the order;
 	// only applicable to partners that handle order based booking (e.g., with
 	// CreateOrder method). (optional)
-	FeesAndTaxes *Price `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
+	FeesAndTaxes         *Price   `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PaymentInformation) Reset()                    { *m = PaymentInformation{} }
-func (m *PaymentInformation) String() string            { return proto.CompactTextString(m) }
-func (*PaymentInformation) ProtoMessage()               {}
-func (*PaymentInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
-
-type isPaymentInformation_PaymentId interface {
-	isPaymentInformation_PaymentId()
+func (m *PaymentInformation) Reset()         { *m = PaymentInformation{} }
+func (m *PaymentInformation) String() string { return proto.CompactTextString(m) }
+func (*PaymentInformation) ProtoMessage()    {}
+func (*PaymentInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{38}
 }
 
-type PaymentInformation_PaymentOptionId struct {
-	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,oneof"`
+func (m *PaymentInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentInformation.Unmarshal(m, b)
 }
-type PaymentInformation_UserPaymentOptionId struct {
-	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,oneof"`
+func (m *PaymentInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentInformation.Marshal(b, m, deterministic)
+}
+func (m *PaymentInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentInformation.Merge(m, src)
+}
+func (m *PaymentInformation) XXX_Size() int {
+	return xxx_messageInfo_PaymentInformation.Size(m)
+}
+func (m *PaymentInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentInformation.DiscardUnknown(m)
 }
 
-func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId()     {}
-func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
-
-func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
-	if m != nil {
-		return m.PaymentId
-	}
-	return nil
-}
+var xxx_messageInfo_PaymentInformation proto.InternalMessageInfo
 
 func (m *PaymentInformation) GetPrepaymentStatus() PrepaymentStatus {
 	if m != nil {
@@ -2469,6 +3320,29 @@
 	return PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED
 }
 
+type isPaymentInformation_PaymentId interface {
+	isPaymentInformation_PaymentId()
+}
+
+type PaymentInformation_PaymentOptionId struct {
+	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,proto3,oneof"`
+}
+
+type PaymentInformation_UserPaymentOptionId struct {
+	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
+}
+
+func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
+	if m != nil {
+		return m.PaymentId
+	}
+	return nil
+}
+
 func (m *PaymentInformation) GetPaymentOptionId() string {
 	if x, ok := m.GetPaymentId().(*PaymentInformation_PaymentOptionId); ok {
 		return x.PaymentOptionId
@@ -2504,72 +3378,14 @@
 	return nil
 }
 
-// XXX_OneofFuncs is for the internal use of the proto package.
-func (*PaymentInformation) 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 _PaymentInformation_OneofMarshaler, _PaymentInformation_OneofUnmarshaler, _PaymentInformation_OneofSizer, []interface{}{
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PaymentInformation) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
 		(*PaymentInformation_PaymentOptionId)(nil),
 		(*PaymentInformation_UserPaymentOptionId)(nil),
 	}
 }
 
-func _PaymentInformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
-	m := msg.(*PaymentInformation)
-	// payment_id
-	switch x := m.PaymentId.(type) {
-	case *PaymentInformation_PaymentOptionId:
-		b.EncodeVarint(6<<3 | proto.WireBytes)
-		b.EncodeStringBytes(x.PaymentOptionId)
-	case *PaymentInformation_UserPaymentOptionId:
-		b.EncodeVarint(7<<3 | proto.WireBytes)
-		b.EncodeStringBytes(x.UserPaymentOptionId)
-	case nil:
-	default:
-		return fmt.Errorf("PaymentInformation.PaymentId has unexpected type %T", x)
-	}
-	return nil
-}
-
-func _PaymentInformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
-	m := msg.(*PaymentInformation)
-	switch tag {
-	case 6: // payment_id.payment_option_id
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		x, err := b.DecodeStringBytes()
-		m.PaymentId = &PaymentInformation_PaymentOptionId{x}
-		return true, err
-	case 7: // payment_id.user_payment_option_id
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		x, err := b.DecodeStringBytes()
-		m.PaymentId = &PaymentInformation_UserPaymentOptionId{x}
-		return true, err
-	default:
-		return false, nil
-	}
-}
-
-func _PaymentInformation_OneofSizer(msg proto.Message) (n int) {
-	m := msg.(*PaymentInformation)
-	// payment_id
-	switch x := m.PaymentId.(type) {
-	case *PaymentInformation_PaymentOptionId:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
-		n += proto.SizeVarint(uint64(len(x.PaymentOptionId)))
-		n += len(x.PaymentOptionId)
-	case *PaymentInformation_UserPaymentOptionId:
-		n += proto.SizeVarint(7<<3 | proto.WireBytes)
-		n += proto.SizeVarint(uint64(len(x.UserPaymentOptionId)))
-		n += len(x.UserPaymentOptionId)
-	case nil:
-	default:
-		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
-	}
-	return n
-}
-
 // The price of a service or a fee.
 type Price struct {
 	// The price in micro-units of the currency.
@@ -2577,18 +3393,41 @@
 	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
 	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
 	// (required)
-	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros" json:"price_micros,omitempty"`
+	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"`
 	// The currency of the price that is defined in ISO 4217. (required)
-	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode" json:"currency_code,omitempty"`
+	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
 	// An optional and opaque string that identifies the pricing option that is
 	// associated with the extended price. (optional)
-	PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag" json:"pricing_option_tag,omitempty"`
+	PricingOptionTag     string   `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Price) Reset()                    { *m = Price{} }
-func (m *Price) String() string            { return proto.CompactTextString(m) }
-func (*Price) ProtoMessage()               {}
-func (*Price) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
+func (m *Price) Reset()         { *m = Price{} }
+func (m *Price) String() string { return proto.CompactTextString(m) }
+func (*Price) ProtoMessage()    {}
+func (*Price) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{39}
+}
+
+func (m *Price) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Price.Unmarshal(m, b)
+}
+func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Price.Marshal(b, m, deterministic)
+}
+func (m *Price) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Price.Merge(m, src)
+}
+func (m *Price) XXX_Size() int {
+	return xxx_messageInfo_Price.Size(m)
+}
+func (m *Price) XXX_DiscardUnknown() {
+	xxx_messageInfo_Price.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Price proto.InternalMessageInfo
 
 func (m *Price) GetPriceMicros() int64 {
 	if m != nil {
@@ -2616,15 +3455,38 @@
 type NoShowFee struct {
 	// The amount the user may be charged if they do not show up for their
 	// reservation.
-	Fee *Price `protobuf:"bytes,1,opt,name=fee" json:"fee,omitempty"`
+	Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"`
 	// Defines how the fee is determined from the availability.
-	FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=ext.maps.booking.partner.v3.PriceType" json:"fee_type,omitempty"`
+	FeeType              PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"fee_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *NoShowFee) Reset()                    { *m = NoShowFee{} }
-func (m *NoShowFee) String() string            { return proto.CompactTextString(m) }
-func (*NoShowFee) ProtoMessage()               {}
-func (*NoShowFee) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
+func (m *NoShowFee) Reset()         { *m = NoShowFee{} }
+func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
+func (*NoShowFee) ProtoMessage()    {}
+func (*NoShowFee) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{40}
+}
+
+func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
+}
+func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic)
+}
+func (m *NoShowFee) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NoShowFee.Merge(m, src)
+}
+func (m *NoShowFee) XXX_Size() int {
+	return xxx_messageInfo_NoShowFee.Size(m)
+}
+func (m *NoShowFee) XXX_DiscardUnknown() {
+	xxx_messageInfo_NoShowFee.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NoShowFee proto.InternalMessageInfo
 
 func (m *NoShowFee) GetFee() *Price {
 	if m != nil {
@@ -2644,17 +3506,40 @@
 // for.
 type Deposit struct {
 	// Deposit amount.
-	Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Minimum advance cancellation for the deposit.
-	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" json:"min_advance_cancellation_sec,omitempty"`
+	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
 	// Defines how the deposit is determined from the availability.
-	DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,enum=ext.maps.booking.partner.v3.PriceType" json:"deposit_type,omitempty"`
+	DepositType          PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"deposit_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *Deposit) Reset()                    { *m = Deposit{} }
-func (m *Deposit) String() string            { return proto.CompactTextString(m) }
-func (*Deposit) ProtoMessage()               {}
-func (*Deposit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
+func (m *Deposit) Reset()         { *m = Deposit{} }
+func (m *Deposit) String() string { return proto.CompactTextString(m) }
+func (*Deposit) ProtoMessage()    {}
+func (*Deposit) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{41}
+}
+
+func (m *Deposit) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Deposit.Unmarshal(m, b)
+}
+func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Deposit.Marshal(b, m, deterministic)
+}
+func (m *Deposit) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Deposit.Merge(m, src)
+}
+func (m *Deposit) XXX_Size() int {
+	return xxx_messageInfo_Deposit.Size(m)
+}
+func (m *Deposit) XXX_DiscardUnknown() {
+	xxx_messageInfo_Deposit.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Deposit proto.InternalMessageInfo
 
 func (m *Deposit) GetDeposit() *Price {
 	if m != nil {
@@ -2680,26 +3565,53 @@
 // An inventory slot
 type Slot struct {
 	// ID of the merchant for the slot (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// ID of the merchant Service (required)
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the appointment slot (required)
-	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Opaque tag that identifies the availability slot and matches the value
 	// provided in the availability feed (optional)
-	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
 	// The set of resources that disambiguates the appointment slot, e.g. by
 	// indicating the staff member and room selected by the user (optional)
-	Resources *ResourceIds `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"`
+	Resources *ResourceIds `protobuf:"bytes,6,opt,name=resources,proto3" json:"resources,omitempty"`
+	// Indicates whether bookings of this slot will be confirmed
+	// synchronously or asynchronously. An UNSPECIFIED value will be interpreted
+	// as synchronous.
+	ConfirmationMode     ConfirmationMode `protobuf:"varint,7,opt,name=confirmation_mode,json=confirmationMode,proto3,enum=ext.maps.booking.partner.v3.ConfirmationMode" json:"confirmation_mode,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
 }
 
-func (m *Slot) Reset()                    { *m = Slot{} }
-func (m *Slot) String() string            { return proto.CompactTextString(m) }
-func (*Slot) ProtoMessage()               {}
-func (*Slot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
+func (m *Slot) Reset()         { *m = Slot{} }
+func (m *Slot) String() string { return proto.CompactTextString(m) }
+func (*Slot) ProtoMessage()    {}
+func (*Slot) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{42}
+}
+
+func (m *Slot) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Slot.Unmarshal(m, b)
+}
+func (m *Slot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Slot.Marshal(b, m, deterministic)
+}
+func (m *Slot) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Slot.Merge(m, src)
+}
+func (m *Slot) XXX_Size() int {
+	return xxx_messageInfo_Slot.Size(m)
+}
+func (m *Slot) XXX_DiscardUnknown() {
+	xxx_messageInfo_Slot.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Slot proto.InternalMessageInfo
 
 func (m *Slot) GetMerchantId() string {
 	if m != nil {
@@ -2743,27 +3655,57 @@
 	return nil
 }
 
+func (m *Slot) GetConfirmationMode() ConfirmationMode {
+	if m != nil {
+		return m.ConfirmationMode
+	}
+	return ConfirmationMode_CONFIRMATION_MODE_UNSPECIFIED
+}
+
 // Personal information about the person making a booking
 type UserInformation struct {
 	// Unique ID of the user to the partner, chosen by Reserve with Google.
 	// (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
 	// Given name of the user (maximum 40 characters) (required)
-	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName" json:"given_name,omitempty"`
+	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
 	// Family name of the user (maximum 40 characters) (required)
-	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName" json:"family_name,omitempty"`
+	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
 	// Address of the user (optional)
-	Address *PostalAddress `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"`
+	Address *PostalAddress `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
 	// Phone number of the user (required)
-	Telephone string `protobuf:"bytes,5,opt,name=telephone" json:"telephone,omitempty"`
+	Telephone string `protobuf:"bytes,5,opt,name=telephone,proto3" json:"telephone,omitempty"`
 	// Email address of the user (required)
-	Email string `protobuf:"bytes,6,opt,name=email" json:"email,omitempty"`
+	Email                string   `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UserInformation) Reset()                    { *m = UserInformation{} }
-func (m *UserInformation) String() string            { return proto.CompactTextString(m) }
-func (*UserInformation) ProtoMessage()               {}
-func (*UserInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
+func (m *UserInformation) Reset()         { *m = UserInformation{} }
+func (m *UserInformation) String() string { return proto.CompactTextString(m) }
+func (*UserInformation) ProtoMessage()    {}
+func (*UserInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{43}
+}
+
+func (m *UserInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInformation.Unmarshal(m, b)
+}
+func (m *UserInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInformation.Marshal(b, m, deterministic)
+}
+func (m *UserInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInformation.Merge(m, src)
+}
+func (m *UserInformation) XXX_Size() int {
+	return xxx_messageInfo_UserInformation.Size(m)
+}
+func (m *UserInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInformation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInformation proto.InternalMessageInfo
 
 func (m *UserInformation) GetUserId() string {
 	if m != nil {
@@ -2810,21 +3752,44 @@
 // The postal address for a merchant.
 type PostalAddress struct {
 	// The country, e.g. "USA". (required)
-	Country string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"`
+	Country string `protobuf:"bytes,1,opt,name=country,proto3" json:"country,omitempty"`
 	// The locality/city, e.g. "Mountain View". (required)
-	Locality string `protobuf:"bytes,2,opt,name=locality" json:"locality,omitempty"`
+	Locality string `protobuf:"bytes,2,opt,name=locality,proto3" json:"locality,omitempty"`
 	// The region/state/province, e.g. "CA". (required)
-	Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"`
+	Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"`
 	// The postal code, e.g. "94043". (required)
-	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode" json:"postal_code,omitempty"`
+	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
 	// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
-	StreetAddress string `protobuf:"bytes,5,opt,name=street_address,json=streetAddress" json:"street_address,omitempty"`
+	StreetAddress        string   `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PostalAddress) Reset()                    { *m = PostalAddress{} }
-func (m *PostalAddress) String() string            { return proto.CompactTextString(m) }
-func (*PostalAddress) ProtoMessage()               {}
-func (*PostalAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
+func (m *PostalAddress) Reset()         { *m = PostalAddress{} }
+func (m *PostalAddress) String() string { return proto.CompactTextString(m) }
+func (*PostalAddress) ProtoMessage()    {}
+func (*PostalAddress) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{44}
+}
+
+func (m *PostalAddress) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PostalAddress.Unmarshal(m, b)
+}
+func (m *PostalAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PostalAddress.Marshal(b, m, deterministic)
+}
+func (m *PostalAddress) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PostalAddress.Merge(m, src)
+}
+func (m *PostalAddress) XXX_Size() int {
+	return xxx_messageInfo_PostalAddress.Size(m)
+}
+func (m *PostalAddress) XXX_DiscardUnknown() {
+	xxx_messageInfo_PostalAddress.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PostalAddress proto.InternalMessageInfo
 
 func (m *PostalAddress) GetCountry() string {
 	if m != nil {
@@ -2862,6 +3827,20 @@
 }
 
 func init() {
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.ConfirmationMode", ConfirmationMode_name, ConfirmationMode_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat", TokenizationConfig_BillingInformationFormat_name, TokenizationConfig_BillingInformationFormat_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 	proto.RegisterType((*CheckAvailabilityRequest)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityRequest")
 	proto.RegisterType((*CheckAvailabilityResponse)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityResponse")
 	proto.RegisterType((*AvailabilityUpdate)(nil), "ext.maps.booking.partner.v3.AvailabilityUpdate")
@@ -2901,6 +3880,7 @@
 	proto.RegisterType((*TicketType)(nil), "ext.maps.booking.partner.v3.TicketType")
 	proto.RegisterType((*ResourceIds)(nil), "ext.maps.booking.partner.v3.ResourceIds")
 	proto.RegisterType((*TokenizationConfig)(nil), "ext.maps.booking.partner.v3.TokenizationConfig")
+	proto.RegisterMapType((map[string]string)(nil), "ext.maps.booking.partner.v3.TokenizationConfig.TokenizationParameterEntry")
 	proto.RegisterType((*PaymentProcessingParameters)(nil), "ext.maps.booking.partner.v3.PaymentProcessingParameters")
 	proto.RegisterType((*UserPaymentOption)(nil), "ext.maps.booking.partner.v3.UserPaymentOption")
 	proto.RegisterType((*PaymentInformation)(nil), "ext.maps.booking.partner.v3.PaymentInformation")
@@ -2910,251 +3890,244 @@
 	proto.RegisterType((*Slot)(nil), "ext.maps.booking.partner.v3.Slot")
 	proto.RegisterType((*UserInformation)(nil), "ext.maps.booking.partner.v3.UserInformation")
 	proto.RegisterType((*PostalAddress)(nil), "ext.maps.booking.partner.v3.PostalAddress")
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat", TokenizationConfig_BillingInformationFormat_name, TokenizationConfig_BillingInformationFormat_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 }
 
-func init() { proto.RegisterFile("v3.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("v3.proto", fileDescriptor_1820d8e1a9fad753) }
 
-var fileDescriptor0 = []byte{
-	// 3636 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x4b, 0x6c, 0x1b, 0x59,
-	0x72, 0x6e, 0x7e, 0x44, 0xb2, 0x24, 0xd1, 0xad, 0x27, 0x8d, 0x4c, 0xcb, 0xf6, 0x58, 0xee, 0x1d,
-	0xcf, 0x78, 0xed, 0x19, 0x4d, 0xd6, 0xf6, 0x22, 0xb3, 0x8b, 0x60, 0x93, 0x26, 0xf9, 0x64, 0xf5,
-	0x0c, 0xd5, 0xe4, 0x3c, 0x36, 0x65, 0x7b, 0x0f, 0xe9, 0x6d, 0xb3, 0x9f, 0xe4, 0x8e, 0x49, 0x36,
-	0xb7, 0xbb, 0xa9, 0xb5, 0x06, 0x99, 0x43, 0x80, 0x20, 0x87, 0x00, 0x39, 0x04, 0x39, 0x04, 0x08,
-	0x90, 0x5b, 0xf6, 0x96, 0xdc, 0x72, 0x09, 0x72, 0x09, 0x12, 0x60, 0x11, 0x24, 0xc8, 0x29, 0x87,
-	0xe4, 0x94, 0x43, 0x90, 0x43, 0x4e, 0xb9, 0x2f, 0x10, 0x04, 0xc1, 0xfb, 0x34, 0xc9, 0x6e, 0x52,
-	0x14, 0x25, 0xcf, 0xe4, 0x92, 0x0b, 0xc1, 0xae, 0xdf, 0xab, 0x57, 0x55, 0xaf, 0xaa, 0x5e, 0x75,
-	0x43, 0xf1, 0xf4, 0xc9, 0xde, 0x30, 0xf0, 0x23, 0x1f, 0xdd, 0xa2, 0x6f, 0xa3, 0xbd, 0xbe, 0x33,
-	0x0c, 0xf7, 0x5e, 0xf9, 0xfe, 0x1b, 0x6f, 0x70, 0xb2, 0x37, 0x74, 0x82, 0x68, 0x40, 0x83, 0xbd,
-	0xd3, 0x27, 0xda, 0x97, 0x50, 0xa9, 0xbd, 0xa6, 0xdd, 0x37, 0xfa, 0xa9, 0xe3, 0xf5, 0x9c, 0x57,
-	0x5e, 0xcf, 0x8b, 0xce, 0x08, 0xfd, 0xe9, 0x88, 0x86, 0x11, 0xfa, 0x3e, 0xe4, 0xc2, 0x9e, 0x1f,
-	0x55, 0x94, 0x5d, 0xe5, 0xc1, 0xea, 0xe3, 0x7b, 0x7b, 0x0b, 0xe4, 0xec, 0xb5, 0x7b, 0x7e, 0x44,
-	0x38, 0xb9, 0xf6, 0x8f, 0x59, 0xb8, 0x39, 0x47, 0x66, 0x38, 0xf4, 0x07, 0x21, 0xbd, 0xa2, 0x50,
-	0xf4, 0x11, 0x5c, 0xef, 0xfa, 0xa3, 0x41, 0x64, 0x3b, 0x42, 0x68, 0x8f, 0x56, 0x32, 0xbb, 0xca,
-	0x83, 0x3c, 0x29, 0x73, 0xb0, 0x1e, 0x43, 0xd1, 0xd7, 0xb0, 0xe5, 0x8e, 0x02, 0x27, 0xf2, 0xfc,
-	0x81, 0x1d, 0xd0, 0x9f, 0x8e, 0xbc, 0x80, 0xf6, 0xe9, 0x20, 0xaa, 0x64, 0x77, 0x95, 0x07, 0xe5,
-	0xc7, 0x9f, 0x2f, 0x5c, 0xef, 0x5c, 0xad, 0xf7, 0xea, 0x52, 0x24, 0x99, 0x48, 0x24, 0x9b, 0xee,
-	0x2c, 0x10, 0xfd, 0x04, 0x36, 0x9d, 0x29, 0x01, 0xf6, 0x68, 0xe8, 0x3a, 0x11, 0xad, 0xe4, 0xf8,
-	0x6e, 0x3f, 0x5d, 0xb8, 0xfa, 0xf4, 0xc2, 0x1d, 0xce, 0x46, 0x90, 0x33, 0x03, 0xd3, 0xfa, 0xb0,
-	0x39, 0x47, 0x1b, 0xf4, 0x01, 0xec, 0xd6, 0x3b, 0x44, 0xb7, 0x8c, 0xa6, 0x69, 0x13, 0xfc, 0x65,
-	0xc7, 0x20, 0xf8, 0x10, 0x9b, 0x96, 0xdd, 0x31, 0xdb, 0x2d, 0x5c, 0x33, 0xf6, 0x0d, 0x5c, 0x57,
-	0xaf, 0xa1, 0x0a, 0x6c, 0xd5, 0x9b, 0xb6, 0xd9, 0xb4, 0xec, 0xf6, 0x41, 0xf3, 0xb9, 0x1d, 0x73,
-	0xa8, 0x0a, 0xda, 0x06, 0x74, 0xd8, 0x69, 0xa7, 0xe1, 0x19, 0x6d, 0x08, 0x68, 0x56, 0x31, 0xf4,
-	0x63, 0xd8, 0x60, 0x6e, 0xb1, 0xa7, 0xf5, 0xab, 0x28, 0xbb, 0xd9, 0x07, 0xab, 0x8f, 0x3f, 0xb9,
-	0xd0, 0xa5, 0x09, 0x0b, 0xab, 0x61, 0x0a, 0xa2, 0x05, 0xa0, 0xa6, 0xa9, 0xbe, 0xed, 0xa8, 0xd1,
-	0xfe, 0x56, 0x81, 0x22, 0xe3, 0xb3, 0xbc, 0x3e, 0x45, 0xb7, 0xa0, 0x14, 0x46, 0x4e, 0x10, 0xd9,
-	0x21, 0xed, 0xf2, 0x15, 0xb3, 0xa4, 0xc8, 0x01, 0x6d, 0xda, 0x45, 0xf7, 0x60, 0x6d, 0x1c, 0x5f,
-	0x0c, 0x9f, 0xe1, 0xf8, 0xd5, 0x18, 0xc6, 0x48, 0xbe, 0x0b, 0x6a, 0x22, 0x06, 0x22, 0xe7, 0x84,
-	0x87, 0x5f, 0x89, 0x5c, 0x9f, 0x86, 0x5b, 0xce, 0x09, 0xfa, 0x02, 0xd6, 0x02, 0x1a, 0xfa, 0xa3,
-	0xa0, 0x4b, 0x6d, 0xcf, 0x0d, 0x65, 0x9c, 0x3c, 0x58, 0xb8, 0x3f, 0x22, 0x19, 0x0c, 0x37, 0x24,
-	0xab, 0xc1, 0xe4, 0x41, 0x7b, 0x0b, 0x5b, 0xf1, 0x1e, 0x12, 0xc6, 0xab, 0x42, 0x89, 0x3b, 0x2b,
-	0xf2, 0xfa, 0x54, 0x5a, 0xf0, 0xfe, 0x85, 0x16, 0x64, 0x52, 0x48, 0x31, 0x8c, 0x6d, 0x72, 0x1b,
-	0x4a, 0x49, 0x1b, 0x16, 0xc9, 0x04, 0xa0, 0xfd, 0x99, 0x02, 0xef, 0x57, 0x9d, 0xa8, 0xfb, 0x7a,
-	0x7a, 0xdd, 0x86, 0xef, 0xbf, 0x19, 0x0d, 0xe3, 0x64, 0x72, 0x17, 0x56, 0xfb, 0x34, 0xe8, 0xbe,
-	0x76, 0x06, 0x91, 0xed, 0xb9, 0x5c, 0x8d, 0x12, 0x81, 0x18, 0x64, 0xb8, 0xe8, 0x0e, 0x40, 0x48,
-	0x83, 0x53, 0x8f, 0x5b, 0x82, 0x2f, 0x51, 0x22, 0x25, 0x09, 0x31, 0xdc, 0xe4, 0x26, 0xb2, 0x3c,
-	0xd2, 0x2e, 0xbb, 0x09, 0xed, 0xf7, 0x15, 0xb8, 0x7b, 0xae, 0x9a, 0x32, 0x3f, 0x9d, 0xc0, 0xf6,
-	0x78, 0x9d, 0x79, 0xe1, 0xfd, 0xbd, 0xa5, 0x16, 0x4d, 0x84, 0xf8, 0x56, 0x38, 0x07, 0xaa, 0x7d,
-	0x0d, 0x77, 0x79, 0xbe, 0x69, 0x06, 0x2e, 0x0d, 0xf6, 0x47, 0xbd, 0x63, 0xaf, 0x97, 0x4e, 0xc0,
-	0x17, 0xda, 0xec, 0x07, 0x90, 0xf3, 0x22, 0xda, 0xaf, 0x64, 0x96, 0xb0, 0x47, 0xc3, 0x1b, 0x50,
-	0x23, 0xa2, 0x7d, 0xc2, 0x59, 0xb4, 0x5f, 0x28, 0xb0, 0x7b, 0xfe, 0xfa, 0xd2, 0x18, 0x2f, 0xa0,
-	0x7c, 0x9c, 0xc0, 0xc8, 0xf0, 0xf9, 0x95, 0x85, 0x2b, 0xcd, 0x93, 0x98, 0x92, 0x83, 0x0e, 0xa0,
-	0x7c, 0x4c, 0x69, 0x68, 0x3b, 0x03, 0xd7, 0x8e, 0x9c, 0xb7, 0x34, 0xe4, 0x1e, 0x5f, 0x7d, 0xac,
-	0x2d, 0x94, 0xdc, 0x0a, 0xbc, 0x2e, 0x25, 0x6b, 0x8c, 0x53, 0x1f, 0xb8, 0x16, 0xe3, 0xd3, 0x3e,
-	0x83, 0x1b, 0xcf, 0x68, 0x54, 0x15, 0xc4, 0xed, 0xc8, 0x89, 0x46, 0x61, 0x6c, 0xbf, 0x3b, 0x00,
-	0x52, 0xc8, 0xc4, 0x7c, 0x25, 0x09, 0x31, 0x5c, 0xed, 0x3f, 0x15, 0xa8, 0xcc, 0xb2, 0xca, 0xad,
-	0x2f, 0xe6, 0x45, 0x5f, 0x42, 0x39, 0x46, 0x87, 0x9c, 0x91, 0xeb, 0x5f, 0x7e, 0xfc, 0x70, 0xa1,
-	0xfe, 0xc9, 0xa5, 0xd6, 0x5f, 0x4d, 0x3f, 0xb2, 0x9c, 0x3a, 0x0c, 0xe8, 0xd0, 0x39, 0x63, 0xf9,
-	0x3c, 0x96, 0x2a, 0xca, 0xd6, 0x27, 0x17, 0x58, 0x25, 0xe6, 0x92, 0x82, 0xd5, 0x61, 0x0a, 0xa2,
-	0xfd, 0x79, 0x0e, 0xb6, 0x6a, 0x01, 0x75, 0x22, 0x2a, 0x55, 0x78, 0xb7, 0x1a, 0x8f, 0x0e, 0xa0,
-	0xd4, 0xa3, 0x4e, 0x48, 0xed, 0x80, 0x1e, 0x4b, 0xcf, 0x3d, 0x5a, 0x1c, 0x7d, 0x8c, 0x9a, 0xd0,
-	0x63, 0x1a, 0xd0, 0x41, 0x97, 0x92, 0x62, 0x4f, 0x3e, 0xa3, 0xe7, 0xa0, 0x8e, 0x42, 0x1a, 0xd8,
-	0xde, 0xe0, 0xd8, 0x0f, 0xfa, 0x3c, 0x87, 0xf2, 0x4d, 0xaf, 0x3e, 0xfe, 0x78, 0xa1, 0xc0, 0x4e,
-	0x48, 0x03, 0x63, 0xc2, 0x43, 0xae, 0x8f, 0x92, 0x00, 0x56, 0x89, 0x63, 0x5b, 0x4e, 0xcb, 0x5e,
-	0xa6, 0x12, 0xb7, 0x04, 0xdf, 0xb4, 0x78, 0x34, 0x9c, 0x81, 0xa1, 0xdf, 0x86, 0x3b, 0xf1, 0x0a,
-	0xc3, 0xc0, 0xef, 0xd2, 0x30, 0x64, 0xe1, 0x30, 0x74, 0x02, 0xa7, 0x4f, 0x23, 0x1a, 0x84, 0x95,
-	0x3c, 0x5f, 0xeb, 0xb3, 0x65, 0xd6, 0x6a, 0x8d, 0x05, 0xb4, 0xc6, 0xfc, 0xe4, 0xd6, 0xf0, 0x7c,
-	0x24, 0x7a, 0x04, 0x1b, 0x9e, 0x4b, 0xfb, 0x43, 0x3f, 0xa2, 0x83, 0xee, 0x99, 0x1d, 0xf9, 0x6f,
-	0xe8, 0xa0, 0xb2, 0xc2, 0xe3, 0x54, 0x9d, 0x42, 0x58, 0x0c, 0x8e, 0x3e, 0x01, 0xe4, 0xb8, 0xae,
-	0xc7, 0xd4, 0x76, 0x7a, 0xbc, 0x2f, 0xa2, 0x61, 0x54, 0x29, 0x70, 0xea, 0x8d, 0x09, 0x46, 0x46,
-	0x85, 0xf6, 0x07, 0x19, 0x78, 0x2f, 0x15, 0x2e, 0xf2, 0x58, 0xfc, 0x08, 0x0a, 0x72, 0x13, 0x32,
-	0x64, 0x3e, 0x58, 0x26, 0xe0, 0x49, 0xcc, 0x84, 0x7e, 0x13, 0x36, 0xb9, 0xbb, 0x63, 0xc3, 0xf9,
-	0x43, 0xee, 0x15, 0x11, 0x42, 0x7b, 0x17, 0x7a, 0x5c, 0x5a, 0xab, 0xc9, 0xb9, 0xc8, 0xc6, 0x28,
-	0x0d, 0x42, 0x16, 0x5c, 0x8f, 0xcf, 0xe5, 0xb1, 0xe3, 0xf5, 0x46, 0x01, 0x95, 0xd1, 0xf4, 0x68,
-	0x19, 0x3d, 0xf7, 0x05, 0x0b, 0x89, 0xcf, 0xb6, 0x7c, 0xd6, 0x4c, 0x40, 0xc2, 0x1c, 0x32, 0x8c,
-	0xc5, 0xd9, 0xf9, 0x0c, 0xf2, 0x3c, 0x8c, 0xa5, 0x25, 0xb4, 0x25, 0x0e, 0x80, 0x60, 0xd0, 0x7e,
-	0xae, 0xc0, 0x66, 0x42, 0xa0, 0xb4, 0xee, 0x95, 0x25, 0xce, 0xdb, 0x77, 0xe6, 0xdd, 0xf7, 0xfd,
-	0xd7, 0x0a, 0xe4, 0xf9, 0x32, 0xe8, 0x26, 0x88, 0x23, 0x3b, 0x49, 0x86, 0x05, 0xfe, 0x6c, 0xb8,
-	0xe3, 0x14, 0x92, 0xb9, 0x5c, 0x0a, 0xb9, 0x0f, 0x65, 0x1e, 0x09, 0x41, 0x9c, 0x14, 0x64, 0x8f,
-	0xb4, 0xce, 0xa0, 0xe3, 0x4c, 0x81, 0x7e, 0x00, 0x37, 0xc5, 0xc2, 0xf4, 0xed, 0xd0, 0x93, 0x7d,
-	0x17, 0xaf, 0xcd, 0xac, 0xf9, 0xca, 0xf1, 0xe6, 0x6b, 0x9b, 0x13, 0xe0, 0x31, 0x9e, 0x95, 0xda,
-	0x36, 0xed, 0x6a, 0x8f, 0xa0, 0x9c, 0x4c, 0x3b, 0x0b, 0x76, 0xa1, 0xfd, 0x52, 0x89, 0x7d, 0xcc,
-	0xcb, 0xd7, 0x94, 0x8f, 0x7d, 0xf6, 0xbc, 0x94, 0x47, 0x04, 0xa7, 0x60, 0xb8, 0x38, 0x3b, 0x64,
-	0xfe, 0xcf, 0xb3, 0x43, 0x76, 0x7e, 0x76, 0xd0, 0xfe, 0x62, 0x1c, 0x8e, 0x72, 0xef, 0x32, 0x1c,
-	0x7f, 0x78, 0xe9, 0xcd, 0x1f, 0x5c, 0x8b, 0xb7, 0xdf, 0x82, 0x75, 0xfe, 0x27, 0x15, 0x8e, 0xdf,
-	0x5d, 0xa2, 0x73, 0x10, 0x0c, 0x07, 0xd7, 0xc8, 0x9a, 0x3f, 0xf5, 0x5c, 0x2d, 0xc2, 0x4a, 0x40,
-	0xc3, 0x51, 0x2f, 0xd2, 0xf6, 0x60, 0xb3, 0xe1, 0x85, 0x71, 0xe1, 0x1e, 0x97, 0xfb, 0x1b, 0x50,
-	0x10, 0xa5, 0x24, 0x76, 0xee, 0x0a, 0xaf, 0x09, 0xae, 0xf6, 0x02, 0xb6, 0x92, 0xf4, 0x72, 0x7f,
-	0xbf, 0x01, 0x45, 0xa9, 0x44, 0x28, 0xbb, 0xbb, 0xe5, 0xb2, 0xd9, 0x98, 0x4b, 0xfb, 0x4b, 0x05,
-	0x36, 0x98, 0x68, 0xae, 0xf8, 0x58, 0x91, 0x9b, 0x29, 0x45, 0x0e, 0xae, 0xc5, 0xaa, 0xa0, 0x23,
-	0x28, 0x09, 0xb3, 0xb0, 0x6e, 0x5f, 0x98, 0xe4, 0x57, 0x2f, 0x68, 0xdb, 0x52, 0xd2, 0x85, 0x91,
-	0x0c, 0x37, 0x3c, 0xb8, 0x46, 0x8a, 0xbe, 0xfc, 0xbf, 0x73, 0x1f, 0x8a, 0x31, 0x9c, 0x45, 0x79,
-	0xbc, 0x06, 0xdf, 0x56, 0x89, 0x14, 0x24, 0x5d, 0x35, 0x0f, 0x59, 0xcf, 0x0d, 0x59, 0x3e, 0x9b,
-	0x96, 0x3b, 0xc9, 0x3e, 0xb1, 0xbb, 0xb3, 0x97, 0x8a, 0x75, 0xed, 0x08, 0xb6, 0xc4, 0xc5, 0x30,
-	0xd5, 0x5d, 0xbc, 0x63, 0xb5, 0xe0, 0x75, 0x28, 0x25, 0xf8, 0xff, 0x75, 0x1d, 0xfa, 0xb7, 0x0c,
-	0x14, 0x24, 0xc9, 0x45, 0x0d, 0xea, 0x15, 0xb3, 0xf2, 0xb7, 0xd6, 0x8e, 0x55, 0x61, 0x45, 0xb6,
-	0xb4, 0xb9, 0x4b, 0x37, 0xca, 0x92, 0xf3, 0xbc, 0x96, 0x2e, 0xff, 0x8d, 0xb5, 0x74, 0xda, 0xbf,
-	0xe4, 0xa0, 0x9c, 0xf4, 0x01, 0x7a, 0x06, 0xf9, 0xae, 0x33, 0x92, 0x35, 0xb9, 0x7c, 0xc1, 0xfd,
-	0x2f, 0xc9, 0xbb, 0x57, 0x63, 0x8c, 0x44, 0xf0, 0xa3, 0x97, 0x80, 0x02, 0xfa, 0x5b, 0xb4, 0x1b,
-	0x51, 0xd7, 0xee, 0x3a, 0x81, 0x6b, 0x47, 0x67, 0x43, 0x2a, 0xaf, 0x0d, 0x8b, 0xa3, 0xa2, 0x16,
-	0x50, 0xd7, 0x8b, 0x6a, 0x4e, 0xe0, 0x5a, 0x67, 0x43, 0x4a, 0xd4, 0x58, 0x4c, 0x0c, 0x41, 0xbb,
-	0xb0, 0xea, 0xd2, 0xb0, 0x1b, 0x78, 0xc3, 0xb1, 0xc3, 0x4a, 0x64, 0x1a, 0xa4, 0xfd, 0x4f, 0x06,
-	0xf2, 0x5c, 0x1b, 0xf4, 0x1e, 0x6c, 0xd4, 0xf4, 0x4e, 0x1b, 0xa7, 0x26, 0x43, 0x5b, 0xa0, 0xb6,
-	0x1b, 0x4d, 0xcb, 0xee, 0x98, 0xfa, 0x91, 0x6e, 0x34, 0xf4, 0x6a, 0x03, 0xab, 0x0a, 0xba, 0x0b,
-	0xb7, 0x38, 0x54, 0x6f, 0x10, 0xac, 0xd7, 0x5f, 0xda, 0xd5, 0x66, 0xf3, 0x0b, 0x5c, 0xb7, 0xab,
-	0x2f, 0xed, 0x4e, 0x1b, 0x13, 0x35, 0x83, 0x36, 0x60, 0xbd, 0x81, 0xf5, 0x36, 0xb6, 0xf1, 0x8b,
-	0x96, 0x41, 0x70, 0x5d, 0xcd, 0x32, 0x9e, 0x66, 0xc7, 0x6a, 0x1b, 0x75, 0x6c, 0xd7, 0x74, 0xb3,
-	0x86, 0x1b, 0x0d, 0x31, 0x95, 0x7a, 0x6e, 0x98, 0xf5, 0xe6, 0x73, 0x35, 0x87, 0x3e, 0x80, 0xdd,
-	0x96, 0xfe, 0x92, 0x4f, 0xa7, 0x30, 0x21, 0x4d, 0x62, 0xd7, 0x74, 0x52, 0xb7, 0xad, 0x97, 0x2d,
-	0x6c, 0x13, 0xfc, 0x39, 0xae, 0x59, 0xb8, 0xae, 0xe6, 0x99, 0x98, 0x39, 0x54, 0x75, 0x5c, 0x6b,
-	0x18, 0x26, 0xae, 0xab, 0x2b, 0xe8, 0x36, 0x54, 0x62, 0x82, 0x66, 0x8b, 0xaf, 0x60, 0x36, 0x2d,
-	0xfb, 0x48, 0x6f, 0x18, 0x75, 0xb5, 0xc0, 0x14, 0x4b, 0xb0, 0xab, 0x45, 0xa4, 0xc1, 0xfb, 0x4c,
-	0x6b, 0xa6, 0x15, 0xa3, 0x64, 0x36, 0x48, 0x0a, 0x50, 0x4b, 0xe8, 0x0e, 0xdc, 0x64, 0x7b, 0x34,
-	0xcc, 0x67, 0xe3, 0x3d, 0xcb, 0x4d, 0xe0, 0xba, 0x0a, 0xe8, 0x16, 0xdc, 0x88, 0xd1, 0x4c, 0x44,
-	0xbc, 0x3f, 0x66, 0xac, 0x55, 0x86, 0x6c, 0x1e, 0x61, 0xd2, 0xd0, 0x5b, 0x2d, 0x46, 0x40, 0x70,
-	0x1b, 0x93, 0x23, 0x31, 0x47, 0x5b, 0xd3, 0xfe, 0x2a, 0x03, 0x79, 0x9e, 0x33, 0x53, 0xe9, 0x59,
-	0x99, 0x4a, 0xcf, 0x73, 0x4f, 0x5f, 0xe6, 0x5b, 0xbc, 0x0c, 0x65, 0xbf, 0xb9, 0xcb, 0x50, 0x6a,
-	0x56, 0x91, 0x3b, 0x77, 0x56, 0x91, 0xbf, 0xfc, 0xac, 0xe2, 0xbf, 0x33, 0x50, 0x8c, 0x41, 0xa9,
-	0x39, 0x91, 0x92, 0x9e, 0x13, 0x25, 0x86, 0x77, 0x99, 0x0b, 0x86, 0x77, 0xd9, 0xd9, 0xe1, 0x9d,
-	0x09, 0x85, 0xc8, 0xeb, 0xbe, 0xa1, 0x11, 0x4b, 0x54, 0x4c, 0xd3, 0xa7, 0x4b, 0x69, 0x2a, 0xea,
-	0x21, 0x75, 0x2d, 0xc1, 0x4b, 0x62, 0x21, 0xac, 0xa8, 0x0e, 0x03, 0xaf, 0x4b, 0x65, 0x96, 0x5a,
-	0x66, 0xbe, 0x21, 0x18, 0xa6, 0x32, 0xe6, 0xca, 0x55, 0x33, 0xe6, 0x4e, 0x0d, 0xca, 0x49, 0xc5,
-	0x98, 0x7d, 0x84, 0x6a, 0x13, 0xeb, 0x15, 0x05, 0xc0, 0x70, 0xd1, 0x16, 0xe4, 0xf9, 0x60, 0x54,
-	0x4e, 0x49, 0xc5, 0x83, 0xf6, 0x37, 0x59, 0x58, 0x9b, 0xee, 0xcc, 0x10, 0x4e, 0xa6, 0xc4, 0x4f,
-	0x97, 0xee, 0xe9, 0x92, 0x09, 0x71, 0x76, 0xba, 0x94, 0xf9, 0x86, 0xa6, 0x4b, 0xf3, 0x53, 0x6d,
-	0xf6, 0x5b, 0x48, 0xb5, 0xb9, 0xd9, 0x54, 0xfb, 0x87, 0xca, 0x05, 0xa9, 0xf6, 0x06, 0x6c, 0x36,
-	0x49, 0x1d, 0x13, 0xbb, 0x63, 0xee, 0x77, 0x1a, 0xfb, 0x46, 0x23, 0xce, 0xb6, 0xcb, 0x24, 0xc6,
-	0xcc, 0x45, 0x89, 0x31, 0x3b, 0x9b, 0xfa, 0x72, 0xda, 0xbf, 0x66, 0x61, 0x73, 0x8e, 0xe1, 0xd0,
-	0xab, 0xb8, 0xa7, 0x96, 0xae, 0xfc, 0xfc, 0xb2, 0xa6, 0xdf, 0x9b, 0x3f, 0x3e, 0x1c, 0xf5, 0x22,
-	0x22, 0x25, 0x23, 0x17, 0x36, 0xd9, 0x29, 0xb6, 0x67, 0x7c, 0xcd, 0x4e, 0xd7, 0x93, 0xa5, 0x4e,
-	0x57, 0x4a, 0x3e, 0xf2, 0x66, 0x60, 0xe8, 0x7b, 0xb0, 0x35, 0x1a, 0x8c, 0x97, 0xe8, 0x51, 0x3b,
-	0xa0, 0x4e, 0x38, 0xae, 0x85, 0x9b, 0x09, 0x1c, 0xe1, 0x28, 0xed, 0xef, 0x14, 0xb8, 0x79, 0xae,
-	0xfa, 0xe8, 0x11, 0x7c, 0x24, 0xbc, 0x34, 0xf6, 0x91, 0xd1, 0x30, 0xac, 0x97, 0x2c, 0xad, 0x77,
-	0x1a, 0xe9, 0xf7, 0x2a, 0xd7, 0x61, 0xb5, 0xa6, 0x9b, 0x31, 0xa9, 0xaa, 0xb0, 0x5a, 0x90, 0xf0,
-	0xae, 0xcd, 0x9c, 0x63, 0x1b, 0x16, 0x3e, 0x54, 0x33, 0xe8, 0x3e, 0xdc, 0x4b, 0x22, 0x59, 0xa1,
-	0x30, 0x6a, 0xd8, 0xae, 0x35, 0x0f, 0xab, 0x86, 0x29, 0x4a, 0x46, 0x96, 0x85, 0xc3, 0x9c, 0x38,
-	0xb1, 0x9b, 0xd6, 0x01, 0x26, 0x36, 0xc1, 0x7a, 0xbb, 0x69, 0xaa, 0x39, 0xed, 0x1f, 0xf2, 0xb0,
-	0x3d, 0xdf, 0x4e, 0xe3, 0x94, 0xbb, 0xcc, 0xcc, 0x3f, 0x99, 0x72, 0x91, 0x3b, 0x0e, 0x0c, 0xd1,
-	0xa0, 0x34, 0xae, 0xe0, 0xa7, 0xbd, 0x39, 0xae, 0x4b, 0x86, 0xc6, 0xe5, 0x9d, 0x86, 0xde, 0xc0,
-	0x5a, 0x62, 0x2a, 0x2f, 0xe6, 0x79, 0xcf, 0xae, 0xa2, 0x9e, 0xb8, 0x59, 0xb8, 0x89, 0x59, 0x7d,
-	0x42, 0x38, 0x3a, 0x80, 0x55, 0x99, 0x2c, 0x79, 0x02, 0x11, 0xa5, 0xeb, 0xa3, 0x85, 0x6b, 0x89,
-	0x3c, 0xcb, 0x93, 0x07, 0x44, 0xe3, 0xff, 0x3b, 0x4f, 0x61, 0x73, 0xce, 0x72, 0xbc, 0x98, 0x0d,
-	0xfd, 0x28, 0xb4, 0xfd, 0x21, 0x1d, 0x70, 0x3f, 0xe5, 0x49, 0x89, 0x43, 0x9a, 0x43, 0x3a, 0xd0,
-	0xfe, 0x4b, 0x81, 0xca, 0x79, 0x46, 0x44, 0x0f, 0xe1, 0x43, 0x16, 0x4f, 0x57, 0x8b, 0xcf, 0x79,
-	0xed, 0x1e, 0x4f, 0x2d, 0xb5, 0x03, 0xa3, 0x51, 0xb7, 0x2d, 0xa3, 0xf6, 0x05, 0xb6, 0xda, 0xf6,
-	0x73, 0xc3, 0x3a, 0x68, 0x76, 0x2c, 0x5b, 0xaf, 0x77, 0x1a, 0x96, 0xba, 0xc2, 0x42, 0x32, 0x19,
-	0x8c, 0x82, 0x30, 0x15, 0xb8, 0x9b, 0x70, 0xdd, 0x30, 0x6b, 0x4d, 0x42, 0x70, 0xcd, 0xb2, 0x5b,
-	0xc4, 0xa8, 0x61, 0x35, 0x87, 0xbe, 0x03, 0x77, 0xb9, 0xba, 0x0b, 0x82, 0x39, 0xaf, 0xfd, 0xbd,
-	0x02, 0x30, 0xb1, 0x20, 0xfa, 0x00, 0xca, 0x53, 0xf6, 0x9f, 0x54, 0xac, 0xb5, 0x89, 0x65, 0x0d,
-	0x17, 0x3d, 0x82, 0x8d, 0xf0, 0xb5, 0x1f, 0x44, 0xf6, 0x74, 0x62, 0x16, 0x2f, 0x90, 0x54, 0x8e,
-	0xa8, 0x4f, 0xe0, 0x93, 0x7a, 0x9c, 0xbd, 0x6c, 0x3d, 0xfe, 0x04, 0x90, 0xb8, 0x25, 0xda, 0xb3,
-	0x05, 0x60, 0x43, 0x60, 0xa6, 0x16, 0xd2, 0x7e, 0x02, 0xab, 0x53, 0x6f, 0xea, 0x58, 0xd7, 0x17,
-	0x46, 0xce, 0xf1, 0xf1, 0x54, 0xd7, 0xc7, 0x9f, 0x0d, 0x17, 0xdd, 0x80, 0x42, 0xe0, 0xfb, 0xfd,
-	0xc9, 0x6b, 0xaf, 0x15, 0xf6, 0x28, 0x5e, 0x89, 0x31, 0x65, 0xce, 0xec, 0xd0, 0xfb, 0x4a, 0x28,
-	0x9c, 0x27, 0x25, 0x0e, 0x69, 0x7b, 0x5f, 0x51, 0xed, 0x17, 0x59, 0x40, 0x7c, 0x80, 0xe3, 0x7d,
-	0xc5, 0xdb, 0x97, 0x9a, 0x3f, 0x38, 0xf6, 0x4e, 0xd0, 0xef, 0x28, 0xb0, 0x1d, 0x4d, 0x81, 0x27,
-	0x33, 0x27, 0x79, 0xb1, 0x5f, 0x9c, 0xe4, 0x67, 0x25, 0x26, 0x40, 0xe3, 0x19, 0x13, 0x1e, 0x44,
-	0xc1, 0x19, 0x79, 0x2f, 0x9a, 0x87, 0x43, 0xbf, 0xa7, 0xc0, 0xce, 0x2b, 0xaf, 0xd7, 0xe3, 0xb7,
-	0xd3, 0x49, 0x97, 0x68, 0x8b, 0x7f, 0x32, 0xa7, 0x1c, 0x5c, 0x56, 0x8f, 0xaa, 0x90, 0x38, 0xd5,
-	0x76, 0xee, 0xf3, 0x3f, 0xa4, 0xf2, 0xea, 0x1c, 0xcc, 0xce, 0x01, 0xec, 0x9c, 0xaf, 0x3d, 0x52,
-	0x21, 0xfb, 0x86, 0x9e, 0x49, 0x7f, 0xb0, 0xbf, 0xac, 0x03, 0x3a, 0x75, 0x7a, 0x23, 0x2a, 0x3d,
-	0x21, 0x1e, 0x7e, 0x98, 0xf9, 0x4c, 0xd1, 0x5e, 0x42, 0xe5, 0xbc, 0xf5, 0xd9, 0x51, 0xac, 0x1a,
-	0x8d, 0x06, 0xeb, 0xfa, 0x0d, 0x73, 0xbf, 0x49, 0x0e, 0xc5, 0x8d, 0x47, 0xfc, 0x4b, 0x1d, 0xc5,
-	0x02, 0x64, 0x0f, 0x0d, 0x53, 0x55, 0x50, 0x11, 0x72, 0xfb, 0x9d, 0x46, 0x43, 0xcd, 0x68, 0x7f,
-	0x92, 0x83, 0x5b, 0x0b, 0x26, 0x7d, 0xe8, 0x0d, 0x94, 0xe4, 0x08, 0xd1, 0x0f, 0x64, 0xa1, 0x36,
-	0xae, 0x3a, 0x36, 0x4c, 0xe1, 0xfc, 0xa0, 0x9a, 0xa9, 0x28, 0x64, 0x22, 0x1f, 0x3d, 0x85, 0xad,
-	0xf8, 0xaa, 0xd0, 0xa7, 0xd1, 0x6b, 0xdf, 0x95, 0xc3, 0x43, 0x6e, 0x10, 0x4e, 0x1c, 0xb7, 0xff,
-	0x87, 0x1c, 0x2d, 0x5e, 0x30, 0xe8, 0x70, 0x67, 0x34, 0x18, 0x3a, 0x41, 0x48, 0x5d, 0x7b, 0x2e,
-	0x7b, 0x9e, 0xdb, 0x73, 0x27, 0x26, 0x6a, 0xcd, 0x8a, 0xb8, 0x0d, 0x85, 0x53, 0x1a, 0x84, 0xe3,
-	0x0b, 0x2c, 0x5f, 0x2b, 0x06, 0xa1, 0x4f, 0x61, 0x23, 0x35, 0x4e, 0xf5, 0x03, 0x71, 0xf8, 0x38,
-	0x9d, 0x3a, 0x4c, 0x6d, 0x8b, 0x5d, 0x79, 0x12, 0xa7, 0xa0, 0xcb, 0x63, 0x88, 0xf7, 0xd2, 0x17,
-	0x5d, 0x79, 0x66, 0x43, 0x8f, 0xa0, 0x68, 0x06, 0xa6, 0xb9, 0xa0, 0xa6, 0x8d, 0x89, 0xee, 0xc1,
-	0x9d, 0xb8, 0xf7, 0x6a, 0x91, 0x66, 0x0d, 0xb7, 0xdb, 0x4d, 0x32, 0x7b, 0xd3, 0x9e, 0xa0, 0xda,
-	0x16, 0x31, 0x5a, 0xac, 0xf7, 0xbb, 0x01, 0x9b, 0x13, 0x68, 0x95, 0xe8, 0x86, 0x69, 0x11, 0x8c,
-	0xd5, 0x8c, 0xf6, 0xef, 0x19, 0xd8, 0x98, 0x19, 0x39, 0xa1, 0x27, 0xb0, 0x3d, 0x67, 0x7e, 0x35,
-	0x49, 0x2e, 0x9b, 0x33, 0x23, 0x29, 0xc3, 0x45, 0x9f, 0xc2, 0xd6, 0xa9, 0xd3, 0xf3, 0x5c, 0x5b,
-	0xdc, 0x90, 0xc6, 0x63, 0x74, 0x71, 0x4d, 0xda, 0xe0, 0xb8, 0x36, 0x43, 0xc9, 0x09, 0x3a, 0x7a,
-	0x04, 0x48, 0x30, 0xd0, 0x81, 0x3b, 0x21, 0x17, 0xb7, 0xa6, 0xeb, 0x1c, 0x83, 0x07, 0x6e, 0x4c,
-	0x5c, 0x85, 0x1c, 0xaf, 0x92, 0x62, 0xbe, 0xb3, 0xb7, 0x4c, 0x80, 0x0a, 0xcd, 0x78, 0xb1, 0xe4,
-	0xbc, 0xe8, 0x3e, 0x94, 0xfd, 0xc0, 0x3b, 0xf1, 0x06, 0x4e, 0xcf, 0x16, 0x37, 0x91, 0x3c, 0xcf,
-	0x7a, 0xeb, 0x31, 0xb4, 0xc6, 0x80, 0xe8, 0x3b, 0xb0, 0xde, 0x1d, 0x05, 0x01, 0xdb, 0xb8, 0xa0,
-	0x5a, 0xe1, 0x54, 0x6b, 0x12, 0x28, 0x88, 0x1e, 0x4e, 0x22, 0x66, 0x62, 0x1d, 0xf1, 0xca, 0xeb,
-	0xfa, 0x30, 0x69, 0x19, 0xed, 0x9f, 0x56, 0x00, 0xcd, 0x5e, 0x74, 0xe7, 0xbf, 0x92, 0x55, 0xbe,
-	0x91, 0x57, 0xb2, 0xe8, 0x29, 0x6c, 0xc7, 0x82, 0xa3, 0xc0, 0x19, 0x84, 0x4e, 0x37, 0xd6, 0x51,
-	0xa4, 0x9e, 0xf8, 0x14, 0x5a, 0x13, 0xa4, 0xe1, 0xbe, 0x43, 0xf9, 0xd2, 0x01, 0x22, 0xe7, 0xad,
-	0xed, 0xf4, 0xb9, 0xc1, 0x72, 0x4b, 0xb3, 0x97, 0x22, 0xe7, 0xad, 0xce, 0x99, 0x50, 0x34, 0x49,
-	0x0d, 0xf2, 0x0c, 0x52, 0xd7, 0x7e, 0x75, 0xc6, 0x7d, 0x54, 0x7e, 0x5c, 0xbd, 0xe4, 0x18, 0x21,
-	0x95, 0x89, 0xa8, 0x5b, 0x3d, 0x1b, 0xa7, 0x96, 0x29, 0x18, 0xfa, 0x78, 0x9e, 0x1f, 0x57, 0xe4,
-	0x5c, 0x3d, 0xed, 0x49, 0xf4, 0xfd, 0x73, 0x0f, 0x46, 0x41, 0xb2, 0xcc, 0x3d, 0x1a, 0x3f, 0x82,
-	0x82, 0x4b, 0x87, 0x7e, 0xe8, 0x45, 0x95, 0xe2, 0x12, 0xf3, 0xe4, 0xba, 0xa0, 0x25, 0x31, 0x13,
-	0xda, 0x87, 0xd5, 0x81, 0x6f, 0x87, 0xaf, 0xfd, 0x9f, 0xd9, 0xc7, 0x94, 0x56, 0x4a, 0x5c, 0xc6,
-	0x87, 0x0b, 0x65, 0x98, 0x7e, 0xfb, 0xb5, 0xff, 0xb3, 0x7d, 0x4a, 0x49, 0x69, 0x10, 0xff, 0x9d,
-	0xf3, 0x5d, 0x04, 0x5c, 0xf1, 0xbb, 0x88, 0xfe, 0x38, 0xa2, 0xa7, 0x8d, 0x39, 0x75, 0xc5, 0x94,
-	0xe9, 0x46, 0x8e, 0xf3, 0xd2, 0x37, 0xd4, 0x04, 0xf6, 0x59, 0xb3, 0xf9, 0x8c, 0xdf, 0x50, 0x2b,
-	0xb0, 0x95, 0x40, 0xb4, 0x74, 0x62, 0x99, 0x98, 0xa8, 0x99, 0xea, 0x1a, 0xeb, 0x55, 0xe4, 0x84,
-	0xc9, 0xd5, 0xbe, 0x86, 0x3c, 0xd7, 0x09, 0xdd, 0x83, 0x35, 0x1e, 0x7e, 0x76, 0xdf, 0xeb, 0x06,
-	0x7e, 0x28, 0x3f, 0xa7, 0x5a, 0xe5, 0xb0, 0x43, 0x0e, 0x9a, 0x1c, 0xe6, 0xee, 0x99, 0xdd, 0xf5,
-	0xdd, 0xb8, 0xf4, 0xae, 0xc5, 0xc0, 0x9a, 0xef, 0x52, 0xf4, 0x31, 0x20, 0xc6, 0xc3, 0xfa, 0x09,
-	0xe9, 0xd1, 0xc9, 0x57, 0x55, 0xaa, 0xc4, 0xc8, 0x6c, 0xe2, 0x9c, 0x68, 0xbf, 0xab, 0x40, 0x69,
-	0x6c, 0x5e, 0xf4, 0x14, 0xb2, 0xcc, 0x27, 0xca, 0xd2, 0x86, 0x64, 0xe4, 0x48, 0x87, 0xe2, 0x31,
-	0xa5, 0xd3, 0x93, 0x83, 0x0f, 0x2f, 0x66, 0xe5, 0xa9, 0xac, 0x70, 0x4c, 0xf9, 0x1f, 0xed, 0x9f,
-	0x15, 0x28, 0xc8, 0x48, 0x41, 0xbf, 0x36, 0x09, 0xb0, 0xe5, 0x15, 0x19, 0x87, 0xd7, 0xaf, 0xc3,
-	0xed, 0xbe, 0x37, 0xb0, 0x1d, 0xf7, 0xd4, 0x19, 0x74, 0xa9, 0xdd, 0x65, 0xbf, 0xbd, 0x5e, 0xfa,
-	0x2b, 0xb4, 0x9b, 0x7d, 0x6f, 0xa0, 0x0b, 0x92, 0xda, 0x14, 0x05, 0x4b, 0xce, 0x06, 0xac, 0x49,
-	0x59, 0x57, 0xd9, 0xd1, 0xaa, 0xe4, 0xe5, 0xbb, 0xfa, 0xa5, 0x02, 0xb9, 0x76, 0xcf, 0x7f, 0xf7,
-	0x4f, 0xba, 0x12, 0xa3, 0xba, 0xec, 0x05, 0xa3, 0xba, 0xdc, 0x72, 0xdf, 0xd9, 0xe5, 0xe7, 0x7f,
-	0x67, 0xb7, 0x0f, 0xa5, 0xf8, 0x4b, 0xb9, 0x50, 0xb6, 0x00, 0xcb, 0x7f, 0x64, 0x37, 0x61, 0xd5,
-	0xfe, 0x43, 0x81, 0xeb, 0xa9, 0x61, 0xeb, 0xb9, 0xaf, 0x1d, 0xd9, 0xf6, 0x4f, 0xbc, 0x53, 0x3a,
-	0xb0, 0x07, 0x4e, 0x3f, 0x8e, 0xea, 0x12, 0x87, 0x98, 0x4e, 0x9f, 0x32, 0xf3, 0x1d, 0x3b, 0x7d,
-	0xaf, 0x77, 0x26, 0xf0, 0x22, 0x96, 0x41, 0x80, 0x38, 0x41, 0x1d, 0x0a, 0x8e, 0xeb, 0x06, 0x34,
-	0x8c, 0xbf, 0x0b, 0x5c, 0x3c, 0x01, 0x6c, 0xf9, 0x61, 0xe4, 0xf4, 0x74, 0xc1, 0x41, 0x62, 0x56,
-	0x74, 0x1b, 0x4a, 0x11, 0xed, 0xd1, 0xe1, 0x6b, 0x7f, 0x40, 0xa5, 0x79, 0x26, 0x00, 0xd6, 0xef,
-	0xd2, 0xbe, 0xe3, 0xf5, 0xe4, 0x97, 0x23, 0xe2, 0x41, 0xfb, 0xb9, 0x02, 0xeb, 0x09, 0x71, 0xa8,
-	0x02, 0x05, 0x5e, 0x69, 0x83, 0xb8, 0x5b, 0x8e, 0x1f, 0xd1, 0x0e, 0x14, 0x7b, 0x7e, 0xd7, 0x19,
-	0xcf, 0xef, 0x4a, 0x64, 0xfc, 0x8c, 0xb6, 0x61, 0x25, 0xa0, 0x27, 0x93, 0x57, 0x12, 0xf2, 0x89,
-	0x6d, 0x7d, 0xc8, 0xc5, 0x8b, 0x03, 0x2f, 0x87, 0xc5, 0x02, 0xc4, 0x8f, 0xfb, 0x7d, 0x28, 0x87,
-	0x51, 0x40, 0x69, 0x64, 0xc7, 0x16, 0x10, 0x9a, 0xaf, 0x0b, 0xa8, 0xd4, 0xea, 0xe1, 0x1f, 0x29,
-	0xb0, 0x9e, 0x18, 0x7c, 0xa2, 0xf7, 0x61, 0x27, 0x1e, 0xd0, 0xb7, 0x2d, 0xdd, 0xea, 0xb4, 0x53,
-	0x99, 0x6d, 0x1d, 0x4a, 0xb5, 0xa6, 0xb9, 0x6f, 0x90, 0x43, 0x5c, 0x57, 0x15, 0xde, 0xae, 0x61,
-	0xb3, 0xce, 0xc8, 0x0f, 0x31, 0xa9, 0x1d, 0xe8, 0x26, 0xbb, 0xcb, 0x72, 0xbc, 0xfc, 0x00, 0x16,
-	0xad, 0x41, 0x51, 0x8c, 0xf9, 0xf9, 0x6c, 0x6d, 0x15, 0x0a, 0x66, 0x93, 0x7f, 0x24, 0xab, 0xe6,
-	0xd0, 0x7b, 0xb0, 0x21, 0x1f, 0xec, 0x16, 0x36, 0xf5, 0x86, 0xf1, 0x63, 0x5c, 0x57, 0xf3, 0x0f,
-	0xcf, 0xa0, 0x9c, 0x1c, 0x23, 0xa2, 0x5d, 0xb8, 0x5d, 0x23, 0xb8, 0x6e, 0x58, 0x53, 0x13, 0xbd,
-	0xa4, 0x5e, 0x45, 0xc8, 0x1d, 0x19, 0x6d, 0x5d, 0x55, 0x50, 0x19, 0xe0, 0x50, 0x6f, 0x5b, 0x98,
-	0x30, 0x52, 0x35, 0xc3, 0xda, 0x45, 0xfd, 0x10, 0x13, 0x83, 0xdd, 0xdf, 0xf1, 0x8b, 0x16, 0xc1,
-	0xed, 0xb6, 0x9a, 0x65, 0x5a, 0xd5, 0x8d, 0x76, 0xad, 0x79, 0x84, 0x89, 0x9a, 0x63, 0x77, 0x8a,
-	0xcf, 0x6b, 0x55, 0x35, 0xff, 0xf0, 0x8f, 0x15, 0xd8, 0x98, 0xe9, 0xad, 0xd8, 0xd5, 0x3b, 0xf5,
-	0xa6, 0x64, 0x8e, 0x06, 0x77, 0xe0, 0x66, 0x8a, 0xa8, 0x6d, 0x98, 0xcf, 0x1a, 0xd8, 0xee, 0xb4,
-	0x59, 0xe6, 0x9f, 0x7d, 0xdb, 0x72, 0xd8, 0x69, 0x58, 0x06, 0xc7, 0x66, 0xd8, 0x06, 0x53, 0xd8,
-	0x8e, 0xd9, 0x30, 0x0e, 0x0d, 0x0b, 0xd7, 0x39, 0x45, 0xf6, 0xe1, 0x9f, 0x2a, 0xa0, 0xa6, 0xbb,
-	0x22, 0x6e, 0x7e, 0x82, 0x63, 0xce, 0xb9, 0x0e, 0xe3, 0xa5, 0x08, 0x4f, 0xd5, 0xac, 0x23, 0xa3,
-	0xce, 0x5d, 0x77, 0x0b, 0x6e, 0x4c, 0x21, 0xcc, 0xe6, 0x14, 0x32, 0x93, 0xe2, 0x22, 0x78, 0xbf,
-	0x63, 0xd6, 0xb9, 0xff, 0x92, 0x08, 0xe1, 0x14, 0x5c, 0x57, 0x73, 0x0f, 0x9f, 0x40, 0x69, 0x9c,
-	0xef, 0xd0, 0x36, 0xa0, 0x7d, 0xe3, 0x05, 0xae, 0xdb, 0x44, 0xb7, 0xb0, 0x5d, 0xc7, 0xfb, 0x7a,
-	0xa7, 0x61, 0xa9, 0xd7, 0x98, 0x6f, 0x5a, 0x98, 0xd8, 0x2d, 0x4c, 0xda, 0x4d, 0x53, 0x55, 0x5e,
-	0xad, 0xf0, 0x2f, 0xec, 0x9f, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xe0, 0x89, 0xee,
-	0x6d, 0x2f, 0x00, 0x00,
+var fileDescriptor_1820d8e1a9fad753 = []byte{
+	// 3729 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3b, 0x4d, 0x6c, 0xdb, 0x68,
+	0x76, 0xa1, 0x7e, 0x2c, 0xe9, 0xf9, 0x8f, 0xfe, 0xec, 0x71, 0x14, 0x27, 0x99, 0x78, 0x38, 0x93,
+	0x99, 0xac, 0x33, 0xe3, 0xe9, 0x26, 0x59, 0x74, 0x76, 0x51, 0x6c, 0x4b, 0x49, 0x74, 0xcc, 0x8c,
+	0x4c, 0x6a, 0x3e, 0x51, 0x4e, 0xb2, 0x87, 0x72, 0x19, 0xf1, 0xb3, 0xc3, 0x46, 0x12, 0xb5, 0x24,
+	0xe5, 0x8d, 0x07, 0x3b, 0x87, 0x02, 0x45, 0x0f, 0x2d, 0x7a, 0xe8, 0xa9, 0x40, 0x81, 0x1e, 0xf7,
+	0xd6, 0xde, 0x7a, 0x59, 0xf4, 0x52, 0xa0, 0xc0, 0xa2, 0x68, 0xd1, 0x53, 0x51, 0xb4, 0xa7, 0x02,
+	0x2d, 0x7a, 0xe8, 0xa9, 0xf7, 0x02, 0x45, 0x51, 0x7c, 0x3f, 0x94, 0x48, 0x4a, 0x96, 0x65, 0xcf,
+	0x4c, 0x2f, 0x7b, 0x31, 0xc4, 0xf7, 0xf7, 0xbd, 0xef, 0xbd, 0xf7, 0xbd, 0xf7, 0xbe, 0x47, 0x1a,
+	0xca, 0x67, 0x8f, 0xf7, 0x87, 0x81, 0x1f, 0xf9, 0xe8, 0x36, 0x79, 0x1b, 0xed, 0xf7, 0x9d, 0x61,
+	0xb8, 0xff, 0xca, 0xf7, 0xdf, 0x78, 0x83, 0xd3, 0xfd, 0xa1, 0x13, 0x44, 0x03, 0x12, 0xec, 0x9f,
+	0x3d, 0x56, 0xbe, 0x80, 0x6a, 0xfd, 0x35, 0xe9, 0xbe, 0x51, 0xcf, 0x1c, 0xaf, 0xe7, 0xbc, 0xf2,
+	0x7a, 0x5e, 0x74, 0x8e, 0xc9, 0x4f, 0x46, 0x24, 0x8c, 0xd0, 0xf7, 0xa0, 0x10, 0xf6, 0xfc, 0xa8,
+	0x2a, 0xed, 0x4a, 0x0f, 0x96, 0x1f, 0xbd, 0xb7, 0x3f, 0x47, 0xce, 0x7e, 0xbb, 0xe7, 0x47, 0x98,
+	0x91, 0x2b, 0x7f, 0x9f, 0x87, 0x5b, 0x33, 0x64, 0x86, 0x43, 0x7f, 0x10, 0x92, 0x6b, 0x0a, 0x45,
+	0x1f, 0xc1, 0x7a, 0xd7, 0x1f, 0x0d, 0x22, 0xdb, 0xe1, 0x42, 0x7b, 0xa4, 0x9a, 0xdb, 0x95, 0x1e,
+	0x14, 0xf1, 0x1a, 0x03, 0xab, 0x31, 0x14, 0x7d, 0x05, 0x5b, 0xee, 0x28, 0x70, 0x22, 0xcf, 0x1f,
+	0xd8, 0x01, 0xf9, 0xc9, 0xc8, 0x0b, 0x48, 0x9f, 0x0c, 0xa2, 0x6a, 0x7e, 0x57, 0x7a, 0xb0, 0xf6,
+	0xe8, 0xd9, 0xdc, 0xf5, 0x2e, 0xd4, 0x7a, 0xbf, 0x21, 0x44, 0xe2, 0x89, 0x44, 0xbc, 0xe9, 0x4e,
+	0x03, 0xd1, 0x8f, 0x61, 0xd3, 0x49, 0x08, 0xb0, 0x47, 0x43, 0xd7, 0x89, 0x48, 0xb5, 0xc0, 0x76,
+	0xfb, 0xe9, 0xdc, 0xd5, 0x93, 0x0b, 0x77, 0x18, 0x1b, 0x46, 0xce, 0x14, 0x4c, 0xe9, 0xc3, 0xe6,
+	0x0c, 0x6d, 0xd0, 0x07, 0xb0, 0xdb, 0xe8, 0x60, 0xd5, 0xd2, 0x4d, 0xc3, 0xc6, 0xda, 0x17, 0x1d,
+	0x1d, 0x6b, 0x47, 0x9a, 0x61, 0xd9, 0x1d, 0xa3, 0xdd, 0xd2, 0xea, 0xfa, 0x81, 0xae, 0x35, 0xe4,
+	0x1b, 0xa8, 0x0a, 0x5b, 0x0d, 0xd3, 0x36, 0x4c, 0xcb, 0x6e, 0x1f, 0x9a, 0xcf, 0xed, 0x98, 0x43,
+	0x96, 0xd0, 0x36, 0xa0, 0xa3, 0x4e, 0x3b, 0x0b, 0xcf, 0x29, 0x43, 0x40, 0xd3, 0x8a, 0xa1, 0x1f,
+	0xc1, 0x06, 0x75, 0x8b, 0x9d, 0xd4, 0xaf, 0x2a, 0xed, 0xe6, 0x1f, 0x2c, 0x3f, 0xfa, 0xe4, 0x52,
+	0x97, 0xa6, 0x2c, 0x2c, 0x87, 0x19, 0x88, 0x12, 0x80, 0x9c, 0xa5, 0xfa, 0xb6, 0xa3, 0x46, 0xf9,
+	0x37, 0x09, 0xca, 0x94, 0xcf, 0xf2, 0xfa, 0x04, 0xdd, 0x05, 0x08, 0x49, 0x70, 0xe6, 0x75, 0x89,
+	0xed, 0xb9, 0xd5, 0xe2, 0xae, 0xf4, 0xa0, 0x82, 0x2b, 0x02, 0xa2, 0xbb, 0xe8, 0x36, 0x54, 0xc2,
+	0xc8, 0x09, 0x22, 0x3b, 0x24, 0x5d, 0xa6, 0x50, 0x1e, 0x97, 0x19, 0xa0, 0x4d, 0xba, 0xe8, 0x3d,
+	0x58, 0x19, 0x87, 0x1f, 0xc5, 0xe7, 0x18, 0x7e, 0x39, 0x86, 0x51, 0x92, 0xef, 0x80, 0x9c, 0x0a,
+	0x91, 0xc8, 0x39, 0x65, 0xd1, 0x59, 0xc1, 0xeb, 0x49, 0xb8, 0xe5, 0x9c, 0xa2, 0xcf, 0x61, 0x25,
+	0x20, 0xa1, 0x3f, 0x0a, 0x98, 0x2a, 0xa1, 0x08, 0xa3, 0x07, 0x73, 0xb7, 0x8f, 0x05, 0x83, 0xee,
+	0x86, 0x78, 0x39, 0x98, 0x3c, 0x28, 0x6f, 0x61, 0x2b, 0xde, 0x62, 0xca, 0xb6, 0x35, 0xa8, 0x30,
+	0x5f, 0x46, 0x5e, 0x9f, 0x08, 0x03, 0xdf, 0xbf, 0xd4, 0xc0, 0x54, 0x0a, 0x2e, 0x87, 0xb1, 0xc9,
+	0xee, 0x40, 0x25, 0x6d, 0xe2, 0x32, 0x9e, 0x00, 0x94, 0x3f, 0x94, 0xe0, 0xdd, 0x9a, 0x13, 0x75,
+	0x5f, 0x27, 0xd7, 0x6d, 0xfa, 0xfe, 0x9b, 0xd1, 0x30, 0xce, 0x35, 0xf7, 0x60, 0xb9, 0x4f, 0x82,
+	0xee, 0x6b, 0x67, 0x10, 0x51, 0xa3, 0x4b, 0xcc, 0x1e, 0x10, 0x83, 0x74, 0x37, 0xad, 0x65, 0x9e,
+	0x45, 0xda, 0x55, 0xb5, 0x7c, 0x56, 0x28, 0xe7, 0xe4, 0xbc, 0xf2, 0x07, 0x12, 0xdc, 0xbb, 0x50,
+	0x1b, 0x91, 0xa5, 0x4e, 0x61, 0x7b, 0xbc, 0xda, 0xac, 0x20, 0xff, 0xee, 0x42, 0x4b, 0xa7, 0x02,
+	0x7d, 0x2b, 0x9c, 0x01, 0x55, 0xbe, 0x82, 0x7b, 0x2c, 0xeb, 0x98, 0x81, 0x4b, 0x82, 0x83, 0x51,
+	0xef, 0xc4, 0xeb, 0x65, 0xd3, 0xf0, 0xa5, 0xa6, 0xf9, 0x3e, 0x14, 0xbc, 0x88, 0xf4, 0xab, 0xb9,
+	0x05, 0xac, 0xd2, 0xf4, 0x06, 0x44, 0x8f, 0x48, 0x1f, 0x33, 0x16, 0xe5, 0x97, 0x12, 0xec, 0x5e,
+	0xbc, 0xbe, 0x30, 0xc6, 0x0b, 0x58, 0x3b, 0x49, 0x61, 0x44, 0x94, 0xfc, 0xda, 0xdc, 0x95, 0x66,
+	0x49, 0xcc, 0xc8, 0x41, 0x87, 0xb0, 0x76, 0x42, 0x48, 0x68, 0x3b, 0x03, 0xd7, 0x8e, 0x9c, 0xb7,
+	0x24, 0x64, 0xb1, 0xb3, 0xfc, 0x48, 0x99, 0x2b, 0xb9, 0x15, 0x78, 0x5d, 0x82, 0x57, 0x28, 0xa7,
+	0x3a, 0x70, 0x2d, 0xca, 0xa7, 0x7c, 0x06, 0x37, 0x9f, 0x92, 0xa8, 0xc6, 0x89, 0xdb, 0x91, 0x13,
+	0x8d, 0xc2, 0xd8, 0x7e, 0x77, 0x01, 0x84, 0x90, 0x89, 0xf9, 0x2a, 0x02, 0xa2, 0xbb, 0xca, 0x7f,
+	0x4a, 0x50, 0x9d, 0x66, 0x15, 0x5b, 0x9f, 0xcf, 0x8b, 0xbe, 0x80, 0xb5, 0x18, 0x1d, 0x32, 0x46,
+	0xa6, 0xff, 0xda, 0xa3, 0xbd, 0xb9, 0xfa, 0xa7, 0x97, 0x5a, 0x7d, 0x95, 0x7c, 0xa4, 0x99, 0x75,
+	0x18, 0x90, 0xa1, 0x73, 0x4e, 0xb3, 0x7a, 0x2c, 0x95, 0x17, 0xaf, 0x4f, 0x2e, 0xb1, 0x4a, 0xcc,
+	0x25, 0x04, 0xcb, 0xc3, 0x0c, 0x44, 0xf9, 0xf3, 0x02, 0x6c, 0xd5, 0x03, 0xe2, 0x44, 0x44, 0xa8,
+	0xf0, 0xf5, 0x2a, 0x3d, 0x3a, 0x84, 0x4a, 0x8f, 0x38, 0x21, 0xb1, 0x03, 0x72, 0x22, 0x3c, 0xf7,
+	0x70, 0x7e, 0xf4, 0x51, 0x6a, 0x4c, 0x4e, 0x48, 0x40, 0x06, 0x5d, 0x82, 0xcb, 0x3d, 0xf1, 0x8c,
+	0x9e, 0x83, 0x3c, 0x0a, 0x49, 0x60, 0x7b, 0x83, 0x13, 0x3f, 0xe8, 0xb3, 0x54, 0xc9, 0x36, 0xbd,
+	0xfc, 0xe8, 0xe3, 0xb9, 0x02, 0x3b, 0x21, 0x09, 0xf4, 0x09, 0x0f, 0x5e, 0x1f, 0xa5, 0x01, 0xb4,
+	0x1e, 0xc7, 0xb6, 0x4c, 0xca, 0x5e, 0xa4, 0x1e, 0xb7, 0x38, 0x5f, 0x52, 0x3c, 0x1a, 0x4e, 0xc1,
+	0xd0, 0xcf, 0xe0, 0x6e, 0xbc, 0xc2, 0x30, 0xf0, 0xbb, 0x24, 0x0c, 0x69, 0x38, 0x0c, 0x9d, 0xc0,
+	0xe9, 0x93, 0x88, 0x04, 0x21, 0x2b, 0x20, 0xcb, 0x8f, 0x3e, 0x5b, 0x64, 0xad, 0xd6, 0x58, 0x40,
+	0x6b, 0xcc, 0x8f, 0x6f, 0x0f, 0x2f, 0x46, 0xa2, 0x87, 0xb0, 0xe1, 0xb9, 0xa4, 0x3f, 0xf4, 0x23,
+	0x32, 0xe8, 0x9e, 0xdb, 0x91, 0xff, 0x86, 0x0c, 0xaa, 0x4b, 0x2c, 0x4e, 0xe5, 0x04, 0xc2, 0xa2,
+	0x70, 0xf4, 0x09, 0x20, 0xc7, 0x75, 0x3d, 0xaa, 0xb6, 0xd3, 0x63, 0xdd, 0x11, 0x09, 0xa3, 0x6a,
+	0x89, 0x51, 0x6f, 0x4c, 0x30, 0x22, 0x2a, 0x94, 0x3f, 0xca, 0xc1, 0x3b, 0x99, 0x70, 0x11, 0xc7,
+	0xe2, 0x87, 0x50, 0x12, 0x9b, 0x10, 0x21, 0xf3, 0xc1, 0x22, 0x01, 0x8f, 0x63, 0x26, 0xf4, 0xdb,
+	0xb0, 0xc9, 0xdc, 0x1d, 0x1b, 0xce, 0x1f, 0x32, 0xaf, 0xf0, 0x10, 0xda, 0xbf, 0xd4, 0xe3, 0xc2,
+	0x5a, 0x26, 0xe3, 0xc2, 0x1b, 0xa3, 0x2c, 0x08, 0x59, 0xb0, 0x1e, 0x9f, 0xcb, 0x13, 0xc7, 0xeb,
+	0x8d, 0x02, 0x22, 0xa2, 0xe9, 0xe1, 0x22, 0x7a, 0x1e, 0x70, 0x16, 0x1c, 0x9f, 0x6d, 0xf1, 0xac,
+	0x18, 0x80, 0xb8, 0x39, 0x44, 0x18, 0xf3, 0xb3, 0xf3, 0x19, 0x14, 0x59, 0x18, 0x0b, 0x4b, 0x28,
+	0x0b, 0x1c, 0x00, 0xce, 0xa0, 0xfc, 0x5c, 0x82, 0xcd, 0x94, 0x40, 0x61, 0xdd, 0x6b, 0x4b, 0x9c,
+	0xb5, 0xef, 0xdc, 0xd7, 0xdf, 0xf7, 0x5f, 0x49, 0x50, 0x64, 0xcb, 0xa0, 0x5b, 0xc0, 0x8f, 0xec,
+	0x24, 0x19, 0x96, 0xd8, 0xb3, 0xee, 0x8e, 0x53, 0x48, 0xee, 0x6a, 0x29, 0xe4, 0x3e, 0xac, 0xb1,
+	0x48, 0x08, 0xe2, 0xa4, 0x20, 0x5a, 0xa1, 0x55, 0x0a, 0x1d, 0x67, 0x0a, 0xf4, 0x7d, 0xb8, 0xc5,
+	0x17, 0x26, 0x6f, 0x87, 0x9e, 0x68, 0xaf, 0x58, 0x6d, 0xa6, 0x3d, 0x56, 0x81, 0xf5, 0x58, 0xdb,
+	0x8c, 0x40, 0x1b, 0xe3, 0x69, 0xa9, 0x6d, 0x93, 0xae, 0xf2, 0x10, 0xd6, 0xd2, 0x69, 0x67, 0xce,
+	0x2e, 0x94, 0xff, 0x96, 0x62, 0x1f, 0xb3, 0xf2, 0x95, 0xf0, 0xb1, 0x4f, 0x9f, 0x17, 0xf2, 0x08,
+	0xe7, 0xe4, 0x0c, 0x97, 0x67, 0x87, 0xdc, 0xff, 0x7b, 0x76, 0xc8, 0xcf, 0xce, 0x0e, 0xca, 0x5f,
+	0x8c, 0xc3, 0x51, 0xec, 0x5d, 0x84, 0xe3, 0x0f, 0xae, 0xbc, 0xf9, 0xc3, 0x1b, 0xf1, 0xf6, 0x5b,
+	0xb0, 0xca, 0x7e, 0x64, 0xc2, 0xf1, 0x3b, 0x0b, 0x74, 0x0e, 0x9c, 0xe1, 0xf0, 0x06, 0x5e, 0xf1,
+	0x13, 0xcf, 0xb5, 0x32, 0x2c, 0x05, 0x24, 0x1c, 0xf5, 0x22, 0x65, 0x1f, 0x36, 0x9b, 0x5e, 0x18,
+	0x17, 0xee, 0x71, 0xb9, 0xbf, 0x09, 0x25, 0x5e, 0x4a, 0x62, 0xe7, 0x2e, 0xb1, 0x9a, 0xe0, 0x2a,
+	0x2f, 0x60, 0x2b, 0x4d, 0x2f, 0xf6, 0xf7, 0x5b, 0x50, 0x16, 0x4a, 0x84, 0xa2, 0xbb, 0x5b, 0x2c,
+	0x9b, 0x8d, 0xb9, 0x94, 0xbf, 0x94, 0x60, 0x83, 0x8a, 0x66, 0x8a, 0x8f, 0x15, 0xb9, 0x95, 0x51,
+	0xe4, 0xf0, 0x46, 0xac, 0x0a, 0x3a, 0x86, 0x0a, 0x37, 0x0b, 0x6d, 0xea, 0xb9, 0x49, 0x7e, 0xfd,
+	0x92, 0xb6, 0x2d, 0x23, 0x9d, 0x1b, 0x49, 0x77, 0xc3, 0xc3, 0x1b, 0xb8, 0xec, 0x8b, 0xdf, 0x3b,
+	0xf7, 0xa1, 0x1c, 0xc3, 0x69, 0x94, 0xc7, 0x6b, 0xb0, 0x6d, 0x55, 0x70, 0x49, 0xd0, 0xd5, 0x8a,
+	0x90, 0xf7, 0xdc, 0x90, 0xe6, 0xb3, 0xa4, 0xdc, 0x49, 0xf6, 0x89, 0xdd, 0x9d, 0xbf, 0x52, 0xac,
+	0x2b, 0xc7, 0xb0, 0xc5, 0xaf, 0x87, 0x99, 0xee, 0xe2, 0x6b, 0x56, 0x0b, 0x56, 0x87, 0x32, 0x82,
+	0x7f, 0xa5, 0xeb, 0xd0, 0xbf, 0xe6, 0xa0, 0x24, 0x48, 0x2e, 0x6b, 0x50, 0xaf, 0x99, 0x95, 0xbf,
+	0xb5, 0x76, 0xac, 0x06, 0x4b, 0xa2, 0xa5, 0x2d, 0x5c, 0xb9, 0x51, 0x16, 0x9c, 0x17, 0xb5, 0x74,
+	0xc5, 0x6f, 0xac, 0xa5, 0x53, 0xfe, 0xb9, 0x00, 0x6b, 0x69, 0x1f, 0xa0, 0xa7, 0x50, 0xec, 0x3a,
+	0x23, 0x51, 0x93, 0xd7, 0x2e, 0xb9, 0xff, 0xa5, 0x79, 0xf7, 0xeb, 0x94, 0x11, 0x73, 0x7e, 0xf4,
+	0x12, 0x50, 0x40, 0x7e, 0x87, 0x74, 0x23, 0xe2, 0xda, 0x5d, 0x27, 0x70, 0xed, 0xe8, 0x7c, 0x48,
+	0xc4, 0xb5, 0x61, 0x7e, 0x54, 0xd4, 0x03, 0xe2, 0x7a, 0x51, 0xdd, 0x09, 0x5c, 0xeb, 0x7c, 0x48,
+	0xb0, 0x1c, 0x8b, 0x89, 0x21, 0x68, 0x17, 0x96, 0x5d, 0x12, 0x76, 0x03, 0x6f, 0x38, 0x76, 0x58,
+	0x05, 0x27, 0x41, 0xca, 0xff, 0xe6, 0xa0, 0xc8, 0xb4, 0x41, 0xef, 0xc0, 0x46, 0x5d, 0xed, 0xb4,
+	0xb5, 0xcc, 0x7c, 0x68, 0x0b, 0xe4, 0x76, 0xd3, 0xb4, 0xec, 0x8e, 0xa1, 0x1e, 0xab, 0x7a, 0x53,
+	0xad, 0x35, 0x35, 0x59, 0x42, 0xf7, 0xe0, 0x36, 0x83, 0xaa, 0x4d, 0xac, 0xa9, 0x8d, 0x97, 0x76,
+	0xcd, 0x34, 0x3f, 0xd7, 0x1a, 0x76, 0xed, 0xa5, 0xdd, 0x69, 0x6b, 0x58, 0xce, 0xa1, 0x0d, 0x58,
+	0x6d, 0x6a, 0x6a, 0x5b, 0xb3, 0xb5, 0x17, 0x2d, 0x1d, 0x6b, 0x0d, 0x39, 0x4f, 0x79, 0xcc, 0x8e,
+	0xd5, 0xd6, 0x1b, 0x9a, 0x5d, 0x57, 0x8d, 0xba, 0xd6, 0x6c, 0xf2, 0xd9, 0xd4, 0x73, 0xdd, 0x68,
+	0x98, 0xcf, 0xe5, 0x02, 0xfa, 0x00, 0x76, 0x5b, 0xea, 0x4b, 0x36, 0xa3, 0xd2, 0x30, 0x36, 0xb1,
+	0x5d, 0x57, 0x71, 0xc3, 0xb6, 0x5e, 0xb6, 0x34, 0x1b, 0x6b, 0xcf, 0xb4, 0xba, 0xa5, 0x35, 0xe4,
+	0x22, 0x15, 0x33, 0x83, 0xaa, 0xa1, 0xd5, 0x9b, 0xba, 0xa1, 0x35, 0xe4, 0x25, 0x74, 0x07, 0xaa,
+	0x31, 0x81, 0xd9, 0x62, 0x2b, 0x18, 0xa6, 0x65, 0x1f, 0xab, 0x4d, 0xbd, 0x21, 0x97, 0xa8, 0x62,
+	0x29, 0x76, 0xb9, 0x8c, 0x14, 0x78, 0x97, 0x6a, 0x4d, 0xb5, 0xa2, 0x94, 0xd4, 0x06, 0x69, 0x01,
+	0x72, 0x05, 0xdd, 0x85, 0x5b, 0x74, 0x8f, 0xba, 0xf1, 0x74, 0xbc, 0x67, 0xb1, 0x09, 0xad, 0x21,
+	0x03, 0xba, 0x0d, 0x37, 0x63, 0x34, 0x15, 0x11, 0xef, 0x8f, 0x1a, 0x6b, 0x99, 0x22, 0xcd, 0x63,
+	0x0d, 0x37, 0xd5, 0x56, 0x8b, 0x12, 0x60, 0xad, 0xad, 0xe1, 0x63, 0x3e, 0x4d, 0x5b, 0x51, 0x7e,
+	0x91, 0x83, 0x22, 0xcb, 0x99, 0x99, 0xf4, 0x2c, 0x25, 0xd2, 0xf3, 0xcc, 0xd3, 0x97, 0xfb, 0x16,
+	0x2f, 0x43, 0xf9, 0x6f, 0xee, 0x32, 0x94, 0x99, 0x55, 0x14, 0x2e, 0x9c, 0x55, 0x14, 0xaf, 0x3e,
+	0xab, 0xf8, 0x9f, 0x1c, 0x94, 0x63, 0x50, 0x66, 0x46, 0x27, 0xcd, 0x9d, 0xd1, 0xe5, 0x2e, 0x99,
+	0xd1, 0xe5, 0xa7, 0x67, 0x74, 0x06, 0x94, 0x22, 0xaf, 0xfb, 0x86, 0x44, 0x34, 0x51, 0x51, 0x4d,
+	0x9f, 0x2c, 0xa4, 0x29, 0xaf, 0x87, 0xc4, 0xb5, 0x38, 0x2f, 0x8e, 0x85, 0xd0, 0xa2, 0x3a, 0x0c,
+	0xbc, 0x2e, 0x11, 0x59, 0x6a, 0x91, 0xf9, 0x06, 0x67, 0x48, 0x64, 0xcc, 0xa5, 0xeb, 0x66, 0xcc,
+	0x9d, 0x3a, 0xac, 0xa5, 0x15, 0xa3, 0xf6, 0xe1, 0xaa, 0x4d, 0xac, 0x57, 0xe6, 0x00, 0xdd, 0x45,
+	0x5b, 0x50, 0x64, 0xe3, 0x51, 0x31, 0x2b, 0xe5, 0x0f, 0xca, 0x5f, 0xe7, 0x61, 0x25, 0xd9, 0x99,
+	0x21, 0x2d, 0x9d, 0x12, 0x3f, 0x5d, 0xb8, 0xa7, 0x4b, 0x27, 0xc4, 0xe9, 0xe9, 0x52, 0xee, 0x1b,
+	0x9a, 0x2e, 0xcd, 0x4e, 0xb5, 0xf9, 0x6f, 0x21, 0xd5, 0x16, 0xa6, 0x53, 0xed, 0x1f, 0x4b, 0x97,
+	0xa4, 0xda, 0x9b, 0xb0, 0x69, 0xe2, 0x86, 0x86, 0xed, 0x8e, 0x71, 0xd0, 0x69, 0x1e, 0xe8, 0xcd,
+	0x38, 0xdb, 0x2e, 0x92, 0x18, 0x73, 0x97, 0x25, 0xc6, 0xfc, 0x74, 0xea, 0x2b, 0x28, 0xff, 0x92,
+	0x87, 0xcd, 0x19, 0x86, 0x43, 0xaf, 0xe2, 0x9e, 0x5a, 0xb8, 0xf2, 0xd9, 0x55, 0x4d, 0xbf, 0x3f,
+	0x7b, 0x7c, 0x38, 0xea, 0x45, 0x58, 0x48, 0x46, 0x2e, 0x6c, 0xd2, 0x53, 0x6c, 0x4f, 0xf9, 0x9a,
+	0x9e, 0xae, 0xc7, 0x0b, 0x9d, 0xae, 0x8c, 0x7c, 0xe4, 0x4d, 0xc1, 0xd0, 0x77, 0x61, 0x6b, 0x34,
+	0x18, 0x2f, 0xd1, 0x23, 0x76, 0x40, 0x9c, 0x70, 0x5c, 0x0b, 0x37, 0x53, 0x38, 0xcc, 0x50, 0xca,
+	0xdf, 0x48, 0x70, 0xeb, 0x42, 0xf5, 0xd1, 0x43, 0xf8, 0x88, 0x7b, 0x69, 0xec, 0x23, 0xbd, 0xa9,
+	0x5b, 0x2f, 0x69, 0x5a, 0xef, 0x34, 0xb3, 0x6f, 0x57, 0xd6, 0x61, 0xb9, 0xae, 0x1a, 0x31, 0xa9,
+	0x2c, 0xd1, 0x5a, 0x90, 0xf2, 0xae, 0x4d, 0x9d, 0x63, 0xeb, 0x96, 0x76, 0x24, 0xe7, 0xd0, 0x7d,
+	0x78, 0x2f, 0x8d, 0xa4, 0x85, 0x42, 0xaf, 0x6b, 0x76, 0xdd, 0x3c, 0xaa, 0xe9, 0x06, 0x2f, 0x19,
+	0x79, 0x1a, 0x0e, 0x33, 0xe2, 0xc4, 0x36, 0xad, 0x43, 0x0d, 0xdb, 0x58, 0x53, 0xdb, 0xa6, 0x21,
+	0x17, 0x94, 0xbf, 0x2b, 0xc2, 0xf6, 0x6c, 0x3b, 0x8d, 0x53, 0xee, 0x22, 0xa3, 0xfd, 0x74, 0xca,
+	0x45, 0xee, 0x38, 0x30, 0x78, 0x83, 0xd2, 0xbc, 0x86, 0x9f, 0xf6, 0x67, 0xb8, 0x2e, 0x1d, 0x1a,
+	0x57, 0x77, 0x1a, 0x7a, 0x03, 0x2b, 0xa9, 0xa9, 0x3c, 0x9f, 0xe7, 0x3d, 0xbd, 0x8e, 0x7a, 0xfc,
+	0x66, 0xe1, 0xa6, 0x66, 0xf5, 0x29, 0xe1, 0xe8, 0x10, 0x96, 0x45, 0xb2, 0x64, 0x09, 0x84, 0x97,
+	0xae, 0x8f, 0xe6, 0xae, 0xc5, 0xf3, 0x2c, 0x4b, 0x1e, 0x10, 0x8d, 0x7f, 0xef, 0x3c, 0x81, 0xcd,
+	0x19, 0xcb, 0xb1, 0x62, 0x36, 0xf4, 0xa3, 0xd0, 0xf6, 0x87, 0x64, 0xc0, 0xfc, 0x54, 0xc4, 0x15,
+	0x06, 0x31, 0x87, 0x64, 0xa0, 0xfc, 0x97, 0x04, 0xd5, 0x8b, 0x8c, 0x88, 0xf6, 0xe0, 0x43, 0x1a,
+	0x4f, 0xd7, 0x8b, 0xcf, 0x59, 0xed, 0x1e, 0x4b, 0x2d, 0xf5, 0x43, 0xbd, 0xd9, 0xb0, 0x2d, 0xbd,
+	0xfe, 0xb9, 0x66, 0xb5, 0xed, 0xe7, 0xba, 0x75, 0x68, 0x76, 0x2c, 0x5b, 0x6d, 0x74, 0x9a, 0x96,
+	0xbc, 0x44, 0x43, 0x32, 0x1d, 0x8c, 0x9c, 0x30, 0x13, 0xb8, 0x9b, 0xb0, 0xae, 0x1b, 0x75, 0x13,
+	0x63, 0xad, 0x6e, 0xd9, 0x2d, 0xac, 0xd7, 0x35, 0xb9, 0x80, 0xde, 0x87, 0x7b, 0x4c, 0xdd, 0x39,
+	0xc1, 0x5c, 0x54, 0xfe, 0x56, 0x02, 0x98, 0x58, 0x10, 0x7d, 0x00, 0x6b, 0x09, 0xfb, 0x4f, 0x2a,
+	0xd6, 0xca, 0xc4, 0xb2, 0xba, 0x8b, 0x1e, 0xc2, 0x46, 0xf8, 0xda, 0x0f, 0x22, 0x3b, 0x99, 0x98,
+	0x73, 0x7c, 0xd6, 0xc1, 0x10, 0x8d, 0x09, 0x7c, 0x52, 0x8f, 0xf3, 0x57, 0xad, 0xc7, 0x9f, 0x00,
+	0xe2, 0xb7, 0x44, 0x7b, 0xba, 0x00, 0x6c, 0x70, 0x4c, 0x62, 0x21, 0xe5, 0xc7, 0xb0, 0x9c, 0x78,
+	0x21, 0x47, 0xbb, 0xbe, 0x30, 0x72, 0x4e, 0x4e, 0x12, 0x5d, 0x1f, 0x7b, 0xd6, 0x5d, 0x74, 0x13,
+	0x4a, 0x81, 0xef, 0xf7, 0x29, 0x86, 0x6b, 0xbd, 0x44, 0x1f, 0x75, 0x97, 0x46, 0x07, 0x55, 0xe6,
+	0xdc, 0x0e, 0xbd, 0x2f, 0xb9, 0xc2, 0x45, 0x5c, 0x61, 0x90, 0xb6, 0xf7, 0x25, 0x51, 0x7e, 0x99,
+	0x07, 0xc4, 0x06, 0x38, 0xde, 0x97, 0xac, 0x7d, 0xa9, 0xfb, 0x83, 0x13, 0xef, 0x14, 0xfd, 0xae,
+	0x04, 0xdb, 0x51, 0x02, 0x3c, 0x99, 0x39, 0x89, 0x8b, 0xfd, 0xfc, 0x24, 0x3f, 0x2d, 0x31, 0x05,
+	0x1a, 0xcf, 0x98, 0xb4, 0x41, 0x14, 0x9c, 0xe3, 0x77, 0xa2, 0x59, 0x38, 0xf4, 0xfb, 0x12, 0xec,
+	0xbc, 0xf2, 0x7a, 0x3d, 0x76, 0x3b, 0x9d, 0x74, 0x89, 0x36, 0xff, 0x25, 0x72, 0xca, 0xe1, 0x55,
+	0xf5, 0xa8, 0x71, 0x89, 0x89, 0xb6, 0xf3, 0x80, 0xfd, 0xc0, 0xd5, 0x57, 0x17, 0x60, 0x76, 0x0e,
+	0x61, 0xe7, 0x62, 0xed, 0x91, 0x0c, 0xf9, 0x37, 0xe4, 0x5c, 0xf8, 0x83, 0xfe, 0xa4, 0x1d, 0xd0,
+	0x99, 0xd3, 0x1b, 0x11, 0xe1, 0x09, 0xfe, 0xf0, 0x83, 0xdc, 0x67, 0x92, 0xf2, 0x12, 0xaa, 0x17,
+	0xad, 0x4f, 0x8f, 0x62, 0x4d, 0x6f, 0x36, 0x69, 0xd7, 0xaf, 0x1b, 0x07, 0x26, 0x3e, 0xe2, 0x37,
+	0x1e, 0xfe, 0x2b, 0x73, 0x14, 0x4b, 0x90, 0x3f, 0xd2, 0x0d, 0x59, 0x42, 0x65, 0x28, 0x1c, 0x74,
+	0x9a, 0x4d, 0x39, 0xa7, 0xfc, 0x69, 0x01, 0x6e, 0xcf, 0x99, 0xf4, 0xa1, 0x37, 0x50, 0x11, 0x23,
+	0x44, 0x3f, 0x10, 0x85, 0x5a, 0xbf, 0xee, 0xd8, 0x30, 0x83, 0xf3, 0x83, 0x5a, 0xae, 0x2a, 0xe1,
+	0x89, 0x7c, 0xf4, 0x04, 0xb6, 0xe2, 0xab, 0x42, 0x9f, 0x44, 0xaf, 0x7d, 0x57, 0x0c, 0x0f, 0x99,
+	0x41, 0x18, 0x71, 0xdc, 0xfe, 0x1f, 0x31, 0x34, 0x7f, 0xc1, 0xa0, 0xc2, 0xdd, 0xd1, 0x60, 0xe8,
+	0x04, 0x21, 0x71, 0xed, 0x99, 0xec, 0xfc, 0x65, 0xfa, 0x4e, 0x4c, 0xd4, 0x9a, 0x16, 0x71, 0x07,
+	0x4a, 0x67, 0x24, 0x08, 0xc7, 0x17, 0x58, 0xb6, 0x56, 0x0c, 0x42, 0x9f, 0xc2, 0x46, 0x66, 0x9c,
+	0xea, 0x07, 0xfc, 0xf0, 0x31, 0x3a, 0x79, 0x98, 0xd9, 0x16, 0xbd, 0xf2, 0xa4, 0x4e, 0x41, 0x97,
+	0xc5, 0x10, 0xeb, 0xa5, 0x2f, 0xbb, 0xf2, 0x4c, 0x87, 0x1e, 0x46, 0xd1, 0x14, 0x4c, 0x71, 0x41,
+	0xce, 0x1a, 0x13, 0xbd, 0x07, 0x77, 0xe3, 0xde, 0xab, 0x85, 0xcd, 0xba, 0xd6, 0x6e, 0x9b, 0x78,
+	0xfa, 0xa6, 0x3d, 0x41, 0xb5, 0x2d, 0xac, 0xb7, 0x68, 0xef, 0x77, 0x13, 0x36, 0x27, 0xd0, 0x1a,
+	0x56, 0x75, 0xc3, 0xc2, 0x9a, 0x26, 0xe7, 0x94, 0x7f, 0xcf, 0xc1, 0xc6, 0xd4, 0xc8, 0x09, 0x3d,
+	0x86, 0xed, 0x19, 0xf3, 0xab, 0x49, 0x72, 0xd9, 0x9c, 0x1a, 0x49, 0xe9, 0x2e, 0xfa, 0x14, 0xb6,
+	0xce, 0x9c, 0x9e, 0xe7, 0xda, 0xfc, 0x86, 0x34, 0x1e, 0xa3, 0xf3, 0x6b, 0xd2, 0x06, 0xc3, 0xb5,
+	0x29, 0x4a, 0x4c, 0xd0, 0xd1, 0x43, 0x40, 0x9c, 0x81, 0x0c, 0xdc, 0x09, 0x39, 0xbf, 0x35, 0xad,
+	0x33, 0x8c, 0x36, 0x70, 0x63, 0xe2, 0x1a, 0x14, 0x58, 0x95, 0xe4, 0xf3, 0x9d, 0xfd, 0x45, 0x02,
+	0x94, 0x6b, 0xc6, 0x8a, 0x25, 0xe3, 0x45, 0xf7, 0x61, 0xcd, 0x0f, 0xbc, 0x53, 0x6f, 0xe0, 0xf4,
+	0x6c, 0x7e, 0x13, 0x29, 0xb2, 0xac, 0xb7, 0x1a, 0x43, 0xeb, 0x14, 0x88, 0xde, 0x87, 0xd5, 0xee,
+	0x28, 0x08, 0xe8, 0xc6, 0x39, 0xd5, 0x12, 0xa3, 0x5a, 0x11, 0x40, 0x4e, 0xb4, 0x37, 0x89, 0x98,
+	0x89, 0x75, 0xf8, 0x2b, 0xaf, 0xf5, 0x61, 0xda, 0x32, 0xca, 0x3f, 0x2c, 0x01, 0x9a, 0xbe, 0xe8,
+	0xce, 0x7e, 0x25, 0x2b, 0x7d, 0x23, 0xaf, 0x64, 0xd1, 0x13, 0xd8, 0x8e, 0x05, 0x47, 0x81, 0x33,
+	0x08, 0x9d, 0x6e, 0xac, 0x23, 0x4f, 0x3d, 0xf1, 0x29, 0xb4, 0x26, 0x48, 0xdd, 0xfd, 0x1a, 0xe5,
+	0x4b, 0x05, 0x88, 0x9c, 0xb7, 0xb6, 0xd3, 0x67, 0x06, 0x2b, 0x2c, 0xcc, 0x5e, 0x89, 0x9c, 0xb7,
+	0x2a, 0x63, 0x42, 0xd1, 0x24, 0x35, 0x88, 0x33, 0x48, 0x5c, 0xfb, 0xd5, 0x39, 0xf3, 0xd1, 0xda,
+	0xa3, 0xda, 0x15, 0xc7, 0x08, 0x99, 0x4c, 0x44, 0xdc, 0xda, 0xf9, 0x38, 0xb5, 0x24, 0x60, 0xe8,
+	0xe3, 0x59, 0x7e, 0x5c, 0x12, 0x73, 0xf5, 0xac, 0x27, 0xd1, 0xf7, 0x2e, 0x3c, 0x18, 0x25, 0xc1,
+	0x32, 0xf3, 0x68, 0xfc, 0x10, 0x4a, 0x2e, 0x19, 0xfa, 0xa1, 0x17, 0x55, 0xcb, 0x0b, 0xcc, 0x93,
+	0x1b, 0x9c, 0x16, 0xc7, 0x4c, 0xe8, 0x00, 0x96, 0x07, 0xbe, 0x1d, 0xbe, 0xf6, 0x7f, 0x6a, 0x9f,
+	0x10, 0x52, 0xad, 0x30, 0x19, 0x1f, 0xce, 0x95, 0x61, 0xf8, 0xed, 0xd7, 0xfe, 0x4f, 0x0f, 0x08,
+	0xc1, 0x95, 0x41, 0xfc, 0x73, 0xc6, 0x77, 0x11, 0x70, 0xcd, 0xef, 0x22, 0xfa, 0xe3, 0x88, 0x4e,
+	0x1a, 0x33, 0x71, 0xc5, 0x14, 0xe9, 0x46, 0x8c, 0xf3, 0xb2, 0x37, 0xd4, 0x14, 0xf6, 0xa9, 0x69,
+	0x3e, 0x65, 0x37, 0xd4, 0x2a, 0x6c, 0xa5, 0x10, 0x2d, 0x15, 0x5b, 0x86, 0x86, 0xe5, 0x5c, 0x6d,
+	0x85, 0xf6, 0x2a, 0x62, 0xc2, 0xe4, 0x2a, 0x5f, 0x41, 0x91, 0xe9, 0x84, 0xde, 0x83, 0x15, 0x16,
+	0x7e, 0x76, 0xdf, 0xeb, 0x06, 0x7e, 0x28, 0xbe, 0x9a, 0x5a, 0x66, 0xb0, 0x23, 0x06, 0x9a, 0x1c,
+	0xe6, 0xee, 0xb9, 0xdd, 0xf5, 0xdd, 0xb8, 0xf4, 0xae, 0xc4, 0xc0, 0xba, 0xef, 0x12, 0xf4, 0x31,
+	0x20, 0xca, 0x43, 0xfb, 0x09, 0xe1, 0xd1, 0xc9, 0xc7, 0x53, 0xb2, 0xc0, 0x88, 0x6c, 0xe2, 0x9c,
+	0x2a, 0xbf, 0x27, 0x41, 0x65, 0x6c, 0x5e, 0xf4, 0x04, 0xf2, 0xd4, 0x27, 0xd2, 0xc2, 0x86, 0xa4,
+	0xe4, 0x48, 0x85, 0xf2, 0x09, 0x21, 0xc9, 0xc9, 0xc1, 0x87, 0x97, 0xb3, 0xb2, 0x54, 0x56, 0x3a,
+	0x21, 0xec, 0x87, 0xf2, 0x8f, 0x12, 0x94, 0x44, 0xa4, 0xa0, 0xdf, 0x98, 0x04, 0xd8, 0xe2, 0x8a,
+	0x8c, 0xc3, 0xeb, 0x37, 0xe1, 0x4e, 0xdf, 0x1b, 0xd8, 0x8e, 0x7b, 0xe6, 0x0c, 0xba, 0xc4, 0xee,
+	0xd2, 0xbf, 0xbd, 0x5e, 0xf6, 0x63, 0xb3, 0x5b, 0x7d, 0x6f, 0xa0, 0x72, 0x92, 0x7a, 0x82, 0x82,
+	0x26, 0x67, 0x1d, 0x56, 0x84, 0xac, 0xeb, 0xec, 0x68, 0x59, 0xf0, 0xb2, 0x5d, 0xfd, 0x53, 0x0e,
+	0x0a, 0xed, 0x9e, 0xbf, 0xc0, 0xe7, 0x49, 0xe9, 0x51, 0x5d, 0x6e, 0xee, 0xa8, 0x2e, 0x7f, 0xc9,
+	0xa8, 0xae, 0xb0, 0xd8, 0xe7, 0x74, 0xc5, 0xd9, 0x9f, 0xd3, 0x1d, 0x40, 0x25, 0xfe, 0x20, 0x2e,
+	0x14, 0x2d, 0xc0, 0xe2, 0xdf, 0xd2, 0x4d, 0x58, 0x69, 0x41, 0x60, 0x7d, 0x44, 0xdc, 0xcf, 0xf6,
+	0x69, 0xbc, 0x96, 0x16, 0x28, 0x08, 0xf5, 0x04, 0xd7, 0x91, 0xef, 0x12, 0x2c, 0x77, 0x33, 0x10,
+	0xe5, 0x3f, 0x24, 0x58, 0xcf, 0x0c, 0x72, 0x2f, 0x7c, 0xa5, 0x49, 0x4d, 0x7b, 0xea, 0x9d, 0x91,
+	0x81, 0x3d, 0x70, 0xfa, 0xf1, 0x89, 0xa9, 0x30, 0x88, 0xe1, 0xf4, 0x09, 0x75, 0xcd, 0x89, 0xd3,
+	0xf7, 0x7a, 0xe7, 0x1c, 0xcf, 0xcf, 0x09, 0x70, 0x10, 0x23, 0x68, 0x40, 0xc9, 0x71, 0xdd, 0x80,
+	0x84, 0xf1, 0xa7, 0x85, 0xf3, 0xa7, 0x8b, 0x2d, 0x3f, 0x8c, 0x9c, 0x9e, 0xca, 0x39, 0x70, 0xcc,
+	0x8a, 0xee, 0x40, 0x25, 0x22, 0x3d, 0x32, 0x7c, 0xed, 0x0f, 0x48, 0xfc, 0xb9, 0xe4, 0x18, 0x40,
+	0x7b, 0x69, 0xd2, 0x77, 0xbc, 0x9e, 0xf8, 0x2a, 0x85, 0x3f, 0x28, 0x3f, 0x97, 0x60, 0x35, 0x25,
+	0x0e, 0x55, 0xa1, 0xc4, 0xaa, 0x78, 0x10, 0x77, 0xe2, 0xf1, 0x23, 0xda, 0x81, 0x72, 0xcf, 0xef,
+	0x3a, 0xe3, 0xd9, 0x60, 0x05, 0x8f, 0x9f, 0xd1, 0x36, 0x2c, 0x05, 0xe4, 0x74, 0xf2, 0xba, 0x43,
+	0x3c, 0xd1, 0xad, 0x0f, 0x99, 0x78, 0x9e, 0x4c, 0xc4, 0x20, 0x9a, 0x83, 0x58, 0x2a, 0xb9, 0x0f,
+	0x6b, 0x61, 0x14, 0x10, 0x12, 0xd9, 0xb1, 0x05, 0xb8, 0xe6, 0xab, 0x1c, 0x2a, 0xb4, 0xda, 0xfb,
+	0x85, 0x04, 0xab, 0xa9, 0xa1, 0x2a, 0x7a, 0x17, 0x76, 0xe2, 0xe1, 0x7f, 0xdb, 0x52, 0xad, 0x4e,
+	0x3b, 0x93, 0x35, 0x57, 0xa1, 0x52, 0x37, 0x8d, 0x03, 0x1d, 0x1f, 0x69, 0x0d, 0x59, 0x62, 0xad,
+	0xa0, 0x66, 0x34, 0x28, 0xf9, 0x91, 0x86, 0xeb, 0x87, 0xaa, 0x41, 0xef, 0xc9, 0x0c, 0x2f, 0x3e,
+	0xb1, 0x45, 0x2b, 0x50, 0xe6, 0xaf, 0x10, 0xd8, 0xdc, 0x6e, 0x19, 0x4a, 0x86, 0xc9, 0x3e, 0xc3,
+	0x95, 0x0b, 0xe8, 0x1d, 0xd8, 0x10, 0x0f, 0x76, 0x4b, 0x33, 0xd4, 0xa6, 0xfe, 0x23, 0xf6, 0x56,
+	0x04, 0x60, 0xe9, 0x40, 0xd5, 0x9b, 0xec, 0x05, 0x48, 0x15, 0xb6, 0xe2, 0xa9, 0x1f, 0xcd, 0xc5,
+	0xf1, 0x22, 0x72, 0x69, 0xef, 0x1c, 0xd6, 0xd2, 0x83, 0x4c, 0xb4, 0x0b, 0x77, 0xea, 0x58, 0x6b,
+	0xe8, 0x56, 0x62, 0xa6, 0x98, 0xd6, 0xbe, 0x0c, 0x85, 0x63, 0xbd, 0xad, 0xca, 0x12, 0x5a, 0x03,
+	0x38, 0x52, 0xdb, 0x96, 0x86, 0x29, 0xa9, 0x9c, 0xa3, 0x0d, 0xab, 0x7a, 0xa4, 0x61, 0xbd, 0xae,
+	0x1a, 0xb6, 0xf6, 0xa2, 0x85, 0xb5, 0x76, 0x5b, 0xce, 0x53, 0xdd, 0x1b, 0x7a, 0xbb, 0x6e, 0x1e,
+	0x6b, 0x58, 0x2e, 0xd0, 0x5b, 0xcd, 0xb3, 0x7a, 0x4d, 0x2e, 0xee, 0xfd, 0x0c, 0xe4, 0x6c, 0xac,
+	0x53, 0x4b, 0x24, 0x37, 0x6e, 0x1f, 0x99, 0x8d, 0xec, 0xea, 0x33, 0x49, 0xda, 0x2f, 0x8d, 0xfa,
+	0x21, 0x36, 0x0d, 0xb3, 0xd3, 0x96, 0x25, 0xa4, 0xc0, 0xbb, 0xd3, 0x24, 0x6a, 0x92, 0x26, 0xb7,
+	0xf7, 0x27, 0x12, 0x6c, 0x4c, 0xf5, 0x96, 0xe8, 0x7d, 0xb8, 0x97, 0x79, 0x53, 0x34, 0x63, 0xff,
+	0x77, 0xe1, 0x56, 0x86, 0xa8, 0xad, 0x1b, 0x4f, 0x9b, 0x9a, 0xdd, 0x69, 0xd3, 0xca, 0x37, 0xfd,
+	0xb6, 0xe9, 0xa8, 0xd3, 0xb4, 0x74, 0x86, 0xcd, 0x51, 0xf3, 0x66, 0xb0, 0x1d, 0xa3, 0xa9, 0x1f,
+	0xe9, 0x96, 0xd6, 0x60, 0x14, 0xf9, 0xbd, 0x3f, 0x93, 0x40, 0xce, 0x76, 0x85, 0x2c, 0x44, 0xb0,
+	0x16, 0x73, 0xce, 0x0c, 0x2a, 0x56, 0x8a, 0xb5, 0x44, 0xcd, 0x3e, 0xd6, 0x1b, 0x2c, 0xbc, 0x6e,
+	0xc3, 0xcd, 0x04, 0xc2, 0x30, 0x13, 0xc8, 0x5c, 0x86, 0x0b, 0x6b, 0x07, 0x1d, 0xa3, 0xc1, 0x62,
+	0x2c, 0x8d, 0xe0, 0x21, 0xa1, 0x35, 0xe4, 0xc2, 0xde, 0x63, 0xa8, 0x8c, 0xf3, 0x3d, 0xda, 0x06,
+	0x74, 0xa0, 0xbf, 0xd0, 0x1a, 0x36, 0x56, 0x2d, 0xcd, 0x6e, 0x68, 0x07, 0x6a, 0xa7, 0x69, 0xc9,
+	0x37, 0x68, 0x64, 0xb4, 0x34, 0x6c, 0xb7, 0x34, 0xdc, 0x36, 0x0d, 0x59, 0x7a, 0xb5, 0xc4, 0xfe,
+	0xcf, 0xe0, 0xf1, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x73, 0x40, 0x5b, 0x91, 0x73, 0x30, 0x00,
+	0x00,
 }
