diff --git a/feeds/feeds.proto b/feeds/feeds.proto
index 0fd6a8b..5b8b9f5 100644
--- a/feeds/feeds.proto
+++ b/feeds/feeds.proto
@@ -186,6 +186,7 @@
   //      slots of a single service. Recurrence benefits merchants/services that
   //      offer appointments. The standard format is geared towards
   //      merchants/services with regularly scheduled classes.
+  //   3. Recurrences should not last for more than 24 hours.
   message Recurrence {
     // The inclusive maximum UTC timestamp the availability repeats until.
     // (required)
diff --git a/proto/v3.proto b/proto/v3.proto
index 61b91f5..81e40dd 100644
--- a/proto/v3.proto
+++ b/proto/v3.proto
@@ -368,7 +368,10 @@
   // The booking to be updated
   // The following fields can be set in a booking:
   // - status, to cancel a booking.
-  // - start_time and duration in the slot, to reschedule a booking. (required)
+  // - one of the following is required:
+  //   - start_time AND duration in the slot, to reschedule a booking.
+  //   - party_size (for dining reservations).
+
   Booking booking = 1;
 }
 
diff --git a/v3/v3.pb.go b/v3/v3.pb.go
index 9f4b4b1..53f8064 100644
--- a/v3/v3.pb.go
+++ b/v3/v3.pb.go
@@ -1,13 +1,64 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: v3.proto
 
+/*
+Package ext_maps_booking_partner_v3 is a generated protocol buffer package.
+
+It is generated from these files:
+	v3.proto
+
+It has these top-level messages:
+	CheckAvailabilityRequest
+	CheckAvailabilityResponse
+	AvailabilityUpdate
+	SlotAvailability
+	SlotTime
+	SlotTimeAvailability
+	BatchAvailabilityLookupRequest
+	BatchAvailabilityLookupResponse
+	CheckOrderFulfillabilityRequest
+	CheckOrderFulfillabilityResponse
+	GetBookingStatusRequest
+	GetBookingStatusResponse
+	CreateBookingRequest
+	CreateBookingResponse
+	CreateLeaseRequest
+	CreateLeaseResponse
+	Lease
+	LeaseReference
+	CreateOrderRequest
+	CreateOrderResponse
+	ListBookingsRequest
+	ListBookingsResponse
+	ListOrdersRequest
+	ListOrdersResponse
+	UpdateBookingRequest
+	UpdateBookingResponse
+	Booking
+	BookingFailure
+	Order
+	LineItem
+	OrderFailure
+	OrderFulfillability
+	LineItemFulfillability
+	TicketType
+	ResourceIds
+	TokenizationConfig
+	PaymentProcessingParameters
+	UserPaymentOption
+	PaymentInformation
+	Price
+	NoShowFee
+	Deposit
+	Slot
+	UserInformation
+	PostalAddress
+*/
 package ext_maps_booking_partner_v3
 
-import (
-	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
@@ -54,7 +105,6 @@
 	4: "NO_SHOW",
 	5: "NO_SHOW_PENALIZED",
 }
-
 var BookingStatus_value = map[string]int32{
 	"BOOKING_STATUS_UNSPECIFIED":    0,
 	"CONFIRMED":                     1,
@@ -67,10 +117,7 @@
 func (x BookingStatus) String() string {
 	return proto.EnumName(BookingStatus_name, int32(x))
 }
-
-func (BookingStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{0}
-}
+func (BookingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
 
 // Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
 // indicate the type of credit card that was rejected.
@@ -94,23 +141,19 @@
 	4: "DISCOVER",
 	5: "JCB",
 }
-
 var CreditCardType_value = map[string]int32{
 	"CREDIT_CARD_TYPE_UNSPECIFIED": 0,
-	"VISA":                         1,
-	"MASTERCARD":                   2,
-	"AMERICAN_EXPRESS":             3,
-	"DISCOVER":                     4,
-	"JCB":                          5,
+	"VISA":             1,
+	"MASTERCARD":       2,
+	"AMERICAN_EXPRESS": 3,
+	"DISCOVER":         4,
+	"JCB":              5,
 }
 
 func (x CreditCardType) String() string {
 	return proto.EnumName(CreditCardType_name, int32(x))
 }
-
-func (CreditCardType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{1}
-}
+func (CreditCardType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
 
 type PaymentOptionType int32
 
@@ -127,7 +170,6 @@
 	2: "PAYMENT_OPTION_MULTI_USE",
 	3: "PAYMENT_OPTION_UNLIMITED_USE",
 }
-
 var PaymentOptionType_value = map[string]int32{
 	"PAYMENT_OPTION_TYPE_UNSPECIFIED": 0,
 	"PAYMENT_OPTION_SINGLE_USE":       1,
@@ -138,10 +180,7 @@
 func (x PaymentOptionType) String() string {
 	return proto.EnumName(PaymentOptionType_name, int32(x))
 }
-
-func (PaymentOptionType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{2}
-}
+func (PaymentOptionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
 
 // Prepayment status of a booking.
 // Updating payment status will trigger an update on the payment status of the
@@ -174,7 +213,6 @@
 	3: "PREPAYMENT_REFUNDED",
 	4: "PREPAYMENT_CREDITED",
 }
-
 var PrepaymentStatus_value = map[string]int32{
 	"PREPAYMENT_STATUS_UNSPECIFIED": 0,
 	"PREPAYMENT_PROVIDED":           1,
@@ -186,10 +224,7 @@
 func (x PrepaymentStatus) String() string {
 	return proto.EnumName(PrepaymentStatus_name, int32(x))
 }
-
-func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{3}
-}
+func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
 
 // Defines how a total price is determined from an availability.
 type PriceType int32
@@ -210,7 +245,6 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
-
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -219,10 +253,7 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
-
-func (PriceType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{4}
-}
+func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
 
 // This enum indicates what requirements exist for the user to acknowledge or
 // view the requested slots duration/end time.
@@ -243,7 +274,6 @@
 	1: "DO_NOT_SHOW_DURATION",
 	2: "MUST_SHOW_DURATION",
 }
-
 var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
 	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
 	"DO_NOT_SHOW_DURATION":             1,
@@ -253,9 +283,8 @@
 func (x CheckAvailabilityResponse_DurationRequirement) String() string {
 	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
 }
-
 func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{1, 0}
+	return fileDescriptor0, []int{1, 0}
 }
 
 type BookingFailure_Cause int32
@@ -314,7 +343,6 @@
 	11: "BOOKING_NOT_CANCELLABLE",
 	12: "OVERLAPPING_RESERVATION",
 }
-
 var BookingFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"SLOT_UNAVAILABLE":                 1,
@@ -334,10 +362,7 @@
 func (x BookingFailure_Cause) String() string {
 	return proto.EnumName(BookingFailure_Cause_name, int32(x))
 }
-
-func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{23, 0}
-}
+func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{27, 0} }
 
 type OrderFailure_Cause int32
 
@@ -366,7 +391,6 @@
 	3: "PAYMENT_ERROR_CARD_DECLINED",
 	4: "PAYMENT_ERROR",
 }
-
 var OrderFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"ORDER_UNFULFILLABLE":              1,
@@ -378,10 +402,7 @@
 func (x OrderFailure_Cause) String() string {
 	return proto.EnumName(OrderFailure_Cause_name, int32(x))
 }
-
-func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{26, 0}
-}
+func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{30, 0} }
 
 // The result of an order fulfillability check.
 type OrderFulfillability_OrderFulfillabilityResult int32
@@ -408,21 +429,19 @@
 	3: "UNFULFILLABLE_SERVICE_COMBINATION",
 	4: "ORDER_UNFULFILLABLE_OTHER_REASON",
 }
-
 var OrderFulfillability_OrderFulfillabilityResult_value = map[string]int32{
 	"ORDER_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
-	"CAN_FULFILL":                       1,
-	"UNFULFILLABLE_LINE_ITEM":           2,
-	"UNFULFILLABLE_SERVICE_COMBINATION": 3,
-	"ORDER_UNFULFILLABLE_OTHER_REASON":  4,
+	"CAN_FULFILL":                             1,
+	"UNFULFILLABLE_LINE_ITEM":                 2,
+	"UNFULFILLABLE_SERVICE_COMBINATION":       3,
+	"ORDER_UNFULFILLABLE_OTHER_REASON":        4,
 }
 
 func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
 	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
 }
-
 func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{27, 0}
+	return fileDescriptor0, []int{31, 0}
 }
 
 // The result of a line item fulfillability check.
@@ -455,7 +474,6 @@
 	4: "INCORRECT_PRICE",
 	5: "ITEM_UNFULFILLABLE_OTHER_REASON",
 }
-
 var LineItemFulfillability_ItemFulfillabilityResult_value = map[string]int32{
 	"ITEM_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
 	"CAN_FULFILL":                            1,
@@ -469,9 +487,39 @@
 func (x LineItemFulfillability_ItemFulfillabilityResult) String() string {
 	return proto.EnumName(LineItemFulfillability_ItemFulfillabilityResult_name, int32(x))
 }
-
 func (LineItemFulfillability_ItemFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{28, 0}
+	return fileDescriptor0, []int{32, 0}
+}
+
+// Control how much billing information to include in the
+// payment token.
+type TokenizationConfig_BillingInformationFormat int32
+
+const (
+	// Not specified.  Defaults to MIN.
+	TokenizationConfig_BILLING_INFORMATION_FORMAT_UNSPECIFIED TokenizationConfig_BillingInformationFormat = 0
+	// name, country code, and postal code (Google Pay default setting).
+	TokenizationConfig_MIN TokenizationConfig_BillingInformationFormat = 1
+	// name, street address, locality, region, country code, and postal code.
+	TokenizationConfig_FULL TokenizationConfig_BillingInformationFormat = 2
+)
+
+var TokenizationConfig_BillingInformationFormat_name = map[int32]string{
+	0: "BILLING_INFORMATION_FORMAT_UNSPECIFIED",
+	1: "MIN",
+	2: "FULL",
+}
+var TokenizationConfig_BillingInformationFormat_value = map[string]int32{
+	"BILLING_INFORMATION_FORMAT_UNSPECIFIED": 0,
+	"MIN":  1,
+	"FULL": 2,
+}
+
+func (x TokenizationConfig_BillingInformationFormat) String() string {
+	return proto.EnumName(TokenizationConfig_BillingInformationFormat_name, int32(x))
+}
+func (TokenizationConfig_BillingInformationFormat) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{35, 0}
 }
 
 type PaymentProcessingParameters_PaymentProcessor int32
@@ -487,7 +535,6 @@
 	1: "PROCESSOR_STRIPE",
 	2: "PROCESSOR_BRAINTREE",
 }
-
 var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
 	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
 	"PROCESSOR_STRIPE":              1,
@@ -497,9 +544,8 @@
 func (x PaymentProcessingParameters_PaymentProcessor) String() string {
 	return proto.EnumName(PaymentProcessingParameters_PaymentProcessor_name, int32(x))
 }
-
 func (PaymentProcessingParameters_PaymentProcessor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{31, 0}
+	return fileDescriptor0, []int{36, 0}
 }
 
 // Who handles payment processing?
@@ -519,7 +565,6 @@
 	1: "PROCESSED_BY_GOOGLE",
 	2: "PROCESSED_BY_PARTNER",
 }
-
 var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
 	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
 	"PROCESSED_BY_GOOGLE":              1,
@@ -529,44 +574,20 @@
 func (x PaymentInformation_PaymentProcessedBy) String() string {
 	return proto.EnumName(PaymentInformation_PaymentProcessedBy_name, int32(x))
 }
-
 func (PaymentInformation_PaymentProcessedBy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{33, 0}
+	return fileDescriptor0, []int{38, 0}
 }
 
 // Request to check availability for a Slot.
 type CheckAvailabilityRequest struct {
 	// The appointment slot that is being checked (required)
-	Slot                 *Slot    `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
 }
 
-func (m *CheckAvailabilityRequest) Reset()         { *m = CheckAvailabilityRequest{} }
-func (m *CheckAvailabilityRequest) String() string { return proto.CompactTextString(m) }
-func (*CheckAvailabilityRequest) ProtoMessage()    {}
-func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{0}
-}
-
-func (m *CheckAvailabilityRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CheckAvailabilityRequest.Unmarshal(m, b)
-}
-func (m *CheckAvailabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CheckAvailabilityRequest.Marshal(b, m, deterministic)
-}
-func (m *CheckAvailabilityRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckAvailabilityRequest.Merge(m, src)
-}
-func (m *CheckAvailabilityRequest) XXX_Size() int {
-	return xxx_messageInfo_CheckAvailabilityRequest.Size(m)
-}
-func (m *CheckAvailabilityRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CheckAvailabilityRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CheckAvailabilityRequest proto.InternalMessageInfo
+func (m *CheckAvailabilityRequest) Reset()                    { *m = CheckAvailabilityRequest{} }
+func (m *CheckAvailabilityRequest) String() string            { return proto.CompactTextString(m) }
+func (*CheckAvailabilityRequest) ProtoMessage()               {}
+func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
 
 func (m *CheckAvailabilityRequest) GetSlot() *Slot {
 	if m != nil {
@@ -579,49 +600,26 @@
 // appointment slot.
 type CheckAvailabilityResponse struct {
 	// The requested slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
+	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
 	// The requirement to show the slots duration and/or endtime. This field will
 	// be ignored if the slot is unavailable. (optional)
-	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,proto3,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
+	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
 	// Optionally, the partner can return additional updated information about the
 	// availability for this merchant if this information is present when
 	// responding to the CheckAvailabilityRequest and if there is no negative
 	// impact on the CheckAvailability request latency.
 	// For instance an entire day of merchant availability for a superset of
 	// resources can be returned here.
-	AvailabilityUpdate   *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate,proto3" json:"availability_update,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
-	XXX_unrecognized     []byte              `json:"-"`
-	XXX_sizecache        int32               `json:"-"`
+	AvailabilityUpdate *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate" json:"availability_update,omitempty"`
 }
 
