diff --git a/api/api.go b/api/api.go
index 3d487fa..94ceb5b 100644
--- a/api/api.go
+++ b/api/api.go
@@ -438,11 +438,6 @@
 		return fmt.Errorf("CheckOrderFulfillability: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	// Price is difficult to verify without knowing aggregator specific taxes/fees. We only check that it is present.
-	if resp.GetFeesAndTaxes() == nil || cmp.Diff(fpb.Price{}, *resp.GetFeesAndTaxes(), cmp.Comparer(proto.Equal)) == "" {
-		return fmt.Errorf("invalid response. CheckOrderFulfillability.FeesAndTaxes must be populated. Offending response: %v", resp)
-	}
-
 	orderFulfillability := resp.GetFulfillability()
 	// TODO(ccawdrey): Add validation cases for other OrderFulFillability enums.
 	if diff := cmp.Diff(orderFulfillability.GetResult(), mpb.OrderFulfillability_CAN_FULFILL); diff != "" {
diff --git a/feeds/feeds.pb.go b/feeds/feeds.pb.go
index 3766f8b..d64e87c 100644
--- a/feeds/feeds.pb.go
+++ b/feeds/feeds.pb.go
@@ -1,13 +1,39 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
-// source: feeds.proto
+// source: github.com/maps-booking-v3/feeds/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 (
-	fmt "fmt"
-	proto "github.com/golang/protobuf/proto"
-	math "math"
-)
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -39,7 +65,6 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
-
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -48,10 +73,7 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
-
-func (PriceType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{0}
-}
+func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
 
 // Defines whether a credit card is required in order to book an appointment.
 type RequireCreditCard int32
@@ -76,7 +98,6 @@
 	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,
@@ -86,10 +107,7 @@
 func (x RequireCreditCard) String() string {
 	return proto.EnumName(RequireCreditCard_name, int32(x))
 }
-
-func (RequireCreditCard) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{1}
-}
+func (RequireCreditCard) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []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
@@ -117,7 +135,6 @@
 	3: "ACTION_PLATFORM_ANDROID",
 	4: "ACTION_PLATFORM_IOS",
 }
-
 var ActionPlatform_value = map[string]int32{
 	"ACTION_PLATFORM_UNSPECIFIED":     0,
 	"ACTION_PLATFORM_WEB_APPLICATION": 1,
@@ -129,10 +146,7 @@
 func (x ActionPlatform) String() string {
 	return proto.EnumName(ActionPlatform_name, int32(x))
 }
-
-func (ActionPlatform) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{2}
-}
+func (ActionPlatform) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
 
 type FeedMetadata_ProcessingInstruction int32
 
@@ -153,7 +167,6 @@
 	1: "PROCESS_AS_COMPLETE",
 	2: "PROCESS_AS_INCREMENTAL",
 }
-
 var FeedMetadata_ProcessingInstruction_value = map[string]int32{
 	"PROCESS_UNKNOWN":        0,
 	"PROCESS_AS_COMPLETE":    1,
@@ -163,9 +176,8 @@
 func (x FeedMetadata_ProcessingInstruction) String() string {
 	return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x))
 }
-
 func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{0, 0}
+	return fileDescriptor0, []int{0, 0}
 }
 
 // Enum to indicate the prepayment type.
@@ -189,7 +201,6 @@
 	2: "OPTIONAL",
 	3: "NOT_SUPPORTED",
 }
-
 var Service_PrepaymentType_value = map[string]int32{
 	"PREPAYMENT_TYPE_UNSPECIFIED": 0,
 	"REQUIRED":                    1,
@@ -200,10 +211,7 @@
 func (x Service_PrepaymentType) String() string {
 	return proto.EnumName(Service_PrepaymentType_name, int32(x))
 }
-
-func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 0}
-}
+func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} }
 
 type Service_ServiceType int32
 
@@ -222,7 +230,6 @@
 	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,
@@ -234,9 +241,62 @@
 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
+
+const (
+	// Unused.
+	SchedulingRules_ADMISSION_POLICY_UNSPECIFIED SchedulingRules_AdmissionPolicy = 0
+	// Customers are required to be present at the start time of the
+	// availability slot, and the service is expected to finish at the
+	// end time of the slot.
+	// Examples of TIME_STRICT use cases:
+	//   * A tour that starts at 9am that requires all attendees to arrive
+	//     at the start time, and returns at around 12pm.
+	//   * A haircut reservation at 3pm on Saturday that will take approximately
+	//   30 minutes.
+	//   * A fitness class from 6pm to 8pm.
+	SchedulingRules_TIME_STRICT SchedulingRules_AdmissionPolicy = 1
+	// Customers can arrive at any time between the start and end time of the
+	// availability slot to use this booking.
+	//
+	// Examples of TIME_FLEXIBLE use cases:
+	//   * A museum ticket that can be used during any time on the purchase
+	//     date.
+	//   * An afternoon admission to an amusement park that can be used from
+	//     12pm to 9pm.
+	SchedulingRules_TIME_FLEXIBLE SchedulingRules_AdmissionPolicy = 2
+	// Customers need to arrive at the merchant at the start time of the
+	// availability slot but can leave any time they want.
+	//
+	// For example, in the museum admission scenario, a timed entry ticket
+	// for 10am requires the user to be at the museum at 10am. The start time of
+	// availability slots for this service represents the designated entry
+	// time. The end time, however, is used solely as a key to identify the
+	// availability slot for booking.
+	SchedulingRules_TIMED_ENTRY_WITH_FLEXIBLE_DURATION SchedulingRules_AdmissionPolicy = 3
+)
+
+var SchedulingRules_AdmissionPolicy_name = map[int32]string{
+	0: "ADMISSION_POLICY_UNSPECIFIED",
+	1: "TIME_STRICT",
+	2: "TIME_FLEXIBLE",
+	3: "TIMED_ENTRY_WITH_FLEXIBLE_DURATION",
+}
+var SchedulingRules_AdmissionPolicy_value = map[string]int32{
+	"ADMISSION_POLICY_UNSPECIFIED":       0,
+	"TIME_STRICT":                        1,
+	"TIME_FLEXIBLE":                      2,
+	"TIMED_ENTRY_WITH_FLEXIBLE_DURATION": 3,
+}
+
+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}
 }
 
 // Enum to indicate the type of field.
@@ -268,7 +328,6 @@
 	5: "DROPDOWN",
 	6: "BOOLEAN",
 }
-
 var ServiceIntakeFormField_FieldType_value = map[string]int32{
 	"FIELD_TYPE_UNSPECIFIED": 0,
 	"SHORT_ANSWER":           1,
@@ -282,14 +341,13 @@
 func (x ServiceIntakeFormField_FieldType) String() string {
 	return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x))
 }
-
 func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{11, 0}
+	return fileDescriptor0, []int{11, 0}
 }
 
 // Enum to indicate the type of this media source. Only photos are supported.
-// Please reach out to Google if supporting animations or videos is
-// important to your feature and we will find the best solution for you.
+// Please reach out to the Reserve with Google team if other media beyond
+// photos need to be supported.
 type RelatedMedia_MediaType int32
 
 const (
@@ -303,7 +361,6 @@
 	0: "TYPE_UNSPECIFIED",
 	1: "PHOTO",
 }
-
 var RelatedMedia_MediaType_value = map[string]int32{
 	"TYPE_UNSPECIFIED": 0,
 	"PHOTO":            1,
@@ -312,15 +369,12 @@
 func (x RelatedMedia_MediaType) String() string {
 	return proto.EnumName(RelatedMedia_MediaType_name, int32(x))
 }
-
-func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0}
-}
+func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []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,proto3,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"`
+	ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,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.
@@ -329,8 +383,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,proto3" json:"shard_number,omitempty"`
-	TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards,proto3" json:"total_shards,omitempty"`
+	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"`
 	// An identifier that must be consistent across all shards in a feed.
 	// This value must be globally unique across each feed type.
 	//
@@ -342,40 +396,17 @@
 	// total_shards).
 	//
 	// Feeds that span multiple shards must set this nonce to the same value.
-	Nonce uint64 `protobuf:"varint,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
+	Nonce uint64 `protobuf:"varint,5,opt,name=nonce" 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,proto3" json:"generation_timestamp,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	GenerationTimestamp int64 `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp" json:"generation_timestamp,omitempty"`
 }
 
