diff --git a/README.md b/README.md
index e348a0a..ec4f6f2 100644
--- a/README.md
+++ b/README.md
@@ -154,6 +154,8 @@
         Fully qualified domain name. Same name used to sign CN. Only necessary if ca_file is specified and the base URL differs from the server address.
     -output_to_terminal bool
         Output to terminal rather than a file.
+    -use_batch_availability_lookup bool
+        Whether to use the BatchAvailabilityLookup RPC (as opposed to the deprecated CheckAvailability)
 
     orderClient.go
     -all_tests
diff --git a/v3/v3.pb.go b/v3/v3.pb.go
index 6af5c9a..9f4b4b1 100644
--- a/v3/v3.pb.go
+++ b/v3/v3.pb.go
@@ -1,64 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: v3.proto
 
-/*
-Package ext_maps_booking_partner_v3 is a generated protocol buffer package.
-
-It is generated from these files:
-	v3.proto
-
-It has these top-level messages:
-	CheckAvailabilityRequest
-	CheckAvailabilityResponse
-	AvailabilityUpdate
-	SlotAvailability
-	SlotTime
-	SlotTimeAvailability
-	BatchAvailabilityLookupRequest
-	BatchAvailabilityLookupResponse
-	CheckOrderFulfillabilityRequest
-	CheckOrderFulfillabilityResponse
-	GetBookingStatusRequest
-	GetBookingStatusResponse
-	CreateBookingRequest
-	CreateBookingResponse
-	CreateLeaseRequest
-	CreateLeaseResponse
-	Lease
-	LeaseReference
-	CreateOrderRequest
-	CreateOrderResponse
-	ListBookingsRequest
-	ListBookingsResponse
-	ListOrdersRequest
-	ListOrdersResponse
-	UpdateBookingRequest
-	UpdateBookingResponse
-	Booking
-	BookingFailure
-	Order
-	LineItem
-	OrderFailure
-	OrderFulfillability
-	LineItemFulfillability
-	TicketType
-	ResourceIds
-	TokenizationConfig
-	PaymentProcessingParameters
-	UserPaymentOption
-	PaymentInformation
-	Price
-	NoShowFee
-	Deposit
-	Slot
-	UserInformation
-	PostalAddress
-*/
 package ext_maps_booking_partner_v3
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -105,6 +54,7 @@
 	4: "NO_SHOW",
 	5: "NO_SHOW_PENALIZED",
 }
+
 var BookingStatus_value = map[string]int32{
 	"BOOKING_STATUS_UNSPECIFIED":    0,
 	"CONFIRMED":                     1,
@@ -117,7 +67,10 @@
 func (x BookingStatus) String() string {
 	return proto.EnumName(BookingStatus_name, int32(x))
 }
-func (BookingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (BookingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
+}
 
 // Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
 // indicate the type of credit card that was rejected.
@@ -141,19 +94,23 @@
 	4: "DISCOVER",
 	5: "JCB",
 }
+
 var CreditCardType_value = map[string]int32{
 	"CREDIT_CARD_TYPE_UNSPECIFIED": 0,
-	"VISA":             1,
-	"MASTERCARD":       2,
-	"AMERICAN_EXPRESS": 3,
-	"DISCOVER":         4,
-	"JCB":              5,
+	"VISA":                         1,
+	"MASTERCARD":                   2,
+	"AMERICAN_EXPRESS":             3,
+	"DISCOVER":                     4,
+	"JCB":                          5,
 }
 
 func (x CreditCardType) String() string {
 	return proto.EnumName(CreditCardType_name, int32(x))
 }
-func (CreditCardType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (CreditCardType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
+}
 
 type PaymentOptionType int32
 
@@ -170,6 +127,7 @@
 	2: "PAYMENT_OPTION_MULTI_USE",
 	3: "PAYMENT_OPTION_UNLIMITED_USE",
 }
+
 var PaymentOptionType_value = map[string]int32{
 	"PAYMENT_OPTION_TYPE_UNSPECIFIED": 0,
 	"PAYMENT_OPTION_SINGLE_USE":       1,
@@ -180,7 +138,10 @@
 func (x PaymentOptionType) String() string {
 	return proto.EnumName(PaymentOptionType_name, int32(x))
 }
-func (PaymentOptionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (PaymentOptionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
+}
 
 // Prepayment status of a booking.
 // Updating payment status will trigger an update on the payment status of the
@@ -213,6 +174,7 @@
 	3: "PREPAYMENT_REFUNDED",
 	4: "PREPAYMENT_CREDITED",
 }
+
 var PrepaymentStatus_value = map[string]int32{
 	"PREPAYMENT_STATUS_UNSPECIFIED": 0,
 	"PREPAYMENT_PROVIDED":           1,
@@ -224,7 +186,10 @@
 func (x PrepaymentStatus) String() string {
 	return proto.EnumName(PrepaymentStatus_name, int32(x))
 }
-func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
+}
 
 // Defines how a total price is determined from an availability.
 type PriceType int32
@@ -245,6 +210,7 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
+
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -253,7 +219,10 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
-func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (PriceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{4}
+}
 
 // This enum indicates what requirements exist for the user to acknowledge or
 // view the requested slots duration/end time.
@@ -274,6 +243,7 @@
 	1: "DO_NOT_SHOW_DURATION",
 	2: "MUST_SHOW_DURATION",
 }
+
 var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
 	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
 	"DO_NOT_SHOW_DURATION":             1,
@@ -283,8 +253,9 @@
 func (x CheckAvailabilityResponse_DurationRequirement) String() string {
 	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
 }
+
 func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{1, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{1, 0}
 }
 
 type BookingFailure_Cause int32
@@ -343,6 +314,7 @@
 	11: "BOOKING_NOT_CANCELLABLE",
 	12: "OVERLAPPING_RESERVATION",
 }
+
 var BookingFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"SLOT_UNAVAILABLE":                 1,
@@ -362,7 +334,10 @@
 func (x BookingFailure_Cause) String() string {
 	return proto.EnumName(BookingFailure_Cause_name, int32(x))
 }
-func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{27, 0} }
+
+func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{23, 0}
+}
 
 type OrderFailure_Cause int32
 
@@ -391,6 +366,7 @@
 	3: "PAYMENT_ERROR_CARD_DECLINED",
 	4: "PAYMENT_ERROR",
 }
+
 var OrderFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"ORDER_UNFULFILLABLE":              1,
@@ -402,7 +378,10 @@
 func (x OrderFailure_Cause) String() string {
 	return proto.EnumName(OrderFailure_Cause_name, int32(x))
 }
-func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{30, 0} }
+
+func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{26, 0}
+}
 
 // The result of an order fulfillability check.
 type OrderFulfillability_OrderFulfillabilityResult int32
@@ -429,19 +408,21 @@
 	3: "UNFULFILLABLE_SERVICE_COMBINATION",
 	4: "ORDER_UNFULFILLABLE_OTHER_REASON",
 }
+
 var OrderFulfillability_OrderFulfillabilityResult_value = map[string]int32{
 	"ORDER_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
-	"CAN_FULFILL":                             1,
-	"UNFULFILLABLE_LINE_ITEM":                 2,
-	"UNFULFILLABLE_SERVICE_COMBINATION":       3,
-	"ORDER_UNFULFILLABLE_OTHER_REASON":        4,
+	"CAN_FULFILL":                       1,
+	"UNFULFILLABLE_LINE_ITEM":           2,
+	"UNFULFILLABLE_SERVICE_COMBINATION": 3,
+	"ORDER_UNFULFILLABLE_OTHER_REASON":  4,
 }
 
 func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
 	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
 }
+
 func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{31, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{27, 0}
 }
 
 // The result of a line item fulfillability check.
@@ -474,6 +455,7 @@
 	4: "INCORRECT_PRICE",
 	5: "ITEM_UNFULFILLABLE_OTHER_REASON",
 }
+
 var LineItemFulfillability_ItemFulfillabilityResult_value = map[string]int32{
 	"ITEM_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
 	"CAN_FULFILL":                            1,
@@ -487,39 +469,9 @@
 func (x LineItemFulfillability_ItemFulfillabilityResult) String() string {
 	return proto.EnumName(LineItemFulfillability_ItemFulfillabilityResult_name, int32(x))
 }
+
 func (LineItemFulfillability_ItemFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{32, 0}
-}
-
-// 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}
+	return fileDescriptor_1820d8e1a9fad753, []int{28, 0}
 }
 
 type PaymentProcessingParameters_PaymentProcessor int32
@@ -535,6 +487,7 @@
 	1: "PROCESSOR_STRIPE",
 	2: "PROCESSOR_BRAINTREE",
 }
+
 var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
 	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
 	"PROCESSOR_STRIPE":              1,
@@ -544,8 +497,9 @@
 func (x PaymentProcessingParameters_PaymentProcessor) String() string {
 	return proto.EnumName(PaymentProcessingParameters_PaymentProcessor_name, int32(x))
 }
+
 func (PaymentProcessingParameters_PaymentProcessor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{36, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{31, 0}
 }
 
 // Who handles payment processing?
@@ -565,6 +519,7 @@
 	1: "PROCESSED_BY_GOOGLE",
 	2: "PROCESSED_BY_PARTNER",
 }
+
 var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
 	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
 	"PROCESSED_BY_GOOGLE":              1,
@@ -574,20 +529,44 @@
 func (x PaymentInformation_PaymentProcessedBy) String() string {
 	return proto.EnumName(PaymentInformation_PaymentProcessedBy_name, int32(x))
 }