-func (m *CheckAvailabilityResponse) Reset()         { *m = CheckAvailabilityResponse{} }
-func (m *CheckAvailabilityResponse) String() string { return proto.CompactTextString(m) }
-func (*CheckAvailabilityResponse) ProtoMessage()    {}
-func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{1}
-}
-
-func (m *CheckAvailabilityResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CheckAvailabilityResponse.Unmarshal(m, b)
-}
-func (m *CheckAvailabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CheckAvailabilityResponse.Marshal(b, m, deterministic)
-}
-func (m *CheckAvailabilityResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckAvailabilityResponse.Merge(m, src)
-}
-func (m *CheckAvailabilityResponse) XXX_Size() int {
-	return xxx_messageInfo_CheckAvailabilityResponse.Size(m)
-}
-func (m *CheckAvailabilityResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_CheckAvailabilityResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CheckAvailabilityResponse proto.InternalMessageInfo
+func (m *CheckAvailabilityResponse) Reset()                    { *m = CheckAvailabilityResponse{} }
+func (m *CheckAvailabilityResponse) String() string            { return proto.CompactTextString(m) }
+func (*CheckAvailabilityResponse) ProtoMessage()               {}
+func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
 
 func (m *CheckAvailabilityResponse) GetSlot() *Slot {
 	if m != nil {
@@ -654,36 +652,13 @@
 // An update to one ore more slots indicating that the availability for the
 // associated time has potentially changed.
 type AvailabilityUpdate struct {
-	SlotAvailability     []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability,proto3" json:"slot_availability,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
-	XXX_unrecognized     []byte              `json:"-"`
-	XXX_sizecache        int32               `json:"-"`
+	SlotAvailability []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability" json:"slot_availability,omitempty"`
 }
 
-func (m *AvailabilityUpdate) Reset()         { *m = AvailabilityUpdate{} }
-func (m *AvailabilityUpdate) String() string { return proto.CompactTextString(m) }
-func (*AvailabilityUpdate) ProtoMessage()    {}
-func (*AvailabilityUpdate) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{2}
-}
-
-func (m *AvailabilityUpdate) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AvailabilityUpdate.Unmarshal(m, b)
-}
-func (m *AvailabilityUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AvailabilityUpdate.Marshal(b, m, deterministic)
-}
-func (m *AvailabilityUpdate) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AvailabilityUpdate.Merge(m, src)
-}
-func (m *AvailabilityUpdate) XXX_Size() int {
-	return xxx_messageInfo_AvailabilityUpdate.Size(m)
-}
-func (m *AvailabilityUpdate) XXX_DiscardUnknown() {
-	xxx_messageInfo_AvailabilityUpdate.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AvailabilityUpdate proto.InternalMessageInfo
+func (m *AvailabilityUpdate) Reset()                    { *m = AvailabilityUpdate{} }
+func (m *AvailabilityUpdate) String() string            { return proto.CompactTextString(m) }
+func (*AvailabilityUpdate) ProtoMessage()               {}
+func (*AvailabilityUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
 
 func (m *AvailabilityUpdate) GetSlotAvailability() []*SlotAvailability {
 	if m != nil {
@@ -694,39 +669,16 @@
 
 // An inventory slot and associated count of open spots.
 type SlotAvailability struct {
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable       int32    `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
 }
 
-func (m *SlotAvailability) Reset()         { *m = SlotAvailability{} }
-func (m *SlotAvailability) String() string { return proto.CompactTextString(m) }
-func (*SlotAvailability) ProtoMessage()    {}
-func (*SlotAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{3}
-}
-
-func (m *SlotAvailability) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SlotAvailability.Unmarshal(m, b)
-}
-func (m *SlotAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SlotAvailability.Marshal(b, m, deterministic)
-}
-func (m *SlotAvailability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SlotAvailability.Merge(m, src)
-}
-func (m *SlotAvailability) XXX_Size() int {
-	return xxx_messageInfo_SlotAvailability.Size(m)
-}
-func (m *SlotAvailability) XXX_DiscardUnknown() {
-	xxx_messageInfo_SlotAvailability.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SlotAvailability proto.InternalMessageInfo
+func (m *SlotAvailability) Reset()                    { *m = SlotAvailability{} }
+func (m *SlotAvailability) String() string            { return proto.CompactTextString(m) }
+func (*SlotAvailability) ProtoMessage()               {}
+func (*SlotAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
 
 func (m *SlotAvailability) GetSlot() *Slot {
 	if m != nil {
@@ -742,42 +694,155 @@
 	return 0
 }
 
+// Identifies a Slot start time and optionally, the Slot duration, for a =
+// specific service and merchant. Note that this differs from the definition of
+// Slot, as it does not include merchant_id and service_id identifiers.
+type SlotTime struct {
+	// Start time of the appointment slot in seconds of UTC time since Unix epoch
+	// (required)
+	StartSec int64 `protobuf:"varint,1,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	// Duration of the appointment slot in seconds (optional)
+	DurationSec int64 `protobuf:"varint,2,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	// Opaque tag that identifies the availability slot and matches the value
+	// provided in the availability feed (optional)
+	AvailabilityTag string `protobuf:"bytes,3,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+	// The set of resources that specifies the appointment slot, e.g. by
+	// indicating the staff member and room selected by the user, or party size
+	// for dining slots (optional)
+	ResourceIds *ResourceIds `protobuf:"bytes,4,opt,name=resource_ids,json=resourceIds" json:"resource_ids,omitempty"`
+}
+
+func (m *SlotTime) Reset()                    { *m = SlotTime{} }
+func (m *SlotTime) String() string            { return proto.CompactTextString(m) }
+func (*SlotTime) ProtoMessage()               {}
+func (*SlotTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (m *SlotTime) GetStartSec() int64 {
+	if m != nil {
+		return m.StartSec
+	}
+	return 0
+}
+
+func (m *SlotTime) GetDurationSec() int64 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *SlotTime) GetAvailabilityTag() string {
+	if m != nil {
+		return m.AvailabilityTag
+	}
+	return ""
+}
+
+func (m *SlotTime) GetResourceIds() *ResourceIds {
+	if m != nil {
+		return m.ResourceIds
+	}
+	return nil
+}
+
+type SlotTimeAvailability struct {
+	// The SlotTime for which availability was checked.
+	SlotTime *SlotTime `protobuf:"bytes,1,opt,name=slot_time,json=slotTime" json:"slot_time,omitempty"`
+	// Whether the requested SlotTime is available
+	Available bool `protobuf:"varint,2,opt,name=available" json:"available,omitempty"`
+}
+
+func (m *SlotTimeAvailability) Reset()                    { *m = SlotTimeAvailability{} }
+func (m *SlotTimeAvailability) String() string            { return proto.CompactTextString(m) }
+func (*SlotTimeAvailability) ProtoMessage()               {}
+func (*SlotTimeAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *SlotTimeAvailability) GetSlotTime() *SlotTime {
+	if m != nil {
+		return m.SlotTime
+	}
+	return nil
+}
+
+func (m *SlotTimeAvailability) GetAvailable() bool {
+	if m != nil {
+		return m.Available
+	}
+	return false
+}
+
+// Request to lookup availabilities of a list of specified slot times for a
+// given merchant/service.
+type BatchAvailabilityLookupRequest struct {
+	// ID of the merchant.
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	// ID of the service.
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	// Multiple slot times to be checked for availability. All queried times apply
+	// to the same merchant_id and service_id.
+	SlotTime []*SlotTime `protobuf:"bytes,3,rep,name=slot_time,json=slotTime" json:"slot_time,omitempty"`
+}
+
+func (m *BatchAvailabilityLookupRequest) Reset()                    { *m = BatchAvailabilityLookupRequest{} }
+func (m *BatchAvailabilityLookupRequest) String() string            { return proto.CompactTextString(m) }
+func (*BatchAvailabilityLookupRequest) ProtoMessage()               {}
+func (*BatchAvailabilityLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+func (m *BatchAvailabilityLookupRequest) GetMerchantId() string {
+	if m != nil {
+		return m.MerchantId
+	}
+	return ""
+}
+
+func (m *BatchAvailabilityLookupRequest) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
+
+func (m *BatchAvailabilityLookupRequest) GetSlotTime() []*SlotTime {
+	if m != nil {
+		return m.SlotTime
+	}
+	return nil
+}
+
+// Response for the BatchAvailabilityLookupRequest RPC with the availabilities
+// of the appointment slots.
+type BatchAvailabilityLookupResponse struct {
+	// The availabilities for the requested SlotTime entries. There must be
+	// exactly one slot_time_availability for each SlotTime entry in the
+	// [ext.maps.booking.partner.v3.BatchAvailabilityLookupRequest].
+	SlotTimeAvailability []*SlotTimeAvailability `protobuf:"bytes,1,rep,name=slot_time_availability,json=slotTimeAvailability" json:"slot_time_availability,omitempty"`
+}
+
+func (m *BatchAvailabilityLookupResponse) Reset()                    { *m = BatchAvailabilityLookupResponse{} }
+func (m *BatchAvailabilityLookupResponse) String() string            { return proto.CompactTextString(m) }
+func (*BatchAvailabilityLookupResponse) ProtoMessage()               {}
+func (*BatchAvailabilityLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+func (m *BatchAvailabilityLookupResponse) GetSlotTimeAvailability() []*SlotTimeAvailability {
+	if m != nil {
+		return m.SlotTimeAvailability
+	}
+	return nil
+}
+
 // Request to check the fulfillability of an order.
 type CheckOrderFulfillabilityRequest struct {
 	// The merchant that this order is intended for. (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
 	// The line items in this order. All services requested must belong to the
 	// specified merchant. (required)
-	Item                 []*LineItem `protobuf:"bytes,2,rep,name=item,proto3" json:"item,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
-	XXX_unrecognized     []byte      `json:"-"`
-	XXX_sizecache        int32       `json:"-"`
+	Item []*LineItem `protobuf:"bytes,2,rep,name=item" json:"item,omitempty"`
 }
 
-func (m *CheckOrderFulfillabilityRequest) Reset()         { *m = CheckOrderFulfillabilityRequest{} }
-func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
-func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
-func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{4}
-}
-
-func (m *CheckOrderFulfillabilityRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Unmarshal(m, b)
-}
-func (m *CheckOrderFulfillabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Marshal(b, m, deterministic)
-}
-func (m *CheckOrderFulfillabilityRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckOrderFulfillabilityRequest.Merge(m, src)
-}
-func (m *CheckOrderFulfillabilityRequest) XXX_Size() int {
-	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Size(m)
-}
-func (m *CheckOrderFulfillabilityRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CheckOrderFulfillabilityRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CheckOrderFulfillabilityRequest proto.InternalMessageInfo
+func (m *CheckOrderFulfillabilityRequest) Reset()                    { *m = CheckOrderFulfillabilityRequest{} }
+func (m *CheckOrderFulfillabilityRequest) String() string            { return proto.CompactTextString(m) }
+func (*CheckOrderFulfillabilityRequest) ProtoMessage()               {}
+func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
 
 func (m *CheckOrderFulfillabilityRequest) GetMerchantId() string {
 	if m != nil {
@@ -797,40 +862,19 @@
 type CheckOrderFulfillabilityResponse struct {
 	// Fulfillability status of the order, potentially contains updated
 	// availabilities and prices of the requested line item. (required)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability" json:"fulfillability,omitempty"`
 	// Total processing fees & taxes that need to be paid for this order.
 	// (required)
-	FeesAndTaxes         *Price   `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	FeesAndTaxes *Price `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
 }
 
 func (m *CheckOrderFulfillabilityResponse) Reset()         { *m = CheckOrderFulfillabilityResponse{} }
 func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
 func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
 func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{5}
+	return fileDescriptor0, []int{9}
 }
 
-func (m *CheckOrderFulfillabilityResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Unmarshal(m, b)
-}
-func (m *CheckOrderFulfillabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Marshal(b, m, deterministic)
-}
-func (m *CheckOrderFulfillabilityResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckOrderFulfillabilityResponse.Merge(m, src)
-}
-func (m *CheckOrderFulfillabilityResponse) XXX_Size() int {
-	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Size(m)
-}
-func (m *CheckOrderFulfillabilityResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_CheckOrderFulfillabilityResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CheckOrderFulfillabilityResponse proto.InternalMessageInfo
-
 func (m *CheckOrderFulfillabilityResponse) GetFulfillability() *OrderFulfillability {
 	if m != nil {
 		return m.Fulfillability
@@ -848,36 +892,13 @@
 // Request to get booking status and prepayment status for a Booking.
 type GetBookingStatusRequest struct {
 	// ID of the existing booking (required)
-	BookingId            string   `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
 }
 
-func (m *GetBookingStatusRequest) Reset()         { *m = GetBookingStatusRequest{} }
-func (m *GetBookingStatusRequest) String() string { return proto.CompactTextString(m) }
-func (*GetBookingStatusRequest) ProtoMessage()    {}
-func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{6}
-}
-
-func (m *GetBookingStatusRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetBookingStatusRequest.Unmarshal(m, b)
-}
-func (m *GetBookingStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetBookingStatusRequest.Marshal(b, m, deterministic)
-}
-func (m *GetBookingStatusRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetBookingStatusRequest.Merge(m, src)
-}
-func (m *GetBookingStatusRequest) XXX_Size() int {
-	return xxx_messageInfo_GetBookingStatusRequest.Size(m)
-}
-func (m *GetBookingStatusRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetBookingStatusRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_GetBookingStatusRequest proto.InternalMessageInfo
+func (m *GetBookingStatusRequest) Reset()                    { *m = GetBookingStatusRequest{} }
+func (m *GetBookingStatusRequest) String() string            { return proto.CompactTextString(m) }
+func (*GetBookingStatusRequest) ProtoMessage()               {}
+func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
 
 func (m *GetBookingStatusRequest) GetBookingId() string {
 	if m != nil {
@@ -890,40 +911,17 @@
 // status.
 type GetBookingStatusResponse struct {
 	// ID of the booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
 	// Status of the booking (required)
-	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
+	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
 	// Prepayment status of the booking (required)
-	PrepaymentStatus     PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
-	XXX_unrecognized     []byte           `json:"-"`
-	XXX_sizecache        int32            `json:"-"`
+	PrepaymentStatus PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
 }
 
-func (m *GetBookingStatusResponse) Reset()         { *m = GetBookingStatusResponse{} }
-func (m *GetBookingStatusResponse) String() string { return proto.CompactTextString(m) }
-func (*GetBookingStatusResponse) ProtoMessage()    {}
-func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{7}
-}
-
-func (m *GetBookingStatusResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetBookingStatusResponse.Unmarshal(m, b)
-}
-func (m *GetBookingStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetBookingStatusResponse.Marshal(b, m, deterministic)
-}
-func (m *GetBookingStatusResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetBookingStatusResponse.Merge(m, src)
-}
-func (m *GetBookingStatusResponse) XXX_Size() int {
-	return xxx_messageInfo_GetBookingStatusResponse.Size(m)
-}
-func (m *GetBookingStatusResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetBookingStatusResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_GetBookingStatusResponse proto.InternalMessageInfo
+func (m *GetBookingStatusResponse) Reset()                    { *m = GetBookingStatusResponse{} }
+func (m *GetBookingStatusResponse) String() string            { return proto.CompactTextString(m) }
+func (*GetBookingStatusResponse) ProtoMessage()               {}
+func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
 
 func (m *GetBookingStatusResponse) GetBookingId() string {
 	if m != nil {
@@ -953,55 +951,32 @@
 	// If lease_ref is provided, slot must match the lease; slot is provided for
 	// the partner to verify the lease information.
 	// If lease_ref is absent, then create the booking for the slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
 	// The lease that is being confirmed to make this booking.
 	// If lease_ref is provided, then create the booking using the lease.
 	// (optional)
-	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef,proto3" json:"lease_ref,omitempty"`
+	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef" json:"lease_ref,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
 	// Information about payments. When payment authorizations are handled by
 	// Google, if the booking request does not succeed, payment authorizations are
 	// automatically canceled. (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (optional)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateBooking requests. (required)
-	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
+	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
 	// A string from the user which contains any special requests or additional
 	// information that they would like to notify the merchant about. (optional)
-	AdditionalRequest    string   `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest,proto3" json:"additional_request,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	AdditionalRequest string `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest" json:"additional_request,omitempty"`
 }
 
-func (m *CreateBookingRequest) Reset()         { *m = CreateBookingRequest{} }
-func (m *CreateBookingRequest) String() string { return proto.CompactTextString(m) }
-func (*CreateBookingRequest) ProtoMessage()    {}
-func (*CreateBookingRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{8}
-}
-
-func (m *CreateBookingRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateBookingRequest.Unmarshal(m, b)
-}
-func (m *CreateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateBookingRequest.Marshal(b, m, deterministic)
-}
-func (m *CreateBookingRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateBookingRequest.Merge(m, src)
-}
-func (m *CreateBookingRequest) XXX_Size() int {
-	return xxx_messageInfo_CreateBookingRequest.Size(m)
-}
-func (m *CreateBookingRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateBookingRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateBookingRequest proto.InternalMessageInfo
+func (m *CreateBookingRequest) Reset()                    { *m = CreateBookingRequest{} }
+func (m *CreateBookingRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateBookingRequest) ProtoMessage()               {}
+func (*CreateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
 
 func (m *CreateBookingRequest) GetSlot() *Slot {
 	if m != nil {
@@ -1055,48 +1030,25 @@
 // Response with the created Booking for an inventory slot.
 type CreateBookingResponse struct {
 	// The created booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
 	// The updated user payment option used in this booking.
 	// If a new payment option was purchased to pay for the booking, this should
 	// be a newly created user payment option.
 	// If an already purchased user payment option was used for this booking,
 	// this should reflect an updated version of that user payment option.
 	// (optional)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
 	// If creating a booking fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and all other fields in the
 	// CreateBookingResponse message are expected to be unset. (required if
 	// failure occurs)
-	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
-	XXX_unrecognized     []byte          `json:"-"`
-	XXX_sizecache        int32           `json:"-"`
+	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
 }
 
-func (m *CreateBookingResponse) Reset()         { *m = CreateBookingResponse{} }
-func (m *CreateBookingResponse) String() string { return proto.CompactTextString(m) }
-func (*CreateBookingResponse) ProtoMessage()    {}
-func (*CreateBookingResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{9}
-}
-
-func (m *CreateBookingResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateBookingResponse.Unmarshal(m, b)
-}
-func (m *CreateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateBookingResponse.Marshal(b, m, deterministic)
-}
-func (m *CreateBookingResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateBookingResponse.Merge(m, src)
-}
-func (m *CreateBookingResponse) XXX_Size() int {
-	return xxx_messageInfo_CreateBookingResponse.Size(m)
-}
-func (m *CreateBookingResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateBookingResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateBookingResponse proto.InternalMessageInfo
+func (m *CreateBookingResponse) Reset()                    { *m = CreateBookingResponse{} }
+func (m *CreateBookingResponse) String() string            { return proto.CompactTextString(m) }
+func (*CreateBookingResponse) ProtoMessage()               {}
+func (*CreateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
 
 func (m *CreateBookingResponse) GetBooking() *Booking {
 	if m != nil {
@@ -1125,36 +1077,13 @@
 type CreateLeaseRequest struct {
 	// The lease to be created with information about the appointment slot
 	// (required)
-	Lease                *Lease   `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
 }
 
-func (m *CreateLeaseRequest) Reset()         { *m = CreateLeaseRequest{} }
-func (m *CreateLeaseRequest) String() string { return proto.CompactTextString(m) }
-func (*CreateLeaseRequest) ProtoMessage()    {}
-func (*CreateLeaseRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{10}
-}
-
-func (m *CreateLeaseRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateLeaseRequest.Unmarshal(m, b)
-}
-func (m *CreateLeaseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateLeaseRequest.Marshal(b, m, deterministic)
-}
-func (m *CreateLeaseRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateLeaseRequest.Merge(m, src)
-}
-func (m *CreateLeaseRequest) XXX_Size() int {
-	return xxx_messageInfo_CreateLeaseRequest.Size(m)
-}
-func (m *CreateLeaseRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateLeaseRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateLeaseRequest proto.InternalMessageInfo
+func (m *CreateLeaseRequest) Reset()                    { *m = CreateLeaseRequest{} }
+func (m *CreateLeaseRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateLeaseRequest) ProtoMessage()               {}
+func (*CreateLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
 
 func (m *CreateLeaseRequest) GetLease() *Lease {
 	if m != nil {
@@ -1166,40 +1095,17 @@
 // Response for the CreateLease RPC with the created Lease.
 type CreateLeaseResponse struct {
 	// The created Lease (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
+	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
 	// If creating a lease fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and lease field is expected to be
 	// unset. (required if failure occurs)
-	BookingFailure       *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
-	XXX_unrecognized     []byte          `json:"-"`
-	XXX_sizecache        int32           `json:"-"`
+	BookingFailure *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
 }
 
-func (m *CreateLeaseResponse) Reset()         { *m = CreateLeaseResponse{} }
-func (m *CreateLeaseResponse) String() string { return proto.CompactTextString(m) }
-func (*CreateLeaseResponse) ProtoMessage()    {}
-func (*CreateLeaseResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{11}
-}
-
-func (m *CreateLeaseResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateLeaseResponse.Unmarshal(m, b)
-}
-func (m *CreateLeaseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateLeaseResponse.Marshal(b, m, deterministic)
-}
-func (m *CreateLeaseResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateLeaseResponse.Merge(m, src)
-}
-func (m *CreateLeaseResponse) XXX_Size() int {
-	return xxx_messageInfo_CreateLeaseResponse.Size(m)
-}
-func (m *CreateLeaseResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateLeaseResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateLeaseResponse proto.InternalMessageInfo
+func (m *CreateLeaseResponse) Reset()                    { *m = CreateLeaseResponse{} }
+func (m *CreateLeaseResponse) String() string            { return proto.CompactTextString(m) }
+func (*CreateLeaseResponse) ProtoMessage()               {}
+func (*CreateLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
 
 func (m *CreateLeaseResponse) GetLease() *Lease {
 	if m != nil {
@@ -1220,43 +1126,20 @@
 	// ID of the lease.
 	// Not populated in CreateLeaseRequest. The value is chosen by the partner and
 	// has to be returned in the response of CreateLease. (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
+	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
 	// The appointment slot that the lease is created for. (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
 	// Unique identifier for this lease, chosen by Reserve with Google. Serves as
 	// an idempotency token for CreateLease requests. (required)
-	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference,proto3" json:"user_reference,omitempty"`
+	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference" json:"user_reference,omitempty"`
 	// Expiration time of the lease in UTC Timestamp (required)
-	LeaseExpirationTimeSec int64    `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec,proto3" json:"lease_expiration_time_sec,omitempty"`
-	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
-	XXX_unrecognized       []byte   `json:"-"`
-	XXX_sizecache          int32    `json:"-"`
+	LeaseExpirationTimeSec int64 `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec" json:"lease_expiration_time_sec,omitempty"`
 }
 
-func (m *Lease) Reset()         { *m = Lease{} }
-func (m *Lease) String() string { return proto.CompactTextString(m) }
-func (*Lease) ProtoMessage()    {}
-func (*Lease) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{12}
-}
-
-func (m *Lease) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Lease.Unmarshal(m, b)
-}
-func (m *Lease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Lease.Marshal(b, m, deterministic)
-}
-func (m *Lease) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Lease.Merge(m, src)
-}
-func (m *Lease) XXX_Size() int {
-	return xxx_messageInfo_Lease.Size(m)
-}
-func (m *Lease) XXX_DiscardUnknown() {
-	xxx_messageInfo_Lease.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Lease proto.InternalMessageInfo
+func (m *Lease) Reset()                    { *m = Lease{} }
+func (m *Lease) String() string            { return proto.CompactTextString(m) }
+func (*Lease) ProtoMessage()               {}
+func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
 
 func (m *Lease) GetLeaseId() string {
 	if m != nil {
@@ -1289,36 +1172,13 @@
 // Reference to a Lease that has been created via CreateLease.
 type LeaseReference struct {
 	// Lease ID (required)
-	LeaseId              string   `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
 }
 
-func (m *LeaseReference) Reset()         { *m = LeaseReference{} }
-func (m *LeaseReference) String() string { return proto.CompactTextString(m) }
-func (*LeaseReference) ProtoMessage()    {}
-func (*LeaseReference) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{13}
-}
-
-func (m *LeaseReference) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LeaseReference.Unmarshal(m, b)
-}
-func (m *LeaseReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LeaseReference.Marshal(b, m, deterministic)
-}
-func (m *LeaseReference) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LeaseReference.Merge(m, src)
-}
-func (m *LeaseReference) XXX_Size() int {
-	return xxx_messageInfo_LeaseReference.Size(m)
-}
-func (m *LeaseReference) XXX_DiscardUnknown() {
-	xxx_messageInfo_LeaseReference.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LeaseReference proto.InternalMessageInfo
+func (m *LeaseReference) Reset()                    { *m = LeaseReference{} }
+func (m *LeaseReference) String() string            { return proto.CompactTextString(m) }
+func (*LeaseReference) ProtoMessage()               {}
+func (*LeaseReference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
 
 func (m *LeaseReference) GetLeaseId() string {
 	if m != nil {
@@ -1330,42 +1190,19 @@
 // Request to create an order.
 type CreateOrderRequest struct {
 	// The order to create. (required)
-	Order *Order `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"`
+	Order *Order `protobuf:"bytes,1,opt,name=order" json:"order,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. order.payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateOrder requests. (required)
-	IdempotencyToken     string   `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	IdempotencyToken string `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
 }
 
-func (m *CreateOrderRequest) Reset()         { *m = CreateOrderRequest{} }
-func (m *CreateOrderRequest) String() string { return proto.CompactTextString(m) }
-func (*CreateOrderRequest) ProtoMessage()    {}
-func (*CreateOrderRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{14}
-}
-
-func (m *CreateOrderRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateOrderRequest.Unmarshal(m, b)
-}
-func (m *CreateOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateOrderRequest.Marshal(b, m, deterministic)
-}
-func (m *CreateOrderRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateOrderRequest.Merge(m, src)
-}
-func (m *CreateOrderRequest) XXX_Size() int {
-	return xxx_messageInfo_CreateOrderRequest.Size(m)
-}
-func (m *CreateOrderRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateOrderRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateOrderRequest proto.InternalMessageInfo
+func (m *CreateOrderRequest) Reset()                    { *m = CreateOrderRequest{} }
+func (m *CreateOrderRequest) String() string            { return proto.CompactTextString(m) }
+func (*CreateOrderRequest) ProtoMessage()               {}
+func (*CreateOrderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
 
 func (m *CreateOrderRequest) GetOrder() *Order {
 	if m != nil {
@@ -1398,51 +1235,26 @@
 	// Types that are valid to be assigned to Result:
 	//	*CreateOrderResponse_Order
 	//	*CreateOrderResponse_OrderFailure
-	Result               isCreateOrderResponse_Result `protobuf_oneof:"result"`
-	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
-	XXX_unrecognized     []byte                       `json:"-"`
-	XXX_sizecache        int32                        `json:"-"`
+	Result isCreateOrderResponse_Result `protobuf_oneof:"result"`
 }
 
-func (m *CreateOrderResponse) Reset()         { *m = CreateOrderResponse{} }
-func (m *CreateOrderResponse) String() string { return proto.CompactTextString(m) }
-func (*CreateOrderResponse) ProtoMessage()    {}
-func (*CreateOrderResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{15}
-}
-
-func (m *CreateOrderResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateOrderResponse.Unmarshal(m, b)
-}
-func (m *CreateOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateOrderResponse.Marshal(b, m, deterministic)
-}
-func (m *CreateOrderResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateOrderResponse.Merge(m, src)
-}
-func (m *CreateOrderResponse) XXX_Size() int {
-	return xxx_messageInfo_CreateOrderResponse.Size(m)
-}
-func (m *CreateOrderResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateOrderResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateOrderResponse proto.InternalMessageInfo
+func (m *CreateOrderResponse) Reset()                    { *m = CreateOrderResponse{} }
+func (m *CreateOrderResponse) String() string            { return proto.CompactTextString(m) }
+func (*CreateOrderResponse) ProtoMessage()               {}
+func (*CreateOrderResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
 
 type isCreateOrderResponse_Result interface {
 	isCreateOrderResponse_Result()
 }
 
 type CreateOrderResponse_Order struct {
-	Order *Order `protobuf:"bytes,1,opt,name=order,proto3,oneof"`
+	Order *Order `protobuf:"bytes,1,opt,name=order,oneof"`
 }
-
 type CreateOrderResponse_OrderFailure struct {
-	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,proto3,oneof"`
+	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,oneof"`
 }
 
-func (*CreateOrderResponse_Order) isCreateOrderResponse_Result() {}
-
+func (*CreateOrderResponse_Order) isCreateOrderResponse_Result()        {}
 func (*CreateOrderResponse_OrderFailure) isCreateOrderResponse_Result() {}
 
 func (m *CreateOrderResponse) GetResult() isCreateOrderResponse_Result {
@@ -1525,12 +1337,12 @@
 	switch x := m.Result.(type) {
 	case *CreateOrderResponse_Order:
 		s := proto.Size(x.Order)
-		n += 1 // tag and wire
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *CreateOrderResponse_OrderFailure:
 		s := proto.Size(x.OrderFailure)
-		n += 1 // tag and wire
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
@@ -1543,36 +1355,13 @@
 // Request to list all bookings for a user
 type ListBookingsRequest struct {
 	// ID of the user (required)
-	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
 }
 
-func (m *ListBookingsRequest) Reset()         { *m = ListBookingsRequest{} }
-func (m *ListBookingsRequest) String() string { return proto.CompactTextString(m) }
-func (*ListBookingsRequest) ProtoMessage()    {}
-func (*ListBookingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{16}
-}
-
-func (m *ListBookingsRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListBookingsRequest.Unmarshal(m, b)
-}
-func (m *ListBookingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListBookingsRequest.Marshal(b, m, deterministic)
-}
-func (m *ListBookingsRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListBookingsRequest.Merge(m, src)
-}
-func (m *ListBookingsRequest) XXX_Size() int {
-	return xxx_messageInfo_ListBookingsRequest.Size(m)
-}
-func (m *ListBookingsRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListBookingsRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListBookingsRequest proto.InternalMessageInfo
+func (m *ListBookingsRequest) Reset()                    { *m = ListBookingsRequest{} }
+func (m *ListBookingsRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListBookingsRequest) ProtoMessage()               {}
+func (*ListBookingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
 
 func (m *ListBookingsRequest) GetUserId() string {
 	if m != nil {
@@ -1584,36 +1373,13 @@
 // Response for the ListBookings RPC with all bookings for the requested user.
 type ListBookingsResponse struct {
 	// All bookings of the user (required)
-	Bookings             []*Booking `protobuf:"bytes,1,rep,name=bookings,proto3" json:"bookings,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
-	XXX_unrecognized     []byte     `json:"-"`
-	XXX_sizecache        int32      `json:"-"`
+	Bookings []*Booking `protobuf:"bytes,1,rep,name=bookings" json:"bookings,omitempty"`
 }
 
-func (m *ListBookingsResponse) Reset()         { *m = ListBookingsResponse{} }
-func (m *ListBookingsResponse) String() string { return proto.CompactTextString(m) }
-func (*ListBookingsResponse) ProtoMessage()    {}
-func (*ListBookingsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{17}
-}
-
-func (m *ListBookingsResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListBookingsResponse.Unmarshal(m, b)
-}
-func (m *ListBookingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListBookingsResponse.Marshal(b, m, deterministic)
-}
-func (m *ListBookingsResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListBookingsResponse.Merge(m, src)
-}
-func (m *ListBookingsResponse) XXX_Size() int {
-	return xxx_messageInfo_ListBookingsResponse.Size(m)
-}
-func (m *ListBookingsResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListBookingsResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListBookingsResponse proto.InternalMessageInfo
+func (m *ListBookingsResponse) Reset()                    { *m = ListBookingsResponse{} }
+func (m *ListBookingsResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListBookingsResponse) ProtoMessage()               {}
+func (*ListBookingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
 
 func (m *ListBookingsResponse) GetBookings() []*Booking {
 	if m != nil {
@@ -1629,51 +1395,26 @@
 	// Types that are valid to be assigned to Ids:
 	//	*ListOrdersRequest_UserId
 	//	*ListOrdersRequest_OrderIds_
-	Ids                  isListOrdersRequest_Ids `protobuf_oneof:"ids"`
-	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
-	XXX_unrecognized     []byte                  `json:"-"`
-	XXX_sizecache        int32                   `json:"-"`
+	Ids isListOrdersRequest_Ids `protobuf_oneof:"ids"`
 }
 
-func (m *ListOrdersRequest) Reset()         { *m = ListOrdersRequest{} }
-func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) }
-func (*ListOrdersRequest) ProtoMessage()    {}
-func (*ListOrdersRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{18}
-}
-
-func (m *ListOrdersRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListOrdersRequest.Unmarshal(m, b)
-}
-func (m *ListOrdersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListOrdersRequest.Marshal(b, m, deterministic)
-}
-func (m *ListOrdersRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersRequest.Merge(m, src)
-}
-func (m *ListOrdersRequest) XXX_Size() int {
-	return xxx_messageInfo_ListOrdersRequest.Size(m)
-}
-func (m *ListOrdersRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListOrdersRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListOrdersRequest proto.InternalMessageInfo
+func (m *ListOrdersRequest) Reset()                    { *m = ListOrdersRequest{} }
+func (m *ListOrdersRequest) String() string            { return proto.CompactTextString(m) }
+func (*ListOrdersRequest) ProtoMessage()               {}
+func (*ListOrdersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
 
 type isListOrdersRequest_Ids interface {
 	isListOrdersRequest_Ids()
 }
 
 type ListOrdersRequest_UserId struct {
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3,oneof"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,oneof"`
 }
-
 type ListOrdersRequest_OrderIds_ struct {
-	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,proto3,oneof"`
+	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,oneof"`
 }
 
-func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids() {}
-
+func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids()    {}
 func (*ListOrdersRequest_OrderIds_) isListOrdersRequest_Ids() {}
 
 func (m *ListOrdersRequest) GetIds() isListOrdersRequest_Ids {
@@ -1752,12 +1493,12 @@
 	// ids
 	switch x := m.Ids.(type) {
 	case *ListOrdersRequest_UserId:
-		n += 1 // tag and wire
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(len(x.UserId)))
 		n += len(x.UserId)
 	case *ListOrdersRequest_OrderIds_:
 		s := proto.Size(x.OrderIds)
-		n += 1 // tag and wire
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
@@ -1768,36 +1509,13 @@
 }
 
 type ListOrdersRequest_OrderIds struct {
-	OrderId              []string `protobuf:"bytes,1,rep,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	OrderId []string `protobuf:"bytes,1,rep,name=order_id,json=orderId" json:"order_id,omitempty"`
 }
 
-func (m *ListOrdersRequest_OrderIds) Reset()         { *m = ListOrdersRequest_OrderIds{} }
-func (m *ListOrdersRequest_OrderIds) String() string { return proto.CompactTextString(m) }
-func (*ListOrdersRequest_OrderIds) ProtoMessage()    {}
-func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{18, 0}
-}
-
-func (m *ListOrdersRequest_OrderIds) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListOrdersRequest_OrderIds.Unmarshal(m, b)
-}
-func (m *ListOrdersRequest_OrderIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListOrdersRequest_OrderIds.Marshal(b, m, deterministic)
-}
-func (m *ListOrdersRequest_OrderIds) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersRequest_OrderIds.Merge(m, src)
-}
-func (m *ListOrdersRequest_OrderIds) XXX_Size() int {
-	return xxx_messageInfo_ListOrdersRequest_OrderIds.Size(m)
-}
-func (m *ListOrdersRequest_OrderIds) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListOrdersRequest_OrderIds.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListOrdersRequest_OrderIds proto.InternalMessageInfo
+func (m *ListOrdersRequest_OrderIds) Reset()                    { *m = ListOrdersRequest_OrderIds{} }
+func (m *ListOrdersRequest_OrderIds) String() string            { return proto.CompactTextString(m) }
+func (*ListOrdersRequest_OrderIds) ProtoMessage()               {}
+func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22, 0} }
 
 func (m *ListOrdersRequest_OrderIds) GetOrderId() []string {
 	if m != nil {
@@ -1809,36 +1527,13 @@
 // Response for the ListOrders RPC.
 type ListOrdersResponse struct {
 	// All requested orders (required)
-	Order                []*Order `protobuf:"bytes,1,rep,name=order,proto3" json:"order,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Order []*Order `protobuf:"bytes,1,rep,name=order" json:"order,omitempty"`
 }
 
-func (m *ListOrdersResponse) Reset()         { *m = ListOrdersResponse{} }
-func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) }
-func (*ListOrdersResponse) ProtoMessage()    {}
-func (*ListOrdersResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{19}
-}
-
-func (m *ListOrdersResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListOrdersResponse.Unmarshal(m, b)
-}
-func (m *ListOrdersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListOrdersResponse.Marshal(b, m, deterministic)
-}
-func (m *ListOrdersResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersResponse.Merge(m, src)
-}
-func (m *ListOrdersResponse) XXX_Size() int {
-	return xxx_messageInfo_ListOrdersResponse.Size(m)
-}
-func (m *ListOrdersResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListOrdersResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListOrdersResponse proto.InternalMessageInfo
+func (m *ListOrdersResponse) Reset()                    { *m = ListOrdersResponse{} }
+func (m *ListOrdersResponse) String() string            { return proto.CompactTextString(m) }
+func (*ListOrdersResponse) ProtoMessage()               {}
+func (*ListOrdersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
 
 func (m *ListOrdersResponse) GetOrder() []*Order {
 	if m != nil {
@@ -1849,40 +1544,13 @@
 
 // Request to update a Booking.
 type UpdateBookingRequest struct {
-	// The booking to be updated
-	// The following fields can be set in a booking:
-	// - status, to cancel a booking.
-	// - start_time and duration in the slot, to reschedule a booking. (required)
-	Booking              *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
 }
 
-func (m *UpdateBookingRequest) Reset()         { *m = UpdateBookingRequest{} }
-func (m *UpdateBookingRequest) String() string { return proto.CompactTextString(m) }
-func (*UpdateBookingRequest) ProtoMessage()    {}
-func (*UpdateBookingRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{20}
-}
-
-func (m *UpdateBookingRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_UpdateBookingRequest.Unmarshal(m, b)
-}
-func (m *UpdateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_UpdateBookingRequest.Marshal(b, m, deterministic)
-}
-func (m *UpdateBookingRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UpdateBookingRequest.Merge(m, src)
-}
-func (m *UpdateBookingRequest) XXX_Size() int {
-	return xxx_messageInfo_UpdateBookingRequest.Size(m)
-}
-func (m *UpdateBookingRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_UpdateBookingRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateBookingRequest proto.InternalMessageInfo
+func (m *UpdateBookingRequest) Reset()                    { *m = UpdateBookingRequest{} }
+func (m *UpdateBookingRequest) String() string            { return proto.CompactTextString(m) }
+func (*UpdateBookingRequest) ProtoMessage()               {}
+func (*UpdateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
 
 func (m *UpdateBookingRequest) GetBooking() *Booking {
 	if m != nil {
@@ -1894,7 +1562,7 @@
 // Response with the updated Booking.
 type UpdateBookingResponse struct {
 	// The updated booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
 	// The updated user payment option originally used to pay for this booking.
 	// This should be set if the UpdateBookingRequest results in a change to
 	// the UserPaymentOption.
@@ -1904,39 +1572,16 @@
 	// allow the user to create another booking with this payment option. In the
 	// case of a single-use payment option, a new single-use user payment option
 	// should be returned. (required if altered in update)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
 	// If updating a booking fails, this field should reflect the business logic
 	// error (e.g., booking is not cancellable) (required if failure occurs)
-	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
-	XXX_unrecognized     []byte          `json:"-"`
-	XXX_sizecache        int32           `json:"-"`
+	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
 }
 
-func (m *UpdateBookingResponse) Reset()         { *m = UpdateBookingResponse{} }
-func (m *UpdateBookingResponse) String() string { return proto.CompactTextString(m) }
-func (*UpdateBookingResponse) ProtoMessage()    {}
-func (*UpdateBookingResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{21}
-}
-
-func (m *UpdateBookingResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_UpdateBookingResponse.Unmarshal(m, b)
-}
-func (m *UpdateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_UpdateBookingResponse.Marshal(b, m, deterministic)
-}
-func (m *UpdateBookingResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UpdateBookingResponse.Merge(m, src)
-}
-func (m *UpdateBookingResponse) XXX_Size() int {
-	return xxx_messageInfo_UpdateBookingResponse.Size(m)
-}
-func (m *UpdateBookingResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_UpdateBookingResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateBookingResponse proto.InternalMessageInfo
+func (m *UpdateBookingResponse) Reset()                    { *m = UpdateBookingResponse{} }
+func (m *UpdateBookingResponse) String() string            { return proto.CompactTextString(m) }
+func (*UpdateBookingResponse) ProtoMessage()               {}
+func (*UpdateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
 
 func (m *UpdateBookingResponse) GetBooking() *Booking {
 	if m != nil {
@@ -1962,45 +1607,22 @@
 // A booking for an inventory slot
 type Booking struct {
 	// ID of this booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
 	// The appointment slot of this booking (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
 	// Status of the booking (required)
-	Status BookingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	Status BookingStatus `protobuf:"varint,4,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
 	// Information about payment transactions that relate to the booking.
 	// (optional)
-	PaymentInformation   *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
-	XXX_unrecognized     []byte              `json:"-"`
-	XXX_sizecache        int32               `json:"-"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
 }
 
-func (m *Booking) Reset()         { *m = Booking{} }
-func (m *Booking) String() string { return proto.CompactTextString(m) }
-func (*Booking) ProtoMessage()    {}
-func (*Booking) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{22}
-}
-
-func (m *Booking) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Booking.Unmarshal(m, b)
-}
-func (m *Booking) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Booking.Marshal(b, m, deterministic)
-}
-func (m *Booking) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Booking.Merge(m, src)
-}
-func (m *Booking) XXX_Size() int {
-	return xxx_messageInfo_Booking.Size(m)
-}
-func (m *Booking) XXX_DiscardUnknown() {
-	xxx_messageInfo_Booking.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Booking proto.InternalMessageInfo
+func (m *Booking) Reset()                    { *m = Booking{} }
+func (m *Booking) String() string            { return proto.CompactTextString(m) }
+func (*Booking) ProtoMessage()               {}
+func (*Booking) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
 
 func (m *Booking) GetBookingId() string {
 	if m != nil {
@@ -2042,41 +1664,18 @@
 // BookingFailure is intended to primarily capture business logic errors.
 type BookingFailure struct {
 	// The reason why the booking failed. (required)
-	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
+	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description          string   `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
 }
 
-func (m *BookingFailure) Reset()         { *m = BookingFailure{} }
-func (m *BookingFailure) String() string { return proto.CompactTextString(m) }
-func (*BookingFailure) ProtoMessage()    {}
-func (*BookingFailure) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{23}
-}
-
-func (m *BookingFailure) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_BookingFailure.Unmarshal(m, b)
-}
-func (m *BookingFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_BookingFailure.Marshal(b, m, deterministic)
-}
-func (m *BookingFailure) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_BookingFailure.Merge(m, src)
-}
-func (m *BookingFailure) XXX_Size() int {
-	return xxx_messageInfo_BookingFailure.Size(m)
-}
-func (m *BookingFailure) XXX_DiscardUnknown() {
-	xxx_messageInfo_BookingFailure.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_BookingFailure proto.InternalMessageInfo
+func (m *BookingFailure) Reset()                    { *m = BookingFailure{} }
+func (m *BookingFailure) String() string            { return proto.CompactTextString(m) }
+func (*BookingFailure) ProtoMessage()               {}
+func (*BookingFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
 
 func (m *BookingFailure) GetCause() BookingFailure_Cause {
 	if m != nil {
@@ -2104,45 +1703,22 @@
 	// ID of this Order, chosen by the booking partner who handles the order
 	// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
 	// CreateOrderRequest)
-	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId" json:"order_id,omitempty"`
 	// Personal information of the user making the order (required)
-	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
 	// Information about payment transactions that relate to the Order.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
 	// The merchant that all services in this Order belong to.
-	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
 	// Line items in this order.
-	Item                 []*LineItem `protobuf:"bytes,5,rep,name=item,proto3" json:"item,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
-	XXX_unrecognized     []byte      `json:"-"`
-	XXX_sizecache        int32       `json:"-"`
+	Item []*LineItem `protobuf:"bytes,5,rep,name=item" json:"item,omitempty"`
 }
 
-func (m *Order) Reset()         { *m = Order{} }
-func (m *Order) String() string { return proto.CompactTextString(m) }
-func (*Order) ProtoMessage()    {}
-func (*Order) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{24}
-}
-
-func (m *Order) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Order.Unmarshal(m, b)
-}
-func (m *Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Order.Marshal(b, m, deterministic)
-}
-func (m *Order) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Order.Merge(m, src)
-}
-func (m *Order) XXX_Size() int {
-	return xxx_messageInfo_Order.Size(m)
-}
-func (m *Order) XXX_DiscardUnknown() {
-	xxx_messageInfo_Order.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Order proto.InternalMessageInfo
+func (m *Order) Reset()                    { *m = Order{} }
+func (m *Order) String() string            { return proto.CompactTextString(m) }
+func (*Order) ProtoMessage()               {}
+func (*Order) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
 
 func (m *Order) GetOrderId() string {
 	if m != nil {
@@ -2183,53 +1759,30 @@
 // slot.
 type LineItem struct {
 	// ID of the merchant Service. (required)
-	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
 	// Duration of the appointment slot in seconds. (required)
-	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
 	// Number of tickets ordered by Ticket Type.
-	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets,proto3" json:"tickets,omitempty"`
+	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets" json:"tickets,omitempty"`
 	// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
 	// the total price (excluding taxes) of the item must be verified to guard
 	// against price changes. In CreateOrderResponse and
 	// CheckOrderFulfillabilityResponse, the price should be updated to the
 	// correct value if the value from the request was incorrect or outdated.
 	// (reqired)
-	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
 	// Status of the Line Item. (required in CreateOrderResponse and
 	// ListOrdersResponse; should not be set in requests)
-	Status               BookingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
-	XXX_unrecognized     []byte        `json:"-"`
-	XXX_sizecache        int32         `json:"-"`
+	Status BookingStatus `protobuf:"varint,6,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
 }
 
-func (m *LineItem) Reset()         { *m = LineItem{} }
-func (m *LineItem) String() string { return proto.CompactTextString(m) }
-func (*LineItem) ProtoMessage()    {}
-func (*LineItem) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{25}
-}
-
-func (m *LineItem) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LineItem.Unmarshal(m, b)
-}
-func (m *LineItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LineItem.Marshal(b, m, deterministic)
-}
-func (m *LineItem) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItem.Merge(m, src)
-}
-func (m *LineItem) XXX_Size() int {
-	return xxx_messageInfo_LineItem.Size(m)
-}
-func (m *LineItem) XXX_DiscardUnknown() {
-	xxx_messageInfo_LineItem.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LineItem proto.InternalMessageInfo
+func (m *LineItem) Reset()                    { *m = LineItem{} }
+func (m *LineItem) String() string            { return proto.CompactTextString(m) }
+func (*LineItem) ProtoMessage()               {}
+func (*LineItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
 
 func (m *LineItem) GetServiceId() string {
 	if m != nil {
@@ -2274,37 +1827,14 @@
 }
 
 type LineItem_OrderedTickets struct {
-	TicketId             string   `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId,proto3" json:"ticket_id,omitempty"`
-	Count                int32    `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	TicketId string `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId" json:"ticket_id,omitempty"`
+	Count    int32  `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
 }
 
-func (m *LineItem_OrderedTickets) Reset()         { *m = LineItem_OrderedTickets{} }
-func (m *LineItem_OrderedTickets) String() string { return proto.CompactTextString(m) }
-func (*LineItem_OrderedTickets) ProtoMessage()    {}
-func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{25, 0}
-}
-
-func (m *LineItem_OrderedTickets) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LineItem_OrderedTickets.Unmarshal(m, b)
-}
-func (m *LineItem_OrderedTickets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LineItem_OrderedTickets.Marshal(b, m, deterministic)
-}
-func (m *LineItem_OrderedTickets) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItem_OrderedTickets.Merge(m, src)
-}
-func (m *LineItem_OrderedTickets) XXX_Size() int {
-	return xxx_messageInfo_LineItem_OrderedTickets.Size(m)
-}
-func (m *LineItem_OrderedTickets) XXX_DiscardUnknown() {
-	xxx_messageInfo_LineItem_OrderedTickets.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LineItem_OrderedTickets proto.InternalMessageInfo
+func (m *LineItem_OrderedTickets) Reset()                    { *m = LineItem_OrderedTickets{} }
+func (m *LineItem_OrderedTickets) String() string            { return proto.CompactTextString(m) }
+func (*LineItem_OrderedTickets) ProtoMessage()               {}
+func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} }
 
 func (m *LineItem_OrderedTickets) GetTicketId() string {
 	if m != nil {
@@ -2324,43 +1854,20 @@
 // OrderFailure is intended to primarily capture business logic errors.
 type OrderFailure struct {
 	// The reason why the order failed. (required)
-	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
+	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is ORDER_UNFULFILLABLE)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability" json:"fulfillability,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description          string   `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
 }
 
-func (m *OrderFailure) Reset()         { *m = OrderFailure{} }
-func (m *OrderFailure) String() string { return proto.CompactTextString(m) }
-func (*OrderFailure) ProtoMessage()    {}
-func (*OrderFailure) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{26}
-}
-
-func (m *OrderFailure) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_OrderFailure.Unmarshal(m, b)
-}
-func (m *OrderFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_OrderFailure.Marshal(b, m, deterministic)
-}
-func (m *OrderFailure) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OrderFailure.Merge(m, src)
-}
-func (m *OrderFailure) XXX_Size() int {
-	return xxx_messageInfo_OrderFailure.Size(m)
-}
-func (m *OrderFailure) XXX_DiscardUnknown() {
-	xxx_messageInfo_OrderFailure.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_OrderFailure proto.InternalMessageInfo
+func (m *OrderFailure) Reset()                    { *m = OrderFailure{} }
+func (m *OrderFailure) String() string            { return proto.CompactTextString(m) }
+func (*OrderFailure) ProtoMessage()               {}
+func (*OrderFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
 
 func (m *OrderFailure) GetCause() OrderFailure_Cause {
 	if m != nil {
@@ -2391,41 +1898,18 @@
 }
 
 type OrderFulfillability struct {
-	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
+	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
 	// Fulfillability results of all line items in this order (required).
-	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability,proto3" json:"item_fulfillability,omitempty"`
+	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability" json:"item_fulfillability,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason  string   `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
 }
 
-func (m *OrderFulfillability) Reset()         { *m = OrderFulfillability{} }
-func (m *OrderFulfillability) String() string { return proto.CompactTextString(m) }
-func (*OrderFulfillability) ProtoMessage()    {}
-func (*OrderFulfillability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{27}
-}
-
-func (m *OrderFulfillability) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_OrderFulfillability.Unmarshal(m, b)
-}
-func (m *OrderFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_OrderFulfillability.Marshal(b, m, deterministic)
-}
-func (m *OrderFulfillability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OrderFulfillability.Merge(m, src)
-}
-func (m *OrderFulfillability) XXX_Size() int {
-	return xxx_messageInfo_OrderFulfillability.Size(m)
-}
-func (m *OrderFulfillability) XXX_DiscardUnknown() {
-	xxx_messageInfo_OrderFulfillability.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_OrderFulfillability proto.InternalMessageInfo
+func (m *OrderFulfillability) Reset()                    { *m = OrderFulfillability{} }
+func (m *OrderFulfillability) String() string            { return proto.CompactTextString(m) }
+func (*OrderFulfillability) ProtoMessage()               {}
+func (*OrderFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
 
 func (m *OrderFulfillability) GetResult() OrderFulfillability_OrderFulfillabilityResult {
 	if m != nil {
@@ -2451,48 +1935,25 @@
 // Fulfillability of a line item.
 type LineItemFulfillability struct {
 	// The line item of question. (required)
-	Item *LineItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Item *LineItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
 	// (required)
-	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
+	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
+	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
 	// (optional)
-	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability,proto3" json:"availability,omitempty"`
+	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability" json:"availability,omitempty"`
 	// Updated ticket types can be piggybacked in
 	// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
 	// for this slot with up-to-date prices should be listed without omitting any.
 	// (optional)
-	TicketType           []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
-	XXX_unrecognized     []byte        `json:"-"`
-	XXX_sizecache        int32         `json:"-"`
+	TicketType []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType" json:"ticket_type,omitempty"`
 }
 
-func (m *LineItemFulfillability) Reset()         { *m = LineItemFulfillability{} }
-func (m *LineItemFulfillability) String() string { return proto.CompactTextString(m) }
-func (*LineItemFulfillability) ProtoMessage()    {}
-func (*LineItemFulfillability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{28}
-}
-
-func (m *LineItemFulfillability) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LineItemFulfillability.Unmarshal(m, b)
-}
-func (m *LineItemFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LineItemFulfillability.Marshal(b, m, deterministic)
-}
-func (m *LineItemFulfillability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItemFulfillability.Merge(m, src)
-}
-func (m *LineItemFulfillability) XXX_Size() int {
-	return xxx_messageInfo_LineItemFulfillability.Size(m)
-}
-func (m *LineItemFulfillability) XXX_DiscardUnknown() {
-	xxx_messageInfo_LineItemFulfillability.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LineItemFulfillability proto.InternalMessageInfo
+func (m *LineItemFulfillability) Reset()                    { *m = LineItemFulfillability{} }
+func (m *LineItemFulfillability) String() string            { return proto.CompactTextString(m) }
+func (*LineItemFulfillability) ProtoMessage()               {}
+func (*LineItemFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
 
 func (m *LineItemFulfillability) GetItem() *LineItem {
 	if m != nil {
@@ -2534,10 +1995,7 @@
 type LineItemFulfillability_UpdatedAvailability struct {
 	// Number of available spots for the given slot. 0 indicates no
 	// availability. (required)
-	SpotsOpen            int32    `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	SpotsOpen int32 `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
 }
 
 func (m *LineItemFulfillability_UpdatedAvailability) Reset() {
@@ -2548,27 +2006,9 @@
 }
 func (*LineItemFulfillability_UpdatedAvailability) ProtoMessage() {}
 func (*LineItemFulfillability_UpdatedAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{28, 0}
+	return fileDescriptor0, []int{32, 0}
 }
 
-func (m *LineItemFulfillability_UpdatedAvailability) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Unmarshal(m, b)
-}
-func (m *LineItemFulfillability_UpdatedAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Marshal(b, m, deterministic)
-}
-func (m *LineItemFulfillability_UpdatedAvailability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Merge(m, src)
-}
-func (m *LineItemFulfillability_UpdatedAvailability) XXX_Size() int {
-	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Size(m)
-}
-func (m *LineItemFulfillability_UpdatedAvailability) XXX_DiscardUnknown() {
-	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LineItemFulfillability_UpdatedAvailability proto.InternalMessageInfo
-
 func (m *LineItemFulfillability_UpdatedAvailability) GetSpotsOpen() int32 {
 	if m != nil {
 		return m.SpotsOpen
@@ -2576,48 +2016,64 @@
 	return 0
 }
 
-// TicketType is used to differentiate among tickets (where a ticket can be a
-// spot on a raft trip, an admission to a museum, etc.) with different prices
-// and/or availabilities due to different user types or different service
-// attributes.
+// TicketType is used to differentiate among tickets with different prices
+// and/or availabilities due to different user types, different
+// service attributes, or different options/add-ons.
+//
+// A ticket is the minimal bookable unit to a service, e.g. a spot on a rafting
+// trip, an admission to a museum, a full day double kayak rental.
 type TicketType struct {
 	// The ticket id is used to differentiate among different ticket types of the
 	// same service, and is only expected to be unique within a service.
-	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
+	// A short description to this TicketType.
+	//
 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
+	// Required, each ticket type should have a description to be user visible.
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" 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"`
+	// Description of any additional option which this ticket type represents, if
+	// any.
+	//
+	// This is useful when the ticket type represents multiple dimensions.
+	//
+	// Example 1: an admission ticket with different types 'adult', 'child' and
+	// language as an additional option, the expected TicketType list would be:
+	//     - { ticket_type_id: "ticket_type_1" short_description: "adult"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_2" short_description: "adult"
+	//         option_description: "spanish" }
+	//     - { ticket_type_id: "ticket_type_3" short_description: "child"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_4" short_description: "child"
+	//         option_description: "spanish" }
+	//
+	// Example 2: an multi-hour kayak rental with optional dry bag add-on, the
+	// short_description could be "3 hours" and the option_description could be
+	// either "with dry bag" or "without dry bag":
+	//     - { ticket_type_id: "ticket_type_1" short_description: "2 hours"
+	//         option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_2" short_description: "3 hours"
+	//         option_description: "spanish" }
+	//     - { ticket_type_id: "ticket_type_3" short_description: "2 hours"
+	//          option_description: "english" }
+	//     - { ticket_type_id: "ticket_type_4" short_description: "3 hours"
+	//          option_description: "spanish" }
+	//
+	// Optional, but if any ticket type within the service has this field set, we
+	// expect all other ticket types to have this field set as well (a default
+	// option_description could be used). E.g.
+	// [{ticket_type_1, adult, english}, {ticket_type_1, adult, ''}] is not a
+	// valid list.
+	OptionDescription string `protobuf:"bytes,4,opt,name=option_description,json=optionDescription" json:"option_description,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_1820d8e1a9fad753, []int{29}
-}
-
-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{33} }
 
 func (m *TicketType) GetTicketTypeId() string {
 	if m != nil {
@@ -2640,46 +2096,30 @@
 	return nil
 }
 
+func (m *TicketType) GetOptionDescription() string {
+	if m != nil {
+		return m.OptionDescription
+	}
+	return ""
+}
+
 // Resource specification that disambiguates an appointment slot
 type ResourceIds struct {
 	// The staff ID as provided in the feed or empty if not applicable or no staff
 	// was selected. (optional)
-	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" json:"staff_id,omitempty"`
 	// The room ID as provided in the feed or empty if not applicable or no room
 	// was selected. (optional)
-	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
+	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId" json:"room_id,omitempty"`
 	// For Dining Reservations only: the number of seats requested in the booking.
 	// (optional)
-	PartySize            int32    `protobuf:"varint,3,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	PartySize int32 `protobuf:"varint,3,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
 }
 
-func (m *ResourceIds) Reset()         { *m = ResourceIds{} }
-func (m *ResourceIds) String() string { return proto.CompactTextString(m) }
-func (*ResourceIds) ProtoMessage()    {}
-func (*ResourceIds) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{30}
-}
-
-func (m *ResourceIds) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ResourceIds.Unmarshal(m, b)
-}
-func (m *ResourceIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ResourceIds.Marshal(b, m, deterministic)
-}
-func (m *ResourceIds) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ResourceIds.Merge(m, src)
-}
-func (m *ResourceIds) XXX_Size() int {
-	return xxx_messageInfo_ResourceIds.Size(m)
-}
-func (m *ResourceIds) XXX_DiscardUnknown() {
-	xxx_messageInfo_ResourceIds.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ResourceIds proto.InternalMessageInfo
+func (m *ResourceIds) Reset()                    { *m = ResourceIds{} }
+func (m *ResourceIds) String() string            { return proto.CompactTextString(m) }
+func (*ResourceIds) ProtoMessage()               {}
+func (*ResourceIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
 
 func (m *ResourceIds) GetStaffId() string {
 	if m != nil {
@@ -2702,12 +2142,43 @@
 	return 0
 }
 
+// A configuration for payment-processor tokenization, set up on a per-Merchant
+// basis.
+type TokenizationConfig struct {
+	// A tokenization configuration will typically have one
+	// tokenization_parameter whose key is "gateway" and whose value is the
+	// name of the processor.
+	TokenizationParameter map[string]string `protobuf:"bytes,1,rep,name=tokenization_parameter,json=tokenizationParameter" json:"tokenization_parameter,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// Include in the payment token the user's billing information as entered into
+	// Google Pay with their FOP (see above).
+	BillingInformationFormat TokenizationConfig_BillingInformationFormat `protobuf:"varint,2,opt,name=billing_information_format,json=billingInformationFormat,enum=ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat" json:"billing_information_format,omitempty"`
+}
+
+func (m *TokenizationConfig) Reset()                    { *m = TokenizationConfig{} }
+func (m *TokenizationConfig) String() string            { return proto.CompactTextString(m) }
+func (*TokenizationConfig) ProtoMessage()               {}
+func (*TokenizationConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
+
+func (m *TokenizationConfig) GetTokenizationParameter() map[string]string {
+	if m != nil {
+		return m.TokenizationParameter
+	}
+	return nil
+}
+
+func (m *TokenizationConfig) GetBillingInformationFormat() TokenizationConfig_BillingInformationFormat {
+	if m != nil {
+		return m.BillingInformationFormat
+	}
+	return TokenizationConfig_BILLING_INFORMATION_FORMAT_UNSPECIFIED
+}
+
 type PaymentProcessingParameters struct {
 	// The payment processor used to process payment for a given booking.
 	// (required)
 	//
 	// Replaced by the payment_processor field.
-	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,proto3,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"` // Deprecated: Do not use.
+	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"`
 	// The token representing the payment method that will be used to pay
 	// for this booking. This token can be only used once. This token can be
 	// only used for the merchant associated with this booking.
@@ -2720,7 +2191,7 @@
 	// For example, for Stripe, unparsed_payment_method_token is a serialized
 	// JSON object documented at https://stripe.com/docs/api#token_object.
 	// payment_method_token is the 'id' field parsed out of that.
-	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken,proto3" json:"payment_method_token,omitempty"` // Deprecated: Do not use.
+	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken" json:"payment_method_token,omitempty"`
 	// The full token received from Google Payments.  This is typically a
 	// serialized JSON object.  See documentation from Google Payments and your
 	// payment processor for the JSON format of the token for your processor.
@@ -2728,47 +2199,28 @@
 	//
 	// This token can only be used once, and only for the merchant associated with
 	// this booking.
-	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken,proto3" json:"unparsed_payment_method_token,omitempty"`
+	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken" json:"unparsed_payment_method_token,omitempty"`
 	// The payment processor API version that the given payment token is valid
 	// for.
 	//
 	// Each processor may choose its own format for this field.
 	// Stripe uses a date (e.g. "2017-06-15"). (required)
-	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
+	// This is deprecated in favor of tokenization_parameters.
+	Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"`
 	// The payment processor whose configuration was used to generate this token.
 	// (required)
-	PaymentProcessor     string   `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor,proto3" json:"payment_processor,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	// This is deprecated in favor of tokenization_parameters.
+	PaymentProcessor string `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor" json:"payment_processor,omitempty"`
+	// The tokenization_config supplied in the Merchant feed that was used
+	// to generate unparsed_payment_method_token.
+	TokenizationConfig *TokenizationConfig `protobuf:"bytes,6,opt,name=tokenization_config,json=tokenizationConfig" json:"tokenization_config,omitempty"`
 }
 
-func (m *PaymentProcessingParameters) Reset()         { *m = PaymentProcessingParameters{} }
-func (m *PaymentProcessingParameters) String() string { return proto.CompactTextString(m) }
-func (*PaymentProcessingParameters) ProtoMessage()    {}
-func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{31}
-}
+func (m *PaymentProcessingParameters) Reset()                    { *m = PaymentProcessingParameters{} }
+func (m *PaymentProcessingParameters) String() string            { return proto.CompactTextString(m) }
+func (*PaymentProcessingParameters) ProtoMessage()               {}
+func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
 
-func (m *PaymentProcessingParameters) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PaymentProcessingParameters.Unmarshal(m, b)
-}
-func (m *PaymentProcessingParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PaymentProcessingParameters.Marshal(b, m, deterministic)
-}
-func (m *PaymentProcessingParameters) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PaymentProcessingParameters.Merge(m, src)
-}
-func (m *PaymentProcessingParameters) XXX_Size() int {
-	return xxx_messageInfo_PaymentProcessingParameters.Size(m)
-}
-func (m *PaymentProcessingParameters) XXX_DiscardUnknown() {
-	xxx_messageInfo_PaymentProcessingParameters.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PaymentProcessingParameters proto.InternalMessageInfo
-
-// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetProcessor() PaymentProcessingParameters_PaymentProcessor {
 	if m != nil {
 		return m.Processor
@@ -2776,7 +2228,6 @@
 	return PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED
 }
 
-// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetPaymentMethodToken() string {
 	if m != nil {
 		return m.PaymentMethodToken
@@ -2805,6 +2256,13 @@
 	return ""
 }
 
+func (m *PaymentProcessingParameters) GetTokenizationConfig() *TokenizationConfig {
+	if m != nil {
+		return m.TokenizationConfig
+	}
+	return nil
+}
+
 // This describes a payment option, such as a pack, membership, or
 // single-session pass after it has been purchased by a user. It includes an
 // identifier for the user payment option, as well as some information about
@@ -2812,55 +2270,32 @@
 type UserPaymentOption struct {
 	// A unique identifier for the user payment option. This Id MUST be unique
 	// for all UserPaymentOptions across all merchants and users. (required)
-	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3" json:"user_payment_option_id,omitempty"`
+	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId" json:"user_payment_option_id,omitempty"`
 	// The user payment option will be valid (usable) between start_time and
 	// end_time set in UTC. Attempts to use a user payment option to make a
 	// booking outside of this interval will fail. (both optional)
-	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec,proto3" json:"valid_start_time_sec,omitempty"`
-	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec,proto3" json:"valid_end_time_sec,omitempty"`
+	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec" json:"valid_start_time_sec,omitempty"`
+	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec" json:"valid_end_time_sec,omitempty"`
 	// The type of the payment option associated with this user payment option.
 	// This can be unlimited for a membership or subscription, multi-use for a
 	// pack, or single-use. (required)
-	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,proto3,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
+	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
 	// The original number of uses for this user payment option when it was
 	// purchased. This value is ignored for unlimited payment options. (required)
-	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount,proto3" json:"original_count,omitempty"`
+	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount" json:"original_count,omitempty"`
 	// The number of uses remaining for this user payment option. If this number
 	// is 0 for a pack, attempts to use this payment option to make a booking will
 	// fail. (required)
-	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount,proto3" json:"current_count,omitempty"`
+	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount" json:"current_count,omitempty"`
 	// The id of the payment option that has been used to purchase this user
 	// payment option. (required)
-	PaymentOptionId      string   `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	PaymentOptionId string `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
 }
 
-func (m *UserPaymentOption) Reset()         { *m = UserPaymentOption{} }
-func (m *UserPaymentOption) String() string { return proto.CompactTextString(m) }
-func (*UserPaymentOption) ProtoMessage()    {}
-func (*UserPaymentOption) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{32}
-}
-
-func (m *UserPaymentOption) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_UserPaymentOption.Unmarshal(m, b)
-}
-func (m *UserPaymentOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_UserPaymentOption.Marshal(b, m, deterministic)
-}
-func (m *UserPaymentOption) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UserPaymentOption.Merge(m, src)
-}
-func (m *UserPaymentOption) XXX_Size() int {
-	return xxx_messageInfo_UserPaymentOption.Size(m)
-}
-func (m *UserPaymentOption) XXX_DiscardUnknown() {
-	xxx_messageInfo_UserPaymentOption.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UserPaymentOption proto.InternalMessageInfo
+func (m *UserPaymentOption) Reset()                    { *m = UserPaymentOption{} }
+func (m *UserPaymentOption) String() string            { return proto.CompactTextString(m) }
+func (*UserPaymentOption) ProtoMessage()               {}
+func (*UserPaymentOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
 
 func (m *UserPaymentOption) GetUserPaymentOptionId() string {
 	if m != nil {
@@ -2920,13 +2355,13 @@
 	// If the prepayment status is PREPAYMENT_REFUNDED, then
 	// payment_transaction_id contains the associated unique transaction id for
 	// the refund. (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
 	// Unique identifier for a payment transaction associated with the booking.
 	// If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
 	// If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
 	// Google's CreateBooking or CreateOrder requests to the partner, and it must
 	// be set by the partner in their responses.
-	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId,proto3" json:"payment_transaction_id,omitempty"`
+	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId" json:"payment_transaction_id,omitempty"`
 	// These fields must match the service price (specified in the Services feed)
 	// or the PaymentOption corresponding with this service.
 	// They are included in the booking request and response to verify that
@@ -2936,15 +2371,15 @@
 	// The price of the booking or order, exclusive of any taxes.
 	// Existence of price or taxes does not imply that they have been paid,
 	// prepayment_state should be used for that purpose. (required)
-	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
 	// Taxes that are calculated to be paid for this booking.
 	// This field can only be absent in one of the following cases:
 	// (1) the price is exempt from or already inclusive of applicable taxes; or
 	// (2) the break down between taxes and fees is not available.
 	// (required when neither of the above holds)
-	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount,proto3" json:"tax_amount,omitempty"`
+	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount" json:"tax_amount,omitempty"`
 	// Whether the partner or Google processed the payment. (required)
-	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,proto3,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
+	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
 	// The id of the payment option or user payment option associated with the
 	// booking.
 	// If a payment option is purchased as part of a booking, payment_option_id
@@ -2963,43 +2398,41 @@
 	PaymentId isPaymentInformation_PaymentId `protobuf_oneof:"payment_id"`
 	// Defines how a deposit may be charged to the user. If there is a deposit,
 	// this field should be set. (optional)
-	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit,proto3" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. If the user can be
 	// charged a no show fee, this field should be set. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
 	// Total processing fees & taxes that the user needs to pay for the order;
 	// only applicable to partners that handle order based booking (e.g., with
 	// CreateOrder method). (optional)
-	FeesAndTaxes         *Price   `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	FeesAndTaxes *Price `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
 }
 
-func (m *PaymentInformation) Reset()         { *m = PaymentInformation{} }
-func (m *PaymentInformation) String() string { return proto.CompactTextString(m) }
-func (*PaymentInformation) ProtoMessage()    {}
-func (*PaymentInformation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{33}
+func (m *PaymentInformation) Reset()                    { *m = PaymentInformation{} }
+func (m *PaymentInformation) String() string            { return proto.CompactTextString(m) }
+func (*PaymentInformation) ProtoMessage()               {}
+func (*PaymentInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
+
+type isPaymentInformation_PaymentId interface {
+	isPaymentInformation_PaymentId()
 }
 
-func (m *PaymentInformation) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PaymentInformation.Unmarshal(m, b)
+type PaymentInformation_PaymentOptionId struct {
+	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,oneof"`
 }
-func (m *PaymentInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PaymentInformation.Marshal(b, m, deterministic)
-}
-func (m *PaymentInformation) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PaymentInformation.Merge(m, src)
-}
-func (m *PaymentInformation) XXX_Size() int {
-	return xxx_messageInfo_PaymentInformation.Size(m)
-}
-func (m *PaymentInformation) XXX_DiscardUnknown() {
-	xxx_messageInfo_PaymentInformation.DiscardUnknown(m)
+type PaymentInformation_UserPaymentOptionId struct {
+	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,oneof"`
 }
 
-var xxx_messageInfo_PaymentInformation proto.InternalMessageInfo
+func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId()     {}
+func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
+	if m != nil {
+		return m.PaymentId
+	}
+	return nil
+}
 
 func (m *PaymentInformation) GetPrepaymentStatus() PrepaymentStatus {
 	if m != nil {
@@ -3036,29 +2469,6 @@
 	return PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED
 }
 
-type isPaymentInformation_PaymentId interface {
-	isPaymentInformation_PaymentId()
-}
-
-type PaymentInformation_PaymentOptionId struct {
-	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,proto3,oneof"`
-}
-
-type PaymentInformation_UserPaymentOptionId struct {
-	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
-}
-
-func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId() {}
-
-func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
-
-func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
-	if m != nil {
-		return m.PaymentId
-	}
-	return nil
-}
-
 func (m *PaymentInformation) GetPaymentOptionId() string {
 	if x, ok := m.GetPaymentId().(*PaymentInformation_PaymentOptionId); ok {
 		return x.PaymentOptionId
@@ -3146,11 +2556,11 @@
 	// payment_id
 	switch x := m.PaymentId.(type) {
 	case *PaymentInformation_PaymentOptionId:
-		n += 1 // tag and wire
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(len(x.PaymentOptionId)))
 		n += len(x.PaymentOptionId)
 	case *PaymentInformation_UserPaymentOptionId:
-		n += 1 // tag and wire
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
 		n += proto.SizeVarint(uint64(len(x.UserPaymentOptionId)))
 		n += len(x.UserPaymentOptionId)
 	case nil:
@@ -3167,41 +2577,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_1820d8e1a9fad753, []int{34}
-}
-
-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{39} }
 
 func (m *Price) GetPriceMicros() int64 {
 	if m != nil {
@@ -3229,38 +2616,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=ext.maps.booking.partner.v3.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=ext.maps.booking.partner.v3.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_1820d8e1a9fad753, []int{35}
-}
-
-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{40} }
 
 func (m *NoShowFee) GetFee() *Price {
 	if m != nil {
@@ -3280,40 +2644,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=ext.maps.booking.partner.v3.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=ext.maps.booking.partner.v3.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_1820d8e1a9fad753, []int{36}
-}
-
-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{41} }
 
 func (m *Deposit) GetDeposit() *Price {
 	if m != nil {
@@ -3339,49 +2680,26 @@
 // An inventory slot
 type Slot struct {
 	// ID of the merchant for the slot (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
 	// ID of the merchant 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"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
 	// Duration of the appointment slot (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"`
 	// Opaque tag that identifies the availability slot and matches the value
 	// provided in the availability feed (optional)
-	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
 	// The set of resources that disambiguates the appointment slot, e.g. by
 	// indicating the staff member and room selected by the user (optional)
-	Resources            *ResourceIds `protobuf:"bytes,6,opt,name=resources,proto3" json:"resources,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
-	XXX_unrecognized     []byte       `json:"-"`
-	XXX_sizecache        int32        `json:"-"`
+	Resources *ResourceIds `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"`
 }
 
-func (m *Slot) Reset()         { *m = Slot{} }
-func (m *Slot) String() string { return proto.CompactTextString(m) }
-func (*Slot) ProtoMessage()    {}
-func (*Slot) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{37}
-}
-
-func (m *Slot) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Slot.Unmarshal(m, b)
-}
-func (m *Slot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Slot.Marshal(b, m, deterministic)
-}
-func (m *Slot) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Slot.Merge(m, src)
-}
-func (m *Slot) XXX_Size() int {
-	return xxx_messageInfo_Slot.Size(m)
-}
-func (m *Slot) XXX_DiscardUnknown() {
-	xxx_messageInfo_Slot.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Slot proto.InternalMessageInfo
+func (m *Slot) Reset()                    { *m = Slot{} }
+func (m *Slot) String() string            { return proto.CompactTextString(m) }
+func (*Slot) ProtoMessage()               {}
+func (*Slot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
 
 func (m *Slot) GetMerchantId() string {
 	if m != nil {
@@ -3429,46 +2747,23 @@
 type UserInformation struct {
 	// Unique ID of the user to the partner, chosen by Reserve with Google.
 	// (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
 	// Given name of the user (maximum 40 characters) (required)
-	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
+	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName" json:"given_name,omitempty"`
 	// Family name of the user (maximum 40 characters) (required)
-	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
+	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName" json:"family_name,omitempty"`
 	// Address of the user (optional)
-	Address *PostalAddress `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
+	Address *PostalAddress `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"`
 	// Phone number of the user (required)
-	Telephone string `protobuf:"bytes,5,opt,name=telephone,proto3" json:"telephone,omitempty"`
+	Telephone string `protobuf:"bytes,5,opt,name=telephone" json:"telephone,omitempty"`
 	// Email address of the user (required)
-	Email                string   `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Email string `protobuf:"bytes,6,opt,name=email" json:"email,omitempty"`
 }
 
-func (m *UserInformation) Reset()         { *m = UserInformation{} }
-func (m *UserInformation) String() string { return proto.CompactTextString(m) }
-func (*UserInformation) ProtoMessage()    {}
-func (*UserInformation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{38}
-}
-
-func (m *UserInformation) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_UserInformation.Unmarshal(m, b)
-}
-func (m *UserInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_UserInformation.Marshal(b, m, deterministic)
-}
-func (m *UserInformation) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UserInformation.Merge(m, src)
-}
-func (m *UserInformation) XXX_Size() int {
-	return xxx_messageInfo_UserInformation.Size(m)
-}
-func (m *UserInformation) XXX_DiscardUnknown() {
-	xxx_messageInfo_UserInformation.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UserInformation proto.InternalMessageInfo
+func (m *UserInformation) Reset()                    { *m = UserInformation{} }
+func (m *UserInformation) String() string            { return proto.CompactTextString(m) }
+func (*UserInformation) ProtoMessage()               {}
+func (*UserInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
 
 func (m *UserInformation) GetUserId() string {
 	if m != nil {
@@ -3515,44 +2810,21 @@
 // The postal address for a merchant.
 type PostalAddress struct {
 	// The country, e.g. "USA". (required)
-	Country string `protobuf:"bytes,1,opt,name=country,proto3" json:"country,omitempty"`
+	Country string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"`
 	// The locality/city, e.g. "Mountain View". (required)
-	Locality string `protobuf:"bytes,2,opt,name=locality,proto3" json:"locality,omitempty"`
+	Locality string `protobuf:"bytes,2,opt,name=locality" json:"locality,omitempty"`
 	// The region/state/province, e.g. "CA". (required)
-	Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"`
+	Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"`
 	// The postal code, e.g. "94043". (required)
-	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode" json:"postal_code,omitempty"`
 	// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
-	StreetAddress        string   `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	StreetAddress string `protobuf:"bytes,5,opt,name=street_address,json=streetAddress" json:"street_address,omitempty"`
 }
 
-func (m *PostalAddress) Reset()         { *m = PostalAddress{} }
-func (m *PostalAddress) String() string { return proto.CompactTextString(m) }
-func (*PostalAddress) ProtoMessage()    {}
-func (*PostalAddress) Descriptor() ([]byte, []int) {
-	return fileDescriptor_1820d8e1a9fad753, []int{39}
-}
-
-func (m *PostalAddress) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PostalAddress.Unmarshal(m, b)
-}
-func (m *PostalAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PostalAddress.Marshal(b, m, deterministic)
-}
-func (m *PostalAddress) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PostalAddress.Merge(m, src)
-}
-func (m *PostalAddress) XXX_Size() int {
-	return xxx_messageInfo_PostalAddress.Size(m)
-}
-func (m *PostalAddress) XXX_DiscardUnknown() {
-	xxx_messageInfo_PostalAddress.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PostalAddress proto.InternalMessageInfo
+func (m *PostalAddress) Reset()                    { *m = PostalAddress{} }
+func (m *PostalAddress) String() string            { return proto.CompactTextString(m) }
+func (*PostalAddress) ProtoMessage()               {}
+func (*PostalAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
 
 func (m *PostalAddress) GetCountry() string {
 	if m != nil {
@@ -3590,22 +2862,14 @@
 }
 
 func init() {
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 	proto.RegisterType((*CheckAvailabilityRequest)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityRequest")
 	proto.RegisterType((*CheckAvailabilityResponse)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityResponse")
 	proto.RegisterType((*AvailabilityUpdate)(nil), "ext.maps.booking.partner.v3.AvailabilityUpdate")
 	proto.RegisterType((*SlotAvailability)(nil), "ext.maps.booking.partner.v3.SlotAvailability")
+	proto.RegisterType((*SlotTime)(nil), "ext.maps.booking.partner.v3.SlotTime")
+	proto.RegisterType((*SlotTimeAvailability)(nil), "ext.maps.booking.partner.v3.SlotTimeAvailability")
+	proto.RegisterType((*BatchAvailabilityLookupRequest)(nil), "ext.maps.booking.partner.v3.BatchAvailabilityLookupRequest")
+	proto.RegisterType((*BatchAvailabilityLookupResponse)(nil), "ext.maps.booking.partner.v3.BatchAvailabilityLookupResponse")
 	proto.RegisterType((*CheckOrderFulfillabilityRequest)(nil), "ext.maps.booking.partner.v3.CheckOrderFulfillabilityRequest")
 	proto.RegisterType((*CheckOrderFulfillabilityResponse)(nil), "ext.maps.booking.partner.v3.CheckOrderFulfillabilityResponse")
 	proto.RegisterType((*GetBookingStatusRequest)(nil), "ext.maps.booking.partner.v3.GetBookingStatusRequest")
@@ -3636,6 +2900,7 @@
 	proto.RegisterType((*LineItemFulfillability_UpdatedAvailability)(nil), "ext.maps.booking.partner.v3.LineItemFulfillability.UpdatedAvailability")
 	proto.RegisterType((*TicketType)(nil), "ext.maps.booking.partner.v3.TicketType")
 	proto.RegisterType((*ResourceIds)(nil), "ext.maps.booking.partner.v3.ResourceIds")
+	proto.RegisterType((*TokenizationConfig)(nil), "ext.maps.booking.partner.v3.TokenizationConfig")
 	proto.RegisterType((*PaymentProcessingParameters)(nil), "ext.maps.booking.partner.v3.PaymentProcessingParameters")
 	proto.RegisterType((*UserPaymentOption)(nil), "ext.maps.booking.partner.v3.UserPaymentOption")
 	proto.RegisterType((*PaymentInformation)(nil), "ext.maps.booking.partner.v3.PaymentInformation")
@@ -3645,217 +2910,251 @@
 	proto.RegisterType((*Slot)(nil), "ext.maps.booking.partner.v3.Slot")
 	proto.RegisterType((*UserInformation)(nil), "ext.maps.booking.partner.v3.UserInformation")
 	proto.RegisterType((*PostalAddress)(nil), "ext.maps.booking.partner.v3.PostalAddress")
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat", TokenizationConfig_BillingInformationFormat_name, TokenizationConfig_BillingInformationFormat_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 }
 
-func init() { proto.RegisterFile("v3.proto", fileDescriptor_1820d8e1a9fad753) }
+func init() { proto.RegisterFile("v3.proto", fileDescriptor0) }
 
-var fileDescriptor_1820d8e1a9fad753 = []byte{
-	// 3307 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x3d, 0x70, 0x1b, 0x47,
-	0x77, 0x3a, 0xfc, 0x10, 0xc4, 0x03, 0x09, 0x1e, 0x97, 0xb4, 0x04, 0xea, 0xc7, 0xa2, 0xce, 0x92,
-	0x2d, 0x53, 0x36, 0x1d, 0x53, 0xf2, 0xc4, 0xce, 0x64, 0x9c, 0x1c, 0x71, 0x4b, 0xf1, 0x64, 0x10,
-	0x80, 0x17, 0x07, 0x4a, 0x72, 0x91, 0xf3, 0x09, 0xb7, 0xa4, 0x2e, 0x02, 0x70, 0xf0, 0xdd, 0x81,
-	0x16, 0x3d, 0x71, 0x97, 0x36, 0x45, 0x26, 0x45, 0x26, 0x45, 0x4a, 0x77, 0xc9, 0x4c, 0x8a, 0x34,
-	0x99, 0x34, 0x99, 0xc9, 0x4c, 0x8a, 0x64, 0x52, 0xa5, 0x48, 0xaa, 0x14, 0x99, 0x14, 0xa9, 0xd2,
-	0x7b, 0x26, 0x93, 0xf9, 0x66, 0x7f, 0x0e, 0x3f, 0x07, 0x10, 0x04, 0x69, 0xe9, 0x6b, 0xbe, 0x86,
-	0xc3, 0x7d, 0x7f, 0xfb, 0xf6, 0xbd, 0xb7, 0xef, 0xbd, 0x7d, 0x07, 0x58, 0x3c, 0x79, 0xb8, 0xdd,
-	0x0b, 0xfc, 0xc8, 0x47, 0x37, 0xe8, 0xeb, 0x68, 0xbb, 0xe3, 0xf4, 0xc2, 0xed, 0x17, 0xbe, 0xff,
-	0xca, 0xeb, 0x1e, 0x6f, 0xf7, 0x9c, 0x20, 0xea, 0xd2, 0x60, 0xfb, 0xe4, 0xa1, 0xf6, 0x35, 0x94,
-	0xca, 0x2f, 0x69, 0xeb, 0x95, 0x7e, 0xe2, 0x78, 0x6d, 0xe7, 0x85, 0xd7, 0xf6, 0xa2, 0x53, 0x42,
-	0xbf, 0xeb, 0xd3, 0x30, 0x42, 0x9f, 0x41, 0x26, 0x6c, 0xfb, 0x51, 0x49, 0xd9, 0x54, 0xee, 0x17,
-	0x76, 0xee, 0x6c, 0xcf, 0x90, 0xb3, 0xdd, 0x68, 0xfb, 0x11, 0xe1, 0xe4, 0xda, 0xbf, 0xa4, 0x61,
-	0x63, 0x8a, 0xcc, 0xb0, 0xe7, 0x77, 0x43, 0x7a, 0x49, 0xa1, 0xe8, 0x03, 0x58, 0x69, 0xf9, 0xfd,
-	0x6e, 0x64, 0x3b, 0x42, 0x68, 0x9b, 0x96, 0x52, 0x9b, 0xca, 0xfd, 0x2c, 0x29, 0x72, 0xb0, 0x1e,
-	0x43, 0xd1, 0x8f, 0xb0, 0xee, 0xf6, 0x03, 0x27, 0xf2, 0xfc, 0xae, 0x1d, 0xd0, 0xef, 0xfa, 0x5e,
-	0x40, 0x3b, 0xb4, 0x1b, 0x95, 0xd2, 0x9b, 0xca, 0xfd, 0xe2, 0xce, 0x93, 0x99, 0xfb, 0x9d, 0xa9,
-	0xf5, 0xb6, 0x21, 0x45, 0x92, 0xa1, 0x44, 0xb2, 0xe6, 0x4e, 0x02, 0xd1, 0xb7, 0xb0, 0xe6, 0x8c,
-	0x08, 0xb0, 0xfb, 0x3d, 0xd7, 0x89, 0x68, 0x29, 0xc3, 0x4f, 0xfb, 0xc9, 0xcc, 0xdd, 0x47, 0x37,
-	0x6e, 0x72, 0x36, 0x82, 0x9c, 0x09, 0x98, 0xd6, 0x81, 0xb5, 0x29, 0xda, 0xa0, 0xbb, 0xb0, 0x69,
-	0x34, 0x89, 0x6e, 0x99, 0xb5, 0xaa, 0x4d, 0xf0, 0xd7, 0x4d, 0x93, 0xe0, 0x03, 0x5c, 0xb5, 0xec,
-	0x66, 0xb5, 0x51, 0xc7, 0x65, 0x73, 0xcf, 0xc4, 0x86, 0x7a, 0x05, 0x95, 0x60, 0xdd, 0xa8, 0xd9,
-	0xd5, 0x9a, 0x65, 0x37, 0xf6, 0x6b, 0x4f, 0xed, 0x98, 0x43, 0x55, 0xd0, 0x55, 0x40, 0x07, 0xcd,
-	0x46, 0x12, 0x9e, 0xd2, 0x7a, 0x80, 0x26, 0x15, 0x43, 0xdf, 0xc0, 0x2a, 0x73, 0x8b, 0x3d, 0xaa,
-	0x5f, 0x49, 0xd9, 0x4c, 0xdf, 0x2f, 0xec, 0x7c, 0x7c, 0xae, 0x4b, 0xc7, 0x2c, 0xac, 0x86, 0x09,
-	0x88, 0x16, 0x80, 0x9a, 0xa4, 0x7a, 0xdb, 0x51, 0xa3, 0xfd, 0x08, 0xb7, 0xb9, 0xf3, 0x6b, 0x81,
-	0x4b, 0x83, 0xbd, 0x7e, 0xfb, 0xc8, 0x6b, 0x27, 0x6f, 0xc3, 0x6d, 0x28, 0x74, 0x68, 0xd0, 0x7a,
-	0xe9, 0x74, 0x23, 0xdb, 0x73, 0xb9, 0x26, 0x79, 0x02, 0x31, 0xc8, 0x74, 0xd1, 0x17, 0x90, 0xf1,
-	0x22, 0xda, 0x29, 0xa5, 0xb8, 0x19, 0xee, 0xcd, 0xd4, 0xb1, 0xe2, 0x75, 0xa9, 0x19, 0xd1, 0x0e,
-	0xe1, 0x2c, 0xda, 0x3f, 0x29, 0xb0, 0x79, 0xf6, 0xfe, 0xf2, 0xe6, 0x3c, 0x83, 0xe2, 0xd1, 0x18,
-	0x46, 0x5a, 0xe3, 0xb7, 0x66, 0xee, 0x34, 0x4d, 0x62, 0x42, 0x0e, 0xda, 0x87, 0xe2, 0x11, 0xa5,
-	0xa1, 0xed, 0x74, 0x5d, 0x3b, 0x72, 0x5e, 0xd3, 0x90, 0x5b, 0xa9, 0xb0, 0xa3, 0xcd, 0x94, 0x5c,
-	0x0f, 0xbc, 0x16, 0x25, 0x4b, 0x8c, 0x53, 0xef, 0xba, 0x16, 0xe3, 0xd3, 0x3e, 0x87, 0x6b, 0x8f,
-	0x69, 0xb4, 0x2b, 0x88, 0x1b, 0x91, 0x13, 0xf5, 0xc3, 0xd8, 0x7e, 0xb7, 0x00, 0xa4, 0x90, 0xa1,
-	0xf9, 0xf2, 0x12, 0x62, 0xba, 0xda, 0xff, 0x28, 0x50, 0x9a, 0x64, 0x95, 0x47, 0x9f, 0xcd, 0x8b,
-	0xbe, 0x86, 0x62, 0x8c, 0x0e, 0x39, 0x23, 0xd7, 0xbf, 0xb8, 0xb3, 0x35, 0x53, 0xff, 0xf1, 0xad,
-	0x96, 0x5f, 0x8c, 0x2e, 0x59, 0x80, 0xf7, 0x02, 0xda, 0x73, 0x4e, 0xd9, 0xe5, 0x8a, 0xa5, 0x8a,
-	0x1c, 0xf2, 0xf1, 0x39, 0x56, 0x89, 0xb9, 0xa4, 0x60, 0xb5, 0x97, 0x80, 0x68, 0x7f, 0x95, 0x81,
-	0xf5, 0x72, 0x40, 0x9d, 0x88, 0x4a, 0x15, 0x7e, 0x59, 0xc2, 0x45, 0xfb, 0x90, 0x6f, 0x53, 0x27,
-	0xa4, 0x76, 0x40, 0x8f, 0xa4, 0xe7, 0x1e, 0xcc, 0x8e, 0x3e, 0x46, 0x4d, 0xe8, 0x11, 0x0d, 0x68,
-	0xb7, 0x45, 0xc9, 0x62, 0x5b, 0xae, 0xd1, 0x53, 0x50, 0xfb, 0x21, 0x0d, 0x6c, 0xaf, 0x7b, 0xe4,
-	0x07, 0x1d, 0x9e, 0x63, 0xf8, 0xa1, 0x0b, 0x3b, 0x1f, 0xcd, 0x14, 0xd8, 0x0c, 0x69, 0x60, 0x0e,
-	0x79, 0xc8, 0x4a, 0x7f, 0x1c, 0xc0, 0xd2, 0x62, 0x6c, 0xcb, 0x51, 0xd9, 0xf3, 0xa4, 0xc5, 0xba,
-	0xe0, 0x1b, 0x15, 0x8f, 0x7a, 0x13, 0x30, 0xf4, 0x47, 0x70, 0x2b, 0xde, 0xa1, 0x17, 0xf8, 0x2d,
-	0x1a, 0x86, 0x2c, 0x1c, 0x7a, 0x4e, 0xe0, 0x74, 0x68, 0x44, 0x83, 0xb0, 0x94, 0xe5, 0x7b, 0x7d,
-	0x3e, 0xcf, 0x5e, 0xf5, 0x81, 0x80, 0xfa, 0x80, 0x9f, 0xdc, 0xe8, 0x9d, 0x8d, 0x44, 0x0f, 0x60,
-	0xd5, 0x73, 0x69, 0xa7, 0xe7, 0x47, 0xb4, 0xdb, 0x3a, 0xb5, 0x23, 0xff, 0x15, 0xed, 0x96, 0x16,
-	0x78, 0x9c, 0xaa, 0x23, 0x08, 0x8b, 0xc1, 0xd1, 0xc7, 0x80, 0x1c, 0xd7, 0xf5, 0x98, 0xda, 0x4e,
-	0x9b, 0x17, 0x29, 0x1a, 0x46, 0xa5, 0x1c, 0xa7, 0x5e, 0x1d, 0x62, 0x64, 0x54, 0x68, 0x7f, 0x92,
-	0x82, 0x77, 0x12, 0xe1, 0x22, 0xaf, 0xc5, 0x97, 0x90, 0x93, 0x87, 0x90, 0x21, 0x73, 0x77, 0x9e,
-	0x80, 0x27, 0x31, 0x13, 0xfa, 0x03, 0x58, 0xe3, 0xee, 0x8e, 0x0d, 0xe7, 0xf7, 0xb8, 0x57, 0x44,
-	0x08, 0x6d, 0x9f, 0xeb, 0x71, 0x69, 0xad, 0x1a, 0xe7, 0x22, 0xab, 0xfd, 0x24, 0x08, 0x59, 0xb0,
-	0x12, 0xdf, 0xcb, 0x23, 0xc7, 0x6b, 0xf7, 0x03, 0x2a, 0xa3, 0xe9, 0xc1, 0x3c, 0x7a, 0xee, 0x09,
-	0x16, 0x12, 0xdf, 0x6d, 0xb9, 0xd6, 0xaa, 0x80, 0x84, 0x39, 0x64, 0x18, 0x8b, 0xbb, 0xf3, 0x39,
-	0x64, 0x79, 0x18, 0x4b, 0x4b, 0x68, 0x73, 0x5c, 0x00, 0xc1, 0xa0, 0xfd, 0xa4, 0xc0, 0xda, 0x98,
-	0x40, 0x69, 0xdd, 0x4b, 0x4b, 0x9c, 0x76, 0xee, 0xd4, 0x2f, 0x3f, 0xf7, 0xdf, 0x2b, 0x90, 0xe5,
-	0xdb, 0xa0, 0x0d, 0x10, 0x57, 0x76, 0x98, 0x0c, 0x73, 0x7c, 0x6d, 0xba, 0x83, 0x14, 0x92, 0xba,
-	0x58, 0x0a, 0xb9, 0x07, 0x45, 0x1e, 0x09, 0x41, 0x9c, 0x14, 0xb8, 0xa3, 0xf2, 0x64, 0x99, 0x41,
-	0x07, 0x99, 0x02, 0x7d, 0x01, 0x1b, 0x62, 0x63, 0xfa, 0xba, 0xe7, 0xc9, 0x26, 0x2b, 0xf2, 0x3a,
-	0xd4, 0x0e, 0x69, 0x8b, 0x5f, 0xe6, 0x34, 0xb9, 0xca, 0x09, 0xf0, 0x00, 0x6f, 0x79, 0x1d, 0xda,
-	0xa0, 0x2d, 0xed, 0x01, 0x14, 0xc7, 0xd3, 0xce, 0x8c, 0x53, 0x68, 0x3f, 0x2b, 0xb1, 0x8f, 0x79,
-	0xf9, 0x1a, 0xf1, 0xb1, 0xcf, 0xd6, 0x73, 0x79, 0x44, 0x70, 0x0a, 0x86, 0xf3, 0xb3, 0x43, 0xea,
-	0xd7, 0x9e, 0x1d, 0xd2, 0xd3, 0xb3, 0x83, 0xf6, 0xd7, 0x83, 0x70, 0x94, 0x67, 0x97, 0xe1, 0xf8,
-	0x3b, 0x17, 0x3e, 0xfc, 0xfe, 0x95, 0xf8, 0xf8, 0x75, 0x58, 0xe6, 0xff, 0x24, 0xc2, 0xf1, 0xc3,
-	0x39, 0x3a, 0x07, 0xc1, 0xb0, 0x7f, 0x85, 0x2c, 0xf9, 0x23, 0xeb, 0xdd, 0x45, 0x58, 0x08, 0x68,
-	0xd8, 0x6f, 0x47, 0xda, 0x36, 0xac, 0x55, 0xbc, 0x30, 0x2e, 0xdc, 0x83, 0x72, 0x7f, 0x0d, 0x72,
-	0xa2, 0x94, 0xc4, 0xce, 0x5d, 0xe0, 0x35, 0xc1, 0xd5, 0x9e, 0xc1, 0xfa, 0x38, 0xbd, 0x3c, 0xdf,
-	0xef, 0xc3, 0xa2, 0x54, 0x22, 0x94, 0x9d, 0xe4, 0x7c, 0xd9, 0x6c, 0xc0, 0xa5, 0xfd, 0xad, 0x02,
-	0xab, 0x4c, 0x34, 0x57, 0x7c, 0xa0, 0xc8, 0x46, 0x42, 0x91, 0xfd, 0x2b, 0xb1, 0x2a, 0xe8, 0x10,
-	0xf2, 0xc2, 0x2c, 0x9e, 0x1b, 0x47, 0xc0, 0x6f, 0x9f, 0xd3, 0xb6, 0x25, 0xa4, 0x0b, 0x23, 0x99,
-	0x6e, 0xb8, 0x7f, 0x85, 0x2c, 0xfa, 0xf2, 0xff, 0xeb, 0xf7, 0x60, 0x31, 0x86, 0xb3, 0x28, 0x8f,
-	0xf7, 0xe0, 0xc7, 0xca, 0x93, 0x9c, 0xa4, 0xdb, 0xcd, 0x42, 0xda, 0x73, 0x43, 0x96, 0xcf, 0x46,
-	0xe5, 0x0e, 0xb3, 0x4f, 0xec, 0xee, 0xf4, 0x85, 0x62, 0x5d, 0x3b, 0x84, 0x75, 0xd1, 0xa5, 0x27,
-	0xba, 0x8b, 0x5f, 0x58, 0x2d, 0x78, 0x1d, 0x4a, 0x08, 0xfe, 0x8d, 0xae, 0x43, 0xff, 0x99, 0x82,
-	0x9c, 0x24, 0x39, 0xaf, 0x41, 0xbd, 0x64, 0x56, 0x7e, 0x6b, 0xed, 0xd8, 0x2e, 0x2c, 0xc8, 0x96,
-	0x36, 0x73, 0xe1, 0x46, 0x59, 0x72, 0x9e, 0xd5, 0xd2, 0x65, 0xdf, 0x58, 0x4b, 0xa7, 0xfd, 0x7b,
-	0x06, 0x8a, 0xe3, 0x3e, 0x40, 0x8f, 0x21, 0xdb, 0x72, 0xfa, 0xb2, 0x26, 0x17, 0x77, 0x3e, 0xbd,
-	0x80, 0xff, 0xb6, 0xcb, 0x8c, 0x91, 0x08, 0x7e, 0xf4, 0x1c, 0x50, 0x40, 0xff, 0x90, 0xb6, 0x22,
-	0xea, 0xda, 0x2d, 0x27, 0x70, 0xed, 0xe8, 0xb4, 0x47, 0xe5, 0xb3, 0x61, 0x76, 0x54, 0x94, 0x03,
-	0xea, 0x7a, 0x51, 0xd9, 0x09, 0x5c, 0xeb, 0xb4, 0x47, 0x89, 0x1a, 0x8b, 0x89, 0x21, 0x68, 0x13,
-	0x0a, 0x2e, 0x0d, 0x5b, 0x81, 0xd7, 0x1b, 0x38, 0x2c, 0x4f, 0x46, 0x41, 0xda, 0xff, 0xa7, 0x20,
-	0xcb, 0xb5, 0x41, 0xef, 0xc0, 0x6a, 0x59, 0x6f, 0x36, 0x70, 0xe2, 0x99, 0xbe, 0x0e, 0x6a, 0xa3,
-	0x52, 0x63, 0x8f, 0x77, 0xfd, 0x50, 0x37, 0x2b, 0xfa, 0x6e, 0x05, 0xab, 0x0a, 0xba, 0x0d, 0x37,
-	0x38, 0x54, 0xaf, 0x10, 0xac, 0x1b, 0xcf, 0xed, 0xdd, 0x5a, 0xed, 0x2b, 0x6c, 0xd8, 0xbb, 0xcf,
-	0xed, 0x66, 0x03, 0x13, 0x35, 0x85, 0x56, 0x61, 0xb9, 0x82, 0xf5, 0x06, 0xb6, 0xf1, 0xb3, 0xba,
-	0x49, 0xb0, 0xa1, 0xa6, 0x19, 0x4f, 0xad, 0x69, 0x35, 0x4c, 0x03, 0xdb, 0x65, 0xbd, 0x5a, 0xc6,
-	0x95, 0x8a, 0x18, 0x11, 0x3c, 0x35, 0xab, 0x46, 0xed, 0xa9, 0x9a, 0x41, 0x77, 0x61, 0xb3, 0xae,
-	0x3f, 0xe7, 0xa3, 0x02, 0x4c, 0x48, 0x8d, 0xd8, 0x65, 0x9d, 0x18, 0xb6, 0xf5, 0xbc, 0x8e, 0x6d,
-	0x82, 0x9f, 0xe0, 0xb2, 0x85, 0x0d, 0x35, 0xcb, 0xc4, 0x4c, 0xa1, 0x32, 0x70, 0xb9, 0x62, 0x56,
-	0xb1, 0xa1, 0x2e, 0xa0, 0x9b, 0x50, 0x8a, 0x09, 0x6a, 0x75, 0xbe, 0x43, 0xb5, 0x66, 0xd9, 0x87,
-	0x7a, 0xc5, 0x34, 0xd4, 0x1c, 0x53, 0x6c, 0x8c, 0x5d, 0x5d, 0x44, 0x1a, 0xbc, 0xcb, 0xb4, 0x66,
-	0x5a, 0x31, 0x4a, 0x66, 0x83, 0x71, 0x01, 0x6a, 0x1e, 0xdd, 0x82, 0x0d, 0x76, 0x46, 0xb3, 0xfa,
-	0x78, 0x70, 0x66, 0x79, 0x08, 0x6c, 0xa8, 0x80, 0x6e, 0xc0, 0xb5, 0x18, 0xcd, 0x44, 0xc4, 0xe7,
-	0x63, 0xc6, 0x2a, 0x30, 0x64, 0xed, 0x10, 0x93, 0x8a, 0x5e, 0xaf, 0x33, 0x02, 0x82, 0x1b, 0x98,
-	0x1c, 0x8a, 0xa1, 0xc6, 0x92, 0xf6, 0x77, 0x29, 0xc8, 0xf2, 0x9c, 0x99, 0x48, 0xcf, 0xca, 0x48,
-	0x7a, 0x9e, 0x7a, 0xfb, 0x52, 0x6f, 0xf1, 0x31, 0x94, 0x7e, 0x73, 0x8f, 0xa1, 0xc4, 0xac, 0x22,
-	0x73, 0xe6, 0xac, 0x22, 0x7b, 0xf1, 0x59, 0xc5, 0xff, 0xa5, 0x60, 0x31, 0x06, 0xb1, 0xbc, 0x17,
-	0xd2, 0xe0, 0xc4, 0x6b, 0x8d, 0x74, 0x71, 0x79, 0x09, 0x31, 0x5d, 0x74, 0x03, 0xf2, 0x61, 0xe4,
-	0x04, 0x11, 0xef, 0x0f, 0x53, 0xbc, 0x3f, 0x5c, 0xe4, 0x80, 0x06, 0x6d, 0xa1, 0x3b, 0xb0, 0x34,
-	0x98, 0xd4, 0x31, 0x7c, 0x9a, 0xe3, 0x0b, 0x31, 0x8c, 0x91, 0x54, 0x21, 0x17, 0x79, 0xad, 0x57,
-	0x34, 0x62, 0x89, 0x8a, 0x69, 0xfa, 0x68, 0x2e, 0x4d, 0x45, 0x3d, 0xa4, 0xae, 0x25, 0x78, 0x49,
-	0x2c, 0x84, 0x15, 0xd5, 0x5e, 0xe0, 0xb5, 0xa8, 0xcc, 0x52, 0xf3, 0xcc, 0x37, 0x04, 0xc3, 0x48,
-	0xc6, 0x5c, 0xb8, 0x6c, 0xc6, 0xbc, 0x5e, 0x86, 0xe2, 0xb8, 0x62, 0xcc, 0x3e, 0x42, 0xb5, 0xa1,
-	0xf5, 0x16, 0x05, 0xc0, 0x74, 0xd1, 0x3a, 0x64, 0xf9, 0x94, 0x4a, 0x8e, 0xac, 0xc4, 0x42, 0xfb,
-	0x87, 0x34, 0x2c, 0x8d, 0x76, 0x66, 0x08, 0x8f, 0xa7, 0xc4, 0x4f, 0xe6, 0xee, 0xe9, 0xc6, 0x13,
-	0xe2, 0xe4, 0x74, 0x29, 0xf5, 0x86, 0xa6, 0x4b, 0xd3, 0x53, 0x6d, 0xfa, 0x2d, 0xa4, 0xda, 0xcc,
-	0x64, 0xaa, 0xfd, 0x53, 0xe5, 0x9c, 0x54, 0x7b, 0x0d, 0xd6, 0x6a, 0xc4, 0xc0, 0xc4, 0x6e, 0x56,
-	0xf7, 0x9a, 0x95, 0x3d, 0xb3, 0x12, 0x67, 0xdb, 0x79, 0x12, 0x63, 0xea, 0xbc, 0xc4, 0x98, 0x9e,
-	0x4c, 0x7d, 0x19, 0xed, 0x3f, 0xd2, 0xb0, 0x36, 0xc5, 0x70, 0xe8, 0x45, 0xdc, 0x53, 0x4b, 0x57,
-	0x3e, 0xb9, 0xa8, 0xe9, 0xb7, 0xa7, 0x8f, 0x0f, 0xfb, 0xed, 0x88, 0x48, 0xc9, 0xc8, 0x85, 0x35,
-	0x76, 0x8b, 0xed, 0x09, 0x5f, 0xb3, 0xdb, 0xf5, 0x70, 0xae, 0xdb, 0x95, 0x90, 0x8f, 0xbc, 0x09,
-	0x18, 0xfa, 0x14, 0xd6, 0xfb, 0xdd, 0xc1, 0x16, 0x6d, 0x6a, 0x07, 0xd4, 0x09, 0x07, 0xb5, 0x70,
-	0x6d, 0x0c, 0x47, 0x38, 0x4a, 0xfb, 0x47, 0x05, 0x36, 0xce, 0x54, 0x1f, 0x3d, 0x80, 0x0f, 0x84,
-	0x97, 0x06, 0x3e, 0x32, 0x2b, 0xa6, 0xf5, 0x9c, 0xa5, 0xf5, 0x66, 0x25, 0x39, 0xe4, 0x5e, 0x81,
-	0x42, 0x59, 0xaf, 0xc6, 0xa4, 0xaa, 0xc2, 0x6a, 0xc1, 0x98, 0x77, 0x6d, 0xe6, 0x1c, 0xdb, 0xb4,
-	0xf0, 0x81, 0x9a, 0x42, 0xf7, 0xe0, 0xce, 0x38, 0x92, 0x15, 0x0a, 0xb3, 0x8c, 0xed, 0x72, 0xed,
-	0x60, 0xd7, 0xac, 0x8a, 0x92, 0x91, 0x66, 0xe1, 0x30, 0x25, 0x4e, 0xec, 0x9a, 0xb5, 0x8f, 0x89,
-	0x4d, 0xb0, 0xde, 0xa8, 0x55, 0xd5, 0x8c, 0xf6, 0xcf, 0x59, 0xb8, 0x3a, 0xdd, 0x4e, 0x83, 0x94,
-	0x2b, 0x3a, 0xe4, 0x8b, 0xa4, 0x5c, 0xe4, 0x0e, 0x02, 0x43, 0x34, 0x28, 0x95, 0x4b, 0xf8, 0x69,
-	0x7b, 0x8a, 0xeb, 0xc6, 0x43, 0xe3, 0xe2, 0x4e, 0x43, 0xaf, 0x60, 0x69, 0xec, 0x0b, 0x80, 0x98,
-	0xe7, 0x3d, 0xbe, 0x8c, 0x7a, 0xe2, 0x65, 0xe1, 0x8e, 0x7d, 0x1b, 0x18, 0x13, 0x8e, 0xf6, 0xa1,
-	0x20, 0x93, 0x25, 0x4f, 0x20, 0xa2, 0x74, 0x7d, 0x30, 0x73, 0x2f, 0x91, 0x67, 0x79, 0xf2, 0x80,
-	0x68, 0xf0, 0xff, 0xf5, 0x47, 0xb0, 0x36, 0x65, 0x3b, 0x5e, 0xcc, 0x7a, 0x7e, 0x14, 0xda, 0x7e,
-	0x8f, 0x76, 0xb9, 0x9f, 0xb2, 0x24, 0xcf, 0x21, 0xb5, 0x1e, 0xed, 0x6a, 0xff, 0xab, 0x40, 0xe9,
-	0x2c, 0x23, 0xa2, 0x2d, 0x78, 0x9f, 0xc5, 0xd3, 0xe5, 0xe2, 0x73, 0x5a, 0xbb, 0xc7, 0x53, 0x4b,
-	0x79, 0xdf, 0xac, 0x18, 0xb6, 0x65, 0x96, 0xbf, 0xc2, 0x56, 0xc3, 0x7e, 0x6a, 0x5a, 0xfb, 0xb5,
-	0xa6, 0x65, 0xeb, 0x46, 0xb3, 0x62, 0xa9, 0x0b, 0x2c, 0x24, 0xc7, 0x83, 0x51, 0x10, 0x26, 0x02,
-	0x77, 0x0d, 0x56, 0xcc, 0x6a, 0xb9, 0x46, 0x08, 0x2e, 0x5b, 0x76, 0x9d, 0x98, 0x65, 0xac, 0x66,
-	0xd0, 0x7b, 0x70, 0x9b, 0xab, 0x3b, 0x23, 0x98, 0xb3, 0xda, 0x5f, 0x28, 0x00, 0x43, 0x0b, 0xa2,
-	0xbb, 0x50, 0x1c, 0xb1, 0xff, 0xb0, 0x62, 0x2d, 0x0d, 0x2d, 0x6b, 0xba, 0xe8, 0x01, 0xac, 0x86,
-	0x2f, 0xfd, 0x20, 0xb2, 0x47, 0x13, 0x73, 0x4a, 0xcc, 0x3a, 0x38, 0xc2, 0x18, 0xc2, 0x87, 0xf5,
-	0x38, 0x7d, 0xc1, 0x7a, 0xac, 0x7d, 0x0b, 0x05, 0x42, 0x43, 0xbf, 0x1f, 0xb0, 0x3e, 0x83, 0xbf,
-	0xb2, 0xc3, 0xc8, 0x39, 0x3a, 0x1a, 0x69, 0xe3, 0xf8, 0xda, 0x74, 0xd1, 0x35, 0xc8, 0x05, 0xbe,
-	0xdf, 0x61, 0x18, 0xa1, 0xc6, 0x02, 0x5b, 0x9a, 0x2e, 0x73, 0x37, 0x93, 0x7e, 0x6a, 0x87, 0xde,
-	0x0f, 0x42, 0x83, 0x2c, 0xc9, 0x73, 0x48, 0xc3, 0xfb, 0x81, 0x6a, 0x7f, 0x93, 0x86, 0x1b, 0x33,
-	0x26, 0x3e, 0xe8, 0x15, 0xe4, 0xe5, 0x28, 0xc9, 0x0f, 0x64, 0xc2, 0x36, 0x2f, 0x3b, 0x3e, 0x4a,
-	0xe0, 0xfc, 0x60, 0x37, 0x55, 0x52, 0xc8, 0x50, 0x3e, 0x7a, 0x04, 0xeb, 0x71, 0xcb, 0xd8, 0xa1,
-	0xd1, 0x4b, 0xdf, 0x95, 0x43, 0x24, 0x7e, 0x22, 0x4e, 0x1c, 0xb7, 0x81, 0x07, 0x1c, 0x2d, 0x06,
-	0xcd, 0x3a, 0xdc, 0xea, 0x77, 0x7b, 0x4e, 0x10, 0x52, 0xd7, 0x9e, 0xca, 0x9e, 0xe5, 0x06, 0xb9,
-	0x1e, 0x13, 0xd5, 0x27, 0x45, 0x94, 0x20, 0x77, 0x42, 0x83, 0x70, 0xf8, 0x90, 0x89, 0x97, 0xcc,
-	0xd1, 0x89, 0x91, 0x9a, 0x1f, 0xc8, 0x0a, 0xac, 0xf6, 0x12, 0xc7, 0xd1, 0x5c, 0x50, 0x93, 0x47,
-	0x44, 0x77, 0xe0, 0x56, 0x5c, 0x19, 0xeb, 0xa4, 0x56, 0xc6, 0x8d, 0x46, 0x8d, 0x4c, 0xbe, 0x83,
-	0x86, 0xa8, 0x86, 0x45, 0xcc, 0x3a, 0xab, 0xcc, 0xd7, 0x60, 0x6d, 0x08, 0xdd, 0x25, 0xba, 0x59,
-	0xb5, 0x08, 0xc6, 0x6a, 0x4a, 0xfb, 0xaf, 0x14, 0xac, 0x4e, 0x0c, 0x04, 0xd0, 0x43, 0xb8, 0x3a,
-	0x65, 0xba, 0x30, 0x8c, 0x94, 0xb5, 0x89, 0x81, 0x81, 0xe9, 0xa2, 0x4f, 0x60, 0xfd, 0xc4, 0x69,
-	0x7b, 0xae, 0x2d, 0xfa, 0xd7, 0xc1, 0x90, 0x53, 0x34, 0xb1, 0xab, 0x1c, 0xd7, 0x60, 0x28, 0x39,
-	0xdf, 0x44, 0x0f, 0x00, 0x09, 0x06, 0xda, 0x75, 0x87, 0xe4, 0xa2, 0xa7, 0x5d, 0xe1, 0x18, 0xdc,
-	0x75, 0x63, 0xe2, 0x5d, 0xc8, 0xf0, 0x1c, 0x26, 0x5e, 0xdf, 0xdb, 0xf3, 0x84, 0x8d, 0xd0, 0x8c,
-	0xa7, 0x32, 0xce, 0x8b, 0xee, 0x41, 0xd1, 0x0f, 0xbc, 0x63, 0xaf, 0xeb, 0xb4, 0x6d, 0xd1, 0x27,
-	0x66, 0x79, 0x08, 0x2f, 0xc7, 0xd0, 0x32, 0x03, 0xa2, 0xf7, 0x60, 0xb9, 0xd5, 0x0f, 0x02, 0x76,
-	0x70, 0x41, 0xb5, 0xc0, 0xa9, 0x96, 0x24, 0x50, 0x10, 0x6d, 0x0d, 0x7d, 0x39, 0xb4, 0x8e, 0xf8,
-	0x20, 0xb1, 0xd2, 0x1b, 0xb7, 0x8c, 0xf6, 0xaf, 0x0b, 0x80, 0x26, 0x9f, 0x21, 0xd3, 0x3f, 0x98,
-	0x29, 0x6f, 0xe4, 0x83, 0x19, 0x7a, 0x04, 0x57, 0x63, 0xc1, 0x51, 0xe0, 0x74, 0x43, 0xa7, 0x15,
-	0xeb, 0x28, 0x6e, 0x74, 0x7c, 0x37, 0xac, 0x21, 0xd2, 0x74, 0x2f, 0x9f, 0x5c, 0x90, 0x0e, 0x10,
-	0x39, 0xaf, 0x6d, 0xa7, 0xc3, 0x0d, 0x96, 0x99, 0x9b, 0x3d, 0x1f, 0x39, 0xaf, 0x75, 0xce, 0x84,
-	0xa2, 0xe1, 0x85, 0x95, 0xb7, 0x83, 0xba, 0xf6, 0x8b, 0x53, 0xee, 0xa3, 0xe2, 0xce, 0xee, 0x05,
-	0x1f, 0x79, 0x89, 0xfc, 0x40, 0xdd, 0xdd, 0xd3, 0xc1, 0x85, 0x1f, 0x81, 0xa1, 0x8f, 0xa6, 0xf9,
-	0x71, 0x41, 0x4e, 0x3d, 0x93, 0x9e, 0x44, 0x9f, 0x9d, 0x79, 0x31, 0x72, 0x92, 0x65, 0xea, 0xd5,
-	0xf8, 0x12, 0x72, 0x2e, 0xed, 0xf9, 0xa1, 0x17, 0x95, 0x16, 0xe7, 0x98, 0xf6, 0x19, 0x82, 0x96,
-	0xc4, 0x4c, 0x68, 0x0f, 0x0a, 0x5d, 0xdf, 0x0e, 0x5f, 0xfa, 0xdf, 0xdb, 0x47, 0x94, 0x96, 0xf2,
-	0x5c, 0xc6, 0xfb, 0x33, 0x65, 0x54, 0xfd, 0xc6, 0x4b, 0xff, 0xfb, 0x3d, 0x4a, 0x49, 0xbe, 0x1b,
-	0xff, 0x3b, 0xe5, 0xab, 0x35, 0x5c, 0xf2, 0xab, 0x75, 0x67, 0x10, 0xd1, 0xa3, 0xc6, 0x1c, 0x79,
-	0x00, 0xc8, 0x74, 0x23, 0x87, 0x2d, 0xc9, 0xf7, 0xc3, 0x18, 0xf6, 0x71, 0xad, 0xf6, 0x98, 0xbf,
-	0x1f, 0x4a, 0xb0, 0x3e, 0x86, 0xa8, 0xeb, 0xc4, 0xaa, 0x62, 0xa2, 0xa6, 0x76, 0x97, 0x58, 0xe1,
-	0x91, 0xef, 0x7f, 0x57, 0xfb, 0x11, 0xb2, 0x5c, 0x27, 0xf6, 0x1e, 0xe6, 0xe1, 0x67, 0x77, 0xbc,
-	0x56, 0xe0, 0x8b, 0xcb, 0x93, 0x26, 0x05, 0x0e, 0x3b, 0xe0, 0xa0, 0xe1, 0x65, 0x6e, 0x9d, 0xda,
-	0x2d, 0xdf, 0xa5, 0x32, 0xfe, 0x97, 0x62, 0x60, 0xd9, 0x77, 0x29, 0xfa, 0x08, 0x10, 0xe3, 0xf1,
-	0xba, 0xc7, 0xb1, 0x47, 0x23, 0xe7, 0x38, 0xfe, 0xdc, 0x20, 0x31, 0x32, 0x9b, 0x38, 0xc7, 0xda,
-	0x1f, 0x2b, 0x90, 0x1f, 0x98, 0x17, 0x3d, 0x82, 0x34, 0xf3, 0x89, 0x32, 0xb7, 0x21, 0x19, 0x39,
-	0xd2, 0x61, 0xf1, 0x88, 0xd2, 0xd1, 0x77, 0xdd, 0xfb, 0xe7, 0xb3, 0xf2, 0x54, 0x96, 0x3b, 0xa2,
-	0xfc, 0x1f, 0xed, 0xdf, 0x14, 0xc8, 0xc9, 0x48, 0x41, 0xbf, 0x3b, 0x0c, 0xb0, 0xf9, 0x15, 0x19,
-	0x84, 0xd7, 0xef, 0xc1, 0xcd, 0x8e, 0xd7, 0xb5, 0x1d, 0xf7, 0xc4, 0xe9, 0xb6, 0xa8, 0xdd, 0x62,
-	0x7f, 0xdb, 0xed, 0xe1, 0x98, 0x41, 0x64, 0xf0, 0x8d, 0x8e, 0xd7, 0xd5, 0x05, 0x49, 0x79, 0x84,
-	0x82, 0x25, 0x67, 0x13, 0x96, 0xa4, 0xac, 0xcb, 0x9c, 0xa8, 0x20, 0x79, 0xf9, 0xa9, 0x7e, 0x56,
-	0x20, 0xd3, 0x68, 0xfb, 0x73, 0xfc, 0x78, 0x64, 0x7c, 0x90, 0x92, 0x9a, 0x39, 0x48, 0x49, 0x9f,
-	0x33, 0x48, 0xc9, 0x4c, 0x0e, 0x52, 0x3e, 0x04, 0x75, 0xec, 0x67, 0x49, 0x2c, 0x22, 0x44, 0xf1,
-	0x5f, 0x19, 0x85, 0x5b, 0xce, 0x31, 0xda, 0x83, 0x7c, 0x20, 0x3b, 0x2b, 0x31, 0xec, 0x28, 0xec,
-	0xdc, 0x9f, 0x79, 0xf6, 0x91, 0x3e, 0x8c, 0x0c, 0x59, 0xb5, 0xff, 0x56, 0x60, 0x25, 0x31, 0x0a,
-	0x3b, 0xf3, 0xa3, 0x10, 0x3b, 0xfe, 0xb1, 0x77, 0x42, 0xbb, 0x76, 0xd7, 0xe9, 0xc4, 0x51, 0x9d,
-	0xe7, 0x90, 0xaa, 0xd3, 0xa1, 0xcc, 0x7c, 0x47, 0x4e, 0xc7, 0x6b, 0x9f, 0x0a, 0xbc, 0x88, 0x65,
-	0x10, 0x20, 0x4e, 0x60, 0x40, 0xce, 0x71, 0xdd, 0x80, 0x86, 0xa1, 0x4c, 0xd7, 0xb3, 0xe7, 0x33,
-	0x75, 0x3f, 0x8c, 0x9c, 0xb6, 0x2e, 0x38, 0x48, 0xcc, 0x8a, 0x6e, 0x42, 0x3e, 0xa2, 0x6d, 0xda,
-	0x7b, 0xe9, 0x77, 0xa9, 0x34, 0xcf, 0x10, 0x80, 0xd6, 0x21, 0x4b, 0x3b, 0x8e, 0xd7, 0x96, 0xdf,
-	0xf5, 0xc5, 0x42, 0xfb, 0x49, 0x81, 0xe5, 0x31, 0x71, 0xac, 0x65, 0xe2, 0x95, 0x36, 0x38, 0x8d,
-	0x5b, 0x51, 0xb9, 0x44, 0xd7, 0x61, 0xb1, 0xed, 0xb7, 0x9c, 0xc1, 0x74, 0x25, 0x4f, 0x06, 0x6b,
-	0x74, 0x95, 0xbd, 0xf1, 0x8e, 0x87, 0x7d, 0x96, 0x5c, 0xb1, 0xa3, 0xf7, 0xb8, 0x78, 0x71, 0xe1,
-	0xe5, 0x28, 0x4f, 0x80, 0xf8, 0x75, 0xbf, 0x07, 0xc5, 0x30, 0x0a, 0x28, 0x8d, 0xec, 0xd8, 0x02,
-	0x42, 0xf3, 0x65, 0x01, 0x95, 0x5a, 0x6d, 0xfd, 0x99, 0x02, 0xcb, 0x63, 0x63, 0x29, 0xf4, 0x2e,
-	0x5c, 0x8f, 0xc7, 0xa7, 0x0d, 0x4b, 0xb7, 0x9a, 0x8d, 0x44, 0x66, 0x5b, 0x86, 0x7c, 0xb9, 0x56,
-	0xdd, 0x33, 0xc9, 0x01, 0x36, 0x54, 0x85, 0xb7, 0x6b, 0xb8, 0x6a, 0x30, 0xf2, 0x03, 0x4c, 0xca,
-	0xfb, 0x7a, 0x95, 0xbd, 0x34, 0x38, 0x5e, 0xfe, 0x56, 0x0c, 0x2d, 0xc1, 0xa2, 0x18, 0xc2, 0xf2,
-	0xc9, 0x47, 0x01, 0x72, 0xd5, 0x1a, 0xff, 0x3d, 0x99, 0x9a, 0x41, 0xef, 0xc0, 0xaa, 0x5c, 0xd8,
-	0x75, 0x5c, 0xd5, 0x2b, 0xe6, 0x37, 0xd8, 0x50, 0xb3, 0x5b, 0xa7, 0x50, 0x1c, 0x1f, 0xf2, 0xa0,
-	0x4d, 0xb8, 0x59, 0x26, 0xd8, 0x30, 0xad, 0x91, 0x79, 0xcb, 0xb8, 0x5e, 0x8b, 0x90, 0x39, 0x34,
-	0x1b, 0xba, 0xaa, 0xa0, 0x22, 0xc0, 0x81, 0xde, 0xb0, 0x30, 0x61, 0xa4, 0x6a, 0x8a, 0xb5, 0x8b,
-	0xfa, 0x01, 0x26, 0x26, 0x7b, 0x5d, 0xe1, 0x67, 0x75, 0x82, 0x1b, 0x0d, 0x35, 0xcd, 0xb4, 0x32,
-	0xcc, 0x46, 0xb9, 0x76, 0x88, 0x89, 0x9a, 0x41, 0x39, 0x48, 0x3f, 0x29, 0xef, 0xaa, 0xd9, 0xad,
-	0x3f, 0x57, 0x60, 0x75, 0xa2, 0xb7, 0x62, 0x0f, 0xa3, 0xc4, 0x1c, 0x7b, 0x8a, 0x06, 0xb7, 0x60,
-	0x23, 0x41, 0xd4, 0x30, 0xab, 0x8f, 0x2b, 0xd8, 0x6e, 0x36, 0x58, 0xe6, 0x9f, 0x9c, 0x85, 0x1f,
-	0x34, 0x2b, 0x96, 0xc9, 0xb1, 0x29, 0x76, 0xc0, 0x04, 0xb6, 0x59, 0xad, 0x98, 0x07, 0xa6, 0x85,
-	0x0d, 0x4e, 0x91, 0xde, 0xfa, 0x4b, 0x05, 0xd4, 0x64, 0x57, 0xc4, 0xcd, 0x4f, 0x70, 0xcc, 0x39,
-	0xd5, 0x61, 0xbc, 0x14, 0xe1, 0x91, 0x9a, 0x75, 0x68, 0x1a, 0xdc, 0x75, 0x37, 0xe0, 0xda, 0x08,
-	0xa2, 0x5a, 0x1b, 0x41, 0xa6, 0x12, 0x5c, 0x04, 0xef, 0x35, 0xab, 0x06, 0xf7, 0xdf, 0x38, 0x42,
-	0x38, 0x05, 0x1b, 0x6a, 0x66, 0xeb, 0x21, 0xe4, 0x07, 0xf9, 0x0e, 0x5d, 0x05, 0xb4, 0x67, 0x3e,
-	0xc3, 0x86, 0x4d, 0x74, 0x0b, 0xdb, 0x06, 0xde, 0xd3, 0xd9, 0xe3, 0xf4, 0x0a, 0xf3, 0x4d, 0x1d,
-	0x13, 0xbb, 0x8e, 0x09, 0x7b, 0x4c, 0x2a, 0x2f, 0x16, 0xf8, 0x8f, 0x51, 0x1f, 0xfe, 0x2a, 0x00,
-	0x00, 0xff, 0xff, 0x6e, 0x11, 0x77, 0xd0, 0x98, 0x2a, 0x00, 0x00,
+var fileDescriptor0 = []byte{
+	// 3636 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x4b, 0x6c, 0x1b, 0x59,
+	0x72, 0x6e, 0x7e, 0x44, 0xb2, 0x24, 0xd1, 0xad, 0x27, 0x8d, 0x4c, 0xcb, 0xf6, 0x58, 0xee, 0x1d,
+	0xcf, 0x78, 0xed, 0x19, 0x4d, 0xd6, 0xf6, 0x22, 0xb3, 0x8b, 0x60, 0x93, 0x26, 0xf9, 0x64, 0xf5,
+	0x0c, 0xd5, 0xe4, 0x3c, 0x36, 0x65, 0x7b, 0x0f, 0xe9, 0x6d, 0xb3, 0x9f, 0xe4, 0x8e, 0x49, 0x36,
+	0xb7, 0xbb, 0xa9, 0xb5, 0x06, 0x99, 0x43, 0x80, 0x20, 0x87, 0x00, 0x39, 0x04, 0x39, 0x04, 0x08,
+	0x90, 0x5b, 0xf6, 0x96, 0xdc, 0x72, 0x09, 0x72, 0x09, 0x12, 0x60, 0x11, 0x24, 0xc8, 0x29, 0x87,
+	0xe4, 0x94, 0x43, 0x90, 0x43, 0x4e, 0xb9, 0x2f, 0x10, 0x04, 0xc1, 0xfb, 0x34, 0xc9, 0x6e, 0x52,
+	0x14, 0x25, 0xcf, 0xe4, 0x92, 0x0b, 0xc1, 0xae, 0xdf, 0xab, 0x57, 0x55, 0xaf, 0xaa, 0x5e, 0x75,
+	0x43, 0xf1, 0xf4, 0xc9, 0xde, 0x30, 0xf0, 0x23, 0x1f, 0xdd, 0xa2, 0x6f, 0xa3, 0xbd, 0xbe, 0x33,
+	0x0c, 0xf7, 0x5e, 0xf9, 0xfe, 0x1b, 0x6f, 0x70, 0xb2, 0x37, 0x74, 0x82, 0x68, 0x40, 0x83, 0xbd,
+	0xd3, 0x27, 0xda, 0x97, 0x50, 0xa9, 0xbd, 0xa6, 0xdd, 0x37, 0xfa, 0xa9, 0xe3, 0xf5, 0x9c, 0x57,
+	0x5e, 0xcf, 0x8b, 0xce, 0x08, 0xfd, 0xe9, 0x88, 0x86, 0x11, 0xfa, 0x3e, 0xe4, 0xc2, 0x9e, 0x1f,
+	0x55, 0x94, 0x5d, 0xe5, 0xc1, 0xea, 0xe3, 0x7b, 0x7b, 0x0b, 0xe4, 0xec, 0xb5, 0x7b, 0x7e, 0x44,
+	0x38, 0xb9, 0xf6, 0x8f, 0x59, 0xb8, 0x39, 0x47, 0x66, 0x38, 0xf4, 0x07, 0x21, 0xbd, 0xa2, 0x50,
+	0xf4, 0x11, 0x5c, 0xef, 0xfa, 0xa3, 0x41, 0x64, 0x3b, 0x42, 0x68, 0x8f, 0x56, 0x32, 0xbb, 0xca,
+	0x83, 0x3c, 0x29, 0x73, 0xb0, 0x1e, 0x43, 0xd1, 0xd7, 0xb0, 0xe5, 0x8e, 0x02, 0x27, 0xf2, 0xfc,
+	0x81, 0x1d, 0xd0, 0x9f, 0x8e, 0xbc, 0x80, 0xf6, 0xe9, 0x20, 0xaa, 0x64, 0x77, 0x95, 0x07, 0xe5,
+	0xc7, 0x9f, 0x2f, 0x5c, 0xef, 0x5c, 0xad, 0xf7, 0xea, 0x52, 0x24, 0x99, 0x48, 0x24, 0x9b, 0xee,
+	0x2c, 0x10, 0xfd, 0x04, 0x36, 0x9d, 0x29, 0x01, 0xf6, 0x68, 0xe8, 0x3a, 0x11, 0xad, 0xe4, 0xf8,
+	0x6e, 0x3f, 0x5d, 0xb8, 0xfa, 0xf4, 0xc2, 0x1d, 0xce, 0x46, 0x90, 0x33, 0x03, 0xd3, 0xfa, 0xb0,
+	0x39, 0x47, 0x1b, 0xf4, 0x01, 0xec, 0xd6, 0x3b, 0x44, 0xb7, 0x8c, 0xa6, 0x69, 0x13, 0xfc, 0x65,
+	0xc7, 0x20, 0xf8, 0x10, 0x9b, 0x96, 0xdd, 0x31, 0xdb, 0x2d, 0x5c, 0x33, 0xf6, 0x0d, 0x5c, 0x57,
+	0xaf, 0xa1, 0x0a, 0x6c, 0xd5, 0x9b, 0xb6, 0xd9, 0xb4, 0xec, 0xf6, 0x41, 0xf3, 0xb9, 0x1d, 0x73,
+	0xa8, 0x0a, 0xda, 0x06, 0x74, 0xd8, 0x69, 0xa7, 0xe1, 0x19, 0x6d, 0x08, 0x68, 0x56, 0x31, 0xf4,
+	0x63, 0xd8, 0x60, 0x6e, 0xb1, 0xa7, 0xf5, 0xab, 0x28, 0xbb, 0xd9, 0x07, 0xab, 0x8f, 0x3f, 0xb9,
+	0xd0, 0xa5, 0x09, 0x0b, 0xab, 0x61, 0x0a, 0xa2, 0x05, 0xa0, 0xa6, 0xa9, 0xbe, 0xed, 0xa8, 0xd1,
+	0xfe, 0x56, 0x81, 0x22, 0xe3, 0xb3, 0xbc, 0x3e, 0x45, 0xb7, 0xa0, 0x14, 0x46, 0x4e, 0x10, 0xd9,
+	0x21, 0xed, 0xf2, 0x15, 0xb3, 0xa4, 0xc8, 0x01, 0x6d, 0xda, 0x45, 0xf7, 0x60, 0x6d, 0x1c, 0x5f,
+	0x0c, 0x9f, 0xe1, 0xf8, 0xd5, 0x18, 0xc6, 0x48, 0xbe, 0x0b, 0x6a, 0x22, 0x06, 0x22, 0xe7, 0x84,
+	0x87, 0x5f, 0x89, 0x5c, 0x9f, 0x86, 0x5b, 0xce, 0x09, 0xfa, 0x02, 0xd6, 0x02, 0x1a, 0xfa, 0xa3,
+	0xa0, 0x4b, 0x6d, 0xcf, 0x0d, 0x65, 0x9c, 0x3c, 0x58, 0xb8, 0x3f, 0x22, 0x19, 0x0c, 0x37, 0x24,
+	0xab, 0xc1, 0xe4, 0x41, 0x7b, 0x0b, 0x5b, 0xf1, 0x1e, 0x12, 0xc6, 0xab, 0x42, 0x89, 0x3b, 0x2b,
+	0xf2, 0xfa, 0x54, 0x5a, 0xf0, 0xfe, 0x85, 0x16, 0x64, 0x52, 0x48, 0x31, 0x8c, 0x6d, 0x72, 0x1b,
+	0x4a, 0x49, 0x1b, 0x16, 0xc9, 0x04, 0xa0, 0xfd, 0x99, 0x02, 0xef, 0x57, 0x9d, 0xa8, 0xfb, 0x7a,
+	0x7a, 0xdd, 0x86, 0xef, 0xbf, 0x19, 0x0d, 0xe3, 0x64, 0x72, 0x17, 0x56, 0xfb, 0x34, 0xe8, 0xbe,
+	0x76, 0x06, 0x91, 0xed, 0xb9, 0x5c, 0x8d, 0x12, 0x81, 0x18, 0x64, 0xb8, 0xe8, 0x0e, 0x40, 0x48,
+	0x83, 0x53, 0x8f, 0x5b, 0x82, 0x2f, 0x51, 0x22, 0x25, 0x09, 0x31, 0xdc, 0xe4, 0x26, 0xb2, 0x3c,
+	0xd2, 0x2e, 0xbb, 0x09, 0xed, 0xf7, 0x15, 0xb8, 0x7b, 0xae, 0x9a, 0x32, 0x3f, 0x9d, 0xc0, 0xf6,
+	0x78, 0x9d, 0x79, 0xe1, 0xfd, 0xbd, 0xa5, 0x16, 0x4d, 0x84, 0xf8, 0x56, 0x38, 0x07, 0xaa, 0x7d,
+	0x0d, 0x77, 0x79, 0xbe, 0x69, 0x06, 0x2e, 0x0d, 0xf6, 0x47, 0xbd, 0x63, 0xaf, 0x97, 0x4e, 0xc0,
+	0x17, 0xda, 0xec, 0x07, 0x90, 0xf3, 0x22, 0xda, 0xaf, 0x64, 0x96, 0xb0, 0x47, 0xc3, 0x1b, 0x50,
+	0x23, 0xa2, 0x7d, 0xc2, 0x59, 0xb4, 0x5f, 0x28, 0xb0, 0x7b, 0xfe, 0xfa, 0xd2, 0x18, 0x2f, 0xa0,
+	0x7c, 0x9c, 0xc0, 0xc8, 0xf0, 0xf9, 0x95, 0x85, 0x2b, 0xcd, 0x93, 0x98, 0x92, 0x83, 0x0e, 0xa0,
+	0x7c, 0x4c, 0x69, 0x68, 0x3b, 0x03, 0xd7, 0x8e, 0x9c, 0xb7, 0x34, 0xe4, 0x1e, 0x5f, 0x7d, 0xac,
+	0x2d, 0x94, 0xdc, 0x0a, 0xbc, 0x2e, 0x25, 0x6b, 0x8c, 0x53, 0x1f, 0xb8, 0x16, 0xe3, 0xd3, 0x3e,
+	0x83, 0x1b, 0xcf, 0x68, 0x54, 0x15, 0xc4, 0xed, 0xc8, 0x89, 0x46, 0x61, 0x6c, 0xbf, 0x3b, 0x00,
+	0x52, 0xc8, 0xc4, 0x7c, 0x25, 0x09, 0x31, 0x5c, 0xed, 0x3f, 0x15, 0xa8, 0xcc, 0xb2, 0xca, 0xad,
+	0x2f, 0xe6, 0x45, 0x5f, 0x42, 0x39, 0x46, 0x87, 0x9c, 0x91, 0xeb, 0x5f, 0x7e, 0xfc, 0x70, 0xa1,
+	0xfe, 0xc9, 0xa5, 0xd6, 0x5f, 0x4d, 0x3f, 0xb2, 0x9c, 0x3a, 0x0c, 0xe8, 0xd0, 0x39, 0x63, 0xf9,
+	0x3c, 0x96, 0x2a, 0xca, 0xd6, 0x27, 0x17, 0x58, 0x25, 0xe6, 0x92, 0x82, 0xd5, 0x61, 0x0a, 0xa2,
+	0xfd, 0x79, 0x0e, 0xb6, 0x6a, 0x01, 0x75, 0x22, 0x2a, 0x55, 0x78, 0xb7, 0x1a, 0x8f, 0x0e, 0xa0,
+	0xd4, 0xa3, 0x4e, 0x48, 0xed, 0x80, 0x1e, 0x4b, 0xcf, 0x3d, 0x5a, 0x1c, 0x7d, 0x8c, 0x9a, 0xd0,
+	0x63, 0x1a, 0xd0, 0x41, 0x97, 0x92, 0x62, 0x4f, 0x3e, 0xa3, 0xe7, 0xa0, 0x8e, 0x42, 0x1a, 0xd8,
+	0xde, 0xe0, 0xd8, 0x0f, 0xfa, 0x3c, 0x87, 0xf2, 0x4d, 0xaf, 0x3e, 0xfe, 0x78, 0xa1, 0xc0, 0x4e,
+	0x48, 0x03, 0x63, 0xc2, 0x43, 0xae, 0x8f, 0x92, 0x00, 0x56, 0x89, 0x63, 0x5b, 0x4e, 0xcb, 0x5e,
+	0xa6, 0x12, 0xb7, 0x04, 0xdf, 0xb4, 0x78, 0x34, 0x9c, 0x81, 0xa1, 0xdf, 0x86, 0x3b, 0xf1, 0x0a,
+	0xc3, 0xc0, 0xef, 0xd2, 0x30, 0x64, 0xe1, 0x30, 0x74, 0x02, 0xa7, 0x4f, 0x23, 0x1a, 0x84, 0x95,
+	0x3c, 0x5f, 0xeb, 0xb3, 0x65, 0xd6, 0x6a, 0x8d, 0x05, 0xb4, 0xc6, 0xfc, 0xe4, 0xd6, 0xf0, 0x7c,
+	0x24, 0x7a, 0x04, 0x1b, 0x9e, 0x4b, 0xfb, 0x43, 0x3f, 0xa2, 0x83, 0xee, 0x99, 0x1d, 0xf9, 0x6f,
+	0xe8, 0xa0, 0xb2, 0xc2, 0xe3, 0x54, 0x9d, 0x42, 0x58, 0x0c, 0x8e, 0x3e, 0x01, 0xe4, 0xb8, 0xae,
+	0xc7, 0xd4, 0x76, 0x7a, 0xbc, 0x2f, 0xa2, 0x61, 0x54, 0x29, 0x70, 0xea, 0x8d, 0x09, 0x46, 0x46,
+	0x85, 0xf6, 0x07, 0x19, 0x78, 0x2f, 0x15, 0x2e, 0xf2, 0x58, 0xfc, 0x08, 0x0a, 0x72, 0x13, 0x32,
+	0x64, 0x3e, 0x58, 0x26, 0xe0, 0x49, 0xcc, 0x84, 0x7e, 0x13, 0x36, 0xb9, 0xbb, 0x63, 0xc3, 0xf9,
+	0x43, 0xee, 0x15, 0x11, 0x42, 0x7b, 0x17, 0x7a, 0x5c, 0x5a, 0xab, 0xc9, 0xb9, 0xc8, 0xc6, 0x28,
+	0x0d, 0x42, 0x16, 0x5c, 0x8f, 0xcf, 0xe5, 0xb1, 0xe3, 0xf5, 0x46, 0x01, 0x95, 0xd1, 0xf4, 0x68,
+	0x19, 0x3d, 0xf7, 0x05, 0x0b, 0x89, 0xcf, 0xb6, 0x7c, 0xd6, 0x4c, 0x40, 0xc2, 0x1c, 0x32, 0x8c,
+	0xc5, 0xd9, 0xf9, 0x0c, 0xf2, 0x3c, 0x8c, 0xa5, 0x25, 0xb4, 0x25, 0x0e, 0x80, 0x60, 0xd0, 0x7e,
+	0xae, 0xc0, 0x66, 0x42, 0xa0, 0xb4, 0xee, 0x95, 0x25, 0xce, 0xdb, 0x77, 0xe6, 0xdd, 0xf7, 0xfd,
+	0xd7, 0x0a, 0xe4, 0xf9, 0x32, 0xe8, 0x26, 0x88, 0x23, 0x3b, 0x49, 0x86, 0x05, 0xfe, 0x6c, 0xb8,
+	0xe3, 0x14, 0x92, 0xb9, 0x5c, 0x0a, 0xb9, 0x0f, 0x65, 0x1e, 0x09, 0x41, 0x9c, 0x14, 0x64, 0x8f,
+	0xb4, 0xce, 0xa0, 0xe3, 0x4c, 0x81, 0x7e, 0x00, 0x37, 0xc5, 0xc2, 0xf4, 0xed, 0xd0, 0x93, 0x7d,
+	0x17, 0xaf, 0xcd, 0xac, 0xf9, 0xca, 0xf1, 0xe6, 0x6b, 0x9b, 0x13, 0xe0, 0x31, 0x9e, 0x95, 0xda,
+	0x36, 0xed, 0x6a, 0x8f, 0xa0, 0x9c, 0x4c, 0x3b, 0x0b, 0x76, 0xa1, 0xfd, 0x52, 0x89, 0x7d, 0xcc,
+	0xcb, 0xd7, 0x94, 0x8f, 0x7d, 0xf6, 0xbc, 0x94, 0x47, 0x04, 0xa7, 0x60, 0xb8, 0x38, 0x3b, 0x64,
+	0xfe, 0xcf, 0xb3, 0x43, 0x76, 0x7e, 0x76, 0xd0, 0xfe, 0x62, 0x1c, 0x8e, 0x72, 0xef, 0x32, 0x1c,
+	0x7f, 0x78, 0xe9, 0xcd, 0x1f, 0x5c, 0x8b, 0xb7, 0xdf, 0x82, 0x75, 0xfe, 0x27, 0x15, 0x8e, 0xdf,
+	0x5d, 0xa2, 0x73, 0x10, 0x0c, 0x07, 0xd7, 0xc8, 0x9a, 0x3f, 0xf5, 0x5c, 0x2d, 0xc2, 0x4a, 0x40,
+	0xc3, 0x51, 0x2f, 0xd2, 0xf6, 0x60, 0xb3, 0xe1, 0x85, 0x71, 0xe1, 0x1e, 0x97, 0xfb, 0x1b, 0x50,
+	0x10, 0xa5, 0x24, 0x76, 0xee, 0x0a, 0xaf, 0x09, 0xae, 0xf6, 0x02, 0xb6, 0x92, 0xf4, 0x72, 0x7f,
+	0xbf, 0x01, 0x45, 0xa9, 0x44, 0x28, 0xbb, 0xbb, 0xe5, 0xb2, 0xd9, 0x98, 0x4b, 0xfb, 0x4b, 0x05,
+	0x36, 0x98, 0x68, 0xae, 0xf8, 0x58, 0x91, 0x9b, 0x29, 0x45, 0x0e, 0xae, 0xc5, 0xaa, 0xa0, 0x23,
+	0x28, 0x09, 0xb3, 0xb0, 0x6e, 0x5f, 0x98, 0xe4, 0x57, 0x2f, 0x68, 0xdb, 0x52, 0xd2, 0x85, 0x91,
+	0x0c, 0x37, 0x3c, 0xb8, 0x46, 0x8a, 0xbe, 0xfc, 0xbf, 0x73, 0x1f, 0x8a, 0x31, 0x9c, 0x45, 0x79,
+	0xbc, 0x06, 0xdf, 0x56, 0x89, 0x14, 0x24, 0x5d, 0x35, 0x0f, 0x59, 0xcf, 0x0d, 0x59, 0x3e, 0x9b,
+	0x96, 0x3b, 0xc9, 0x3e, 0xb1, 0xbb, 0xb3, 0x97, 0x8a, 0x75, 0xed, 0x08, 0xb6, 0xc4, 0xc5, 0x30,
+	0xd5, 0x5d, 0xbc, 0x63, 0xb5, 0xe0, 0x75, 0x28, 0x25, 0xf8, 0xff, 0x75, 0x1d, 0xfa, 0xb7, 0x0c,
+	0x14, 0x24, 0xc9, 0x45, 0x0d, 0xea, 0x15, 0xb3, 0xf2, 0xb7, 0xd6, 0x8e, 0x55, 0x61, 0x45, 0xb6,
+	0xb4, 0xb9, 0x4b, 0x37, 0xca, 0x92, 0xf3, 0xbc, 0x96, 0x2e, 0xff, 0x8d, 0xb5, 0x74, 0xda, 0xbf,
+	0xe4, 0xa0, 0x9c, 0xf4, 0x01, 0x7a, 0x06, 0xf9, 0xae, 0x33, 0x92, 0x35, 0xb9, 0x7c, 0xc1, 0xfd,
+	0x2f, 0xc9, 0xbb, 0x57, 0x63, 0x8c, 0x44, 0xf0, 0xa3, 0x97, 0x80, 0x02, 0xfa, 0x5b, 0xb4, 0x1b,
+	0x51, 0xd7, 0xee, 0x3a, 0x81, 0x6b, 0x47, 0x67, 0x43, 0x2a, 0xaf, 0x0d, 0x8b, 0xa3, 0xa2, 0x16,
+	0x50, 0xd7, 0x8b, 0x6a, 0x4e, 0xe0, 0x5a, 0x67, 0x43, 0x4a, 0xd4, 0x58, 0x4c, 0x0c, 0x41, 0xbb,
+	0xb0, 0xea, 0xd2, 0xb0, 0x1b, 0x78, 0xc3, 0xb1, 0xc3, 0x4a, 0x64, 0x1a, 0xa4, 0xfd, 0x4f, 0x06,
+	0xf2, 0x5c, 0x1b, 0xf4, 0x1e, 0x6c, 0xd4, 0xf4, 0x4e, 0x1b, 0xa7, 0x26, 0x43, 0x5b, 0xa0, 0xb6,
+	0x1b, 0x4d, 0xcb, 0xee, 0x98, 0xfa, 0x91, 0x6e, 0x34, 0xf4, 0x6a, 0x03, 0xab, 0x0a, 0xba, 0x0b,
+	0xb7, 0x38, 0x54, 0x6f, 0x10, 0xac, 0xd7, 0x5f, 0xda, 0xd5, 0x66, 0xf3, 0x0b, 0x5c, 0xb7, 0xab,
+	0x2f, 0xed, 0x4e, 0x1b, 0x13, 0x35, 0x83, 0x36, 0x60, 0xbd, 0x81, 0xf5, 0x36, 0xb6, 0xf1, 0x8b,
+	0x96, 0x41, 0x70, 0x5d, 0xcd, 0x32, 0x9e, 0x66, 0xc7, 0x6a, 0x1b, 0x75, 0x6c, 0xd7, 0x74, 0xb3,
+	0x86, 0x1b, 0x0d, 0x31, 0x95, 0x7a, 0x6e, 0x98, 0xf5, 0xe6, 0x73, 0x35, 0x87, 0x3e, 0x80, 0xdd,
+	0x96, 0xfe, 0x92, 0x4f, 0xa7, 0x30, 0x21, 0x4d, 0x62, 0xd7, 0x74, 0x52, 0xb7, 0xad, 0x97, 0x2d,
+	0x6c, 0x13, 0xfc, 0x39, 0xae, 0x59, 0xb8, 0xae, 0xe6, 0x99, 0x98, 0x39, 0x54, 0x75, 0x5c, 0x6b,
+	0x18, 0x26, 0xae, 0xab, 0x2b, 0xe8, 0x36, 0x54, 0x62, 0x82, 0x66, 0x8b, 0xaf, 0x60, 0x36, 0x2d,
+	0xfb, 0x48, 0x6f, 0x18, 0x75, 0xb5, 0xc0, 0x14, 0x4b, 0xb0, 0xab, 0x45, 0xa4, 0xc1, 0xfb, 0x4c,
+	0x6b, 0xa6, 0x15, 0xa3, 0x64, 0x36, 0x48, 0x0a, 0x50, 0x4b, 0xe8, 0x0e, 0xdc, 0x64, 0x7b, 0x34,
+	0xcc, 0x67, 0xe3, 0x3d, 0xcb, 0x4d, 0xe0, 0xba, 0x0a, 0xe8, 0x16, 0xdc, 0x88, 0xd1, 0x4c, 0x44,
+	0xbc, 0x3f, 0x66, 0xac, 0x55, 0x86, 0x6c, 0x1e, 0x61, 0xd2, 0xd0, 0x5b, 0x2d, 0x46, 0x40, 0x70,
+	0x1b, 0x93, 0x23, 0x31, 0x47, 0x5b, 0xd3, 0xfe, 0x2a, 0x03, 0x79, 0x9e, 0x33, 0x53, 0xe9, 0x59,
+	0x99, 0x4a, 0xcf, 0x73, 0x4f, 0x5f, 0xe6, 0x5b, 0xbc, 0x0c, 0x65, 0xbf, 0xb9, 0xcb, 0x50, 0x6a,
+	0x56, 0x91, 0x3b, 0x77, 0x56, 0x91, 0xbf, 0xfc, 0xac, 0xe2, 0xbf, 0x33, 0x50, 0x8c, 0x41, 0xa9,
+	0x39, 0x91, 0x92, 0x9e, 0x13, 0x25, 0x86, 0x77, 0x99, 0x0b, 0x86, 0x77, 0xd9, 0xd9, 0xe1, 0x9d,
+	0x09, 0x85, 0xc8, 0xeb, 0xbe, 0xa1, 0x11, 0x4b, 0x54, 0x4c, 0xd3, 0xa7, 0x4b, 0x69, 0x2a, 0xea,
+	0x21, 0x75, 0x2d, 0xc1, 0x4b, 0x62, 0x21, 0xac, 0xa8, 0x0e, 0x03, 0xaf, 0x4b, 0x65, 0x96, 0x5a,
+	0x66, 0xbe, 0x21, 0x18, 0xa6, 0x32, 0xe6, 0xca, 0x55, 0x33, 0xe6, 0x4e, 0x0d, 0xca, 0x49, 0xc5,
+	0x98, 0x7d, 0x84, 0x6a, 0x13, 0xeb, 0x15, 0x05, 0xc0, 0x70, 0xd1, 0x16, 0xe4, 0xf9, 0x60, 0x54,
+	0x4e, 0x49, 0xc5, 0x83, 0xf6, 0x37, 0x59, 0x58, 0x9b, 0xee, 0xcc, 0x10, 0x4e, 0xa6, 0xc4, 0x4f,
+	0x97, 0xee, 0xe9, 0x92, 0x09, 0x71, 0x76, 0xba, 0x94, 0xf9, 0x86, 0xa6, 0x4b, 0xf3, 0x53, 0x6d,
+	0xf6, 0x5b, 0x48, 0xb5, 0xb9, 0xd9, 0x54, 0xfb, 0x87, 0xca, 0x05, 0xa9, 0xf6, 0x06, 0x6c, 0x36,
+	0x49, 0x1d, 0x13, 0xbb, 0x63, 0xee, 0x77, 0x1a, 0xfb, 0x46, 0x23, 0xce, 0xb6, 0xcb, 0x24, 0xc6,
+	0xcc, 0x45, 0x89, 0x31, 0x3b, 0x9b, 0xfa, 0x72, 0xda, 0xbf, 0x66, 0x61, 0x73, 0x8e, 0xe1, 0xd0,
+	0xab, 0xb8, 0xa7, 0x96, 0xae, 0xfc, 0xfc, 0xb2, 0xa6, 0xdf, 0x9b, 0x3f, 0x3e, 0x1c, 0xf5, 0x22,
+	0x22, 0x25, 0x23, 0x17, 0x36, 0xd9, 0x29, 0xb6, 0x67, 0x7c, 0xcd, 0x4e, 0xd7, 0x93, 0xa5, 0x4e,
+	0x57, 0x4a, 0x3e, 0xf2, 0x66, 0x60, 0xe8, 0x7b, 0xb0, 0x35, 0x1a, 0x8c, 0x97, 0xe8, 0x51, 0x3b,
+	0xa0, 0x4e, 0x38, 0xae, 0x85, 0x9b, 0x09, 0x1c, 0xe1, 0x28, 0xed, 0xef, 0x14, 0xb8, 0x79, 0xae,
+	0xfa, 0xe8, 0x11, 0x7c, 0x24, 0xbc, 0x34, 0xf6, 0x91, 0xd1, 0x30, 0xac, 0x97, 0x2c, 0xad, 0x77,
+	0x1a, 0xe9, 0xf7, 0x2a, 0xd7, 0x61, 0xb5, 0xa6, 0x9b, 0x31, 0xa9, 0xaa, 0xb0, 0x5a, 0x90, 0xf0,
+	0xae, 0xcd, 0x9c, 0x63, 0x1b, 0x16, 0x3e, 0x54, 0x33, 0xe8, 0x3e, 0xdc, 0x4b, 0x22, 0x59, 0xa1,
+	0x30, 0x6a, 0xd8, 0xae, 0x35, 0x0f, 0xab, 0x86, 0x29, 0x4a, 0x46, 0x96, 0x85, 0xc3, 0x9c, 0x38,
+	0xb1, 0x9b, 0xd6, 0x01, 0x26, 0x36, 0xc1, 0x7a, 0xbb, 0x69, 0xaa, 0x39, 0xed, 0x1f, 0xf2, 0xb0,
+	0x3d, 0xdf, 0x4e, 0xe3, 0x94, 0xbb, 0xcc, 0xcc, 0x3f, 0x99, 0x72, 0x91, 0x3b, 0x0e, 0x0c, 0xd1,
+	0xa0, 0x34, 0xae, 0xe0, 0xa7, 0xbd, 0x39, 0xae, 0x4b, 0x86, 0xc6, 0xe5, 0x9d, 0x86, 0xde, 0xc0,
+	0x5a, 0x62, 0x2a, 0x2f, 0xe6, 0x79, 0xcf, 0xae, 0xa2, 0x9e, 0xb8, 0x59, 0xb8, 0x89, 0x59, 0x7d,
+	0x42, 0x38, 0x3a, 0x80, 0x55, 0x99, 0x2c, 0x79, 0x02, 0x11, 0xa5, 0xeb, 0xa3, 0x85, 0x6b, 0x89,
+	0x3c, 0xcb, 0x93, 0x07, 0x44, 0xe3, 0xff, 0x3b, 0x4f, 0x61, 0x73, 0xce, 0x72, 0xbc, 0x98, 0x0d,
+	0xfd, 0x28, 0xb4, 0xfd, 0x21, 0x1d, 0x70, 0x3f, 0xe5, 0x49, 0x89, 0x43, 0x9a, 0x43, 0x3a, 0xd0,
+	0xfe, 0x4b, 0x81, 0xca, 0x79, 0x46, 0x44, 0x0f, 0xe1, 0x43, 0x16, 0x4f, 0x57, 0x8b, 0xcf, 0x79,
+	0xed, 0x1e, 0x4f, 0x2d, 0xb5, 0x03, 0xa3, 0x51, 0xb7, 0x2d, 0xa3, 0xf6, 0x05, 0xb6, 0xda, 0xf6,
+	0x73, 0xc3, 0x3a, 0x68, 0x76, 0x2c, 0x5b, 0xaf, 0x77, 0x1a, 0x96, 0xba, 0xc2, 0x42, 0x32, 0x19,
+	0x8c, 0x82, 0x30, 0x15, 0xb8, 0x9b, 0x70, 0xdd, 0x30, 0x6b, 0x4d, 0x42, 0x70, 0xcd, 0xb2, 0x5b,
+	0xc4, 0xa8, 0x61, 0x35, 0x87, 0xbe, 0x03, 0x77, 0xb9, 0xba, 0x0b, 0x82, 0x39, 0xaf, 0xfd, 0xbd,
+	0x02, 0x30, 0xb1, 0x20, 0xfa, 0x00, 0xca, 0x53, 0xf6, 0x9f, 0x54, 0xac, 0xb5, 0x89, 0x65, 0x0d,
+	0x17, 0x3d, 0x82, 0x8d, 0xf0, 0xb5, 0x1f, 0x44, 0xf6, 0x74, 0x62, 0x16, 0x2f, 0x90, 0x54, 0x8e,
+	0xa8, 0x4f, 0xe0, 0x93, 0x7a, 0x9c, 0xbd, 0x6c, 0x3d, 0xfe, 0x04, 0x90, 0xb8, 0x25, 0xda, 0xb3,
+	0x05, 0x60, 0x43, 0x60, 0xa6, 0x16, 0xd2, 0x7e, 0x02, 0xab, 0x53, 0x6f, 0xea, 0x58, 0xd7, 0x17,
+	0x46, 0xce, 0xf1, 0xf1, 0x54, 0xd7, 0xc7, 0x9f, 0x0d, 0x17, 0xdd, 0x80, 0x42, 0xe0, 0xfb, 0xfd,
+	0xc9, 0x6b, 0xaf, 0x15, 0xf6, 0x28, 0x5e, 0x89, 0x31, 0x65, 0xce, 0xec, 0xd0, 0xfb, 0x4a, 0x28,
+	0x9c, 0x27, 0x25, 0x0e, 0x69, 0x7b, 0x5f, 0x51, 0xed, 0x17, 0x59, 0x40, 0x7c, 0x80, 0xe3, 0x7d,
+	0xc5, 0xdb, 0x97, 0x9a, 0x3f, 0x38, 0xf6, 0x4e, 0xd0, 0xef, 0x28, 0xb0, 0x1d, 0x4d, 0x81, 0x27,
+	0x33, 0x27, 0x79, 0xb1, 0x5f, 0x9c, 0xe4, 0x67, 0x25, 0x26, 0x40, 0xe3, 0x19, 0x13, 0x1e, 0x44,
+	0xc1, 0x19, 0x79, 0x2f, 0x9a, 0x87, 0x43, 0xbf, 0xa7, 0xc0, 0xce, 0x2b, 0xaf, 0xd7, 0xe3, 0xb7,
+	0xd3, 0x49, 0x97, 0x68, 0x8b, 0x7f, 0x32, 0xa7, 0x1c, 0x5c, 0x56, 0x8f, 0xaa, 0x90, 0x38, 0xd5,
+	0x76, 0xee, 0xf3, 0x3f, 0xa4, 0xf2, 0xea, 0x1c, 0xcc, 0xce, 0x01, 0xec, 0x9c, 0xaf, 0x3d, 0x52,
+	0x21, 0xfb, 0x86, 0x9e, 0x49, 0x7f, 0xb0, 0xbf, 0xac, 0x03, 0x3a, 0x75, 0x7a, 0x23, 0x2a, 0x3d,
+	0x21, 0x1e, 0x7e, 0x98, 0xf9, 0x4c, 0xd1, 0x5e, 0x42, 0xe5, 0xbc, 0xf5, 0xd9, 0x51, 0xac, 0x1a,
+	0x8d, 0x06, 0xeb, 0xfa, 0x0d, 0x73, 0xbf, 0x49, 0x0e, 0xc5, 0x8d, 0x47, 0xfc, 0x4b, 0x1d, 0xc5,
+	0x02, 0x64, 0x0f, 0x0d, 0x53, 0x55, 0x50, 0x11, 0x72, 0xfb, 0x9d, 0x46, 0x43, 0xcd, 0x68, 0x7f,
+	0x92, 0x83, 0x5b, 0x0b, 0x26, 0x7d, 0xe8, 0x0d, 0x94, 0xe4, 0x08, 0xd1, 0x0f, 0x64, 0xa1, 0x36,
+	0xae, 0x3a, 0x36, 0x4c, 0xe1, 0xfc, 0xa0, 0x9a, 0xa9, 0x28, 0x64, 0x22, 0x1f, 0x3d, 0x85, 0xad,
+	0xf8, 0xaa, 0xd0, 0xa7, 0xd1, 0x6b, 0xdf, 0x95, 0xc3, 0x43, 0x6e, 0x10, 0x4e, 0x1c, 0xb7, 0xff,
+	0x87, 0x1c, 0x2d, 0x5e, 0x30, 0xe8, 0x70, 0x67, 0x34, 0x18, 0x3a, 0x41, 0x48, 0x5d, 0x7b, 0x2e,
+	0x7b, 0x9e, 0xdb, 0x73, 0x27, 0x26, 0x6a, 0xcd, 0x8a, 0xb8, 0x0d, 0x85, 0x53, 0x1a, 0x84, 0xe3,
+	0x0b, 0x2c, 0x5f, 0x2b, 0x06, 0xa1, 0x4f, 0x61, 0x23, 0x35, 0x4e, 0xf5, 0x03, 0x71, 0xf8, 0x38,
+	0x9d, 0x3a, 0x4c, 0x6d, 0x8b, 0x5d, 0x79, 0x12, 0xa7, 0xa0, 0xcb, 0x63, 0x88, 0xf7, 0xd2, 0x17,
+	0x5d, 0x79, 0x66, 0x43, 0x8f, 0xa0, 0x68, 0x06, 0xa6, 0xb9, 0xa0, 0xa6, 0x8d, 0x89, 0xee, 0xc1,
+	0x9d, 0xb8, 0xf7, 0x6a, 0x91, 0x66, 0x0d, 0xb7, 0xdb, 0x4d, 0x32, 0x7b, 0xd3, 0x9e, 0xa0, 0xda,
+	0x16, 0x31, 0x5a, 0xac, 0xf7, 0xbb, 0x01, 0x9b, 0x13, 0x68, 0x95, 0xe8, 0x86, 0x69, 0x11, 0x8c,
+	0xd5, 0x8c, 0xf6, 0xef, 0x19, 0xd8, 0x98, 0x19, 0x39, 0xa1, 0x27, 0xb0, 0x3d, 0x67, 0x7e, 0x35,
+	0x49, 0x2e, 0x9b, 0x33, 0x23, 0x29, 0xc3, 0x45, 0x9f, 0xc2, 0xd6, 0xa9, 0xd3, 0xf3, 0x5c, 0x5b,
+	0xdc, 0x90, 0xc6, 0x63, 0x74, 0x71, 0x4d, 0xda, 0xe0, 0xb8, 0x36, 0x43, 0xc9, 0x09, 0x3a, 0x7a,
+	0x04, 0x48, 0x30, 0xd0, 0x81, 0x3b, 0x21, 0x17, 0xb7, 0xa6, 0xeb, 0x1c, 0x83, 0x07, 0x6e, 0x4c,
+	0x5c, 0x85, 0x1c, 0xaf, 0x92, 0x62, 0xbe, 0xb3, 0xb7, 0x4c, 0x80, 0x0a, 0xcd, 0x78, 0xb1, 0xe4,
+	0xbc, 0xe8, 0x3e, 0x94, 0xfd, 0xc0, 0x3b, 0xf1, 0x06, 0x4e, 0xcf, 0x16, 0x37, 0x91, 0x3c, 0xcf,
+	0x7a, 0xeb, 0x31, 0xb4, 0xc6, 0x80, 0xe8, 0x3b, 0xb0, 0xde, 0x1d, 0x05, 0x01, 0xdb, 0xb8, 0xa0,
+	0x5a, 0xe1, 0x54, 0x6b, 0x12, 0x28, 0x88, 0x1e, 0x4e, 0x22, 0x66, 0x62, 0x1d, 0xf1, 0xca, 0xeb,
+	0xfa, 0x30, 0x69, 0x19, 0xed, 0x9f, 0x56, 0x00, 0xcd, 0x5e, 0x74, 0xe7, 0xbf, 0x92, 0x55, 0xbe,
+	0x91, 0x57, 0xb2, 0xe8, 0x29, 0x6c, 0xc7, 0x82, 0xa3, 0xc0, 0x19, 0x84, 0x4e, 0x37, 0xd6, 0x51,
+	0xa4, 0x9e, 0xf8, 0x14, 0x5a, 0x13, 0xa4, 0xe1, 0xbe, 0x43, 0xf9, 0xd2, 0x01, 0x22, 0xe7, 0xad,
+	0xed, 0xf4, 0xb9, 0xc1, 0x72, 0x4b, 0xb3, 0x97, 0x22, 0xe7, 0xad, 0xce, 0x99, 0x50, 0x34, 0x49,
+	0x0d, 0xf2, 0x0c, 0x52, 0xd7, 0x7e, 0x75, 0xc6, 0x7d, 0x54, 0x7e, 0x5c, 0xbd, 0xe4, 0x18, 0x21,
+	0x95, 0x89, 0xa8, 0x5b, 0x3d, 0x1b, 0xa7, 0x96, 0x29, 0x18, 0xfa, 0x78, 0x9e, 0x1f, 0x57, 0xe4,
+	0x5c, 0x3d, 0xed, 0x49, 0xf4, 0xfd, 0x73, 0x0f, 0x46, 0x41, 0xb2, 0xcc, 0x3d, 0x1a, 0x3f, 0x82,
+	0x82, 0x4b, 0x87, 0x7e, 0xe8, 0x45, 0x95, 0xe2, 0x12, 0xf3, 0xe4, 0xba, 0xa0, 0x25, 0x31, 0x13,
+	0xda, 0x87, 0xd5, 0x81, 0x6f, 0x87, 0xaf, 0xfd, 0x9f, 0xd9, 0xc7, 0x94, 0x56, 0x4a, 0x5c, 0xc6,
+	0x87, 0x0b, 0x65, 0x98, 0x7e, 0xfb, 0xb5, 0xff, 0xb3, 0x7d, 0x4a, 0x49, 0x69, 0x10, 0xff, 0x9d,
+	0xf3, 0x5d, 0x04, 0x5c, 0xf1, 0xbb, 0x88, 0xfe, 0x38, 0xa2, 0xa7, 0x8d, 0x39, 0x75, 0xc5, 0x94,
+	0xe9, 0x46, 0x8e, 0xf3, 0xd2, 0x37, 0xd4, 0x04, 0xf6, 0x59, 0xb3, 0xf9, 0x8c, 0xdf, 0x50, 0x2b,
+	0xb0, 0x95, 0x40, 0xb4, 0x74, 0x62, 0x99, 0x98, 0xa8, 0x99, 0xea, 0x1a, 0xeb, 0x55, 0xe4, 0x84,
+	0xc9, 0xd5, 0xbe, 0x86, 0x3c, 0xd7, 0x09, 0xdd, 0x83, 0x35, 0x1e, 0x7e, 0x76, 0xdf, 0xeb, 0x06,
+	0x7e, 0x28, 0x3f, 0xa7, 0x5a, 0xe5, 0xb0, 0x43, 0x0e, 0x9a, 0x1c, 0xe6, 0xee, 0x99, 0xdd, 0xf5,
+	0xdd, 0xb8, 0xf4, 0xae, 0xc5, 0xc0, 0x9a, 0xef, 0x52, 0xf4, 0x31, 0x20, 0xc6, 0xc3, 0xfa, 0x09,
+	0xe9, 0xd1, 0xc9, 0x57, 0x55, 0xaa, 0xc4, 0xc8, 0x6c, 0xe2, 0x9c, 0x68, 0xbf, 0xab, 0x40, 0x69,
+	0x6c, 0x5e, 0xf4, 0x14, 0xb2, 0xcc, 0x27, 0xca, 0xd2, 0x86, 0x64, 0xe4, 0x48, 0x87, 0xe2, 0x31,
+	0xa5, 0xd3, 0x93, 0x83, 0x0f, 0x2f, 0x66, 0xe5, 0xa9, 0xac, 0x70, 0x4c, 0xf9, 0x1f, 0xed, 0x9f,
+	0x15, 0x28, 0xc8, 0x48, 0x41, 0xbf, 0x36, 0x09, 0xb0, 0xe5, 0x15, 0x19, 0x87, 0xd7, 0xaf, 0xc3,
+	0xed, 0xbe, 0x37, 0xb0, 0x1d, 0xf7, 0xd4, 0x19, 0x74, 0xa9, 0xdd, 0x65, 0xbf, 0xbd, 0x5e, 0xfa,
+	0x2b, 0xb4, 0x9b, 0x7d, 0x6f, 0xa0, 0x0b, 0x92, 0xda, 0x14, 0x05, 0x4b, 0xce, 0x06, 0xac, 0x49,
+	0x59, 0x57, 0xd9, 0xd1, 0xaa, 0xe4, 0xe5, 0xbb, 0xfa, 0xa5, 0x02, 0xb9, 0x76, 0xcf, 0x7f, 0xf7,
+	0x4f, 0xba, 0x12, 0xa3, 0xba, 0xec, 0x05, 0xa3, 0xba, 0xdc, 0x72, 0xdf, 0xd9, 0xe5, 0xe7, 0x7f,
+	0x67, 0xb7, 0x0f, 0xa5, 0xf8, 0x4b, 0xb9, 0x50, 0xb6, 0x00, 0xcb, 0x7f, 0x64, 0x37, 0x61, 0xd5,
+	0xfe, 0x43, 0x81, 0xeb, 0xa9, 0x61, 0xeb, 0xb9, 0xaf, 0x1d, 0xd9, 0xf6, 0x4f, 0xbc, 0x53, 0x3a,
+	0xb0, 0x07, 0x4e, 0x3f, 0x8e, 0xea, 0x12, 0x87, 0x98, 0x4e, 0x9f, 0x32, 0xf3, 0x1d, 0x3b, 0x7d,
+	0xaf, 0x77, 0x26, 0xf0, 0x22, 0x96, 0x41, 0x80, 0x38, 0x41, 0x1d, 0x0a, 0x8e, 0xeb, 0x06, 0x34,
+	0x8c, 0xbf, 0x0b, 0x5c, 0x3c, 0x01, 0x6c, 0xf9, 0x61, 0xe4, 0xf4, 0x74, 0xc1, 0x41, 0x62, 0x56,
+	0x74, 0x1b, 0x4a, 0x11, 0xed, 0xd1, 0xe1, 0x6b, 0x7f, 0x40, 0xa5, 0x79, 0x26, 0x00, 0xd6, 0xef,
+	0xd2, 0xbe, 0xe3, 0xf5, 0xe4, 0x97, 0x23, 0xe2, 0x41, 0xfb, 0xb9, 0x02, 0xeb, 0x09, 0x71, 0xa8,
+	0x02, 0x05, 0x5e, 0x69, 0x83, 0xb8, 0x5b, 0x8e, 0x1f, 0xd1, 0x0e, 0x14, 0x7b, 0x7e, 0xd7, 0x19,
+	0xcf, 0xef, 0x4a, 0x64, 0xfc, 0x8c, 0xb6, 0x61, 0x25, 0xa0, 0x27, 0x93, 0x57, 0x12, 0xf2, 0x89,
+	0x6d, 0x7d, 0xc8, 0xc5, 0x8b, 0x03, 0x2f, 0x87, 0xc5, 0x02, 0xc4, 0x8f, 0xfb, 0x7d, 0x28, 0x87,
+	0x51, 0x40, 0x69, 0x64, 0xc7, 0x16, 0x10, 0x9a, 0xaf, 0x0b, 0xa8, 0xd4, 0xea, 0xe1, 0x1f, 0x29,
+	0xb0, 0x9e, 0x18, 0x7c, 0xa2, 0xf7, 0x61, 0x27, 0x1e, 0xd0, 0xb7, 0x2d, 0xdd, 0xea, 0xb4, 0x53,
+	0x99, 0x6d, 0x1d, 0x4a, 0xb5, 0xa6, 0xb9, 0x6f, 0x90, 0x43, 0x5c, 0x57, 0x15, 0xde, 0xae, 0x61,
+	0xb3, 0xce, 0xc8, 0x0f, 0x31, 0xa9, 0x1d, 0xe8, 0x26, 0xbb, 0xcb, 0x72, 0xbc, 0xfc, 0x00, 0x16,
+	0xad, 0x41, 0x51, 0x8c, 0xf9, 0xf9, 0x6c, 0x6d, 0x15, 0x0a, 0x66, 0x93, 0x7f, 0x24, 0xab, 0xe6,
+	0xd0, 0x7b, 0xb0, 0x21, 0x1f, 0xec, 0x16, 0x36, 0xf5, 0x86, 0xf1, 0x63, 0x5c, 0x57, 0xf3, 0x0f,
+	0xcf, 0xa0, 0x9c, 0x1c, 0x23, 0xa2, 0x5d, 0xb8, 0x5d, 0x23, 0xb8, 0x6e, 0x58, 0x53, 0x13, 0xbd,
+	0xa4, 0x5e, 0x45, 0xc8, 0x1d, 0x19, 0x6d, 0x5d, 0x55, 0x50, 0x19, 0xe0, 0x50, 0x6f, 0x5b, 0x98,
+	0x30, 0x52, 0x35, 0xc3, 0xda, 0x45, 0xfd, 0x10, 0x13, 0x83, 0xdd, 0xdf, 0xf1, 0x8b, 0x16, 0xc1,
+	0xed, 0xb6, 0x9a, 0x65, 0x5a, 0xd5, 0x8d, 0x76, 0xad, 0x79, 0x84, 0x89, 0x9a, 0x63, 0x77, 0x8a,
+	0xcf, 0x6b, 0x55, 0x35, 0xff, 0xf0, 0x8f, 0x15, 0xd8, 0x98, 0xe9, 0xad, 0xd8, 0xd5, 0x3b, 0xf5,
+	0xa6, 0x64, 0x8e, 0x06, 0x77, 0xe0, 0x66, 0x8a, 0xa8, 0x6d, 0x98, 0xcf, 0x1a, 0xd8, 0xee, 0xb4,
+	0x59, 0xe6, 0x9f, 0x7d, 0xdb, 0x72, 0xd8, 0x69, 0x58, 0x06, 0xc7, 0x66, 0xd8, 0x06, 0x53, 0xd8,
+	0x8e, 0xd9, 0x30, 0x0e, 0x0d, 0x0b, 0xd7, 0x39, 0x45, 0xf6, 0xe1, 0x9f, 0x2a, 0xa0, 0xa6, 0xbb,
+	0x22, 0x6e, 0x7e, 0x82, 0x63, 0xce, 0xb9, 0x0e, 0xe3, 0xa5, 0x08, 0x4f, 0xd5, 0xac, 0x23, 0xa3,
+	0xce, 0x5d, 0x77, 0x0b, 0x6e, 0x4c, 0x21, 0xcc, 0xe6, 0x14, 0x32, 0x93, 0xe2, 0x22, 0x78, 0xbf,
+	0x63, 0xd6, 0xb9, 0xff, 0x92, 0x08, 0xe1, 0x14, 0x5c, 0x57, 0x73, 0x0f, 0x9f, 0x40, 0x69, 0x9c,
+	0xef, 0xd0, 0x36, 0xa0, 0x7d, 0xe3, 0x05, 0xae, 0xdb, 0x44, 0xb7, 0xb0, 0x5d, 0xc7, 0xfb, 0x7a,
+	0xa7, 0x61, 0xa9, 0xd7, 0x98, 0x6f, 0x5a, 0x98, 0xd8, 0x2d, 0x4c, 0xda, 0x4d, 0x53, 0x55, 0x5e,
+	0xad, 0xf0, 0x2f, 0xec, 0x9f, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xe0, 0x89, 0xee,
+	0x6d, 0x2f, 0x00, 0x00,
 }