-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) 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) GetProcessingInstruction() FeedMetadata_ProcessingInstruction {
 	if m != nil {
@@ -413,37 +444,14 @@
 }
 
 type AvailabilityFeed struct {
-	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:"-"`
+	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"`
 }
 
-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) 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) GetMetadata() *FeedMetadata {
 	if m != nil {
@@ -483,8 +491,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,proto3" json:"start_timestamp_restrict,omitempty"`
-	EndTimestampRestrict   int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict,proto3" json:"end_timestamp_restrict,omitempty"`
+	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"`
 	// If provided, the timestamp restricts will be applied only to the given
 	// merchant or service.
 	//
@@ -494,42 +502,19 @@
 	//
 	// 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,proto3" json:"merchant_id_restrict,omitempty"`
-	ServiceIdRestrict  string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict,proto3" json:"service_id_restrict,omitempty"`
+	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"`
 	// 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,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:"-"`
+	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"`
 }
 
-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) 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) GetStartTimestampRestrict() int64 {
 	if m != nil {
@@ -588,16 +573,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,proto3" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" 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,proto3" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" 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,proto3" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" 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,proto3" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" 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 ...}
@@ -609,12 +594,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,proto3" json:"spots_total,omitempty"`
-	SpotsOpen  int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
+	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"`
 	// 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,proto3" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag" 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.
@@ -625,7 +610,7 @@
 	//  availability { resources { staff_id: "2" staff_name: "John" }
 	//                 spots_total: 5 spots_open: 2 }
 	// (optional)
-	Resources *Resources `protobuf:"bytes,8,opt,name=resources,proto3" json:"resources,omitempty"`
+	Resources *Resources `protobuf:"bytes,8,opt,name=resources" 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.
@@ -638,28 +623,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,proto3" json:"payment_option_id,omitempty"`
+	PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId" 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,proto3" json:"recurrence,omitempty"`
+	Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence" 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,proto3" json:"schedule_exception,omitempty"`
+	ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException" 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,proto3" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,12,opt,name=deposit" 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,proto3" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,13,opt,name=no_show_fee,json=noShowFee" 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,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
+	RequireCreditCard RequireCreditCard `protobuf:"varint,14,opt,name=require_credit_card,json=requireCreditCard,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.
@@ -689,36 +674,16 @@
 	//   `availability {...}' (do not set ticket_type_id in this slot).
 	//
 	//  (optional)
-	TicketTypeId         []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	TicketTypeId []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId" 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"`
 }
 
-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) 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) GetMerchantId() string {
 	if m != nil {
@@ -825,6 +790,13 @@
 	return nil
 }
 
+func (m *Availability) GetSchedulingRuleOverrides() *Availability_SchedulingRuleOverrides {
+	if m != nil {
+		return m.SchedulingRuleOverrides
+	}
+	return nil
+}
+
 // Recurrence messages are optional, but allow for a more compact
 // representation of consistently repeating availability slots. They typically
 // represent a day's working schedule.
@@ -842,43 +814,20 @@
 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,proto3" json:"repeat_until_sec,omitempty"`
+	RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec" 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,proto3" json:"repeat_every_sec,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	RepeatEverySec int32 `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec" json:"repeat_every_sec,omitempty"`
 }
 
-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) 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) GetRepeatUntilSec() int64 {
 	if m != nil {
@@ -911,37 +860,16 @@
 	//
 	// 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,proto3" json:"time_range,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
-	XXX_unrecognized     []byte     `json:"-"`
-	XXX_sizecache        int32      `json:"-"`
+	TimeRange *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange" json:"time_range,omitempty"`
 }
 
 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 fileDescriptor_7aa923a38d4cd9d3, []int{3, 1}
+	return fileDescriptor0, []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
@@ -949,6 +877,31 @@
 	return nil
 }
 
+// Availability level scheduling rules.
+type Availability_SchedulingRuleOverrides struct {
+	// The last time (in seconds) that this slot is able to be booked. This
+	// timestamp must be before the start_sec of the slot to be respected
+	// (if users should be able to book after the start time, use service level
+	// 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"`
+}
+
+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}
+}
+
+func (m *Availability_SchedulingRuleOverrides) GetLastBookableSec() int64 {
+	if m != nil {
+		return m.LastBookableSec
+	}
+	return 0
+}
+
 // A resource is used to disambiguate availability slots from one another when
 // different staff, room or party_size values are part of the service.
 // Multiple slots for the same service and time interval can co-exist when they
@@ -959,57 +912,34 @@
 	// 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,proto3" json:"staff_id,omitempty"`
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" 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,proto3" json:"staff_name,omitempty"`
+	StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName" 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,proto3" json:"room_id,omitempty"`
+	RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId" 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,proto3" json:"room_name,omitempty"`
+	RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName" 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,proto3" json:"party_size,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	PartySize int32 `protobuf:"varint,5,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
 }
 