+
 func (PaymentInformation_PaymentProcessedBy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{38, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{33, 0}
 }
 
 // Request to check availability for a Slot.
 type CheckAvailabilityRequest struct {
 	// The appointment slot that is being checked (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot                 *Slot    `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CheckAvailabilityRequest) Reset()                    { *m = CheckAvailabilityRequest{} }
-func (m *CheckAvailabilityRequest) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityRequest) ProtoMessage()               {}
-func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+func (m *CheckAvailabilityRequest) Reset()         { *m = CheckAvailabilityRequest{} }
+func (m *CheckAvailabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityRequest) ProtoMessage()    {}
+func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
+}
+
+func (m *CheckAvailabilityRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckAvailabilityRequest.Unmarshal(m, b)
+}
+func (m *CheckAvailabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckAvailabilityRequest.Marshal(b, m, deterministic)
+}
+func (m *CheckAvailabilityRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityRequest.Merge(m, src)
+}
+func (m *CheckAvailabilityRequest) XXX_Size() int {
+	return xxx_messageInfo_CheckAvailabilityRequest.Size(m)
+}
+func (m *CheckAvailabilityRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckAvailabilityRequest proto.InternalMessageInfo
 
 func (m *CheckAvailabilityRequest) GetSlot() *Slot {
 	if m != nil {
@@ -600,26 +579,49 @@
 // appointment slot.
 type CheckAvailabilityResponse struct {
 	// The requested slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
+	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
 	// The requirement to show the slots duration and/or endtime. This field will
 	// be ignored if the slot is unavailable. (optional)
-	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
+	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,proto3,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
 	// Optionally, the partner can return additional updated information about the
 	// availability for this merchant if this information is present when
 	// responding to the CheckAvailabilityRequest and if there is no negative
 	// impact on the CheckAvailability request latency.
 	// For instance an entire day of merchant availability for a superset of
 	// resources can be returned here.
-	AvailabilityUpdate *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate" json:"availability_update,omitempty"`
+	AvailabilityUpdate   *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate,proto3" json:"availability_update,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *CheckAvailabilityResponse) Reset()                    { *m = CheckAvailabilityResponse{} }
-func (m *CheckAvailabilityResponse) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityResponse) ProtoMessage()               {}
-func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+func (m *CheckAvailabilityResponse) Reset()         { *m = CheckAvailabilityResponse{} }
+func (m *CheckAvailabilityResponse) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityResponse) ProtoMessage()    {}
+func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
+}
+
+func (m *CheckAvailabilityResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckAvailabilityResponse.Unmarshal(m, b)
+}
+func (m *CheckAvailabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckAvailabilityResponse.Marshal(b, m, deterministic)
+}
+func (m *CheckAvailabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityResponse.Merge(m, src)
+}
+func (m *CheckAvailabilityResponse) XXX_Size() int {
+	return xxx_messageInfo_CheckAvailabilityResponse.Size(m)
+}
+func (m *CheckAvailabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckAvailabilityResponse proto.InternalMessageInfo
 
 func (m *CheckAvailabilityResponse) GetSlot() *Slot {
 	if m != nil {
@@ -652,13 +654,36 @@
 // An update to one ore more slots indicating that the availability for the
 // associated time has potentially changed.
 type AvailabilityUpdate struct {
-	SlotAvailability []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability" json:"slot_availability,omitempty"`
+	SlotAvailability     []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability,proto3" json:"slot_availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *AvailabilityUpdate) Reset()                    { *m = AvailabilityUpdate{} }
-func (m *AvailabilityUpdate) String() string            { return proto.CompactTextString(m) }
-func (*AvailabilityUpdate) ProtoMessage()               {}
-func (*AvailabilityUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+func (m *AvailabilityUpdate) Reset()         { *m = AvailabilityUpdate{} }
+func (m *AvailabilityUpdate) String() string { return proto.CompactTextString(m) }
+func (*AvailabilityUpdate) ProtoMessage()    {}
+func (*AvailabilityUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
+}
+
+func (m *AvailabilityUpdate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AvailabilityUpdate.Unmarshal(m, b)
+}
+func (m *AvailabilityUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AvailabilityUpdate.Marshal(b, m, deterministic)
+}
+func (m *AvailabilityUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AvailabilityUpdate.Merge(m, src)
+}
+func (m *AvailabilityUpdate) XXX_Size() int {
+	return xxx_messageInfo_AvailabilityUpdate.Size(m)
+}
+func (m *AvailabilityUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_AvailabilityUpdate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AvailabilityUpdate proto.InternalMessageInfo
 
 func (m *AvailabilityUpdate) GetSlotAvailability() []*SlotAvailability {
 	if m != nil {
@@ -669,16 +694,39 @@
 
 // An inventory slot and associated count of open spots.
 type SlotAvailability struct {
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Number of available spots.
 	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
+	CountAvailable       int32    `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SlotAvailability) Reset()                    { *m = SlotAvailability{} }
-func (m *SlotAvailability) String() string            { return proto.CompactTextString(m) }
-func (*SlotAvailability) ProtoMessage()               {}
-func (*SlotAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+func (m *SlotAvailability) Reset()         { *m = SlotAvailability{} }
+func (m *SlotAvailability) String() string { return proto.CompactTextString(m) }
+func (*SlotAvailability) ProtoMessage()    {}
+func (*SlotAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
+}
+
+func (m *SlotAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotAvailability.Unmarshal(m, b)
+}
+func (m *SlotAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotAvailability.Marshal(b, m, deterministic)
+}
+func (m *SlotAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotAvailability.Merge(m, src)
+}
+func (m *SlotAvailability) XXX_Size() int {
+	return xxx_messageInfo_SlotAvailability.Size(m)
+}
+func (m *SlotAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotAvailability proto.InternalMessageInfo
 
 func (m *SlotAvailability) GetSlot() *Slot {
 	if m != nil {
@@ -694,155 +742,42 @@
 	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" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// The line items in this order. All services requested must belong to the
 	// specified merchant. (required)
-	Item []*LineItem `protobuf:"bytes,2,rep,name=item" json:"item,omitempty"`
+	Item                 []*LineItem `protobuf:"bytes,2,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *CheckOrderFulfillabilityRequest) Reset()                    { *m = CheckOrderFulfillabilityRequest{} }
-func (m *CheckOrderFulfillabilityRequest) String() string            { return proto.CompactTextString(m) }
-func (*CheckOrderFulfillabilityRequest) ProtoMessage()               {}
-func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+func (m *CheckOrderFulfillabilityRequest) Reset()         { *m = CheckOrderFulfillabilityRequest{} }
+func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
+func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetMerchantId() string {
 	if m != nil {
@@ -862,19 +797,40 @@
 type CheckOrderFulfillabilityResponse struct {
 	// Fulfillability status of the order, potentially contains updated
 	// availabilities and prices of the requested line item. (required)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
 	// Total processing fees & taxes that need to be paid for this order.
 	// (required)
-	FeesAndTaxes *Price `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
+	FeesAndTaxes         *Price   `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *CheckOrderFulfillabilityResponse) Reset()         { *m = CheckOrderFulfillabilityResponse{} }
 func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
 func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
 func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{9}
+	return fileDescriptor_1820d8e1a9fad753, []int{5}
 }
 
+func (m *CheckOrderFulfillabilityResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Unmarshal(m, b)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Marshal(b, m, deterministic)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.Merge(m, src)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_Size() int {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Size(m)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckOrderFulfillabilityResponse proto.InternalMessageInfo
+
 func (m *CheckOrderFulfillabilityResponse) GetFulfillability() *OrderFulfillability {
 	if m != nil {
 		return m.Fulfillability
@@ -892,13 +848,36 @@
 // Request to get booking status and prepayment status for a Booking.
 type GetBookingStatusRequest struct {
 	// ID of the existing booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId            string   `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *GetBookingStatusRequest) Reset()                    { *m = GetBookingStatusRequest{} }
-func (m *GetBookingStatusRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusRequest) ProtoMessage()               {}
-func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+func (m *GetBookingStatusRequest) Reset()         { *m = GetBookingStatusRequest{} }
+func (m *GetBookingStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusRequest) ProtoMessage()    {}
+func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBookingId() string {
 	if m != nil {
@@ -911,17 +890,40 @@
 // status.
 type GetBookingStatusResponse struct {
 	// ID of the booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
 	// Status of the booking (required)
-	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
+	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
 	// Prepayment status of the booking (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus     PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
 }
 
-func (m *GetBookingStatusResponse) Reset()                    { *m = GetBookingStatusResponse{} }
-func (m *GetBookingStatusResponse) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusResponse) ProtoMessage()               {}
-func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+func (m *GetBookingStatusResponse) Reset()         { *m = GetBookingStatusResponse{} }
+func (m *GetBookingStatusResponse) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusResponse) ProtoMessage()    {}
+func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBookingId() string {
 	if m != nil {
@@ -951,32 +953,55 @@
 	// If lease_ref is provided, slot must match the lease; slot is provided for
 	// the partner to verify the lease information.
 	// If lease_ref is absent, then create the booking for the slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
 	// The lease that is being confirmed to make this booking.
 	// If lease_ref is provided, then create the booking using the lease.
 	// (optional)
-	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef" json:"lease_ref,omitempty"`
+	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef,proto3" json:"lease_ref,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Information about payments. When payment authorizations are handled by
 	// Google, if the booking request does not succeed, payment authorizations are
 	// automatically canceled. (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (optional)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateBooking requests. (required)
-	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
+	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
 	// A string from the user which contains any special requests or additional
 	// information that they would like to notify the merchant about. (optional)
-	AdditionalRequest string `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest" json:"additional_request,omitempty"`
+	AdditionalRequest    string   `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest,proto3" json:"additional_request,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateBookingRequest) Reset()                    { *m = CreateBookingRequest{} }
-func (m *CreateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingRequest) ProtoMessage()               {}
-func (*CreateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (m *CreateBookingRequest) Reset()         { *m = CreateBookingRequest{} }
+func (m *CreateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingRequest) ProtoMessage()    {}
+func (*CreateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetSlot() *Slot {
 	if m != nil {
@@ -1030,25 +1055,48 @@
 // Response with the created Booking for an inventory slot.
 type CreateBookingResponse struct {
 	// The created booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
 	// The updated user payment option used in this booking.
 	// If a new payment option was purchased to pay for the booking, this should
 	// be a newly created user payment option.
 	// If an already purchased user payment option was used for this booking,
 	// this should reflect an updated version of that user payment option.
 	// (optional)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
 	// If creating a booking fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and all other fields in the
 	// CreateBookingResponse message are expected to be unset. (required if
 	// failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *CreateBookingResponse) Reset()                    { *m = CreateBookingResponse{} }
-func (m *CreateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingResponse) ProtoMessage()               {}
-func (*CreateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (m *CreateBookingResponse) Reset()         { *m = CreateBookingResponse{} }
+func (m *CreateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingResponse) ProtoMessage()    {}
+func (*CreateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBooking() *Booking {
 	if m != nil {
@@ -1077,13 +1125,36 @@
 type CreateLeaseRequest struct {
 	// The lease to be created with information about the appointment slot
 	// (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
+	Lease                *Lease   `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateLeaseRequest) Reset()                    { *m = CreateLeaseRequest{} }
-func (m *CreateLeaseRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseRequest) ProtoMessage()               {}
-func (*CreateLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (m *CreateLeaseRequest) Reset()         { *m = CreateLeaseRequest{} }
+func (m *CreateLeaseRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseRequest) ProtoMessage()    {}
+func (*CreateLeaseRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetLease() *Lease {
 	if m != nil {
@@ -1095,17 +1166,40 @@
 // Response for the CreateLease RPC with the created Lease.
 type CreateLeaseResponse struct {
 	// The created Lease (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
+	Lease *Lease `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
 	// If creating a lease fails, this field should reflect the business logic
 	// error (e.g., slot has become unavailable) and lease field is expected to be
 	// unset. (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *CreateLeaseResponse) Reset()                    { *m = CreateLeaseResponse{} }
-func (m *CreateLeaseResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseResponse) ProtoMessage()               {}
-func (*CreateLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+func (m *CreateLeaseResponse) Reset()         { *m = CreateLeaseResponse{} }
+func (m *CreateLeaseResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseResponse) ProtoMessage()    {}
+func (*CreateLeaseResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetLease() *Lease {
 	if m != nil {
@@ -1126,20 +1220,43 @@
 	// ID of the lease.
 	// Not populated in CreateLeaseRequest. The value is chosen by the partner and
 	// has to be returned in the response of CreateLease. (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
 	// The appointment slot that the lease is created for. (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Unique identifier for this lease, chosen by Reserve with Google. Serves as
 	// an idempotency token for CreateLease requests. (required)
-	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference" json:"user_reference,omitempty"`
+	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference,proto3" json:"user_reference,omitempty"`
 	// Expiration time of the lease in UTC Timestamp (required)
-	LeaseExpirationTimeSec int64 `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec" json:"lease_expiration_time_sec,omitempty"`
+	LeaseExpirationTimeSec int64    `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec,proto3" json:"lease_expiration_time_sec,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
+	XXX_unrecognized       []byte   `json:"-"`
+	XXX_sizecache          int32    `json:"-"`
 }
 
-func (m *Lease) Reset()                    { *m = Lease{} }
-func (m *Lease) String() string            { return proto.CompactTextString(m) }
-func (*Lease) ProtoMessage()               {}
-func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+func (m *Lease) Reset()         { *m = Lease{} }
+func (m *Lease) String() string { return proto.CompactTextString(m) }
+func (*Lease) ProtoMessage()    {}
+func (*Lease) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetLeaseId() string {
 	if m != nil {
@@ -1172,13 +1289,36 @@
 // Reference to a Lease that has been created via CreateLease.
 type LeaseReference struct {
 	// Lease ID (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId              string   `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *LeaseReference) Reset()                    { *m = LeaseReference{} }
-func (m *LeaseReference) String() string            { return proto.CompactTextString(m) }
-func (*LeaseReference) ProtoMessage()               {}
-func (*LeaseReference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (m *LeaseReference) Reset()         { *m = LeaseReference{} }
+func (m *LeaseReference) String() string { return proto.CompactTextString(m) }
+func (*LeaseReference) ProtoMessage()    {}
+func (*LeaseReference) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetLeaseId() string {
 	if m != nil {
@@ -1190,19 +1330,42 @@
 // Request to create an order.
 type CreateOrderRequest struct {
 	// The order to create. (required)
-	Order *Order `protobuf:"bytes,1,opt,name=order" json:"order,omitempty"`
+	Order *Order `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"`
 	// The parameters to be used if the payment is processed by the partner
 	// (i.e. order.payment_information.payment_processed_by is equal to
 	// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
 	// Idempotency token for CreateOrder requests. (required)
-	IdempotencyToken string `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
+	IdempotencyToken     string   `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateOrderRequest) Reset()                    { *m = CreateOrderRequest{} }
-func (m *CreateOrderRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderRequest) ProtoMessage()               {}
-func (*CreateOrderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+func (m *CreateOrderRequest) Reset()         { *m = CreateOrderRequest{} }
+func (m *CreateOrderRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderRequest) ProtoMessage()    {}
+func (*CreateOrderRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetOrder() *Order {
 	if m != nil {
@@ -1235,26 +1398,51 @@
 	// Types that are valid to be assigned to Result:
 	//	*CreateOrderResponse_Order
 	//	*CreateOrderResponse_OrderFailure
-	Result isCreateOrderResponse_Result `protobuf_oneof:"result"`
+	Result               isCreateOrderResponse_Result `protobuf_oneof:"result"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
 }
 
-func (m *CreateOrderResponse) Reset()                    { *m = CreateOrderResponse{} }
-func (m *CreateOrderResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderResponse) ProtoMessage()               {}
-func (*CreateOrderResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (m *CreateOrderResponse) Reset()         { *m = CreateOrderResponse{} }
+func (m *CreateOrderResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderResponse) ProtoMessage()    {}
+func (*CreateOrderResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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
 
 type isCreateOrderResponse_Result interface {
 	isCreateOrderResponse_Result()
 }
 
 type CreateOrderResponse_Order struct {
-	Order *Order `protobuf:"bytes,1,opt,name=order,oneof"`
-}
-type CreateOrderResponse_OrderFailure struct {
-	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,oneof"`
+	Order *Order `protobuf:"bytes,1,opt,name=order,proto3,oneof"`
 }
 
-func (*CreateOrderResponse_Order) isCreateOrderResponse_Result()        {}
+type CreateOrderResponse_OrderFailure struct {
+	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,proto3,oneof"`
+}
+
+func (*CreateOrderResponse_Order) isCreateOrderResponse_Result() {}
+
 func (*CreateOrderResponse_OrderFailure) isCreateOrderResponse_Result() {}
 
 func (m *CreateOrderResponse) GetResult() isCreateOrderResponse_Result {
@@ -1337,12 +1525,12 @@
 	switch x := m.Result.(type) {
 	case *CreateOrderResponse_Order:
 		s := proto.Size(x.Order)
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *CreateOrderResponse_OrderFailure:
 		s := proto.Size(x.OrderFailure)
-		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
@@ -1355,13 +1543,36 @@
 // Request to list all bookings for a user
 type ListBookingsRequest struct {
 	// ID of the user (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListBookingsRequest) Reset()                    { *m = ListBookingsRequest{} }
-func (m *ListBookingsRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsRequest) ProtoMessage()               {}
-func (*ListBookingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+func (m *ListBookingsRequest) Reset()         { *m = ListBookingsRequest{} }
+func (m *ListBookingsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsRequest) ProtoMessage()    {}
+func (*ListBookingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetUserId() string {
 	if m != nil {
@@ -1373,13 +1584,36 @@
 // Response for the ListBookings RPC with all bookings for the requested user.
 type ListBookingsResponse struct {
 	// All bookings of the user (required)
-	Bookings []*Booking `protobuf:"bytes,1,rep,name=bookings" json:"bookings,omitempty"`
+	Bookings             []*Booking `protobuf:"bytes,1,rep,name=bookings,proto3" json:"bookings,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
 }
 
-func (m *ListBookingsResponse) Reset()                    { *m = ListBookingsResponse{} }
-func (m *ListBookingsResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsResponse) ProtoMessage()               {}
-func (*ListBookingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+func (m *ListBookingsResponse) Reset()         { *m = ListBookingsResponse{} }
+func (m *ListBookingsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsResponse) ProtoMessage()    {}
+func (*ListBookingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBookings() []*Booking {
 	if m != nil {
@@ -1395,26 +1629,51 @@
 	// Types that are valid to be assigned to Ids:
 	//	*ListOrdersRequest_UserId
 	//	*ListOrdersRequest_OrderIds_
-	Ids isListOrdersRequest_Ids `protobuf_oneof:"ids"`
+	Ids                  isListOrdersRequest_Ids `protobuf_oneof:"ids"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
 }
 
-func (m *ListOrdersRequest) Reset()                    { *m = ListOrdersRequest{} }
-func (m *ListOrdersRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersRequest) ProtoMessage()               {}
-func (*ListOrdersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+func (m *ListOrdersRequest) Reset()         { *m = ListOrdersRequest{} }
+func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersRequest) ProtoMessage()    {}
+func (*ListOrdersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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
 
 type isListOrdersRequest_Ids interface {
 	isListOrdersRequest_Ids()
 }
 
 type ListOrdersRequest_UserId struct {
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,oneof"`
-}
-type ListOrdersRequest_OrderIds_ struct {
-	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,oneof"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3,oneof"`
 }
 
-func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids()    {}
+type ListOrdersRequest_OrderIds_ struct {
+	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,proto3,oneof"`
+}
+
+func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids() {}
+
 func (*ListOrdersRequest_OrderIds_) isListOrdersRequest_Ids() {}
 
 func (m *ListOrdersRequest) GetIds() isListOrdersRequest_Ids {
@@ -1493,12 +1752,12 @@
 	// ids
 	switch x := m.Ids.(type) {
 	case *ListOrdersRequest_UserId:
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.UserId)))
 		n += len(x.UserId)
 	case *ListOrdersRequest_OrderIds_:
 		s := proto.Size(x.OrderIds)
-		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
@@ -1509,13 +1768,36 @@
 }
 
 type ListOrdersRequest_OrderIds struct {
-	OrderId []string `protobuf:"bytes,1,rep,name=order_id,json=orderId" json:"order_id,omitempty"`
+	OrderId              []string `protobuf:"bytes,1,rep,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOrdersRequest_OrderIds) Reset()                    { *m = ListOrdersRequest_OrderIds{} }
-func (m *ListOrdersRequest_OrderIds) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersRequest_OrderIds) ProtoMessage()               {}
-func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22, 0} }
+func (m *ListOrdersRequest_OrderIds) Reset()         { *m = ListOrdersRequest_OrderIds{} }
+func (m *ListOrdersRequest_OrderIds) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersRequest_OrderIds) ProtoMessage()    {}
+func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetOrderId() []string {
 	if m != nil {
@@ -1527,13 +1809,36 @@
 // Response for the ListOrders RPC.
 type ListOrdersResponse struct {
 	// All requested orders (required)
-	Order []*Order `protobuf:"bytes,1,rep,name=order" json:"order,omitempty"`
+	Order                []*Order `protobuf:"bytes,1,rep,name=order,proto3" json:"order,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOrdersResponse) Reset()                    { *m = ListOrdersResponse{} }
-func (m *ListOrdersResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersResponse) ProtoMessage()               {}
-func (*ListOrdersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+func (m *ListOrdersResponse) Reset()         { *m = ListOrdersResponse{} }
+func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersResponse) ProtoMessage()    {}
+func (*ListOrdersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetOrder() []*Order {
 	if m != nil {
@@ -1548,13 +1853,36 @@
 	// 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" json:"booking,omitempty"`
+	Booking              *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UpdateBookingRequest) Reset()                    { *m = UpdateBookingRequest{} }
-func (m *UpdateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingRequest) ProtoMessage()               {}
-func (*UpdateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+func (m *UpdateBookingRequest) Reset()         { *m = UpdateBookingRequest{} }
+func (m *UpdateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingRequest) ProtoMessage()    {}
+func (*UpdateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBooking() *Booking {
 	if m != nil {
@@ -1566,7 +1894,7 @@
 // Response with the updated Booking.
 type UpdateBookingResponse struct {
 	// The updated booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
 	// The updated user payment option originally used to pay for this booking.
 	// This should be set if the UpdateBookingRequest results in a change to
 	// the UserPaymentOption.
@@ -1576,16 +1904,39 @@
 	// allow the user to create another booking with this payment option. In the
 	// case of a single-use payment option, a new single-use user payment option
 	// should be returned. (required if altered in update)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
 	// If updating a booking fails, this field should reflect the business logic
 	// error (e.g., booking is not cancellable) (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
-func (m *UpdateBookingResponse) Reset()                    { *m = UpdateBookingResponse{} }
-func (m *UpdateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingResponse) ProtoMessage()               {}
-func (*UpdateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+func (m *UpdateBookingResponse) Reset()         { *m = UpdateBookingResponse{} }
+func (m *UpdateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingResponse) ProtoMessage()    {}
+func (*UpdateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBooking() *Booking {
 	if m != nil {
@@ -1611,22 +1962,45 @@
 // A booking for an inventory slot
 type Booking struct {
 	// ID of this booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
 	// The appointment slot of this booking (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Status of the booking (required)
-	Status BookingStatus `protobuf:"varint,4,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	Status BookingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
 	// Information about payment transactions that relate to the booking.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation   *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *Booking) Reset()                    { *m = Booking{} }
-func (m *Booking) String() string            { return proto.CompactTextString(m) }
-func (*Booking) ProtoMessage()               {}
-func (*Booking) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+func (m *Booking) Reset()         { *m = Booking{} }
+func (m *Booking) String() string { return proto.CompactTextString(m) }
+func (*Booking) ProtoMessage()    {}
+func (*Booking) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetBookingId() string {
 	if m != nil {
@@ -1668,18 +2042,41 @@
 // BookingFailure is intended to primarily capture business logic errors.
 type BookingFailure struct {
 	// The reason why the booking failed. (required)
-	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
+	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+	Description          string   `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *BookingFailure) Reset()                    { *m = BookingFailure{} }
-func (m *BookingFailure) String() string            { return proto.CompactTextString(m) }
-func (*BookingFailure) ProtoMessage()               {}
-func (*BookingFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+func (m *BookingFailure) Reset()         { *m = BookingFailure{} }
+func (m *BookingFailure) String() string { return proto.CompactTextString(m) }
+func (*BookingFailure) ProtoMessage()    {}
+func (*BookingFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetCause() BookingFailure_Cause {
 	if m != nil {
@@ -1707,22 +2104,45 @@
 	// ID of this Order, chosen by the booking partner who handles the order
 	// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
 	// CreateOrderRequest)
-	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId" json:"order_id,omitempty"`
+	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
 	// Personal information of the user making the order (required)
-	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Information about payment transactions that relate to the Order.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
 	// The merchant that all services in this Order belong to.
-	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// Line items in this order.
-	Item []*LineItem `protobuf:"bytes,5,rep,name=item" json:"item,omitempty"`
+	Item                 []*LineItem `protobuf:"bytes,5,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *Order) Reset()                    { *m = Order{} }
-func (m *Order) String() string            { return proto.CompactTextString(m) }
-func (*Order) ProtoMessage()               {}
-func (*Order) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
+func (m *Order) Reset()         { *m = Order{} }
+func (m *Order) String() string { return proto.CompactTextString(m) }
+func (*Order) ProtoMessage()    {}
+func (*Order) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetOrderId() string {
 	if m != nil {
@@ -1763,30 +2183,53 @@
 // slot.
 type LineItem struct {
 	// ID of the merchant Service. (required)
-	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the appointment slot in seconds. (required)
-	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Number of tickets ordered by Ticket Type.
-	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets" json:"tickets,omitempty"`
+	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets,proto3" json:"tickets,omitempty"`
 	// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
 	// the total price (excluding taxes) of the item must be verified to guard
 	// against price changes. In CreateOrderResponse and
 	// CheckOrderFulfillabilityResponse, the price should be updated to the
 	// correct value if the value from the request was incorrect or outdated.
 	// (reqired)
-	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
 	// Status of the Line Item. (required in CreateOrderResponse and
 	// ListOrdersResponse; should not be set in requests)
-	Status BookingStatus `protobuf:"varint,6,opt,name=status,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	Status               BookingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
 }
 
-func (m *LineItem) Reset()                    { *m = LineItem{} }
-func (m *LineItem) String() string            { return proto.CompactTextString(m) }
-func (*LineItem) ProtoMessage()               {}
-func (*LineItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
+func (m *LineItem) Reset()         { *m = LineItem{} }
+func (m *LineItem) String() string { return proto.CompactTextString(m) }
+func (*LineItem) ProtoMessage()    {}
+func (*LineItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetServiceId() string {
 	if m != nil {
@@ -1831,14 +2274,37 @@
 }
 
 type LineItem_OrderedTickets struct {
-	TicketId string `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId" json:"ticket_id,omitempty"`
-	Count    int32  `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
+	TicketId             string   `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId,proto3" json:"ticket_id,omitempty"`
+	Count                int32    `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *LineItem_OrderedTickets) Reset()                    { *m = LineItem_OrderedTickets{} }
-func (m *LineItem_OrderedTickets) String() string            { return proto.CompactTextString(m) }
-func (*LineItem_OrderedTickets) ProtoMessage()               {}
-func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} }
+func (m *LineItem_OrderedTickets) Reset()         { *m = LineItem_OrderedTickets{} }
+func (m *LineItem_OrderedTickets) String() string { return proto.CompactTextString(m) }
+func (*LineItem_OrderedTickets) ProtoMessage()    {}
+func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetTicketId() string {
 	if m != nil {
@@ -1858,20 +2324,43 @@
 // OrderFailure is intended to primarily capture business logic errors.
 type OrderFailure struct {
 	// The reason why the order failed. (required)
-	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
+	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
 	// (required only if cause is ORDER_UNFULFILLABLE)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability" json:"fulfillability,omitempty"`
+	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
 	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
 	// This optional field is used for the partner to include additional
 	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
+	Description          string   `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *OrderFailure) Reset()                    { *m = OrderFailure{} }
-func (m *OrderFailure) String() string            { return proto.CompactTextString(m) }
-func (*OrderFailure) ProtoMessage()               {}
-func (*OrderFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
+func (m *OrderFailure) Reset()         { *m = OrderFailure{} }
+func (m *OrderFailure) String() string { return proto.CompactTextString(m) }
+func (*OrderFailure) ProtoMessage()    {}
+func (*OrderFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetCause() OrderFailure_Cause {
 	if m != nil {
@@ -1902,18 +2391,41 @@
 }
 
 type OrderFulfillability struct {
-	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
+	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
 	// Fulfillability results of all line items in this order (required).
-	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability" json:"item_fulfillability,omitempty"`
+	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability,proto3" json:"item_fulfillability,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
+	UnfulfillableReason  string   `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *OrderFulfillability) Reset()                    { *m = OrderFulfillability{} }
-func (m *OrderFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*OrderFulfillability) ProtoMessage()               {}
-func (*OrderFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
+func (m *OrderFulfillability) Reset()         { *m = OrderFulfillability{} }
+func (m *OrderFulfillability) String() string { return proto.CompactTextString(m) }
+func (*OrderFulfillability) ProtoMessage()    {}
+func (*OrderFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetResult() OrderFulfillability_OrderFulfillabilityResult {
 	if m != nil {
@@ -1939,25 +2451,48 @@
 // Fulfillability of a line item.
 type LineItemFulfillability struct {
 	// The line item of question. (required)
-	Item *LineItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
+	Item *LineItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
 	// (required)
-	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
+	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
 	// Additional description of the reason if the item is unfulfillable.
 	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
+	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
 	// (optional)
-	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability" json:"availability,omitempty"`
+	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability,proto3" json:"availability,omitempty"`
 	// Updated ticket types can be piggybacked in
 	// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
 	// for this slot with up-to-date prices should be listed without omitting any.
 	// (optional)
-	TicketType []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType" json:"ticket_type,omitempty"`
+	TicketType           []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
 }
 
-func (m *LineItemFulfillability) Reset()                    { *m = LineItemFulfillability{} }
-func (m *LineItemFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*LineItemFulfillability) ProtoMessage()               {}
-func (*LineItemFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
+func (m *LineItemFulfillability) Reset()         { *m = LineItemFulfillability{} }
+func (m *LineItemFulfillability) String() string { return proto.CompactTextString(m) }
+func (*LineItemFulfillability) ProtoMessage()    {}
+func (*LineItemFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetItem() *LineItem {
 	if m != nil {
@@ -1999,7 +2534,10 @@
 type LineItemFulfillability_UpdatedAvailability struct {
 	// Number of available spots for the given slot. 0 indicates no
 	// availability. (required)
-	SpotsOpen int32 `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
+	SpotsOpen            int32    `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *LineItemFulfillability_UpdatedAvailability) Reset() {
@@ -2010,9 +2548,27 @@
 }
 func (*LineItemFulfillability_UpdatedAvailability) ProtoMessage() {}
 func (*LineItemFulfillability_UpdatedAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{32, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{28, 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
@@ -2020,64 +2576,48 @@
 	return 0
 }
 
-// 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.
+// 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.
 type TicketType struct {
 	// The ticket id is used to differentiate among different ticket types of the
 	// same service, and is only expected to be unique within a service.
-	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
-	// A short description to this TicketType.
-	//
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-	// Required, each ticket type should have a description to be user visible.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" json:"short_description,omitempty"`
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
 	// The price of a single ticket of this type, exclusive of any taxes. The tax
 	// rate of Service is applied to its tickets.
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
-	// 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"`
+	Price                *Price   `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *TicketType) Reset()                    { *m = TicketType{} }
-func (m *TicketType) String() string            { return proto.CompactTextString(m) }
-func (*TicketType) ProtoMessage()               {}
-func (*TicketType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
+func (m *TicketType) Reset()         { *m = TicketType{} }
+func (m *TicketType) String() string { return proto.CompactTextString(m) }
+func (*TicketType) ProtoMessage()    {}
+func (*TicketType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetTicketTypeId() string {
 	if m != nil {
@@ -2100,30 +2640,46 @@
 	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" json:"staff_id,omitempty"`
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
 	// The room ID as provided in the feed or empty if not applicable or no room
 	// was selected. (optional)
-	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId" json:"room_id,omitempty"`
+	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
 	// For Dining Reservations only: the number of seats requested in the booking.
 	// (optional)
-	PartySize int32 `protobuf:"varint,3,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
+	PartySize            int32    `protobuf:"varint,3,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ResourceIds) Reset()                    { *m = ResourceIds{} }
-func (m *ResourceIds) String() string            { return proto.CompactTextString(m) }
-func (*ResourceIds) ProtoMessage()               {}
-func (*ResourceIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
+func (m *ResourceIds) Reset()         { *m = ResourceIds{} }
+func (m *ResourceIds) String() string { return proto.CompactTextString(m) }
+func (*ResourceIds) ProtoMessage()    {}
+func (*ResourceIds) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetStaffId() string {
 	if m != nil {
@@ -2146,43 +2702,12 @@
 	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,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"`
+	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,proto3,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"` // Deprecated: Do not use.
 	// The token representing the payment method that will be used to pay
 	// for this booking. This token can be only used once. This token can be
 	// only used for the merchant associated with this booking.
@@ -2195,7 +2720,7 @@
 	// For example, for Stripe, unparsed_payment_method_token is a serialized
 	// JSON object documented at https://stripe.com/docs/api#token_object.
 	// payment_method_token is the 'id' field parsed out of that.
-	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken" json:"payment_method_token,omitempty"`
+	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken,proto3" json:"payment_method_token,omitempty"` // Deprecated: Do not use.
 	// The full token received from Google Payments.  This is typically a
 	// serialized JSON object.  See documentation from Google Payments and your
 	// payment processor for the JSON format of the token for your processor.
@@ -2203,28 +2728,47 @@
 	//
 	// This token can only be used once, and only for the merchant associated with
 	// this booking.
-	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken" json:"unparsed_payment_method_token,omitempty"`
+	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken,proto3" json:"unparsed_payment_method_token,omitempty"`
 	// The payment processor API version that the given payment token is valid
 	// for.
 	//
 	// Each processor may choose its own format for this field.
 	// Stripe uses a date (e.g. "2017-06-15"). (required)
-	// This is deprecated in favor of tokenization_parameters.
-	Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"`
+	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
 	// The payment processor whose configuration was used to generate this token.
 	// (required)
-	// This is deprecated in favor of tokenization_parameters.
-	PaymentProcessor string `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor" json:"payment_processor,omitempty"`
-	// 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"`
+	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:"-"`
 }
 
-func (m *PaymentProcessingParameters) Reset()                    { *m = PaymentProcessingParameters{} }
-func (m *PaymentProcessingParameters) String() string            { return proto.CompactTextString(m) }
-func (*PaymentProcessingParameters) ProtoMessage()               {}
-func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
+func (m *PaymentProcessingParameters) Reset()         { *m = PaymentProcessingParameters{} }
+func (m *PaymentProcessingParameters) String() string { return proto.CompactTextString(m) }
+func (*PaymentProcessingParameters) ProtoMessage()    {}
+func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{31}
+}
 
+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
@@ -2232,6 +2776,7 @@
 	return PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED
 }
 
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetPaymentMethodToken() string {
 	if m != nil {
 		return m.PaymentMethodToken
@@ -2260,13 +2805,6 @@
 	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
@@ -2274,32 +2812,55 @@
 type UserPaymentOption struct {
 	// A unique identifier for the user payment option. This Id MUST be unique
 	// for all UserPaymentOptions across all merchants and users. (required)
-	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId" json:"user_payment_option_id,omitempty"`
+	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3" json:"user_payment_option_id,omitempty"`
 	// The user payment option will be valid (usable) between start_time and
 	// end_time set in UTC. Attempts to use a user payment option to make a
 	// booking outside of this interval will fail. (both optional)
-	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec" json:"valid_start_time_sec,omitempty"`
-	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec" json:"valid_end_time_sec,omitempty"`
+	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec,proto3" json:"valid_start_time_sec,omitempty"`
+	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec,proto3" json:"valid_end_time_sec,omitempty"`
 	// The type of the payment option associated with this user payment option.
 	// This can be unlimited for a membership or subscription, multi-use for a
 	// pack, or single-use. (required)
-	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
+	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,proto3,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
 	// The original number of uses for this user payment option when it was
 	// purchased. This value is ignored for unlimited payment options. (required)
-	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount" json:"original_count,omitempty"`
+	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount,proto3" json:"original_count,omitempty"`
 	// The number of uses remaining for this user payment option. If this number
 	// is 0 for a pack, attempts to use this payment option to make a booking will
 	// fail. (required)
-	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount" json:"current_count,omitempty"`
+	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount,proto3" json:"current_count,omitempty"`
 	// The id of the payment option that has been used to purchase this user
 	// payment option. (required)
-	PaymentOptionId string `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+	PaymentOptionId      string   `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UserPaymentOption) Reset()                    { *m = UserPaymentOption{} }
-func (m *UserPaymentOption) String() string            { return proto.CompactTextString(m) }
-func (*UserPaymentOption) ProtoMessage()               {}
-func (*UserPaymentOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
+func (m *UserPaymentOption) Reset()         { *m = UserPaymentOption{} }
+func (m *UserPaymentOption) String() string { return proto.CompactTextString(m) }
+func (*UserPaymentOption) ProtoMessage()    {}
+func (*UserPaymentOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetUserPaymentOptionId() string {
 	if m != nil {
@@ -2359,13 +2920,13 @@
 	// If the prepayment status is PREPAYMENT_REFUNDED, then
 	// payment_transaction_id contains the associated unique transaction id for
 	// the refund. (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
 	// Unique identifier for a payment transaction associated with the booking.
 	// If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
 	// If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
 	// Google's CreateBooking or CreateOrder requests to the partner, and it must
 	// be set by the partner in their responses.
-	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId" json:"payment_transaction_id,omitempty"`
+	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId,proto3" json:"payment_transaction_id,omitempty"`
 	// These fields must match the service price (specified in the Services feed)
 	// or the PaymentOption corresponding with this service.
 	// They are included in the booking request and response to verify that
@@ -2375,15 +2936,15 @@
 	// The price of the booking or order, exclusive of any taxes.
 	// Existence of price or taxes does not imply that they have been paid,
 	// prepayment_state should be used for that purpose. (required)
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
 	// Taxes that are calculated to be paid for this booking.
 	// This field can only be absent in one of the following cases:
 	// (1) the price is exempt from or already inclusive of applicable taxes; or
 	// (2) the break down between taxes and fees is not available.
 	// (required when neither of the above holds)
-	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount" json:"tax_amount,omitempty"`
+	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount,proto3" json:"tax_amount,omitempty"`
 	// Whether the partner or Google processed the payment. (required)
-	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
+	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,proto3,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
 	// The id of the payment option or user payment option associated with the
 	// booking.
 	// If a payment option is purchased as part of a booking, payment_option_id
@@ -2402,41 +2963,43 @@
 	PaymentId isPaymentInformation_PaymentId `protobuf_oneof:"payment_id"`
 	// Defines how a deposit may be charged to the user. If there is a deposit,
 	// this field should be set. (optional)
-	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. If the user can be
 	// charged a no show fee, this field should be set. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
 	// Total processing fees & taxes that the user needs to pay for the order;
 	// only applicable to partners that handle order based booking (e.g., with
 	// CreateOrder method). (optional)
-	FeesAndTaxes *Price `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
+	FeesAndTaxes         *Price   `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PaymentInformation) Reset()                    { *m = PaymentInformation{} }
-func (m *PaymentInformation) String() string            { return proto.CompactTextString(m) }
-func (*PaymentInformation) ProtoMessage()               {}
-func (*PaymentInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
-
-type isPaymentInformation_PaymentId interface {
-	isPaymentInformation_PaymentId()
+func (m *PaymentInformation) Reset()         { *m = PaymentInformation{} }
+func (m *PaymentInformation) String() string { return proto.CompactTextString(m) }
+func (*PaymentInformation) ProtoMessage()    {}
+func (*PaymentInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{33}
 }
 
-type PaymentInformation_PaymentOptionId struct {
-	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,oneof"`
+func (m *PaymentInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentInformation.Unmarshal(m, b)
 }
-type PaymentInformation_UserPaymentOptionId struct {
-	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,oneof"`
+func (m *PaymentInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentInformation.Marshal(b, m, deterministic)
+}
+func (m *PaymentInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentInformation.Merge(m, src)
+}
+func (m *PaymentInformation) XXX_Size() int {
+	return xxx_messageInfo_PaymentInformation.Size(m)
+}
+func (m *PaymentInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentInformation.DiscardUnknown(m)
 }
 
-func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId()     {}
-func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
-
-func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
-	if m != nil {
-		return m.PaymentId
-	}
-	return nil
-}
+var xxx_messageInfo_PaymentInformation proto.InternalMessageInfo
 
 func (m *PaymentInformation) GetPrepaymentStatus() PrepaymentStatus {
 	if m != nil {
@@ -2473,6 +3036,29 @@
 	return PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED
 }
 
+type isPaymentInformation_PaymentId interface {
+	isPaymentInformation_PaymentId()
+}
+
+type PaymentInformation_PaymentOptionId struct {
+	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,proto3,oneof"`
+}
+
+type PaymentInformation_UserPaymentOptionId struct {
+	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
+}
+
+func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
+	if m != nil {
+		return m.PaymentId
+	}
+	return nil
+}
+
 func (m *PaymentInformation) GetPaymentOptionId() string {
 	if x, ok := m.GetPaymentId().(*PaymentInformation_PaymentOptionId); ok {
 		return x.PaymentOptionId
@@ -2560,11 +3146,11 @@
 	// payment_id
 	switch x := m.PaymentId.(type) {
 	case *PaymentInformation_PaymentOptionId:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.PaymentOptionId)))
 		n += len(x.PaymentOptionId)
 	case *PaymentInformation_UserPaymentOptionId:
-		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.UserPaymentOptionId)))
 		n += len(x.UserPaymentOptionId)
 	case nil:
@@ -2581,18 +3167,41 @@
 	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
 	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
 	// (required)
-	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros" json:"price_micros,omitempty"`
+	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"`
 	// The currency of the price that is defined in ISO 4217. (required)
-	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode" json:"currency_code,omitempty"`
+	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
 	// An optional and opaque string that identifies the pricing option that is
 	// associated with the extended price. (optional)
-	PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag" json:"pricing_option_tag,omitempty"`
+	PricingOptionTag     string   `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *Price) Reset()                    { *m = Price{} }
-func (m *Price) String() string            { return proto.CompactTextString(m) }
-func (*Price) ProtoMessage()               {}
-func (*Price) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
+func (m *Price) Reset()         { *m = Price{} }
+func (m *Price) String() string { return proto.CompactTextString(m) }
+func (*Price) ProtoMessage()    {}
+func (*Price) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetPriceMicros() int64 {
 	if m != nil {
@@ -2620,15 +3229,38 @@
 type NoShowFee struct {
 	// The amount the user may be charged if they do not show up for their
 	// reservation.
-	Fee *Price `protobuf:"bytes,1,opt,name=fee" json:"fee,omitempty"`
+	Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"`
 	// Defines how the fee is determined from the availability.
-	FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=ext.maps.booking.partner.v3.PriceType" json:"fee_type,omitempty"`
+	FeeType              PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"fee_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *NoShowFee) Reset()                    { *m = NoShowFee{} }
-func (m *NoShowFee) String() string            { return proto.CompactTextString(m) }
-func (*NoShowFee) ProtoMessage()               {}
-func (*NoShowFee) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
+func (m *NoShowFee) Reset()         { *m = NoShowFee{} }
+func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
+func (*NoShowFee) ProtoMessage()    {}
+func (*NoShowFee) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetFee() *Price {
 	if m != nil {
@@ -2648,17 +3280,40 @@
 // for.
 type Deposit struct {
 	// Deposit amount.
-	Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Minimum advance cancellation for the deposit.
-	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" json:"min_advance_cancellation_sec,omitempty"`
+	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
 	// Defines how the deposit is determined from the availability.
-	DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,enum=ext.maps.booking.partner.v3.PriceType" json:"deposit_type,omitempty"`
+	DepositType          PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"deposit_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
-func (m *Deposit) Reset()                    { *m = Deposit{} }
-func (m *Deposit) String() string            { return proto.CompactTextString(m) }
-func (*Deposit) ProtoMessage()               {}
-func (*Deposit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
+func (m *Deposit) Reset()         { *m = Deposit{} }
+func (m *Deposit) String() string { return proto.CompactTextString(m) }
+func (*Deposit) ProtoMessage()    {}
+func (*Deposit) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetDeposit() *Price {
 	if m != nil {
@@ -2684,26 +3339,49 @@
 // An inventory slot
 type Slot struct {
 	// ID of the merchant for the slot (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
 	// ID of the merchant Service (required)
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
 	// Duration of the appointment slot (required)
-	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
 	// Opaque tag that identifies the availability slot and matches the value
 	// provided in the availability feed (optional)
-	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
+	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
 	// The set of resources that disambiguates the appointment slot, e.g. by
 	// indicating the staff member and room selected by the user (optional)
-	Resources *ResourceIds `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"`
+	Resources            *ResourceIds `protobuf:"bytes,6,opt,name=resources,proto3" json:"resources,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
 }
 
-func (m *Slot) Reset()                    { *m = Slot{} }
-func (m *Slot) String() string            { return proto.CompactTextString(m) }
-func (*Slot) ProtoMessage()               {}
-func (*Slot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
+func (m *Slot) Reset()         { *m = Slot{} }
+func (m *Slot) String() string { return proto.CompactTextString(m) }
+func (*Slot) ProtoMessage()    {}
+func (*Slot) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetMerchantId() string {
 	if m != nil {
@@ -2751,23 +3429,46 @@
 type UserInformation struct {
 	// Unique ID of the user to the partner, chosen by Reserve with Google.
 	// (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
 	// Given name of the user (maximum 40 characters) (required)
-	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName" json:"given_name,omitempty"`
+	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
 	// Family name of the user (maximum 40 characters) (required)
-	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName" json:"family_name,omitempty"`
+	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
 	// Address of the user (optional)
-	Address *PostalAddress `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"`
+	Address *PostalAddress `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
 	// Phone number of the user (required)
-	Telephone string `protobuf:"bytes,5,opt,name=telephone" json:"telephone,omitempty"`
+	Telephone string `protobuf:"bytes,5,opt,name=telephone,proto3" json:"telephone,omitempty"`
 	// Email address of the user (required)
-	Email string `protobuf:"bytes,6,opt,name=email" json:"email,omitempty"`
+	Email                string   `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UserInformation) Reset()                    { *m = UserInformation{} }
-func (m *UserInformation) String() string            { return proto.CompactTextString(m) }
-func (*UserInformation) ProtoMessage()               {}
-func (*UserInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
+func (m *UserInformation) Reset()         { *m = UserInformation{} }
+func (m *UserInformation) String() string { return proto.CompactTextString(m) }
+func (*UserInformation) ProtoMessage()    {}
+func (*UserInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetUserId() string {
 	if m != nil {
@@ -2814,21 +3515,44 @@
 // The postal address for a merchant.
 type PostalAddress struct {
 	// The country, e.g. "USA". (required)
-	Country string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"`
+	Country string `protobuf:"bytes,1,opt,name=country,proto3" json:"country,omitempty"`
 	// The locality/city, e.g. "Mountain View". (required)
-	Locality string `protobuf:"bytes,2,opt,name=locality" json:"locality,omitempty"`
+	Locality string `protobuf:"bytes,2,opt,name=locality,proto3" json:"locality,omitempty"`
 	// The region/state/province, e.g. "CA". (required)
-	Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"`
+	Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"`
 	// The postal code, e.g. "94043". (required)
-	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode" json:"postal_code,omitempty"`
+	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
 	// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
-	StreetAddress string `protobuf:"bytes,5,opt,name=street_address,json=streetAddress" json:"street_address,omitempty"`
+	StreetAddress        string   `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PostalAddress) Reset()                    { *m = PostalAddress{} }
-func (m *PostalAddress) String() string            { return proto.CompactTextString(m) }
-func (*PostalAddress) ProtoMessage()               {}
-func (*PostalAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
+func (m *PostalAddress) Reset()         { *m = PostalAddress{} }
+func (m *PostalAddress) String() string { return proto.CompactTextString(m) }
+func (*PostalAddress) ProtoMessage()    {}
+func (*PostalAddress) Descriptor() ([]byte, []int) {
+	return fileDescriptor_1820d8e1a9fad753, []int{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) GetCountry() string {
 	if m != nil {
@@ -2866,14 +3590,22 @@
 }
 
 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")
@@ -2904,7 +3636,6 @@
 	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")
@@ -2914,251 +3645,217 @@
 	proto.RegisterType((*Slot)(nil), "ext.maps.booking.partner.v3.Slot")
 	proto.RegisterType((*UserInformation)(nil), "ext.maps.booking.partner.v3.UserInformation")
 	proto.RegisterType((*PostalAddress)(nil), "ext.maps.booking.partner.v3.PostalAddress")
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.TokenizationConfig_BillingInformationFormat", TokenizationConfig_BillingInformationFormat_name, TokenizationConfig_BillingInformationFormat_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
-	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 }
 
-func init() { proto.RegisterFile("v3.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("v3.proto", fileDescriptor_1820d8e1a9fad753) }
 
-var fileDescriptor0 = []byte{
-	// 3636 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x4b, 0x6c, 0x1b, 0x59,
-	0x72, 0x6e, 0x7e, 0x44, 0xb2, 0x24, 0xd1, 0xad, 0x27, 0x8d, 0x4c, 0xcb, 0xf6, 0x58, 0xee, 0x1d,
-	0xcf, 0x78, 0xed, 0x19, 0x4d, 0xd6, 0xf6, 0x22, 0xb3, 0x8b, 0x60, 0x93, 0x26, 0xf9, 0x64, 0xf5,
-	0x0c, 0xd5, 0xe4, 0x3c, 0x36, 0x65, 0x7b, 0x0f, 0xe9, 0x6d, 0xb3, 0x9f, 0xe4, 0x8e, 0x49, 0x36,
-	0xb7, 0xbb, 0xa9, 0xb5, 0x06, 0x99, 0x43, 0x80, 0x20, 0x87, 0x00, 0x39, 0x04, 0x39, 0x04, 0x08,
-	0x90, 0x5b, 0xf6, 0x96, 0xdc, 0x72, 0x09, 0x72, 0x09, 0x12, 0x60, 0x11, 0x24, 0xc8, 0x29, 0x87,
-	0xe4, 0x94, 0x43, 0x90, 0x43, 0x4e, 0xb9, 0x2f, 0x10, 0x04, 0xc1, 0xfb, 0x34, 0xc9, 0x6e, 0x52,
-	0x14, 0x25, 0xcf, 0xe4, 0x92, 0x0b, 0xc1, 0xae, 0xdf, 0xab, 0x57, 0x55, 0xaf, 0xaa, 0x5e, 0x75,
-	0x43, 0xf1, 0xf4, 0xc9, 0xde, 0x30, 0xf0, 0x23, 0x1f, 0xdd, 0xa2, 0x6f, 0xa3, 0xbd, 0xbe, 0x33,
-	0x0c, 0xf7, 0x5e, 0xf9, 0xfe, 0x1b, 0x6f, 0x70, 0xb2, 0x37, 0x74, 0x82, 0x68, 0x40, 0x83, 0xbd,
-	0xd3, 0x27, 0xda, 0x97, 0x50, 0xa9, 0xbd, 0xa6, 0xdd, 0x37, 0xfa, 0xa9, 0xe3, 0xf5, 0x9c, 0x57,
-	0x5e, 0xcf, 0x8b, 0xce, 0x08, 0xfd, 0xe9, 0x88, 0x86, 0x11, 0xfa, 0x3e, 0xe4, 0xc2, 0x9e, 0x1f,
-	0x55, 0x94, 0x5d, 0xe5, 0xc1, 0xea, 0xe3, 0x7b, 0x7b, 0x0b, 0xe4, 0xec, 0xb5, 0x7b, 0x7e, 0x44,
-	0x38, 0xb9, 0xf6, 0x8f, 0x59, 0xb8, 0x39, 0x47, 0x66, 0x38, 0xf4, 0x07, 0x21, 0xbd, 0xa2, 0x50,
-	0xf4, 0x11, 0x5c, 0xef, 0xfa, 0xa3, 0x41, 0x64, 0x3b, 0x42, 0x68, 0x8f, 0x56, 0x32, 0xbb, 0xca,
-	0x83, 0x3c, 0x29, 0x73, 0xb0, 0x1e, 0x43, 0xd1, 0xd7, 0xb0, 0xe5, 0x8e, 0x02, 0x27, 0xf2, 0xfc,
-	0x81, 0x1d, 0xd0, 0x9f, 0x8e, 0xbc, 0x80, 0xf6, 0xe9, 0x20, 0xaa, 0x64, 0x77, 0x95, 0x07, 0xe5,
-	0xc7, 0x9f, 0x2f, 0x5c, 0xef, 0x5c, 0xad, 0xf7, 0xea, 0x52, 0x24, 0x99, 0x48, 0x24, 0x9b, 0xee,
-	0x2c, 0x10, 0xfd, 0x04, 0x36, 0x9d, 0x29, 0x01, 0xf6, 0x68, 0xe8, 0x3a, 0x11, 0xad, 0xe4, 0xf8,
-	0x6e, 0x3f, 0x5d, 0xb8, 0xfa, 0xf4, 0xc2, 0x1d, 0xce, 0x46, 0x90, 0x33, 0x03, 0xd3, 0xfa, 0xb0,
-	0x39, 0x47, 0x1b, 0xf4, 0x01, 0xec, 0xd6, 0x3b, 0x44, 0xb7, 0x8c, 0xa6, 0x69, 0x13, 0xfc, 0x65,
-	0xc7, 0x20, 0xf8, 0x10, 0x9b, 0x96, 0xdd, 0x31, 0xdb, 0x2d, 0x5c, 0x33, 0xf6, 0x0d, 0x5c, 0x57,
-	0xaf, 0xa1, 0x0a, 0x6c, 0xd5, 0x9b, 0xb6, 0xd9, 0xb4, 0xec, 0xf6, 0x41, 0xf3, 0xb9, 0x1d, 0x73,
-	0xa8, 0x0a, 0xda, 0x06, 0x74, 0xd8, 0x69, 0xa7, 0xe1, 0x19, 0x6d, 0x08, 0x68, 0x56, 0x31, 0xf4,
-	0x63, 0xd8, 0x60, 0x6e, 0xb1, 0xa7, 0xf5, 0xab, 0x28, 0xbb, 0xd9, 0x07, 0xab, 0x8f, 0x3f, 0xb9,
-	0xd0, 0xa5, 0x09, 0x0b, 0xab, 0x61, 0x0a, 0xa2, 0x05, 0xa0, 0xa6, 0xa9, 0xbe, 0xed, 0xa8, 0xd1,
-	0xfe, 0x56, 0x81, 0x22, 0xe3, 0xb3, 0xbc, 0x3e, 0x45, 0xb7, 0xa0, 0x14, 0x46, 0x4e, 0x10, 0xd9,
-	0x21, 0xed, 0xf2, 0x15, 0xb3, 0xa4, 0xc8, 0x01, 0x6d, 0xda, 0x45, 0xf7, 0x60, 0x6d, 0x1c, 0x5f,
-	0x0c, 0x9f, 0xe1, 0xf8, 0xd5, 0x18, 0xc6, 0x48, 0xbe, 0x0b, 0x6a, 0x22, 0x06, 0x22, 0xe7, 0x84,
-	0x87, 0x5f, 0x89, 0x5c, 0x9f, 0x86, 0x5b, 0xce, 0x09, 0xfa, 0x02, 0xd6, 0x02, 0x1a, 0xfa, 0xa3,
-	0xa0, 0x4b, 0x6d, 0xcf, 0x0d, 0x65, 0x9c, 0x3c, 0x58, 0xb8, 0x3f, 0x22, 0x19, 0x0c, 0x37, 0x24,
-	0xab, 0xc1, 0xe4, 0x41, 0x7b, 0x0b, 0x5b, 0xf1, 0x1e, 0x12, 0xc6, 0xab, 0x42, 0x89, 0x3b, 0x2b,
-	0xf2, 0xfa, 0x54, 0x5a, 0xf0, 0xfe, 0x85, 0x16, 0x64, 0x52, 0x48, 0x31, 0x8c, 0x6d, 0x72, 0x1b,
-	0x4a, 0x49, 0x1b, 0x16, 0xc9, 0x04, 0xa0, 0xfd, 0x99, 0x02, 0xef, 0x57, 0x9d, 0xa8, 0xfb, 0x7a,
-	0x7a, 0xdd, 0x86, 0xef, 0xbf, 0x19, 0x0d, 0xe3, 0x64, 0x72, 0x17, 0x56, 0xfb, 0x34, 0xe8, 0xbe,
-	0x76, 0x06, 0x91, 0xed, 0xb9, 0x5c, 0x8d, 0x12, 0x81, 0x18, 0x64, 0xb8, 0xe8, 0x0e, 0x40, 0x48,
-	0x83, 0x53, 0x8f, 0x5b, 0x82, 0x2f, 0x51, 0x22, 0x25, 0x09, 0x31, 0xdc, 0xe4, 0x26, 0xb2, 0x3c,
-	0xd2, 0x2e, 0xbb, 0x09, 0xed, 0xf7, 0x15, 0xb8, 0x7b, 0xae, 0x9a, 0x32, 0x3f, 0x9d, 0xc0, 0xf6,
-	0x78, 0x9d, 0x79, 0xe1, 0xfd, 0xbd, 0xa5, 0x16, 0x4d, 0x84, 0xf8, 0x56, 0x38, 0x07, 0xaa, 0x7d,
-	0x0d, 0x77, 0x79, 0xbe, 0x69, 0x06, 0x2e, 0x0d, 0xf6, 0x47, 0xbd, 0x63, 0xaf, 0x97, 0x4e, 0xc0,
-	0x17, 0xda, 0xec, 0x07, 0x90, 0xf3, 0x22, 0xda, 0xaf, 0x64, 0x96, 0xb0, 0x47, 0xc3, 0x1b, 0x50,
-	0x23, 0xa2, 0x7d, 0xc2, 0x59, 0xb4, 0x5f, 0x28, 0xb0, 0x7b, 0xfe, 0xfa, 0xd2, 0x18, 0x2f, 0xa0,
-	0x7c, 0x9c, 0xc0, 0xc8, 0xf0, 0xf9, 0x95, 0x85, 0x2b, 0xcd, 0x93, 0x98, 0x92, 0x83, 0x0e, 0xa0,
-	0x7c, 0x4c, 0x69, 0x68, 0x3b, 0x03, 0xd7, 0x8e, 0x9c, 0xb7, 0x34, 0xe4, 0x1e, 0x5f, 0x7d, 0xac,
-	0x2d, 0x94, 0xdc, 0x0a, 0xbc, 0x2e, 0x25, 0x6b, 0x8c, 0x53, 0x1f, 0xb8, 0x16, 0xe3, 0xd3, 0x3e,
-	0x83, 0x1b, 0xcf, 0x68, 0x54, 0x15, 0xc4, 0xed, 0xc8, 0x89, 0x46, 0x61, 0x6c, 0xbf, 0x3b, 0x00,
-	0x52, 0xc8, 0xc4, 0x7c, 0x25, 0x09, 0x31, 0x5c, 0xed, 0x3f, 0x15, 0xa8, 0xcc, 0xb2, 0xca, 0xad,
-	0x2f, 0xe6, 0x45, 0x5f, 0x42, 0x39, 0x46, 0x87, 0x9c, 0x91, 0xeb, 0x5f, 0x7e, 0xfc, 0x70, 0xa1,
-	0xfe, 0xc9, 0xa5, 0xd6, 0x5f, 0x4d, 0x3f, 0xb2, 0x9c, 0x3a, 0x0c, 0xe8, 0xd0, 0x39, 0x63, 0xf9,
-	0x3c, 0x96, 0x2a, 0xca, 0xd6, 0x27, 0x17, 0x58, 0x25, 0xe6, 0x92, 0x82, 0xd5, 0x61, 0x0a, 0xa2,
-	0xfd, 0x79, 0x0e, 0xb6, 0x6a, 0x01, 0x75, 0x22, 0x2a, 0x55, 0x78, 0xb7, 0x1a, 0x8f, 0x0e, 0xa0,
-	0xd4, 0xa3, 0x4e, 0x48, 0xed, 0x80, 0x1e, 0x4b, 0xcf, 0x3d, 0x5a, 0x1c, 0x7d, 0x8c, 0x9a, 0xd0,
-	0x63, 0x1a, 0xd0, 0x41, 0x97, 0x92, 0x62, 0x4f, 0x3e, 0xa3, 0xe7, 0xa0, 0x8e, 0x42, 0x1a, 0xd8,
-	0xde, 0xe0, 0xd8, 0x0f, 0xfa, 0x3c, 0x87, 0xf2, 0x4d, 0xaf, 0x3e, 0xfe, 0x78, 0xa1, 0xc0, 0x4e,
-	0x48, 0x03, 0x63, 0xc2, 0x43, 0xae, 0x8f, 0x92, 0x00, 0x56, 0x89, 0x63, 0x5b, 0x4e, 0xcb, 0x5e,
-	0xa6, 0x12, 0xb7, 0x04, 0xdf, 0xb4, 0x78, 0x34, 0x9c, 0x81, 0xa1, 0xdf, 0x86, 0x3b, 0xf1, 0x0a,
-	0xc3, 0xc0, 0xef, 0xd2, 0x30, 0x64, 0xe1, 0x30, 0x74, 0x02, 0xa7, 0x4f, 0x23, 0x1a, 0x84, 0x95,
-	0x3c, 0x5f, 0xeb, 0xb3, 0x65, 0xd6, 0x6a, 0x8d, 0x05, 0xb4, 0xc6, 0xfc, 0xe4, 0xd6, 0xf0, 0x7c,
-	0x24, 0x7a, 0x04, 0x1b, 0x9e, 0x4b, 0xfb, 0x43, 0x3f, 0xa2, 0x83, 0xee, 0x99, 0x1d, 0xf9, 0x6f,
-	0xe8, 0xa0, 0xb2, 0xc2, 0xe3, 0x54, 0x9d, 0x42, 0x58, 0x0c, 0x8e, 0x3e, 0x01, 0xe4, 0xb8, 0xae,
-	0xc7, 0xd4, 0x76, 0x7a, 0xbc, 0x2f, 0xa2, 0x61, 0x54, 0x29, 0x70, 0xea, 0x8d, 0x09, 0x46, 0x46,
-	0x85, 0xf6, 0x07, 0x19, 0x78, 0x2f, 0x15, 0x2e, 0xf2, 0x58, 0xfc, 0x08, 0x0a, 0x72, 0x13, 0x32,
-	0x64, 0x3e, 0x58, 0x26, 0xe0, 0x49, 0xcc, 0x84, 0x7e, 0x13, 0x36, 0xb9, 0xbb, 0x63, 0xc3, 0xf9,
-	0x43, 0xee, 0x15, 0x11, 0x42, 0x7b, 0x17, 0x7a, 0x5c, 0x5a, 0xab, 0xc9, 0xb9, 0xc8, 0xc6, 0x28,
-	0x0d, 0x42, 0x16, 0x5c, 0x8f, 0xcf, 0xe5, 0xb1, 0xe3, 0xf5, 0x46, 0x01, 0x95, 0xd1, 0xf4, 0x68,
-	0x19, 0x3d, 0xf7, 0x05, 0x0b, 0x89, 0xcf, 0xb6, 0x7c, 0xd6, 0x4c, 0x40, 0xc2, 0x1c, 0x32, 0x8c,
-	0xc5, 0xd9, 0xf9, 0x0c, 0xf2, 0x3c, 0x8c, 0xa5, 0x25, 0xb4, 0x25, 0x0e, 0x80, 0x60, 0xd0, 0x7e,
-	0xae, 0xc0, 0x66, 0x42, 0xa0, 0xb4, 0xee, 0x95, 0x25, 0xce, 0xdb, 0x77, 0xe6, 0xdd, 0xf7, 0xfd,
-	0xd7, 0x0a, 0xe4, 0xf9, 0x32, 0xe8, 0x26, 0x88, 0x23, 0x3b, 0x49, 0x86, 0x05, 0xfe, 0x6c, 0xb8,
-	0xe3, 0x14, 0x92, 0xb9, 0x5c, 0x0a, 0xb9, 0x0f, 0x65, 0x1e, 0x09, 0x41, 0x9c, 0x14, 0x64, 0x8f,
-	0xb4, 0xce, 0xa0, 0xe3, 0x4c, 0x81, 0x7e, 0x00, 0x37, 0xc5, 0xc2, 0xf4, 0xed, 0xd0, 0x93, 0x7d,
-	0x17, 0xaf, 0xcd, 0xac, 0xf9, 0xca, 0xf1, 0xe6, 0x6b, 0x9b, 0x13, 0xe0, 0x31, 0x9e, 0x95, 0xda,
-	0x36, 0xed, 0x6a, 0x8f, 0xa0, 0x9c, 0x4c, 0x3b, 0x0b, 0x76, 0xa1, 0xfd, 0x52, 0x89, 0x7d, 0xcc,
-	0xcb, 0xd7, 0x94, 0x8f, 0x7d, 0xf6, 0xbc, 0x94, 0x47, 0x04, 0xa7, 0x60, 0xb8, 0x38, 0x3b, 0x64,
-	0xfe, 0xcf, 0xb3, 0x43, 0x76, 0x7e, 0x76, 0xd0, 0xfe, 0x62, 0x1c, 0x8e, 0x72, 0xef, 0x32, 0x1c,
-	0x7f, 0x78, 0xe9, 0xcd, 0x1f, 0x5c, 0x8b, 0xb7, 0xdf, 0x82, 0x75, 0xfe, 0x27, 0x15, 0x8e, 0xdf,
-	0x5d, 0xa2, 0x73, 0x10, 0x0c, 0x07, 0xd7, 0xc8, 0x9a, 0x3f, 0xf5, 0x5c, 0x2d, 0xc2, 0x4a, 0x40,
-	0xc3, 0x51, 0x2f, 0xd2, 0xf6, 0x60, 0xb3, 0xe1, 0x85, 0x71, 0xe1, 0x1e, 0x97, 0xfb, 0x1b, 0x50,
-	0x10, 0xa5, 0x24, 0x76, 0xee, 0x0a, 0xaf, 0x09, 0xae, 0xf6, 0x02, 0xb6, 0x92, 0xf4, 0x72, 0x7f,
-	0xbf, 0x01, 0x45, 0xa9, 0x44, 0x28, 0xbb, 0xbb, 0xe5, 0xb2, 0xd9, 0x98, 0x4b, 0xfb, 0x4b, 0x05,
-	0x36, 0x98, 0x68, 0xae, 0xf8, 0x58, 0x91, 0x9b, 0x29, 0x45, 0x0e, 0xae, 0xc5, 0xaa, 0xa0, 0x23,
-	0x28, 0x09, 0xb3, 0xb0, 0x6e, 0x5f, 0x98, 0xe4, 0x57, 0x2f, 0x68, 0xdb, 0x52, 0xd2, 0x85, 0x91,
-	0x0c, 0x37, 0x3c, 0xb8, 0x46, 0x8a, 0xbe, 0xfc, 0xbf, 0x73, 0x1f, 0x8a, 0x31, 0x9c, 0x45, 0x79,
-	0xbc, 0x06, 0xdf, 0x56, 0x89, 0x14, 0x24, 0x5d, 0x35, 0x0f, 0x59, 0xcf, 0x0d, 0x59, 0x3e, 0x9b,
-	0x96, 0x3b, 0xc9, 0x3e, 0xb1, 0xbb, 0xb3, 0x97, 0x8a, 0x75, 0xed, 0x08, 0xb6, 0xc4, 0xc5, 0x30,
-	0xd5, 0x5d, 0xbc, 0x63, 0xb5, 0xe0, 0x75, 0x28, 0x25, 0xf8, 0xff, 0x75, 0x1d, 0xfa, 0xb7, 0x0c,
-	0x14, 0x24, 0xc9, 0x45, 0x0d, 0xea, 0x15, 0xb3, 0xf2, 0xb7, 0xd6, 0x8e, 0x55, 0x61, 0x45, 0xb6,
-	0xb4, 0xb9, 0x4b, 0x37, 0xca, 0x92, 0xf3, 0xbc, 0x96, 0x2e, 0xff, 0x8d, 0xb5, 0x74, 0xda, 0xbf,
-	0xe4, 0xa0, 0x9c, 0xf4, 0x01, 0x7a, 0x06, 0xf9, 0xae, 0x33, 0x92, 0x35, 0xb9, 0x7c, 0xc1, 0xfd,
-	0x2f, 0xc9, 0xbb, 0x57, 0x63, 0x8c, 0x44, 0xf0, 0xa3, 0x97, 0x80, 0x02, 0xfa, 0x5b, 0xb4, 0x1b,
-	0x51, 0xd7, 0xee, 0x3a, 0x81, 0x6b, 0x47, 0x67, 0x43, 0x2a, 0xaf, 0x0d, 0x8b, 0xa3, 0xa2, 0x16,
-	0x50, 0xd7, 0x8b, 0x6a, 0x4e, 0xe0, 0x5a, 0x67, 0x43, 0x4a, 0xd4, 0x58, 0x4c, 0x0c, 0x41, 0xbb,
-	0xb0, 0xea, 0xd2, 0xb0, 0x1b, 0x78, 0xc3, 0xb1, 0xc3, 0x4a, 0x64, 0x1a, 0xa4, 0xfd, 0x4f, 0x06,
-	0xf2, 0x5c, 0x1b, 0xf4, 0x1e, 0x6c, 0xd4, 0xf4, 0x4e, 0x1b, 0xa7, 0x26, 0x43, 0x5b, 0xa0, 0xb6,
-	0x1b, 0x4d, 0xcb, 0xee, 0x98, 0xfa, 0x91, 0x6e, 0x34, 0xf4, 0x6a, 0x03, 0xab, 0x0a, 0xba, 0x0b,
-	0xb7, 0x38, 0x54, 0x6f, 0x10, 0xac, 0xd7, 0x5f, 0xda, 0xd5, 0x66, 0xf3, 0x0b, 0x5c, 0xb7, 0xab,
-	0x2f, 0xed, 0x4e, 0x1b, 0x13, 0x35, 0x83, 0x36, 0x60, 0xbd, 0x81, 0xf5, 0x36, 0xb6, 0xf1, 0x8b,
-	0x96, 0x41, 0x70, 0x5d, 0xcd, 0x32, 0x9e, 0x66, 0xc7, 0x6a, 0x1b, 0x75, 0x6c, 0xd7, 0x74, 0xb3,
-	0x86, 0x1b, 0x0d, 0x31, 0x95, 0x7a, 0x6e, 0x98, 0xf5, 0xe6, 0x73, 0x35, 0x87, 0x3e, 0x80, 0xdd,
-	0x96, 0xfe, 0x92, 0x4f, 0xa7, 0x30, 0x21, 0x4d, 0x62, 0xd7, 0x74, 0x52, 0xb7, 0xad, 0x97, 0x2d,
-	0x6c, 0x13, 0xfc, 0x39, 0xae, 0x59, 0xb8, 0xae, 0xe6, 0x99, 0x98, 0x39, 0x54, 0x75, 0x5c, 0x6b,
-	0x18, 0x26, 0xae, 0xab, 0x2b, 0xe8, 0x36, 0x54, 0x62, 0x82, 0x66, 0x8b, 0xaf, 0x60, 0x36, 0x2d,
-	0xfb, 0x48, 0x6f, 0x18, 0x75, 0xb5, 0xc0, 0x14, 0x4b, 0xb0, 0xab, 0x45, 0xa4, 0xc1, 0xfb, 0x4c,
-	0x6b, 0xa6, 0x15, 0xa3, 0x64, 0x36, 0x48, 0x0a, 0x50, 0x4b, 0xe8, 0x0e, 0xdc, 0x64, 0x7b, 0x34,
-	0xcc, 0x67, 0xe3, 0x3d, 0xcb, 0x4d, 0xe0, 0xba, 0x0a, 0xe8, 0x16, 0xdc, 0x88, 0xd1, 0x4c, 0x44,
-	0xbc, 0x3f, 0x66, 0xac, 0x55, 0x86, 0x6c, 0x1e, 0x61, 0xd2, 0xd0, 0x5b, 0x2d, 0x46, 0x40, 0x70,
-	0x1b, 0x93, 0x23, 0x31, 0x47, 0x5b, 0xd3, 0xfe, 0x2a, 0x03, 0x79, 0x9e, 0x33, 0x53, 0xe9, 0x59,
-	0x99, 0x4a, 0xcf, 0x73, 0x4f, 0x5f, 0xe6, 0x5b, 0xbc, 0x0c, 0x65, 0xbf, 0xb9, 0xcb, 0x50, 0x6a,
-	0x56, 0x91, 0x3b, 0x77, 0x56, 0x91, 0xbf, 0xfc, 0xac, 0xe2, 0xbf, 0x33, 0x50, 0x8c, 0x41, 0xa9,
-	0x39, 0x91, 0x92, 0x9e, 0x13, 0x25, 0x86, 0x77, 0x99, 0x0b, 0x86, 0x77, 0xd9, 0xd9, 0xe1, 0x9d,
-	0x09, 0x85, 0xc8, 0xeb, 0xbe, 0xa1, 0x11, 0x4b, 0x54, 0x4c, 0xd3, 0xa7, 0x4b, 0x69, 0x2a, 0xea,
-	0x21, 0x75, 0x2d, 0xc1, 0x4b, 0x62, 0x21, 0xac, 0xa8, 0x0e, 0x03, 0xaf, 0x4b, 0x65, 0x96, 0x5a,
-	0x66, 0xbe, 0x21, 0x18, 0xa6, 0x32, 0xe6, 0xca, 0x55, 0x33, 0xe6, 0x4e, 0x0d, 0xca, 0x49, 0xc5,
-	0x98, 0x7d, 0x84, 0x6a, 0x13, 0xeb, 0x15, 0x05, 0xc0, 0x70, 0xd1, 0x16, 0xe4, 0xf9, 0x60, 0x54,
-	0x4e, 0x49, 0xc5, 0x83, 0xf6, 0x37, 0x59, 0x58, 0x9b, 0xee, 0xcc, 0x10, 0x4e, 0xa6, 0xc4, 0x4f,
-	0x97, 0xee, 0xe9, 0x92, 0x09, 0x71, 0x76, 0xba, 0x94, 0xf9, 0x86, 0xa6, 0x4b, 0xf3, 0x53, 0x6d,
-	0xf6, 0x5b, 0x48, 0xb5, 0xb9, 0xd9, 0x54, 0xfb, 0x87, 0xca, 0x05, 0xa9, 0xf6, 0x06, 0x6c, 0x36,
-	0x49, 0x1d, 0x13, 0xbb, 0x63, 0xee, 0x77, 0x1a, 0xfb, 0x46, 0x23, 0xce, 0xb6, 0xcb, 0x24, 0xc6,
-	0xcc, 0x45, 0x89, 0x31, 0x3b, 0x9b, 0xfa, 0x72, 0xda, 0xbf, 0x66, 0x61, 0x73, 0x8e, 0xe1, 0xd0,
-	0xab, 0xb8, 0xa7, 0x96, 0xae, 0xfc, 0xfc, 0xb2, 0xa6, 0xdf, 0x9b, 0x3f, 0x3e, 0x1c, 0xf5, 0x22,
-	0x22, 0x25, 0x23, 0x17, 0x36, 0xd9, 0x29, 0xb6, 0x67, 0x7c, 0xcd, 0x4e, 0xd7, 0x93, 0xa5, 0x4e,
-	0x57, 0x4a, 0x3e, 0xf2, 0x66, 0x60, 0xe8, 0x7b, 0xb0, 0x35, 0x1a, 0x8c, 0x97, 0xe8, 0x51, 0x3b,
-	0xa0, 0x4e, 0x38, 0xae, 0x85, 0x9b, 0x09, 0x1c, 0xe1, 0x28, 0xed, 0xef, 0x14, 0xb8, 0x79, 0xae,
-	0xfa, 0xe8, 0x11, 0x7c, 0x24, 0xbc, 0x34, 0xf6, 0x91, 0xd1, 0x30, 0xac, 0x97, 0x2c, 0xad, 0x77,
-	0x1a, 0xe9, 0xf7, 0x2a, 0xd7, 0x61, 0xb5, 0xa6, 0x9b, 0x31, 0xa9, 0xaa, 0xb0, 0x5a, 0x90, 0xf0,
-	0xae, 0xcd, 0x9c, 0x63, 0x1b, 0x16, 0x3e, 0x54, 0x33, 0xe8, 0x3e, 0xdc, 0x4b, 0x22, 0x59, 0xa1,
-	0x30, 0x6a, 0xd8, 0xae, 0x35, 0x0f, 0xab, 0x86, 0x29, 0x4a, 0x46, 0x96, 0x85, 0xc3, 0x9c, 0x38,
-	0xb1, 0x9b, 0xd6, 0x01, 0x26, 0x36, 0xc1, 0x7a, 0xbb, 0x69, 0xaa, 0x39, 0xed, 0x1f, 0xf2, 0xb0,
-	0x3d, 0xdf, 0x4e, 0xe3, 0x94, 0xbb, 0xcc, 0xcc, 0x3f, 0x99, 0x72, 0x91, 0x3b, 0x0e, 0x0c, 0xd1,
-	0xa0, 0x34, 0xae, 0xe0, 0xa7, 0xbd, 0x39, 0xae, 0x4b, 0x86, 0xc6, 0xe5, 0x9d, 0x86, 0xde, 0xc0,
-	0x5a, 0x62, 0x2a, 0x2f, 0xe6, 0x79, 0xcf, 0xae, 0xa2, 0x9e, 0xb8, 0x59, 0xb8, 0x89, 0x59, 0x7d,
-	0x42, 0x38, 0x3a, 0x80, 0x55, 0x99, 0x2c, 0x79, 0x02, 0x11, 0xa5, 0xeb, 0xa3, 0x85, 0x6b, 0x89,
-	0x3c, 0xcb, 0x93, 0x07, 0x44, 0xe3, 0xff, 0x3b, 0x4f, 0x61, 0x73, 0xce, 0x72, 0xbc, 0x98, 0x0d,
-	0xfd, 0x28, 0xb4, 0xfd, 0x21, 0x1d, 0x70, 0x3f, 0xe5, 0x49, 0x89, 0x43, 0x9a, 0x43, 0x3a, 0xd0,
-	0xfe, 0x4b, 0x81, 0xca, 0x79, 0x46, 0x44, 0x0f, 0xe1, 0x43, 0x16, 0x4f, 0x57, 0x8b, 0xcf, 0x79,
-	0xed, 0x1e, 0x4f, 0x2d, 0xb5, 0x03, 0xa3, 0x51, 0xb7, 0x2d, 0xa3, 0xf6, 0x05, 0xb6, 0xda, 0xf6,
-	0x73, 0xc3, 0x3a, 0x68, 0x76, 0x2c, 0x5b, 0xaf, 0x77, 0x1a, 0x96, 0xba, 0xc2, 0x42, 0x32, 0x19,
-	0x8c, 0x82, 0x30, 0x15, 0xb8, 0x9b, 0x70, 0xdd, 0x30, 0x6b, 0x4d, 0x42, 0x70, 0xcd, 0xb2, 0x5b,
-	0xc4, 0xa8, 0x61, 0x35, 0x87, 0xbe, 0x03, 0x77, 0xb9, 0xba, 0x0b, 0x82, 0x39, 0xaf, 0xfd, 0xbd,
-	0x02, 0x30, 0xb1, 0x20, 0xfa, 0x00, 0xca, 0x53, 0xf6, 0x9f, 0x54, 0xac, 0xb5, 0x89, 0x65, 0x0d,
-	0x17, 0x3d, 0x82, 0x8d, 0xf0, 0xb5, 0x1f, 0x44, 0xf6, 0x74, 0x62, 0x16, 0x2f, 0x90, 0x54, 0x8e,
-	0xa8, 0x4f, 0xe0, 0x93, 0x7a, 0x9c, 0xbd, 0x6c, 0x3d, 0xfe, 0x04, 0x90, 0xb8, 0x25, 0xda, 0xb3,
-	0x05, 0x60, 0x43, 0x60, 0xa6, 0x16, 0xd2, 0x7e, 0x02, 0xab, 0x53, 0x6f, 0xea, 0x58, 0xd7, 0x17,
-	0x46, 0xce, 0xf1, 0xf1, 0x54, 0xd7, 0xc7, 0x9f, 0x0d, 0x17, 0xdd, 0x80, 0x42, 0xe0, 0xfb, 0xfd,
-	0xc9, 0x6b, 0xaf, 0x15, 0xf6, 0x28, 0x5e, 0x89, 0x31, 0x65, 0xce, 0xec, 0xd0, 0xfb, 0x4a, 0x28,
-	0x9c, 0x27, 0x25, 0x0e, 0x69, 0x7b, 0x5f, 0x51, 0xed, 0x17, 0x59, 0x40, 0x7c, 0x80, 0xe3, 0x7d,
-	0xc5, 0xdb, 0x97, 0x9a, 0x3f, 0x38, 0xf6, 0x4e, 0xd0, 0xef, 0x28, 0xb0, 0x1d, 0x4d, 0x81, 0x27,
-	0x33, 0x27, 0x79, 0xb1, 0x5f, 0x9c, 0xe4, 0x67, 0x25, 0x26, 0x40, 0xe3, 0x19, 0x13, 0x1e, 0x44,
-	0xc1, 0x19, 0x79, 0x2f, 0x9a, 0x87, 0x43, 0xbf, 0xa7, 0xc0, 0xce, 0x2b, 0xaf, 0xd7, 0xe3, 0xb7,
-	0xd3, 0x49, 0x97, 0x68, 0x8b, 0x7f, 0x32, 0xa7, 0x1c, 0x5c, 0x56, 0x8f, 0xaa, 0x90, 0x38, 0xd5,
-	0x76, 0xee, 0xf3, 0x3f, 0xa4, 0xf2, 0xea, 0x1c, 0xcc, 0xce, 0x01, 0xec, 0x9c, 0xaf, 0x3d, 0x52,
-	0x21, 0xfb, 0x86, 0x9e, 0x49, 0x7f, 0xb0, 0xbf, 0xac, 0x03, 0x3a, 0x75, 0x7a, 0x23, 0x2a, 0x3d,
-	0x21, 0x1e, 0x7e, 0x98, 0xf9, 0x4c, 0xd1, 0x5e, 0x42, 0xe5, 0xbc, 0xf5, 0xd9, 0x51, 0xac, 0x1a,
-	0x8d, 0x06, 0xeb, 0xfa, 0x0d, 0x73, 0xbf, 0x49, 0x0e, 0xc5, 0x8d, 0x47, 0xfc, 0x4b, 0x1d, 0xc5,
-	0x02, 0x64, 0x0f, 0x0d, 0x53, 0x55, 0x50, 0x11, 0x72, 0xfb, 0x9d, 0x46, 0x43, 0xcd, 0x68, 0x7f,
-	0x92, 0x83, 0x5b, 0x0b, 0x26, 0x7d, 0xe8, 0x0d, 0x94, 0xe4, 0x08, 0xd1, 0x0f, 0x64, 0xa1, 0x36,
-	0xae, 0x3a, 0x36, 0x4c, 0xe1, 0xfc, 0xa0, 0x9a, 0xa9, 0x28, 0x64, 0x22, 0x1f, 0x3d, 0x85, 0xad,
-	0xf8, 0xaa, 0xd0, 0xa7, 0xd1, 0x6b, 0xdf, 0x95, 0xc3, 0x43, 0x6e, 0x10, 0x4e, 0x1c, 0xb7, 0xff,
-	0x87, 0x1c, 0x2d, 0x5e, 0x30, 0xe8, 0x70, 0x67, 0x34, 0x18, 0x3a, 0x41, 0x48, 0x5d, 0x7b, 0x2e,
-	0x7b, 0x9e, 0xdb, 0x73, 0x27, 0x26, 0x6a, 0xcd, 0x8a, 0xb8, 0x0d, 0x85, 0x53, 0x1a, 0x84, 0xe3,
-	0x0b, 0x2c, 0x5f, 0x2b, 0x06, 0xa1, 0x4f, 0x61, 0x23, 0x35, 0x4e, 0xf5, 0x03, 0x71, 0xf8, 0x38,
-	0x9d, 0x3a, 0x4c, 0x6d, 0x8b, 0x5d, 0x79, 0x12, 0xa7, 0xa0, 0xcb, 0x63, 0x88, 0xf7, 0xd2, 0x17,
-	0x5d, 0x79, 0x66, 0x43, 0x8f, 0xa0, 0x68, 0x06, 0xa6, 0xb9, 0xa0, 0xa6, 0x8d, 0x89, 0xee, 0xc1,
-	0x9d, 0xb8, 0xf7, 0x6a, 0x91, 0x66, 0x0d, 0xb7, 0xdb, 0x4d, 0x32, 0x7b, 0xd3, 0x9e, 0xa0, 0xda,
-	0x16, 0x31, 0x5a, 0xac, 0xf7, 0xbb, 0x01, 0x9b, 0x13, 0x68, 0x95, 0xe8, 0x86, 0x69, 0x11, 0x8c,
-	0xd5, 0x8c, 0xf6, 0xef, 0x19, 0xd8, 0x98, 0x19, 0x39, 0xa1, 0x27, 0xb0, 0x3d, 0x67, 0x7e, 0x35,
-	0x49, 0x2e, 0x9b, 0x33, 0x23, 0x29, 0xc3, 0x45, 0x9f, 0xc2, 0xd6, 0xa9, 0xd3, 0xf3, 0x5c, 0x5b,
-	0xdc, 0x90, 0xc6, 0x63, 0x74, 0x71, 0x4d, 0xda, 0xe0, 0xb8, 0x36, 0x43, 0xc9, 0x09, 0x3a, 0x7a,
-	0x04, 0x48, 0x30, 0xd0, 0x81, 0x3b, 0x21, 0x17, 0xb7, 0xa6, 0xeb, 0x1c, 0x83, 0x07, 0x6e, 0x4c,
-	0x5c, 0x85, 0x1c, 0xaf, 0x92, 0x62, 0xbe, 0xb3, 0xb7, 0x4c, 0x80, 0x0a, 0xcd, 0x78, 0xb1, 0xe4,
-	0xbc, 0xe8, 0x3e, 0x94, 0xfd, 0xc0, 0x3b, 0xf1, 0x06, 0x4e, 0xcf, 0x16, 0x37, 0x91, 0x3c, 0xcf,
-	0x7a, 0xeb, 0x31, 0xb4, 0xc6, 0x80, 0xe8, 0x3b, 0xb0, 0xde, 0x1d, 0x05, 0x01, 0xdb, 0xb8, 0xa0,
-	0x5a, 0xe1, 0x54, 0x6b, 0x12, 0x28, 0x88, 0x1e, 0x4e, 0x22, 0x66, 0x62, 0x1d, 0xf1, 0xca, 0xeb,
-	0xfa, 0x30, 0x69, 0x19, 0xed, 0x9f, 0x56, 0x00, 0xcd, 0x5e, 0x74, 0xe7, 0xbf, 0x92, 0x55, 0xbe,
-	0x91, 0x57, 0xb2, 0xe8, 0x29, 0x6c, 0xc7, 0x82, 0xa3, 0xc0, 0x19, 0x84, 0x4e, 0x37, 0xd6, 0x51,
-	0xa4, 0x9e, 0xf8, 0x14, 0x5a, 0x13, 0xa4, 0xe1, 0xbe, 0x43, 0xf9, 0xd2, 0x01, 0x22, 0xe7, 0xad,
-	0xed, 0xf4, 0xb9, 0xc1, 0x72, 0x4b, 0xb3, 0x97, 0x22, 0xe7, 0xad, 0xce, 0x99, 0x50, 0x34, 0x49,
-	0x0d, 0xf2, 0x0c, 0x52, 0xd7, 0x7e, 0x75, 0xc6, 0x7d, 0x54, 0x7e, 0x5c, 0xbd, 0xe4, 0x18, 0x21,
-	0x95, 0x89, 0xa8, 0x5b, 0x3d, 0x1b, 0xa7, 0x96, 0x29, 0x18, 0xfa, 0x78, 0x9e, 0x1f, 0x57, 0xe4,
-	0x5c, 0x3d, 0xed, 0x49, 0xf4, 0xfd, 0x73, 0x0f, 0x46, 0x41, 0xb2, 0xcc, 0x3d, 0x1a, 0x3f, 0x82,
-	0x82, 0x4b, 0x87, 0x7e, 0xe8, 0x45, 0x95, 0xe2, 0x12, 0xf3, 0xe4, 0xba, 0xa0, 0x25, 0x31, 0x13,
-	0xda, 0x87, 0xd5, 0x81, 0x6f, 0x87, 0xaf, 0xfd, 0x9f, 0xd9, 0xc7, 0x94, 0x56, 0x4a, 0x5c, 0xc6,
-	0x87, 0x0b, 0x65, 0x98, 0x7e, 0xfb, 0xb5, 0xff, 0xb3, 0x7d, 0x4a, 0x49, 0x69, 0x10, 0xff, 0x9d,
-	0xf3, 0x5d, 0x04, 0x5c, 0xf1, 0xbb, 0x88, 0xfe, 0x38, 0xa2, 0xa7, 0x8d, 0x39, 0x75, 0xc5, 0x94,
-	0xe9, 0x46, 0x8e, 0xf3, 0xd2, 0x37, 0xd4, 0x04, 0xf6, 0x59, 0xb3, 0xf9, 0x8c, 0xdf, 0x50, 0x2b,
-	0xb0, 0x95, 0x40, 0xb4, 0x74, 0x62, 0x99, 0x98, 0xa8, 0x99, 0xea, 0x1a, 0xeb, 0x55, 0xe4, 0x84,
-	0xc9, 0xd5, 0xbe, 0x86, 0x3c, 0xd7, 0x09, 0xdd, 0x83, 0x35, 0x1e, 0x7e, 0x76, 0xdf, 0xeb, 0x06,
-	0x7e, 0x28, 0x3f, 0xa7, 0x5a, 0xe5, 0xb0, 0x43, 0x0e, 0x9a, 0x1c, 0xe6, 0xee, 0x99, 0xdd, 0xf5,
-	0xdd, 0xb8, 0xf4, 0xae, 0xc5, 0xc0, 0x9a, 0xef, 0x52, 0xf4, 0x31, 0x20, 0xc6, 0xc3, 0xfa, 0x09,
-	0xe9, 0xd1, 0xc9, 0x57, 0x55, 0xaa, 0xc4, 0xc8, 0x6c, 0xe2, 0x9c, 0x68, 0xbf, 0xab, 0x40, 0x69,
-	0x6c, 0x5e, 0xf4, 0x14, 0xb2, 0xcc, 0x27, 0xca, 0xd2, 0x86, 0x64, 0xe4, 0x48, 0x87, 0xe2, 0x31,
-	0xa5, 0xd3, 0x93, 0x83, 0x0f, 0x2f, 0x66, 0xe5, 0xa9, 0xac, 0x70, 0x4c, 0xf9, 0x1f, 0xed, 0x9f,
-	0x15, 0x28, 0xc8, 0x48, 0x41, 0xbf, 0x36, 0x09, 0xb0, 0xe5, 0x15, 0x19, 0x87, 0xd7, 0xaf, 0xc3,
-	0xed, 0xbe, 0x37, 0xb0, 0x1d, 0xf7, 0xd4, 0x19, 0x74, 0xa9, 0xdd, 0x65, 0xbf, 0xbd, 0x5e, 0xfa,
-	0x2b, 0xb4, 0x9b, 0x7d, 0x6f, 0xa0, 0x0b, 0x92, 0xda, 0x14, 0x05, 0x4b, 0xce, 0x06, 0xac, 0x49,
-	0x59, 0x57, 0xd9, 0xd1, 0xaa, 0xe4, 0xe5, 0xbb, 0xfa, 0xa5, 0x02, 0xb9, 0x76, 0xcf, 0x7f, 0xf7,
-	0x4f, 0xba, 0x12, 0xa3, 0xba, 0xec, 0x05, 0xa3, 0xba, 0xdc, 0x72, 0xdf, 0xd9, 0xe5, 0xe7, 0x7f,
-	0x67, 0xb7, 0x0f, 0xa5, 0xf8, 0x4b, 0xb9, 0x50, 0xb6, 0x00, 0xcb, 0x7f, 0x64, 0x37, 0x61, 0xd5,
-	0xfe, 0x43, 0x81, 0xeb, 0xa9, 0x61, 0xeb, 0xb9, 0xaf, 0x1d, 0xd9, 0xf6, 0x4f, 0xbc, 0x53, 0x3a,
-	0xb0, 0x07, 0x4e, 0x3f, 0x8e, 0xea, 0x12, 0x87, 0x98, 0x4e, 0x9f, 0x32, 0xf3, 0x1d, 0x3b, 0x7d,
-	0xaf, 0x77, 0x26, 0xf0, 0x22, 0x96, 0x41, 0x80, 0x38, 0x41, 0x1d, 0x0a, 0x8e, 0xeb, 0x06, 0x34,
-	0x8c, 0xbf, 0x0b, 0x5c, 0x3c, 0x01, 0x6c, 0xf9, 0x61, 0xe4, 0xf4, 0x74, 0xc1, 0x41, 0x62, 0x56,
-	0x74, 0x1b, 0x4a, 0x11, 0xed, 0xd1, 0xe1, 0x6b, 0x7f, 0x40, 0xa5, 0x79, 0x26, 0x00, 0xd6, 0xef,
-	0xd2, 0xbe, 0xe3, 0xf5, 0xe4, 0x97, 0x23, 0xe2, 0x41, 0xfb, 0xb9, 0x02, 0xeb, 0x09, 0x71, 0xa8,
-	0x02, 0x05, 0x5e, 0x69, 0x83, 0xb8, 0x5b, 0x8e, 0x1f, 0xd1, 0x0e, 0x14, 0x7b, 0x7e, 0xd7, 0x19,
-	0xcf, 0xef, 0x4a, 0x64, 0xfc, 0x8c, 0xb6, 0x61, 0x25, 0xa0, 0x27, 0x93, 0x57, 0x12, 0xf2, 0x89,
-	0x6d, 0x7d, 0xc8, 0xc5, 0x8b, 0x03, 0x2f, 0x87, 0xc5, 0x02, 0xc4, 0x8f, 0xfb, 0x7d, 0x28, 0x87,
-	0x51, 0x40, 0x69, 0x64, 0xc7, 0x16, 0x10, 0x9a, 0xaf, 0x0b, 0xa8, 0xd4, 0xea, 0xe1, 0x1f, 0x29,
-	0xb0, 0x9e, 0x18, 0x7c, 0xa2, 0xf7, 0x61, 0x27, 0x1e, 0xd0, 0xb7, 0x2d, 0xdd, 0xea, 0xb4, 0x53,
-	0x99, 0x6d, 0x1d, 0x4a, 0xb5, 0xa6, 0xb9, 0x6f, 0x90, 0x43, 0x5c, 0x57, 0x15, 0xde, 0xae, 0x61,
-	0xb3, 0xce, 0xc8, 0x0f, 0x31, 0xa9, 0x1d, 0xe8, 0x26, 0xbb, 0xcb, 0x72, 0xbc, 0xfc, 0x00, 0x16,
-	0xad, 0x41, 0x51, 0x8c, 0xf9, 0xf9, 0x6c, 0x6d, 0x15, 0x0a, 0x66, 0x93, 0x7f, 0x24, 0xab, 0xe6,
-	0xd0, 0x7b, 0xb0, 0x21, 0x1f, 0xec, 0x16, 0x36, 0xf5, 0x86, 0xf1, 0x63, 0x5c, 0x57, 0xf3, 0x0f,
-	0xcf, 0xa0, 0x9c, 0x1c, 0x23, 0xa2, 0x5d, 0xb8, 0x5d, 0x23, 0xb8, 0x6e, 0x58, 0x53, 0x13, 0xbd,
-	0xa4, 0x5e, 0x45, 0xc8, 0x1d, 0x19, 0x6d, 0x5d, 0x55, 0x50, 0x19, 0xe0, 0x50, 0x6f, 0x5b, 0x98,
-	0x30, 0x52, 0x35, 0xc3, 0xda, 0x45, 0xfd, 0x10, 0x13, 0x83, 0xdd, 0xdf, 0xf1, 0x8b, 0x16, 0xc1,
-	0xed, 0xb6, 0x9a, 0x65, 0x5a, 0xd5, 0x8d, 0x76, 0xad, 0x79, 0x84, 0x89, 0x9a, 0x63, 0x77, 0x8a,
-	0xcf, 0x6b, 0x55, 0x35, 0xff, 0xf0, 0x8f, 0x15, 0xd8, 0x98, 0xe9, 0xad, 0xd8, 0xd5, 0x3b, 0xf5,
-	0xa6, 0x64, 0x8e, 0x06, 0x77, 0xe0, 0x66, 0x8a, 0xa8, 0x6d, 0x98, 0xcf, 0x1a, 0xd8, 0xee, 0xb4,
-	0x59, 0xe6, 0x9f, 0x7d, 0xdb, 0x72, 0xd8, 0x69, 0x58, 0x06, 0xc7, 0x66, 0xd8, 0x06, 0x53, 0xd8,
-	0x8e, 0xd9, 0x30, 0x0e, 0x0d, 0x0b, 0xd7, 0x39, 0x45, 0xf6, 0xe1, 0x9f, 0x2a, 0xa0, 0xa6, 0xbb,
-	0x22, 0x6e, 0x7e, 0x82, 0x63, 0xce, 0xb9, 0x0e, 0xe3, 0xa5, 0x08, 0x4f, 0xd5, 0xac, 0x23, 0xa3,
-	0xce, 0x5d, 0x77, 0x0b, 0x6e, 0x4c, 0x21, 0xcc, 0xe6, 0x14, 0x32, 0x93, 0xe2, 0x22, 0x78, 0xbf,
-	0x63, 0xd6, 0xb9, 0xff, 0x92, 0x08, 0xe1, 0x14, 0x5c, 0x57, 0x73, 0x0f, 0x9f, 0x40, 0x69, 0x9c,
-	0xef, 0xd0, 0x36, 0xa0, 0x7d, 0xe3, 0x05, 0xae, 0xdb, 0x44, 0xb7, 0xb0, 0x5d, 0xc7, 0xfb, 0x7a,
-	0xa7, 0x61, 0xa9, 0xd7, 0x98, 0x6f, 0x5a, 0x98, 0xd8, 0x2d, 0x4c, 0xda, 0x4d, 0x53, 0x55, 0x5e,
-	0xad, 0xf0, 0x2f, 0xec, 0x9f, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xe0, 0x89, 0xee,
-	0x6d, 0x2f, 0x00, 0x00,
+var fileDescriptor_1820d8e1a9fad753 = []byte{
+	// 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,
 }