-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) 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) GetStaffId() string {
 	if m != nil {
@@ -1047,37 +977,14 @@
 }
 
 type TimeRange struct {
-	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:"-"`
+	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"`
 }
 
-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) 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) GetBeginSec() int64 {
 	if m != nil {
@@ -1094,37 +1001,14 @@
 }
 
 type ServiceFeed struct {
-	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:"-"`
+	Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
+	Service  []*Service    `protobuf:"bytes,2,rep,name=service" json:"service,omitempty"`
 }
 
-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) 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) GetMetadata() *FeedMetadata {
 	if m != nil {
@@ -1144,13 +1028,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,proto3" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" 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,proto3" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" 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,proto3" json:"name,omitempty"`
+	Name string `protobuf:"bytes,3,opt,name=name" 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
@@ -1219,91 +1103,68 @@
 	//   approach for you.
 	//
 	// (required)
-	Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+	Description string `protobuf:"bytes,4,opt,name=description" 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,proto3" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
 	// Rules to book/cancel an appointment. (optional)
-	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules,proto3" json:"rules,omitempty"`
+	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules" 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,proto3" json:"form,omitempty"` // Deprecated: Do not use.
+	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form" json:"form,omitempty"`
 	// 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,proto3" json:"intake_form,omitempty"`
+	IntakeForm *ServiceIntakeForm `protobuf:"bytes,20,opt,name=intake_form,json=intakeForm" 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,proto3" json:"per_ticket_intake_form,omitempty"`
+	PerTicketIntakeForm *ServiceIntakeForm `protobuf:"bytes,21,opt,name=per_ticket_intake_form,json=perTicketIntakeForm" 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,proto3,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
+	PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,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,proto3" json:"tax_rate,omitempty"`
+	TaxRate *TaxRate `protobuf:"bytes,9,opt,name=tax_rate,json=taxRate" 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,proto3" json:"payment_option_id,omitempty"`
+	PaymentOptionId []string `protobuf:"bytes,10,rep,name=payment_option_id,json=paymentOptionId" 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,proto3" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,11,opt,name=deposit" 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,proto3" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,12,opt,name=no_show_fee,json=noShowFee" 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,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"`
+	RequireCreditCard RequireCreditCard `protobuf:"varint,13,opt,name=require_credit_card,json=requireCreditCard,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,proto3" json:"action_link,omitempty"`
+	ActionLink []*ActionLink `protobuf:"bytes,14,rep,name=action_link,json=actionLink" 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,proto3,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"`
+	Type Service_ServiceType `protobuf:"varint,15,opt,name=type,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,proto3" json:"ticket_type,omitempty"`
+	TicketType []*TicketType `protobuf:"bytes,16,rep,name=ticket_type,json=ticketType" 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,proto3" json:"related_media,omitempty"`
+	RelatedMedia []*RelatedMedia `protobuf:"bytes,17,rep,name=related_media,json=relatedMedia" 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,proto3" json:"service_attribute_value_id,omitempty"`
+	ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId" 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,proto3" json:"waitlist_rules,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
-	XXX_unrecognized     []byte         `json:"-"`
-	XXX_sizecache        int32          `json:"-"`
+	WaitlistRules *WaitlistRules `protobuf:"bytes,19,opt,name=waitlist_rules,json=waitlistRules" json:"waitlist_rules,omitempty"`
 }
 
-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) 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) GetMerchantId() string {
 	if m != nil {
@@ -1347,7 +1208,6 @@
 	return nil
 }
 
-// Deprecated: Do not use.
 func (m *Service) GetForm() []*ServiceIntakeForm {
 	if m != nil {
 		return m.Form
@@ -1460,41 +1320,18 @@
 	// 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,proto3" json:"price_micros,omitempty"`
+	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros" 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,proto3" json:"currency_code,omitempty"`
+	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode" 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,proto3" json:"pricing_option_tag,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag" json:"pricing_option_tag,omitempty"`
 }
 
-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) 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) GetPriceMicros() int64 {
 	if m != nil {
@@ -1519,49 +1356,80 @@
 
 // The scheduling rules for a service.
 type SchedulingRules struct {
-	// The minimum advance notice in seconds required to book an appointment.
+	// The duration (in seconds) from when the last booking can be made to
+	// when the availability slot starts or ends.
+	//
+	// If "min_advance_booking" is set, the last bookable time is calculated as
+	// (<slot start time> - "min_advance_booking").
+	// If "min_booking_buffer_before_end_time" is set, the last bookable time is
+	// calculated as (<slot end time> - "min_booking_buffer_before_end_time").
+	// Note that the value of "min_booking_buffer_before_end_time" must be
+	// positive if set.
+	// If both are unset, the slot is bookable until the slot begin time.
+	//
+	// Examples:
+	//  * A haircut that needs to be booked at least 1 hour before the start time.
+	//      'scheduling_rules{ min_advance_booking: 3600 ...}`
+	//
+	//  * A museum where the last ticket can be purchased 30 mins before closing:
+	//     'scheduling_rules{ min_booking_buffer_before_end_time: 1800 ...}'
+	//
+	//  * A movie ticket that needs to be purchased before the start time.
+	//        'scheduling_rules{ ...}' (leave this field empty)
 	// (optional)
-	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,proto3" json:"min_advance_booking,omitempty"`
+	//
+	// Types that are valid to be assigned to MinBookingBuffer:
+	//	*SchedulingRules_MinAdvanceBooking
+	//	*SchedulingRules_MinBookingBufferBeforeEndTime
+	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,proto3" json:"min_advance_online_canceling,omitempty"`
+	MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling" 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,proto3" json:"late_cancellation_fee,omitempty"` // Deprecated: Do not use.
+	LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee" json:"late_cancellation_fee,omitempty"`
 	// The fee for no-show without canceling.
-	NoshowFee            *Price   `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee,proto3" json:"noshow_fee,omitempty"` // Deprecated: Do not use.
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee" json:"noshow_fee,omitempty"`
+	// 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"`
 }
 
-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) Reset()                    { *m = SchedulingRules{} }
+func (m *SchedulingRules) String() string            { return proto.CompactTextString(m) }
+func (*SchedulingRules) ProtoMessage()               {}
+func (*SchedulingRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+type isSchedulingRules_MinBookingBuffer interface {
+	isSchedulingRules_MinBookingBuffer()
 }
 
-func (m *SchedulingRules) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SchedulingRules.Unmarshal(m, b)
+type SchedulingRules_MinAdvanceBooking struct {
+	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,oneof"`
 }
-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)
+type SchedulingRules_MinBookingBufferBeforeEndTime struct {
+	MinBookingBufferBeforeEndTime int64 `protobuf:"varint,6,opt,name=min_booking_buffer_before_end_time,json=minBookingBufferBeforeEndTime,oneof"`
 }
 
-var xxx_messageInfo_SchedulingRules proto.InternalMessageInfo
+func (*SchedulingRules_MinAdvanceBooking) isSchedulingRules_MinBookingBuffer()             {}
+func (*SchedulingRules_MinBookingBufferBeforeEndTime) isSchedulingRules_MinBookingBuffer() {}
+
+func (m *SchedulingRules) GetMinBookingBuffer() isSchedulingRules_MinBookingBuffer {
+	if m != nil {
+		return m.MinBookingBuffer
+	}
+	return nil
+}
 
 func (m *SchedulingRules) GetMinAdvanceBooking() int64 {
-	if m != nil {
-		return m.MinAdvanceBooking
+	if x, ok := m.GetMinBookingBuffer().(*SchedulingRules_MinAdvanceBooking); ok {
+		return x.MinAdvanceBooking
+	}
+	return 0
+}
+
+func (m *SchedulingRules) GetMinBookingBufferBeforeEndTime() int64 {
+	if x, ok := m.GetMinBookingBuffer().(*SchedulingRules_MinBookingBufferBeforeEndTime); ok {
+		return x.MinBookingBufferBeforeEndTime
 	}
 	return 0
 }
@@ -1573,7 +1441,6 @@
 	return 0
 }
 
-// Deprecated: Do not use.
 func (m *SchedulingRules) GetLateCancellationFee() *Price {
 	if m != nil {
 		return m.LateCancellationFee
@@ -1581,7 +1448,6 @@
 	return nil
 }
 
-// Deprecated: Do not use.
 func (m *SchedulingRules) GetNoshowFee() *Price {
 	if m != nil {
 		return m.NoshowFee
@@ -1589,6 +1455,77 @@
 	return nil
 }
 
+func (m *SchedulingRules) GetAdmissionPolicy() SchedulingRules_AdmissionPolicy {
+	if m != nil {
+		return m.AdmissionPolicy
+	}
+	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{}{
+		(*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 {
@@ -1608,36 +1545,13 @@
 	// 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,proto3" json:"micro_percent,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	MicroPercent int32 `protobuf:"varint,1,opt,name=micro_percent,json=microPercent" json:"micro_percent,omitempty"`
 }
 
-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) 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) GetMicroPercent() int32 {
 	if m != nil {
@@ -1651,45 +1565,22 @@
 	// 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,proto3" json:"id,omitempty"`
+	Id string `protobuf:"bytes,5,opt,name=id" json:"id,omitempty"`
 	// The type of this field. (required)
-	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,proto3,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
+	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,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,proto3" json:"label,omitempty"`
+	Label string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"`
 	// For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate.
 	// (optional)
-	Value []string `protobuf:"bytes,3,rep,name=value,proto3" json:"value,omitempty"`
+	Value []string `protobuf:"bytes,3,rep,name=value" 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,proto3" json:"is_required,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	IsRequired bool `protobuf:"varint,4,opt,name=is_required,json=isRequired" json:"is_required,omitempty"`
 }
 
-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) 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) GetId() string {
 	if m != nil {
@@ -1729,42 +1620,19 @@
 // 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,proto3" json:"field,omitempty"`
+	Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field" 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,proto3" json:"first_time_customers,omitempty"` // Deprecated: Do not use.
+	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers" json:"first_time_customers,omitempty"`
 	// 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,proto3" json:"returning_customers,omitempty"` // Deprecated: Do not use.
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	ReturningCustomers bool `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers" json:"returning_customers,omitempty"`
 }
 
-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) 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) GetField() []*ServiceIntakeFormField {
 	if m != nil {
@@ -1773,7 +1641,6 @@
 	return nil
 }
 
-// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool {
 	if m != nil {
 		return m.FirstTimeCustomers
@@ -1781,7 +1648,6 @@
 	return false
 }
 
-// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetReturningCustomers() bool {
 	if m != nil {
 		return m.ReturningCustomers
@@ -1793,40 +1659,17 @@
 // for.
 type Deposit struct {
 	// Deposit amount.
-	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
+	Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
 	// Minimum advance cancellation for the deposit.
-	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
+	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" 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,proto3,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
-	XXX_unrecognized     []byte    `json:"-"`
-	XXX_sizecache        int32     `json:"-"`
+	DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"`
 }
 
-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) 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) GetDeposit() *Price {
 	if m != nil {
@@ -1854,38 +1697,15 @@
 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,proto3" json:"fee,omitempty"`
+	Fee *Price `protobuf:"bytes,1,opt,name=fee" json:"fee,omitempty"`
 	// Defines how the fee is determined from the availability.
-	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:"-"`
+	FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"`
 }
 
-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) 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) GetFee() *Price {
 	if m != nil {
@@ -1906,44 +1726,21 @@
 // performed on.
 type ActionLink struct {
 	// The entry point URL for this action link.
-	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	Url string `protobuf:"bytes,1,opt,name=url" 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,proto3" json:"language,omitempty"`
+	Language string `protobuf:"bytes,2,opt,name=language" 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,proto3" json:"restricted_country,omitempty"`
+	RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry" 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,proto3,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
-	XXX_unrecognized     []byte         `json:"-"`
-	XXX_sizecache        int32          `json:"-"`
+	Platform ActionPlatform `protobuf:"varint,4,opt,name=platform,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"`
 }
 
-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) 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) GetUrl() string {
 	if m != nil {
@@ -1980,41 +1777,18 @@
 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,proto3" json:"ticket_type_id,omitempty"`
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" 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,proto3" json:"price,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
 }
 
-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) 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) GetTicketTypeId() string {
 	if m != nil {
@@ -2041,41 +1815,23 @@
 // (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.
-	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	// 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"`
 	// Type of this media source.
-	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. (optional)
-	Caption              string   `protobuf:"bytes,3,opt,name=caption,proto3" json:"caption,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,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"`
+	// 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"`
 }
 
-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) 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) GetUrl() string {
 	if m != nil {
@@ -2098,44 +1854,49 @@
 	return ""
 }
 
+func (m *RelatedMedia) GetAttribution() *RelatedMedia_Attribution {
+	if m != nil {
+		return m.Attribution
+	}
+	return nil
+}
+
+// Attribution information for this media.
+type RelatedMedia_Attribution struct {
+	// The text to give credit to the photographer or agency. This text will be
+	// 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"`
+}
+
+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) GetText() string {
+	if m != nil {
+		return m.Text
+	}
+	return ""
+}
+
 // Identifies a particular value of a service attribute to be applied to a
 // Service.
 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,proto3" json:"attribute_id,omitempty"`
+	AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId" 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,proto3" json:"value_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	ValueId string `protobuf:"bytes,2,opt,name=value_id,json=valueId" json:"value_id,omitempty"`
 }
 
-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) 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) GetAttributeId() string {
 	if m != nil {
@@ -2156,43 +1917,20 @@
 	// 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,proto3" json:"min_party_size,omitempty"`
+	MinPartySize int32 `protobuf:"varint,1,opt,name=min_party_size,json=minPartySize" 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,proto3" json:"max_party_size,omitempty"`
+	MaxPartySize int32 `protobuf:"varint,2,opt,name=max_party_size,json=maxPartySize" 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,proto3" json:"supports_additional_request,omitempty"`
-	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
-	XXX_unrecognized          []byte   `json:"-"`
-	XXX_sizecache             int32    `json:"-"`
+	SupportsAdditionalRequest bool `protobuf:"varint,3,opt,name=supports_additional_request,json=supportsAdditionalRequest" json:"supports_additional_request,omitempty"`
 }
 
-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) 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) GetMinPartySize() int32 {
 	if m != nil {
@@ -2222,6 +1960,7 @@
 	proto.RegisterType((*Availability)(nil), "maps.booking.feeds.Availability")
 	proto.RegisterType((*Availability_Recurrence)(nil), "maps.booking.feeds.Availability.Recurrence")
 	proto.RegisterType((*Availability_ScheduleException)(nil), "maps.booking.feeds.Availability.ScheduleException")
+	proto.RegisterType((*Availability_SchedulingRuleOverrides)(nil), "maps.booking.feeds.Availability.SchedulingRuleOverrides")
 	proto.RegisterType((*Resources)(nil), "maps.booking.feeds.Resources")
 	proto.RegisterType((*TimeRange)(nil), "maps.booking.feeds.TimeRange")
 	proto.RegisterType((*ServiceFeed)(nil), "maps.booking.feeds.ServiceFeed")
@@ -2236,6 +1975,7 @@
 	proto.RegisterType((*ActionLink)(nil), "maps.booking.feeds.ActionLink")
 	proto.RegisterType((*TicketType)(nil), "maps.booking.feeds.TicketType")
 	proto.RegisterType((*RelatedMedia)(nil), "maps.booking.feeds.RelatedMedia")
+	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)
@@ -2244,165 +1984,183 @@
 	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("feeds.proto", fileDescriptor_7aa923a38d4cd9d3) }
+func init() { proto.RegisterFile("github.com/maps-booking-v3/feeds/feeds.proto", fileDescriptor0) }
 
-var fileDescriptor_7aa923a38d4cd9d3 = []byte{
-	// 2434 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcf, 0x73, 0xdb, 0xc6,
-	0xf5, 0x0f, 0x49, 0xd1, 0x24, 0x1f, 0x29, 0x09, 0x5a, 0xc9, 0x12, 0x6d, 0xc7, 0xb1, 0x82, 0x7c,
-	0x33, 0x5f, 0xd7, 0x4e, 0xd5, 0xd6, 0x4e, 0x32, 0xe9, 0xe4, 0x27, 0x4d, 0x82, 0x31, 0xc6, 0x14,
-	0x81, 0x2c, 0xa9, 0x28, 0xce, 0x65, 0x03, 0x01, 0x2b, 0x09, 0x63, 0x12, 0x60, 0x17, 0xa0, 0x6d,
-	0x65, 0x26, 0x97, 0x9e, 0x7a, 0xec, 0x4c, 0x6f, 0xed, 0x4c, 0xcf, 0xed, 0x34, 0x7f, 0x41, 0x4f,
-	0xed, 0xb5, 0xff, 0x4c, 0xff, 0x80, 0x5e, 0x3a, 0xfb, 0x16, 0x04, 0x40, 0x09, 0xb2, 0x9d, 0x26,
-	0x17, 0x19, 0xfb, 0xde, 0xe7, 0xbd, 0xdd, 0x7d, 0xbb, 0xef, 0xf3, 0xde, 0xd2, 0xd0, 0x3c, 0xe6,
-	0xdc, 0x8b, 0xf6, 0x66, 0x22, 0x8c, 0x43, 0x42, 0xa6, 0xce, 0x2c, 0xda, 0x3b, 0x0a, 0xc3, 0x27,
-	0x7e, 0x70, 0xb2, 0x87, 0x1a, 0xfd, 0xdf, 0x65, 0x68, 0xf5, 0x39, 0xf7, 0xf6, 0x79, 0xec, 0x78,
-	0x4e, 0xec, 0x90, 0x29, 0x6c, 0xcf, 0x44, 0xe8, 0xf2, 0x28, 0xf2, 0x83, 0x13, 0xe6, 0x07, 0x51,
-	0x2c, 0xe6, 0x6e, 0xec, 0x87, 0x41, 0xbb, 0xb4, 0x5b, 0xba, 0xbd, 0x76, 0xef, 0xfd, 0xbd, 0x8b,
-	0x5e, 0xf6, 0xf2, 0x1e, 0xf6, 0xec, 0xd4, 0xdc, 0xcc, 0xac, 0xe9, 0xd5, 0x59, 0x91, 0x98, 0xbc,
-	0x09, 0xad, 0xe8, 0xd4, 0x11, 0x1e, 0x0b, 0xe6, 0xd3, 0x23, 0x2e, 0xda, 0xe5, 0xdd, 0xd2, 0xed,
-	0x2a, 0x6d, 0xa2, 0x6c, 0x88, 0x22, 0x09, 0x89, 0xc3, 0xd8, 0x99, 0x30, 0x14, 0x46, 0xed, 0x8a,
-	0x82, 0xa0, 0x6c, 0x84, 0x22, 0xb2, 0x05, 0xd5, 0x20, 0x0c, 0x5c, 0xde, 0xae, 0xee, 0x96, 0x6e,
-	0xaf, 0x50, 0x35, 0x20, 0xbf, 0x82, 0xad, 0x13, 0x1e, 0x70, 0xe1, 0xc8, 0x99, 0x58, 0xec, 0x4f,
-	0x79, 0x14, 0x3b, 0xd3, 0x59, 0x7b, 0x65, 0xb7, 0x74, 0xbb, 0x42, 0x37, 0x33, 0xdd, 0x78, 0xa1,
-	0xd2, 0x1d, 0xb8, 0x5a, 0xb8, 0x7c, 0xb2, 0x09, 0xeb, 0x36, 0xb5, 0xba, 0xc6, 0x68, 0xc4, 0x0e,
-	0x86, 0x8f, 0x86, 0xd6, 0xe1, 0x50, 0x7b, 0x8d, 0xec, 0xc0, 0xe6, 0x42, 0xd8, 0x19, 0xb1, 0xae,
-	0xb5, 0x6f, 0x0f, 0x8c, 0xb1, 0xa1, 0x95, 0xc8, 0x75, 0xd8, 0xce, 0x29, 0xcc, 0x61, 0x97, 0x1a,
-	0xfb, 0xc6, 0x70, 0xdc, 0x19, 0x68, 0x65, 0xfd, 0xfb, 0x12, 0x68, 0x9d, 0xa7, 0x8e, 0x3f, 0x71,
-	0x8e, 0xfc, 0x89, 0x1f, 0x9f, 0xc9, 0xd8, 0x91, 0x8f, 0xa0, 0x3e, 0x4d, 0xe2, 0x87, 0x71, 0x6e,
-	0xde, 0xdb, 0x7d, 0x59, 0x9c, 0x69, 0x6a, 0x41, 0xbe, 0x86, 0xad, 0x88, 0x8b, 0xa7, 0xbe, 0xcb,
-	0x99, 0x93, 0xf3, 0xdc, 0x2e, 0xef, 0x56, 0x6e, 0x37, 0xef, 0xfd, 0x7f, 0x91, 0xa7, 0x91, 0xc2,
-	0xe7, 0x17, 0x42, 0x37, 0xa3, 0x8b, 0x42, 0xfd, 0x3f, 0x65, 0xd8, 0x2c, 0x00, 0x93, 0x0f, 0xa0,
-	0x1d, 0xc5, 0x8e, 0x88, 0xb3, 0xb8, 0x32, 0xc1, 0xa3, 0x58, 0xf8, 0x6e, 0x8c, 0x3b, 0xa8, 0xd0,
-	0x6d, 0xd4, 0xa7, 0xb1, 0xa5, 0x89, 0x96, 0xbc, 0x0b, 0xdb, 0x3c, 0xf0, 0x8a, 0xec, 0xca, 0x68,
-	0xb7, 0xc5, 0x03, 0xef, 0xa2, 0xd5, 0x2f, 0x61, 0x6b, 0xca, 0x85, 0x7b, 0xea, 0x04, 0x31, 0xf3,
-	0xbd, 0xcc, 0x46, 0xde, 0x86, 0x06, 0x25, 0x0b, 0x9d, 0xe9, 0xa5, 0x16, 0x7b, 0xb0, 0xd8, 0xd0,
-	0x92, 0xc1, 0x0a, 0x1a, 0x6c, 0x24, 0xaa, 0x1c, 0x7e, 0x00, 0x44, 0xf0, 0x28, 0x9c, 0x0b, 0x97,
-	0x47, 0x19, 0xfc, 0x0a, 0x9e, 0xc6, 0xcd, 0xa2, 0x18, 0xd2, 0x05, 0x9a, 0x6e, 0xa4, 0x86, 0xa9,
-	0xb7, 0x1e, 0xb4, 0x96, 0xce, 0xa2, 0x8a, 0x67, 0x51, 0x78, 0xaa, 0x4b, 0x87, 0xb0, 0x64, 0xa5,
-	0xff, 0xbd, 0x06, 0xad, 0xa5, 0xb0, 0xdf, 0x82, 0x66, 0x2e, 0x0c, 0x18, 0xe9, 0x06, 0x85, 0x6c,
-	0xf7, 0xe4, 0x26, 0x40, 0xb6, 0x6b, 0x8c, 0x68, 0x83, 0x36, 0xd2, 0xcd, 0x92, 0x1b, 0xd0, 0x50,
-	0xc7, 0x16, 0x71, 0x17, 0x63, 0x57, 0xa1, 0x75, 0x14, 0x8c, 0xb8, 0x2b, 0x33, 0xcd, 0x9b, 0x27,
-	0xe9, 0x22, 0xf5, 0x2a, 0x51, 0x9a, 0x0b, 0x99, 0x84, 0xdc, 0x82, 0x66, 0x34, 0x0b, 0xe3, 0x88,
-	0x61, 0xfa, 0x61, 0xbe, 0x55, 0x28, 0xa0, 0x68, 0x2c, 0x25, 0x38, 0x3f, 0x02, 0xc2, 0x19, 0x0f,
-	0x30, 0x7a, 0x15, 0xda, 0x40, 0x89, 0x35, 0xe3, 0x01, 0xf9, 0x19, 0x68, 0xf9, 0x0d, 0xb2, 0xd8,
-	0x39, 0x69, 0xd7, 0x70, 0x91, 0xeb, 0x79, 0xf9, 0xd8, 0x39, 0x21, 0x1f, 0x42, 0x23, 0x0d, 0x6b,
-	0xbb, 0xfe, 0x2a, 0xc7, 0x90, 0xe1, 0xc9, 0x1d, 0xd8, 0x98, 0x39, 0x67, 0x53, 0x1e, 0xc4, 0x2c,
-	0x9c, 0xe1, 0x86, 0x7c, 0xaf, 0xdd, 0xd8, 0xad, 0xc8, 0x89, 0x12, 0x85, 0x85, 0x72, 0xd3, 0x23,
-	0x8f, 0x00, 0x04, 0x77, 0xe7, 0x42, 0x70, 0x49, 0x21, 0x80, 0x33, 0xdd, 0x7d, 0xd9, 0x41, 0xed,
-	0xd1, 0xd4, 0x84, 0xe6, 0xcc, 0x89, 0x03, 0x24, 0x72, 0x4f, 0xb9, 0x37, 0x9f, 0x70, 0xc6, 0x9f,
-	0xbb, 0x1c, 0x27, 0x69, 0x37, 0xf1, 0xf4, 0xef, 0xbd, 0xd4, 0xe9, 0x28, 0x31, 0x35, 0x16, 0x96,
-	0x74, 0x23, 0x3a, 0x2f, 0x22, 0xef, 0x41, 0xcd, 0xe3, 0xb3, 0x30, 0xf2, 0xe3, 0x76, 0x0b, 0x17,
-	0x7b, 0xa3, 0xc8, 0x6f, 0x4f, 0x41, 0xe8, 0x02, 0x4b, 0x3e, 0x86, 0x66, 0x10, 0xb2, 0xe8, 0x34,
-	0x7c, 0xc6, 0x8e, 0x39, 0x6f, 0xaf, 0x5e, 0x1e, 0xd1, 0x61, 0x38, 0x3a, 0x0d, 0x9f, 0xf5, 0x39,
-	0xa7, 0x8d, 0x60, 0xf1, 0x49, 0x0e, 0x60, 0x53, 0xf0, 0xdf, 0xcc, 0x7d, 0xc1, 0x99, 0x2b, 0xb8,
-	0xe7, 0xc7, 0xcc, 0x75, 0x84, 0xd7, 0x5e, 0xc3, 0xaa, 0xf0, 0x76, 0xf1, 0xc1, 0x20, 0xbc, 0x8b,
-	0xe8, 0xae, 0x23, 0x3c, 0x99, 0x27, 0xe7, 0x44, 0xe4, 0xff, 0x60, 0x2d, 0xf6, 0xdd, 0x27, 0x3c,
-	0x66, 0xf1, 0xd9, 0x0c, 0xef, 0xec, 0x3a, 0x9e, 0x52, 0x4b, 0x49, 0xc7, 0x67, 0x33, 0x6e, 0x7a,
-	0xd7, 0xbf, 0x01, 0xc8, 0xe2, 0x4d, 0x6e, 0x83, 0x26, 0xf8, 0x8c, 0x3b, 0x31, 0x9b, 0x07, 0xb1,
-	0x3f, 0xc1, 0xbb, 0xaa, 0x38, 0x67, 0x4d, 0xc9, 0x0f, 0xa4, 0x58, 0x5e, 0xd7, 0x0c, 0xc9, 0x9f,
-	0x72, 0x71, 0x86, 0x48, 0x55, 0x62, 0x12, 0xa4, 0x21, 0xc5, 0x23, 0xee, 0x5e, 0xff, 0x02, 0x36,
-	0x2e, 0x04, 0x9f, 0x7c, 0x04, 0x20, 0x69, 0x8a, 0x09, 0x27, 0x38, 0xe1, 0x09, 0x31, 0x17, 0x46,
-	0x4c, 0xf2, 0x15, 0x95, 0x20, 0xda, 0x88, 0x17, 0x9f, 0xfa, 0x1f, 0x4b, 0xd0, 0x48, 0x2f, 0x27,
-	0xb9, 0x06, 0x32, 0xd1, 0x8e, 0x8f, 0xb3, 0xb4, 0xad, 0xe1, 0x38, 0xc9, 0x59, 0x54, 0x05, 0xce,
-	0x94, 0xa7, 0x39, 0x2b, 0x25, 0x43, 0x67, 0xca, 0xc9, 0x0e, 0xd4, 0x44, 0x18, 0x4e, 0xa5, 0xa1,
-	0x62, 0xbb, 0x2b, 0x72, 0xa8, 0x92, 0x19, 0x15, 0x68, 0xa6, 0x78, 0xad, 0x2e, 0x05, 0x68, 0x75,
-	0x13, 0x60, 0xe6, 0x88, 0xf8, 0x8c, 0x45, 0xfe, 0xb7, 0xaa, 0x30, 0x56, 0x69, 0x03, 0x25, 0x23,
-	0xff, 0x5b, 0xae, 0x77, 0xa0, 0x91, 0x2e, 0x5a, 0x3a, 0x3a, 0xe2, 0x27, 0x7e, 0x90, 0x8b, 0x64,
-	0x1d, 0x05, 0x32, 0x86, 0x3b, 0x50, 0x93, 0x7c, 0xbd, 0x08, 0x5d, 0x85, 0x5e, 0xe1, 0x81, 0x37,
-	0xe2, 0xae, 0xfe, 0xdb, 0x12, 0x34, 0x93, 0xd2, 0xf0, 0x13, 0x14, 0xb1, 0xf7, 0xa0, 0x96, 0xd0,
-	0x54, 0x52, 0xb7, 0x6e, 0xbc, 0xa0, 0x6e, 0xd1, 0x05, 0x56, 0xff, 0x73, 0x0b, 0x6a, 0x89, 0xf0,
-	0x47, 0x93, 0x23, 0x81, 0x15, 0x0c, 0xa5, 0x8a, 0x32, 0x7e, 0x93, 0x5d, 0x68, 0x7a, 0x3c, 0x72,
-	0x85, 0xaf, 0x12, 0x59, 0x45, 0x39, 0x2f, 0x22, 0xbf, 0x80, 0xea, 0x4c, 0xf8, 0x49, 0xf3, 0xd1,
-	0xbc, 0x77, 0xad, 0x68, 0xd9, 0xb6, 0x04, 0x50, 0x85, 0x23, 0xbf, 0x86, 0xaa, 0x98, 0x4f, 0x78,
-	0x94, 0xd4, 0x96, 0xb7, 0x0a, 0xf7, 0xa9, 0xee, 0xa2, 0x1f, 0x9c, 0x50, 0x09, 0xa5, 0xca, 0x82,
-	0x7c, 0x0c, 0x2b, 0xc7, 0xa1, 0x98, 0xb6, 0x6b, 0x18, 0xa1, 0xb7, 0x5f, 0x10, 0x21, 0x33, 0x88,
-	0x9d, 0x27, 0xbc, 0x1f, 0x8a, 0xe9, 0x83, 0x72, 0xbb, 0x44, 0xd1, 0x8c, 0xf4, 0xa1, 0xe9, 0xa3,
-	0x9c, 0xa1, 0x97, 0x2d, 0x9c, 0xff, 0xd5, 0xbc, 0x50, 0xf0, 0xd3, 0x6f, 0xf2, 0x35, 0x6c, 0xcf,
-	0xb8, 0x60, 0x49, 0xe2, 0xe6, 0x5d, 0x5e, 0xfd, 0x21, 0x2e, 0x37, 0x67, 0x5c, 0x8c, 0xd1, 0x47,
-	0x26, 0x24, 0x23, 0x58, 0x9f, 0x09, 0xbe, 0x20, 0x6f, 0x49, 0x0a, 0x48, 0xfe, 0x6b, 0xf7, 0xee,
-	0xbc, 0xc0, 0xe9, 0x9e, 0x9d, 0x9a, 0x48, 0xc6, 0xa0, 0x6b, 0xb3, 0xa5, 0x31, 0x79, 0x1f, 0xea,
-	0xb1, 0xf3, 0x9c, 0x09, 0x27, 0xe6, 0xed, 0xc6, 0xe5, 0x9c, 0x39, 0x76, 0x9e, 0x53, 0x27, 0xe6,
-	0xb4, 0x16, 0xab, 0x8f, 0xe2, 0x32, 0x02, 0xc5, 0x65, 0x24, 0x47, 0xcb, 0xcd, 0xff, 0x9d, 0x96,
-	0x5b, 0x3f, 0x0d, 0x2d, 0xaf, 0xfe, 0x48, 0x5a, 0xfe, 0x14, 0x9a, 0x0e, 0x76, 0xbe, 0x6c, 0xe2,
-	0x07, 0x4f, 0xda, 0x6b, 0x78, 0xdf, 0xde, 0x28, 0xac, 0x5f, 0x08, 0x1b, 0xf8, 0xc1, 0x13, 0x0a,
-	0x4e, 0xfa, 0x4d, 0x3e, 0x84, 0x15, 0x3c, 0xbb, 0x75, 0x5c, 0xc8, 0x8b, 0x7a, 0xd0, 0xc5, 0xbf,
-	0x78, 0x70, 0x68, 0x24, 0x67, 0xcf, 0x15, 0x85, 0xb6, 0x76, 0xf9, 0xec, 0xe3, 0xb4, 0x4a, 0x50,
-	0xc8, 0x2a, 0x06, 0x31, 0x60, 0x55, 0xf0, 0x89, 0x13, 0x73, 0x8f, 0x4d, 0xb9, 0xe7, 0x3b, 0xed,
-	0x8d, 0xcb, 0xdb, 0x2f, 0xaa, 0x80, 0xfb, 0x12, 0x47, 0x5b, 0x22, 0x37, 0x22, 0xa7, 0x70, 0x3d,
-	0x6d, 0xac, 0xe3, 0x58, 0xf8, 0x47, 0xf3, 0x98, 0xb3, 0xa7, 0xce, 0x64, 0x8e, 0xfc, 0x41, 0xd0,
-	0xe7, 0xdd, 0x17, 0xb5, 0xd7, 0x0b, 0xa3, 0x2f, 0xa5, 0x8d, 0xe9, 0xd1, 0x9d, 0xa8, 0x58, 0x41,
-	0x1e, 0xc2, 0xda, 0x33, 0xc7, 0x8f, 0x27, 0x7e, 0x14, 0x33, 0x45, 0x0e, 0x9b, 0x78, 0x11, 0xde,
-	0x2c, 0xf2, 0x7e, 0x98, 0x20, 0x15, 0x35, 0xac, 0x3e, 0xcb, 0x0f, 0xf5, 0x6f, 0x60, 0x6d, 0x39,
-	0x19, 0xc8, 0x2d, 0xb8, 0x61, 0x53, 0xc3, 0xee, 0x3c, 0x96, 0x6f, 0x10, 0x36, 0x7e, 0x6c, 0x1b,
-	0xec, 0x60, 0x38, 0xb2, 0x8d, 0xae, 0xd9, 0x37, 0x8d, 0x9e, 0xf6, 0x1a, 0x69, 0x41, 0x9d, 0x1a,
-	0x5f, 0x1c, 0x98, 0xd4, 0xe8, 0x69, 0x25, 0x39, 0xb2, 0xec, 0xb1, 0x69, 0x0d, 0xe5, 0x73, 0x85,
-	0x6c, 0xc0, 0xea, 0xd0, 0x1a, 0xb3, 0xd1, 0x81, 0x6d, 0x5b, 0x74, 0x6c, 0xf4, 0xb4, 0x8a, 0xfe,
-	0xb7, 0x8c, 0xf7, 0xd1, 0xff, 0xeb, 0xd0, 0x1e, 0x19, 0xf4, 0x4b, 0xb3, 0x6b, 0x14, 0x39, 0x7f,
-	0x0b, 0x6e, 0x2d, 0x69, 0x7b, 0xe6, 0xd0, 0x1c, 0x7e, 0xce, 0xa8, 0x21, 0xa5, 0x1d, 0x39, 0x8f,
-	0x56, 0x22, 0x6f, 0xc0, 0xf5, 0x25, 0x50, 0xdf, 0xb2, 0x7a, 0xcc, 0xa2, 0x3d, 0x83, 0x9a, 0xc3,
-	0xcf, 0xb5, 0x32, 0xb9, 0x09, 0xd7, 0x96, 0xf4, 0xc6, 0x97, 0xb8, 0x15, 0xb3, 0xfb, 0xc8, 0x18,
-	0x6b, 0x15, 0xf9, 0xde, 0x5a, 0x52, 0x8f, 0xa9, 0x69, 0xb3, 0xb1, 0x75, 0x40, 0xb5, 0x15, 0xfd,
-	0x3b, 0xa8, 0x22, 0xfb, 0xca, 0xee, 0x16, 0xf9, 0x97, 0x4d, 0x7d, 0x57, 0x84, 0x51, 0x52, 0xe7,
-	0x9a, 0x28, 0xdb, 0x47, 0x11, 0x79, 0x0b, 0x56, 0x93, 0x26, 0xe3, 0x8c, 0xb9, 0xa1, 0xb7, 0xa8,
-	0xc5, 0xad, 0x85, 0xb0, 0x1b, 0x7a, 0x9c, 0xbc, 0x03, 0x44, 0xda, 0xc8, 0xe7, 0x71, 0xc2, 0x09,
-	0xb2, 0x89, 0x55, 0x35, 0x43, 0x4b, 0x34, 0x8a, 0x14, 0xc6, 0xce, 0x89, 0xfe, 0x87, 0x32, 0xac,
-	0x9f, 0x23, 0x73, 0xf9, 0x32, 0x99, 0xfa, 0x01, 0x73, 0xbc, 0xa7, 0x4e, 0xe0, 0x72, 0x96, 0x1c,
-	0x6e, 0xb2, 0xa0, 0x8d, 0xa9, 0x1f, 0x74, 0x94, 0xe6, 0x81, 0x52, 0x90, 0x4f, 0xe1, 0xf5, 0x3c,
-	0x3e, 0x0c, 0x26, 0x7e, 0xc0, 0x99, 0x2b, 0x07, 0xd2, 0x69, 0x52, 0x96, 0xaf, 0x65, 0x86, 0x16,
-	0x22, 0xba, 0x0b, 0x00, 0xf9, 0x02, 0xae, 0xca, 0x5b, 0x9d, 0x98, 0x4c, 0x54, 0x87, 0x2f, 0xd9,
-	0xa6, 0xf2, 0x92, 0x92, 0x85, 0xb5, 0x63, 0x53, 0xda, 0x76, 0x73, 0xa6, 0x92, 0x77, 0x3e, 0x02,
-	0x08, 0xc2, 0x94, 0xb5, 0x56, 0x5e, 0xc5, 0x4f, 0x43, 0x19, 0xf4, 0x39, 0xd7, 0xf7, 0xa0, 0x96,
-	0x70, 0xad, 0x8c, 0x39, 0x1e, 0x08, 0x9b, 0x71, 0xe1, 0xf2, 0x40, 0xbd, 0x1e, 0xab, 0xb4, 0x85,
-	0x42, 0x5b, 0xc9, 0xf4, 0x7f, 0x95, 0x61, 0xfb, 0x42, 0xfd, 0xe8, 0xfb, 0x7c, 0xe2, 0x91, 0x35,
-	0x28, 0xfb, 0x1e, 0xd6, 0xde, 0x06, 0x2d, 0xfb, 0x32, 0x93, 0x14, 0xf1, 0xa8, 0x9f, 0x2b, 0xde,
-	0x7d, 0xa5, 0x4a, 0x84, 0x9e, 0xf6, 0xf0, 0x6f, 0x8e, 0x85, 0xb6, 0xa0, 0x3a, 0x71, 0x8e, 0xf8,
-	0x24, 0xb9, 0x05, 0x6a, 0x20, 0xa5, 0xc8, 0x00, 0xed, 0x0a, 0x96, 0x01, 0x35, 0x90, 0xad, 0x87,
-	0x2f, 0x5f, 0x8d, 0xc8, 0xa3, 0x1e, 0xc6, 0xa3, 0x4e, 0xc1, 0x8f, 0x12, 0xb2, 0xf5, 0xf4, 0xdf,
-	0x95, 0xa0, 0x91, 0x4e, 0x20, 0x2f, 0x6c, 0xdf, 0x34, 0x06, 0xbd, 0xa2, 0x84, 0xd1, 0xa0, 0x35,
-	0x7a, 0x68, 0xd1, 0x31, 0xeb, 0x0c, 0x47, 0x87, 0x06, 0xd5, 0x4a, 0x64, 0x15, 0x1a, 0x76, 0x87,
-	0x76, 0x3e, 0xa7, 0x1d, 0xfb, 0xa1, 0x56, 0x26, 0x9b, 0xb0, 0xbe, 0x7f, 0x30, 0x18, 0x9b, 0xf6,
-	0xc0, 0x60, 0xdd, 0x87, 0x96, 0xd9, 0x35, 0xb4, 0x0a, 0x59, 0x03, 0xe8, 0x3e, 0x34, 0xba, 0x8f,
-	0x1e, 0x58, 0x5f, 0x19, 0x23, 0x6d, 0x45, 0x66, 0x71, 0x8f, 0x5a, 0x76, 0xcf, 0x3a, 0x1c, 0x6a,
-	0x55, 0xd2, 0x84, 0xda, 0x03, 0xcb, 0x1a, 0x18, 0x9d, 0xa1, 0x76, 0x45, 0xff, 0x47, 0x09, 0x36,
-	0x2e, 0x84, 0x80, 0x7c, 0x06, 0xd5, 0x63, 0xb9, 0xbe, 0x76, 0x09, 0x69, 0xed, 0xce, 0xab, 0x07,
-	0x8e, 0x2a, 0x43, 0xf2, 0x2e, 0x6c, 0x1d, 0xfb, 0x22, 0x52, 0x3f, 0x09, 0x30, 0x77, 0x1e, 0xc5,
-	0xe1, 0x94, 0x8b, 0x08, 0xc3, 0x57, 0xc7, 0x1b, 0x40, 0x50, 0x2f, 0xfb, 0xce, 0xee, 0x42, 0x4b,
-	0xee, 0xcb, 0x02, 0x16, 0xcf, 0x45, 0x20, 0x13, 0x2a, 0x33, 0xaa, 0x64, 0x46, 0xa9, 0x3a, 0x35,
-	0xd2, 0xff, 0x59, 0x82, 0x5a, 0x52, 0x49, 0xc9, 0xfd, 0xac, 0xee, 0x96, 0x5e, 0xd6, 0x81, 0xa5,
-	0x55, 0xf7, 0x5c, 0x4a, 0x2d, 0x25, 0x46, 0xd6, 0xe9, 0xe6, 0x52, 0x2a, 0x7f, 0xff, 0x65, 0x57,
-	0xfc, 0x19, 0xb4, 0x12, 0x5f, 0xaa, 0x46, 0x55, 0xf0, 0xba, 0xdd, 0xbc, 0x74, 0x6a, 0xbc, 0x57,
-	0xcd, 0xc4, 0x44, 0x0e, 0x74, 0x01, 0x8d, 0xb4, 0xa2, 0x93, 0xbb, 0x50, 0x91, 0x79, 0xf4, 0xd2,
-	0x0d, 0x48, 0x14, 0xf9, 0x00, 0xea, 0xc7, 0x9c, 0xff, 0x80, 0x79, 0x6b, 0xc7, 0x1c, 0x3f, 0xf4,
-	0xbf, 0x96, 0x00, 0xb2, 0x82, 0x4d, 0x34, 0xa8, 0xcc, 0xc5, 0x24, 0x69, 0x94, 0xe5, 0x27, 0xb9,
-	0x0e, 0xf5, 0x89, 0x13, 0x9c, 0xcc, 0x9d, 0x93, 0x05, 0xf9, 0xa5, 0x63, 0xf2, 0x73, 0xfc, 0x81,
-	0x04, 0x7f, 0xde, 0xe0, 0x1e, 0x73, 0xc3, 0x79, 0x10, 0x8b, 0xb3, 0x24, 0x0d, 0x36, 0x32, 0x4d,
-	0x57, 0x29, 0xc8, 0x27, 0x50, 0x9f, 0x4d, 0x9c, 0x18, 0xdb, 0xc2, 0x15, 0x5c, 0xa5, 0x7e, 0x79,
-	0xff, 0x60, 0x27, 0x48, 0x9a, 0xda, 0xe8, 0xbf, 0x2f, 0x01, 0x64, 0xe5, 0xbd, 0xe0, 0xa1, 0xa8,
-	0x96, 0xbd, 0xf4, 0x50, 0x24, 0x77, 0x61, 0x23, 0x3a, 0x0d, 0x45, 0xcc, 0xf2, 0x4d, 0xbb, 0xda,
-	0x88, 0x86, 0x8a, 0x5e, 0x51, 0xe7, 0x5e, 0x79, 0xb5, 0xce, 0x5d, 0xff, 0x4b, 0x09, 0x5a, 0xf9,
-	0x76, 0xa1, 0x20, 0x80, 0x9f, 0x24, 0xf4, 0x53, 0xbe, 0xbc, 0x67, 0xcd, 0x7b, 0xd8, 0xc3, 0xbf,
-	0x39, 0xd2, 0x69, 0x43, 0xcd, 0x75, 0xd4, 0xb2, 0x55, 0x49, 0x59, 0x0c, 0xf5, 0x77, 0xa0, 0x91,
-	0x82, 0xc9, 0x16, 0x68, 0x05, 0xd4, 0xd1, 0x80, 0xaa, 0xfd, 0xd0, 0x1a, 0x5b, 0x5a, 0x49, 0x3f,
-	0x84, 0x9d, 0x4b, 0x9a, 0x10, 0x59, 0x08, 0xb3, 0x6e, 0x26, 0x8d, 0x63, 0x33, 0x95, 0x99, 0x9e,
-	0x7c, 0xac, 0xa6, 0x6d, 0x8e, 0x8a, 0x5e, 0xed, 0xa9, 0xb2, 0xd6, 0xff, 0x54, 0x82, 0xd5, 0xa5,
-	0x06, 0x44, 0x9e, 0x8c, 0xcc, 0xa5, 0xdc, 0x6b, 0x33, 0xa5, 0xf0, 0xc0, 0x5e, 0x3c, 0x38, 0x11,
-	0xe5, 0x3c, 0xcf, 0xa3, 0xca, 0x09, 0xca, 0x79, 0x9e, 0xa1, 0x3e, 0x81, 0x1b, 0xd1, 0x7c, 0x36,
-	0x0b, 0x45, 0x1c, 0x31, 0xc7, 0xf3, 0x7c, 0xb9, 0x73, 0x67, 0x82, 0xc4, 0xca, 0x23, 0xf5, 0x6b,
-	0x5f, 0x9d, 0x5e, 0x5b, 0x40, 0x3a, 0x29, 0x82, 0x2a, 0xc0, 0x9d, 0xfb, 0xd0, 0x48, 0xaf, 0x3d,
-	0xd9, 0x06, 0xd2, 0x37, 0xbf, 0x32, 0x7a, 0x8c, 0x76, 0xc6, 0x06, 0xeb, 0x19, 0xfd, 0xce, 0xc1,
-	0x60, 0xac, 0xbd, 0x26, 0xb9, 0xd2, 0x36, 0x28, 0xb3, 0x0d, 0x3a, 0x92, 0xdd, 0xc7, 0x9d, 0xef,
-	0x60, 0xe3, 0x42, 0x53, 0x2c, 0xfb, 0x96, 0xa4, 0x29, 0x62, 0x5d, 0x6a, 0xf4, 0xcc, 0x31, 0xeb,
-	0x76, 0x68, 0xef, 0x62, 0x73, 0x53, 0x04, 0xea, 0x5a, 0xc3, 0x9e, 0x99, 0xb4, 0x50, 0xd8, 0xdc,
-	0x14, 0x81, 0x3a, 0x83, 0xc3, 0xce, 0xe3, 0x91, 0x56, 0xbe, 0xf3, 0x7d, 0x09, 0xd6, 0x96, 0xb3,
-	0x40, 0xb6, 0x6c, 0x9d, 0xae, 0x74, 0xc0, 0xec, 0x41, 0x67, 0xdc, 0xb7, 0xe8, 0xfe, 0xc5, 0x89,
-	0xcf, 0x03, 0x0e, 0x8d, 0x07, 0xac, 0x63, 0xdb, 0x03, 0xb3, 0x9b, 0xeb, 0xaa, 0xce, 0x83, 0xf6,
-	0xad, 0x07, 0xe6, 0xc0, 0x90, 0x58, 0xad, 0x4c, 0x6e, 0xc0, 0xce, 0x79, 0x7d, 0x67, 0xd8, 0xa3,
-	0x96, 0xd9, 0xd3, 0x2a, 0x64, 0x07, 0x36, 0xcf, 0x2b, 0x4d, 0x6b, 0xa4, 0xad, 0x1c, 0x5d, 0xc1,
-	0xff, 0x4d, 0xb8, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x3f, 0x56, 0x84, 0x5c, 0x18,
+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,
 }
diff --git a/feeds/feeds.proto b/feeds/feeds.proto
index f3c863d..bfcf4d5 100644
--- a/feeds/feeds.proto
+++ b/feeds/feeds.proto
@@ -273,6 +273,21 @@
   //
   //  (optional)
   repeated string ticket_type_id = 15;
+
+  // Availability level scheduling rules.
+  message SchedulingRuleOverrides {
+    // The last time (in seconds) that this slot is able to be booked. This
+    // timestamp must be before the start_sec of the slot to be respected
+    // (if users should be able to book after the start time, use service level
+    // SchedulingRules.min_booking_before_end_time). If present, will override
+    // anything specified in the min_booking_buffer of the corresponding
+    // Service's SchedulingRules.
+    int64 last_bookable_sec = 1;
+  }
+
+  // Availability scheduling rules. If fields are populated, they will override
+  // any corresponding scheduling rules on the service-level SchedulingRules.
+  SchedulingRuleOverrides scheduling_rule_overrides = 16;
 }
 
 // A resource is used to disambiguate availability slots from one another when
@@ -510,9 +525,38 @@
 }
 // The scheduling rules for a service.
 message SchedulingRules {
-  // The minimum advance notice in seconds required to book an appointment.
+  // The duration (in seconds) from when the last booking can be made to
+  // when the availability slot starts or ends.
+  //
+  // If "min_advance_booking" is set, the last bookable time is calculated as
+  // (<slot start time> - "min_advance_booking").
+  // If "min_booking_buffer_before_end_time" is set, the last bookable time is
+  // calculated as (<slot end time> - "min_booking_buffer_before_end_time").
+  // Note that the value of "min_booking_buffer_before_end_time" must be
+  // positive if set.
+  // If both are unset, the slot is bookable until the slot begin time.
+  //
+  // Examples:
+  //  * A haircut that needs to be booked at least 1 hour before the start time.
+  //      'scheduling_rules{ min_advance_booking: 3600 ...}`
+  //
+  //  * A museum where the last ticket can be purchased 30 mins before closing:
+  //     'scheduling_rules{ min_booking_buffer_before_end_time: 1800 ...}'
+  //
+  //  * A movie ticket that needs to be purchased before the start time.
+  //        'scheduling_rules{ ...}' (leave this field empty)
   // (optional)
-  int64 min_advance_booking = 1;
+  oneof min_booking_buffer {
+    // The duration (in seconds) from when the last booking can be made to
+    // when the availability slot starts.
+    int64 min_advance_booking = 1;
+
+    // The duration (in seconds) from when the last booking can be made to
+    // when the availability slot ends. If this field is set, the
+    // "admission_policy" field must be set to TIME_FLEXIBLE to indicate that
+    // users can use the purchased tickets after slots start.
+    int64 min_booking_buffer_before_end_time = 6;
+  }
 
   // The minimum advance notice in seconds required to cancel a booked
   // appointment online. (optional)
@@ -523,6 +567,47 @@
 
   // The fee for no-show without canceling.
   Price noshow_fee = 4 [deprecated = true];
+
+  // The admission policy of this service.
+  enum AdmissionPolicy {
+    // Unused.
+    ADMISSION_POLICY_UNSPECIFIED = 0;
+
+    // Customers are required to be present at the start time of the
+    // availability slot, and the service is expected to finish at the
+    // end time of the slot.
+    // Examples of TIME_STRICT use cases:
+    //   * A tour that starts at 9am that requires all attendees to arrive
+    //     at the start time, and returns at around 12pm.
+    //   * A haircut reservation at 3pm on Saturday that will take approximately
+    //   30 minutes.
+    //   * A fitness class from 6pm to 8pm.
+    TIME_STRICT = 1;
+
+    // Customers can arrive at any time between the start and end time of the
+    // availability slot to use this booking.
+    //
+    // Examples of TIME_FLEXIBLE use cases:
+    //   * A museum ticket that can be used during any time on the purchase
+    //     date.
+    //   * An afternoon admission to an amusement park that can be used from
+    //     12pm to 9pm.
+    TIME_FLEXIBLE = 2;
+
+    // Customers need to arrive at the merchant at the start time of the
+    // availability slot but can leave any time they want.
+    //
+    // For example, in the museum admission scenario, a timed entry ticket
+    // for 10am requires the user to be at the museum at 10am. The start time of
+    // availability slots for this service represents the designated entry
+    // time. The end time, however, is used solely as a key to identify the
+    // availability slot for booking.
+    TIMED_ENTRY_WITH_FLEXIBLE_DURATION = 3;
+  }
+
+  // The admission policy that applied to this service. If unset, defaults to
+  // TIME_STRICT. (optional)
+  AdmissionPolicy admission_policy = 5;
 }
 
 // A tax rate applied when charging the user for a service, and which can be set
@@ -716,15 +801,15 @@
 // (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.
 message RelatedMedia {
-  // URL of this media source.
+  // URL of this media source. Google will crawl the media hosted at this URL.
   string url = 1;
 
   // Type of this media source.
   MediaType type = 2;
 
   // Enum to indicate the type of this media source. Only photos are supported.
-  // Please reach out to Google if supporting animations or videos is
-  // important to your feature and we will find the best solution for you.
+  // Please reach out to the Reserve with Google team if other media beyond
+  // photos need to be supported.
   enum MediaType {
     // Unused.
     TYPE_UNSPECIFIED = 0;
@@ -732,8 +817,23 @@
     PHOTO = 1;
   }
 
-  // Caption of the media, only plain text is supported. (optional)
+  // Caption of the media, only plain text is supported. Any HTML components
+  // will be stripped. (optional)
   string caption = 3;
+
+  // 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 attribution = 4;
+
+  // Attribution information for this media.
+  message Attribution {
+    // The text to give credit to the photographer or agency. This text will be
+    // 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).
+    string text = 1;
+  }
 }
 
 // Identifies a particular value of a service attribute to be applied to a
