// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 // protoc v3.21.12 // source: routerrpc/router.proto package routerrpc import ( lnrpc "github.com/lightningnetwork/lnd/lnrpc" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type FailureDetail int32 const ( FailureDetail_UNKNOWN FailureDetail = 0 FailureDetail_NO_DETAIL FailureDetail = 1 FailureDetail_ONION_DECODE FailureDetail = 2 FailureDetail_LINK_NOT_ELIGIBLE FailureDetail = 3 FailureDetail_ON_CHAIN_TIMEOUT FailureDetail = 4 FailureDetail_HTLC_EXCEEDS_MAX FailureDetail = 5 FailureDetail_INSUFFICIENT_BALANCE FailureDetail = 6 FailureDetail_INCOMPLETE_FORWARD FailureDetail = 7 FailureDetail_HTLC_ADD_FAILED FailureDetail = 8 FailureDetail_FORWARDS_DISABLED FailureDetail = 9 FailureDetail_INVOICE_CANCELED FailureDetail = 10 FailureDetail_INVOICE_UNDERPAID FailureDetail = 11 FailureDetail_INVOICE_EXPIRY_TOO_SOON FailureDetail = 12 FailureDetail_INVOICE_NOT_OPEN FailureDetail = 13 FailureDetail_MPP_INVOICE_TIMEOUT FailureDetail = 14 FailureDetail_ADDRESS_MISMATCH FailureDetail = 15 FailureDetail_SET_TOTAL_MISMATCH FailureDetail = 16 FailureDetail_SET_TOTAL_TOO_LOW FailureDetail = 17 FailureDetail_SET_OVERPAID FailureDetail = 18 FailureDetail_UNKNOWN_INVOICE FailureDetail = 19 FailureDetail_INVALID_KEYSEND FailureDetail = 20 FailureDetail_MPP_IN_PROGRESS FailureDetail = 21 FailureDetail_CIRCULAR_ROUTE FailureDetail = 22 ) // Enum value maps for FailureDetail. var ( FailureDetail_name = map[int32]string{ 0: "UNKNOWN", 1: "NO_DETAIL", 2: "ONION_DECODE", 3: "LINK_NOT_ELIGIBLE", 4: "ON_CHAIN_TIMEOUT", 5: "HTLC_EXCEEDS_MAX", 6: "INSUFFICIENT_BALANCE", 7: "INCOMPLETE_FORWARD", 8: "HTLC_ADD_FAILED", 9: "FORWARDS_DISABLED", 10: "INVOICE_CANCELED", 11: "INVOICE_UNDERPAID", 12: "INVOICE_EXPIRY_TOO_SOON", 13: "INVOICE_NOT_OPEN", 14: "MPP_INVOICE_TIMEOUT", 15: "ADDRESS_MISMATCH", 16: "SET_TOTAL_MISMATCH", 17: "SET_TOTAL_TOO_LOW", 18: "SET_OVERPAID", 19: "UNKNOWN_INVOICE", 20: "INVALID_KEYSEND", 21: "MPP_IN_PROGRESS", 22: "CIRCULAR_ROUTE", } FailureDetail_value = map[string]int32{ "UNKNOWN": 0, "NO_DETAIL": 1, "ONION_DECODE": 2, "LINK_NOT_ELIGIBLE": 3, "ON_CHAIN_TIMEOUT": 4, "HTLC_EXCEEDS_MAX": 5, "INSUFFICIENT_BALANCE": 6, "INCOMPLETE_FORWARD": 7, "HTLC_ADD_FAILED": 8, "FORWARDS_DISABLED": 9, "INVOICE_CANCELED": 10, "INVOICE_UNDERPAID": 11, "INVOICE_EXPIRY_TOO_SOON": 12, "INVOICE_NOT_OPEN": 13, "MPP_INVOICE_TIMEOUT": 14, "ADDRESS_MISMATCH": 15, "SET_TOTAL_MISMATCH": 16, "SET_TOTAL_TOO_LOW": 17, "SET_OVERPAID": 18, "UNKNOWN_INVOICE": 19, "INVALID_KEYSEND": 20, "MPP_IN_PROGRESS": 21, "CIRCULAR_ROUTE": 22, } ) func (x FailureDetail) Enum() *FailureDetail { p := new(FailureDetail) *p = x return p } func (x FailureDetail) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (FailureDetail) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[0].Descriptor() } func (FailureDetail) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[0] } func (x FailureDetail) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use FailureDetail.Descriptor instead. func (FailureDetail) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{0} } type PaymentState int32 const ( // Payment is still in flight. PaymentState_IN_FLIGHT PaymentState = 0 // Payment completed successfully. PaymentState_SUCCEEDED PaymentState = 1 // There are more routes to try, but the payment timeout was exceeded. PaymentState_FAILED_TIMEOUT PaymentState = 2 // All possible routes were tried and failed permanently. Or were no // routes to the destination at all. PaymentState_FAILED_NO_ROUTE PaymentState = 3 // A non-recoverable error has occurred. PaymentState_FAILED_ERROR PaymentState = 4 // Payment details incorrect (unknown hash, invalid amt or // invalid final cltv delta) PaymentState_FAILED_INCORRECT_PAYMENT_DETAILS PaymentState = 5 // Insufficient local balance. PaymentState_FAILED_INSUFFICIENT_BALANCE PaymentState = 6 ) // Enum value maps for PaymentState. var ( PaymentState_name = map[int32]string{ 0: "IN_FLIGHT", 1: "SUCCEEDED", 2: "FAILED_TIMEOUT", 3: "FAILED_NO_ROUTE", 4: "FAILED_ERROR", 5: "FAILED_INCORRECT_PAYMENT_DETAILS", 6: "FAILED_INSUFFICIENT_BALANCE", } PaymentState_value = map[string]int32{ "IN_FLIGHT": 0, "SUCCEEDED": 1, "FAILED_TIMEOUT": 2, "FAILED_NO_ROUTE": 3, "FAILED_ERROR": 4, "FAILED_INCORRECT_PAYMENT_DETAILS": 5, "FAILED_INSUFFICIENT_BALANCE": 6, } ) func (x PaymentState) Enum() *PaymentState { p := new(PaymentState) *p = x return p } func (x PaymentState) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (PaymentState) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[1].Descriptor() } func (PaymentState) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[1] } func (x PaymentState) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use PaymentState.Descriptor instead. func (PaymentState) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{1} } type ResolveHoldForwardAction int32 const ( ResolveHoldForwardAction_SETTLE ResolveHoldForwardAction = 0 ResolveHoldForwardAction_FAIL ResolveHoldForwardAction = 1 ResolveHoldForwardAction_RESUME ResolveHoldForwardAction = 2 ) // Enum value maps for ResolveHoldForwardAction. var ( ResolveHoldForwardAction_name = map[int32]string{ 0: "SETTLE", 1: "FAIL", 2: "RESUME", } ResolveHoldForwardAction_value = map[string]int32{ "SETTLE": 0, "FAIL": 1, "RESUME": 2, } ) func (x ResolveHoldForwardAction) Enum() *ResolveHoldForwardAction { p := new(ResolveHoldForwardAction) *p = x return p } func (x ResolveHoldForwardAction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ResolveHoldForwardAction) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[2].Descriptor() } func (ResolveHoldForwardAction) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[2] } func (x ResolveHoldForwardAction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ResolveHoldForwardAction.Descriptor instead. func (ResolveHoldForwardAction) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{2} } type ChanStatusAction int32 const ( ChanStatusAction_ENABLE ChanStatusAction = 0 ChanStatusAction_DISABLE ChanStatusAction = 1 ChanStatusAction_AUTO ChanStatusAction = 2 ) // Enum value maps for ChanStatusAction. var ( ChanStatusAction_name = map[int32]string{ 0: "ENABLE", 1: "DISABLE", 2: "AUTO", } ChanStatusAction_value = map[string]int32{ "ENABLE": 0, "DISABLE": 1, "AUTO": 2, } ) func (x ChanStatusAction) Enum() *ChanStatusAction { p := new(ChanStatusAction) *p = x return p } func (x ChanStatusAction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ChanStatusAction) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[3].Descriptor() } func (ChanStatusAction) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[3] } func (x ChanStatusAction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ChanStatusAction.Descriptor instead. func (ChanStatusAction) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{3} } type MissionControlConfig_ProbabilityModel int32 const ( MissionControlConfig_APRIORI MissionControlConfig_ProbabilityModel = 0 MissionControlConfig_BIMODAL MissionControlConfig_ProbabilityModel = 1 ) // Enum value maps for MissionControlConfig_ProbabilityModel. var ( MissionControlConfig_ProbabilityModel_name = map[int32]string{ 0: "APRIORI", 1: "BIMODAL", } MissionControlConfig_ProbabilityModel_value = map[string]int32{ "APRIORI": 0, "BIMODAL": 1, } ) func (x MissionControlConfig_ProbabilityModel) Enum() *MissionControlConfig_ProbabilityModel { p := new(MissionControlConfig_ProbabilityModel) *p = x return p } func (x MissionControlConfig_ProbabilityModel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (MissionControlConfig_ProbabilityModel) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[4].Descriptor() } func (MissionControlConfig_ProbabilityModel) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[4] } func (x MissionControlConfig_ProbabilityModel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use MissionControlConfig_ProbabilityModel.Descriptor instead. func (MissionControlConfig_ProbabilityModel) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{19, 0} } type HtlcEvent_EventType int32 const ( HtlcEvent_UNKNOWN HtlcEvent_EventType = 0 HtlcEvent_SEND HtlcEvent_EventType = 1 HtlcEvent_RECEIVE HtlcEvent_EventType = 2 HtlcEvent_FORWARD HtlcEvent_EventType = 3 ) // Enum value maps for HtlcEvent_EventType. var ( HtlcEvent_EventType_name = map[int32]string{ 0: "UNKNOWN", 1: "SEND", 2: "RECEIVE", 3: "FORWARD", } HtlcEvent_EventType_value = map[string]int32{ "UNKNOWN": 0, "SEND": 1, "RECEIVE": 2, "FORWARD": 3, } ) func (x HtlcEvent_EventType) Enum() *HtlcEvent_EventType { p := new(HtlcEvent_EventType) *p = x return p } func (x HtlcEvent_EventType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (HtlcEvent_EventType) Descriptor() protoreflect.EnumDescriptor { return file_routerrpc_router_proto_enumTypes[5].Descriptor() } func (HtlcEvent_EventType) Type() protoreflect.EnumType { return &file_routerrpc_router_proto_enumTypes[5] } func (x HtlcEvent_EventType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use HtlcEvent_EventType.Descriptor instead. func (HtlcEvent_EventType) EnumDescriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{27, 0} } type SendPaymentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The identity pubkey of the payment recipient Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` // Number of satoshis to send. // // The fields amt and amt_msat are mutually exclusive. Amt int64 `protobuf:"varint,2,opt,name=amt,proto3" json:"amt,omitempty"` // The hash to use within the payment's HTLC PaymentHash []byte `protobuf:"bytes,3,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // The CLTV delta from the current height that should be used to set the // timelock for the final hop. FinalCltvDelta int32 `protobuf:"varint,4,opt,name=final_cltv_delta,json=finalCltvDelta,proto3" json:"final_cltv_delta,omitempty"` // A bare-bones invoice for a payment within the Lightning Network. With the // details of the invoice, the sender has all the data necessary to send a // payment to the recipient. The amount in the payment request may be zero. In // that case it is required to set the amt field as well. If no payment request // is specified, the following fields are required: dest, amt and payment_hash. PaymentRequest string `protobuf:"bytes,5,opt,name=payment_request,json=paymentRequest,proto3" json:"payment_request,omitempty"` // An upper limit on the amount of time we should spend when attempting to // fulfill the payment. This is expressed in seconds. If we cannot make a // successful payment within this time frame, an error will be returned. // This field must be non-zero. TimeoutSeconds int32 `protobuf:"varint,6,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"` // The maximum number of satoshis that will be paid as a fee of the payment. // If this field is left to the default value of 0, only zero-fee routes will // be considered. This usually means single hop routes connecting directly to // the destination. To send the payment without a fee limit, use max int here. // // The fields fee_limit_sat and fee_limit_msat are mutually exclusive. FeeLimitSat int64 `protobuf:"varint,7,opt,name=fee_limit_sat,json=feeLimitSat,proto3" json:"fee_limit_sat,omitempty"` // Deprecated, use outgoing_chan_ids. The channel id of the channel that must // be taken to the first hop. If zero, any channel may be used (unless // outgoing_chan_ids are set). // // Deprecated: Marked as deprecated in routerrpc/router.proto. OutgoingChanId uint64 `protobuf:"varint,8,opt,name=outgoing_chan_id,json=outgoingChanId,proto3" json:"outgoing_chan_id,omitempty"` // An optional maximum total time lock for the route. This should not // exceed lnd's `--max-cltv-expiry` setting. If zero, then the value of // `--max-cltv-expiry` is enforced. CltvLimit int32 `protobuf:"varint,9,opt,name=cltv_limit,json=cltvLimit,proto3" json:"cltv_limit,omitempty"` // Optional route hints to reach the destination through private channels. RouteHints []*lnrpc.RouteHint `protobuf:"bytes,10,rep,name=route_hints,json=routeHints,proto3" json:"route_hints,omitempty"` // An optional field that can be used to pass an arbitrary set of TLV records // to a peer which understands the new records. This can be used to pass // application specific data during the payment attempt. Record types are // required to be in the custom range >= 65536. When using REST, the values // must be encoded as base64. DestCustomRecords map[uint64][]byte `protobuf:"bytes,11,rep,name=dest_custom_records,json=destCustomRecords,proto3" json:"dest_custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Number of millisatoshis to send. // // The fields amt and amt_msat are mutually exclusive. AmtMsat int64 `protobuf:"varint,12,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` // The maximum number of millisatoshis that will be paid as a fee of the // payment. If this field is left to the default value of 0, only zero-fee // routes will be considered. This usually means single hop routes connecting // directly to the destination. To send the payment without a fee limit, use // max int here. // // The fields fee_limit_sat and fee_limit_msat are mutually exclusive. FeeLimitMsat int64 `protobuf:"varint,13,opt,name=fee_limit_msat,json=feeLimitMsat,proto3" json:"fee_limit_msat,omitempty"` // The pubkey of the last hop of the route. If empty, any hop may be used. LastHopPubkey []byte `protobuf:"bytes,14,opt,name=last_hop_pubkey,json=lastHopPubkey,proto3" json:"last_hop_pubkey,omitempty"` // If set, circular payments to self are permitted. AllowSelfPayment bool `protobuf:"varint,15,opt,name=allow_self_payment,json=allowSelfPayment,proto3" json:"allow_self_payment,omitempty"` // Features assumed to be supported by the final node. All transitive feature // dependencies must also be set properly. For a given feature bit pair, either // optional or remote may be set, but not both. If this field is nil or empty, // the router will try to load destination features from the graph as a // fallback. DestFeatures []lnrpc.FeatureBit `protobuf:"varint,16,rep,packed,name=dest_features,json=destFeatures,proto3,enum=lnrpc.FeatureBit" json:"dest_features,omitempty"` // The maximum number of partial payments that may be use to complete the full // amount. MaxParts uint32 `protobuf:"varint,17,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"` // If set, only the final payment update is streamed back. Intermediate updates // that show which htlcs are still in flight are suppressed. NoInflightUpdates bool `protobuf:"varint,18,opt,name=no_inflight_updates,json=noInflightUpdates,proto3" json:"no_inflight_updates,omitempty"` // The channel ids of the channels are allowed for the first hop. If empty, // any channel may be used. OutgoingChanIds []uint64 `protobuf:"varint,19,rep,packed,name=outgoing_chan_ids,json=outgoingChanIds,proto3" json:"outgoing_chan_ids,omitempty"` // An optional payment addr to be included within the last hop of the route. // This is also called payment secret in specifications (e.g. BOLT 11). PaymentAddr []byte `protobuf:"bytes,20,opt,name=payment_addr,json=paymentAddr,proto3" json:"payment_addr,omitempty"` // The largest payment split that should be attempted when making a payment if // splitting is necessary. Setting this value will effectively cause lnd to // split more aggressively, vs only when it thinks it needs to. Note that this // value is in milli-satoshis. MaxShardSizeMsat uint64 `protobuf:"varint,21,opt,name=max_shard_size_msat,json=maxShardSizeMsat,proto3" json:"max_shard_size_msat,omitempty"` // If set, an AMP-payment will be attempted. Amp bool `protobuf:"varint,22,opt,name=amp,proto3" json:"amp,omitempty"` // The time preference for this payment. Set to -1 to optimize for fees // only, to 1 to optimize for reliability only or a value inbetween for a mix. TimePref float64 `protobuf:"fixed64,23,opt,name=time_pref,json=timePref,proto3" json:"time_pref,omitempty"` } func (x *SendPaymentRequest) Reset() { *x = SendPaymentRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendPaymentRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendPaymentRequest) ProtoMessage() {} func (x *SendPaymentRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendPaymentRequest.ProtoReflect.Descriptor instead. func (*SendPaymentRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{0} } func (x *SendPaymentRequest) GetDest() []byte { if x != nil { return x.Dest } return nil } func (x *SendPaymentRequest) GetAmt() int64 { if x != nil { return x.Amt } return 0 } func (x *SendPaymentRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *SendPaymentRequest) GetFinalCltvDelta() int32 { if x != nil { return x.FinalCltvDelta } return 0 } func (x *SendPaymentRequest) GetPaymentRequest() string { if x != nil { return x.PaymentRequest } return "" } func (x *SendPaymentRequest) GetTimeoutSeconds() int32 { if x != nil { return x.TimeoutSeconds } return 0 } func (x *SendPaymentRequest) GetFeeLimitSat() int64 { if x != nil { return x.FeeLimitSat } return 0 } // Deprecated: Marked as deprecated in routerrpc/router.proto. func (x *SendPaymentRequest) GetOutgoingChanId() uint64 { if x != nil { return x.OutgoingChanId } return 0 } func (x *SendPaymentRequest) GetCltvLimit() int32 { if x != nil { return x.CltvLimit } return 0 } func (x *SendPaymentRequest) GetRouteHints() []*lnrpc.RouteHint { if x != nil { return x.RouteHints } return nil } func (x *SendPaymentRequest) GetDestCustomRecords() map[uint64][]byte { if x != nil { return x.DestCustomRecords } return nil } func (x *SendPaymentRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } func (x *SendPaymentRequest) GetFeeLimitMsat() int64 { if x != nil { return x.FeeLimitMsat } return 0 } func (x *SendPaymentRequest) GetLastHopPubkey() []byte { if x != nil { return x.LastHopPubkey } return nil } func (x *SendPaymentRequest) GetAllowSelfPayment() bool { if x != nil { return x.AllowSelfPayment } return false } func (x *SendPaymentRequest) GetDestFeatures() []lnrpc.FeatureBit { if x != nil { return x.DestFeatures } return nil } func (x *SendPaymentRequest) GetMaxParts() uint32 { if x != nil { return x.MaxParts } return 0 } func (x *SendPaymentRequest) GetNoInflightUpdates() bool { if x != nil { return x.NoInflightUpdates } return false } func (x *SendPaymentRequest) GetOutgoingChanIds() []uint64 { if x != nil { return x.OutgoingChanIds } return nil } func (x *SendPaymentRequest) GetPaymentAddr() []byte { if x != nil { return x.PaymentAddr } return nil } func (x *SendPaymentRequest) GetMaxShardSizeMsat() uint64 { if x != nil { return x.MaxShardSizeMsat } return 0 } func (x *SendPaymentRequest) GetAmp() bool { if x != nil { return x.Amp } return false } func (x *SendPaymentRequest) GetTimePref() float64 { if x != nil { return x.TimePref } return 0 } type TrackPaymentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The hash of the payment to look up. PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // If set, only the final payment update is streamed back. Intermediate updates // that show which htlcs are still in flight are suppressed. NoInflightUpdates bool `protobuf:"varint,2,opt,name=no_inflight_updates,json=noInflightUpdates,proto3" json:"no_inflight_updates,omitempty"` } func (x *TrackPaymentRequest) Reset() { *x = TrackPaymentRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TrackPaymentRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*TrackPaymentRequest) ProtoMessage() {} func (x *TrackPaymentRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TrackPaymentRequest.ProtoReflect.Descriptor instead. func (*TrackPaymentRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{1} } func (x *TrackPaymentRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *TrackPaymentRequest) GetNoInflightUpdates() bool { if x != nil { return x.NoInflightUpdates } return false } type TrackPaymentsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // If set, only the final payment updates are streamed back. Intermediate // updates that show which htlcs are still in flight are suppressed. NoInflightUpdates bool `protobuf:"varint,1,opt,name=no_inflight_updates,json=noInflightUpdates,proto3" json:"no_inflight_updates,omitempty"` } func (x *TrackPaymentsRequest) Reset() { *x = TrackPaymentsRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TrackPaymentsRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*TrackPaymentsRequest) ProtoMessage() {} func (x *TrackPaymentsRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TrackPaymentsRequest.ProtoReflect.Descriptor instead. func (*TrackPaymentsRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{2} } func (x *TrackPaymentsRequest) GetNoInflightUpdates() bool { if x != nil { return x.NoInflightUpdates } return false } type RouteFeeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The destination one wishes to obtain a routing fee quote to. If set, this // parameter requires the amt_sat parameter also to be set. This parameter // combination triggers a graph based routing fee estimation as opposed to a // payment probe based estimate in case a payment request is provided. The // graph based estimation is an algorithm that is executed on the in memory // graph. Hence its runtime is significantly shorter than a payment probe // estimation that sends out actual payments to the network. Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` // The amount one wishes to send to the target destination. It is only to be // used in combination with the dest parameter. AmtSat int64 `protobuf:"varint,2,opt,name=amt_sat,json=amtSat,proto3" json:"amt_sat,omitempty"` // A payment request of the target node that the route fee request is intended // for. Its parameters are input to probe payments that estimate routing fees. // The timeout parameter can be specified to set a maximum time on the probing // attempt. Cannot be used in combination with dest and amt_sat. PaymentRequest string `protobuf:"bytes,3,opt,name=payment_request,json=paymentRequest,proto3" json:"payment_request,omitempty"` // A user preference of how long a probe payment should maximally be allowed to // take, denoted in seconds. The probing payment loop is aborted if this // timeout is reached. Note that the probing process itself can take longer // than the timeout if the HTLC becomes delayed or stuck. Canceling the context // of this call will not cancel the payment loop, the duration is only // controlled by the timeout parameter. Timeout uint32 `protobuf:"varint,4,opt,name=timeout,proto3" json:"timeout,omitempty"` } func (x *RouteFeeRequest) Reset() { *x = RouteFeeRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RouteFeeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*RouteFeeRequest) ProtoMessage() {} func (x *RouteFeeRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RouteFeeRequest.ProtoReflect.Descriptor instead. func (*RouteFeeRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{3} } func (x *RouteFeeRequest) GetDest() []byte { if x != nil { return x.Dest } return nil } func (x *RouteFeeRequest) GetAmtSat() int64 { if x != nil { return x.AmtSat } return 0 } func (x *RouteFeeRequest) GetPaymentRequest() string { if x != nil { return x.PaymentRequest } return "" } func (x *RouteFeeRequest) GetTimeout() uint32 { if x != nil { return x.Timeout } return 0 } type RouteFeeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A lower bound of the estimated fee to the target destination within the // network, expressed in milli-satoshis. RoutingFeeMsat int64 `protobuf:"varint,1,opt,name=routing_fee_msat,json=routingFeeMsat,proto3" json:"routing_fee_msat,omitempty"` // An estimate of the worst case time delay that can occur. Note that callers // will still need to factor in the final CLTV delta of the last hop into this // value. TimeLockDelay int64 `protobuf:"varint,2,opt,name=time_lock_delay,json=timeLockDelay,proto3" json:"time_lock_delay,omitempty"` // An indication whether a probing payment succeeded or whether and why it // failed. FAILURE_REASON_NONE indicates success. FailureReason lnrpc.PaymentFailureReason `protobuf:"varint,5,opt,name=failure_reason,json=failureReason,proto3,enum=lnrpc.PaymentFailureReason" json:"failure_reason,omitempty"` } func (x *RouteFeeResponse) Reset() { *x = RouteFeeResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RouteFeeResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*RouteFeeResponse) ProtoMessage() {} func (x *RouteFeeResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RouteFeeResponse.ProtoReflect.Descriptor instead. func (*RouteFeeResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{4} } func (x *RouteFeeResponse) GetRoutingFeeMsat() int64 { if x != nil { return x.RoutingFeeMsat } return 0 } func (x *RouteFeeResponse) GetTimeLockDelay() int64 { if x != nil { return x.TimeLockDelay } return 0 } func (x *RouteFeeResponse) GetFailureReason() lnrpc.PaymentFailureReason { if x != nil { return x.FailureReason } return lnrpc.PaymentFailureReason(0) } type SendToRouteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The payment hash to use for the HTLC. PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // Route that should be used to attempt to complete the payment. Route *lnrpc.Route `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"` // Whether the payment should be marked as failed when a temporary error is // returned from the given route. Set it to true so the payment won't be // failed unless a terminal error is occurred, such as payment timeout, no // routes, incorrect payment details, or insufficient funds. SkipTempErr bool `protobuf:"varint,3,opt,name=skip_temp_err,json=skipTempErr,proto3" json:"skip_temp_err,omitempty"` } func (x *SendToRouteRequest) Reset() { *x = SendToRouteRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendToRouteRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendToRouteRequest) ProtoMessage() {} func (x *SendToRouteRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendToRouteRequest.ProtoReflect.Descriptor instead. func (*SendToRouteRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{5} } func (x *SendToRouteRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *SendToRouteRequest) GetRoute() *lnrpc.Route { if x != nil { return x.Route } return nil } func (x *SendToRouteRequest) GetSkipTempErr() bool { if x != nil { return x.SkipTempErr } return false } type SendToRouteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The preimage obtained by making the payment. Preimage []byte `protobuf:"bytes,1,opt,name=preimage,proto3" json:"preimage,omitempty"` // The failure message in case the payment failed. Failure *lnrpc.Failure `protobuf:"bytes,2,opt,name=failure,proto3" json:"failure,omitempty"` } func (x *SendToRouteResponse) Reset() { *x = SendToRouteResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SendToRouteResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SendToRouteResponse) ProtoMessage() {} func (x *SendToRouteResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SendToRouteResponse.ProtoReflect.Descriptor instead. func (*SendToRouteResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{6} } func (x *SendToRouteResponse) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } func (x *SendToRouteResponse) GetFailure() *lnrpc.Failure { if x != nil { return x.Failure } return nil } type ResetMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ResetMissionControlRequest) Reset() { *x = ResetMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResetMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResetMissionControlRequest) ProtoMessage() {} func (x *ResetMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ResetMissionControlRequest.ProtoReflect.Descriptor instead. func (*ResetMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{7} } type ResetMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ResetMissionControlResponse) Reset() { *x = ResetMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResetMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResetMissionControlResponse) ProtoMessage() {} func (x *ResetMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ResetMissionControlResponse.ProtoReflect.Descriptor instead. func (*ResetMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{8} } type QueryMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *QueryMissionControlRequest) Reset() { *x = QueryMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryMissionControlRequest) ProtoMessage() {} func (x *QueryMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryMissionControlRequest.ProtoReflect.Descriptor instead. func (*QueryMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{9} } // QueryMissionControlResponse contains mission control state. type QueryMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Node pair-level mission control state. Pairs []*PairHistory `protobuf:"bytes,2,rep,name=pairs,proto3" json:"pairs,omitempty"` } func (x *QueryMissionControlResponse) Reset() { *x = QueryMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryMissionControlResponse) ProtoMessage() {} func (x *QueryMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryMissionControlResponse.ProtoReflect.Descriptor instead. func (*QueryMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{10} } func (x *QueryMissionControlResponse) GetPairs() []*PairHistory { if x != nil { return x.Pairs } return nil } type XImportMissionControlRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Node pair-level mission control state to be imported. Pairs []*PairHistory `protobuf:"bytes,1,rep,name=pairs,proto3" json:"pairs,omitempty"` // Whether to force override MC pair history. Note that even with force // override the failure pair is imported before the success pair and both // still clamp existing failure/success amounts. Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` } func (x *XImportMissionControlRequest) Reset() { *x = XImportMissionControlRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *XImportMissionControlRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*XImportMissionControlRequest) ProtoMessage() {} func (x *XImportMissionControlRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use XImportMissionControlRequest.ProtoReflect.Descriptor instead. func (*XImportMissionControlRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{11} } func (x *XImportMissionControlRequest) GetPairs() []*PairHistory { if x != nil { return x.Pairs } return nil } func (x *XImportMissionControlRequest) GetForce() bool { if x != nil { return x.Force } return false } type XImportMissionControlResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *XImportMissionControlResponse) Reset() { *x = XImportMissionControlResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *XImportMissionControlResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*XImportMissionControlResponse) ProtoMessage() {} func (x *XImportMissionControlResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use XImportMissionControlResponse.ProtoReflect.Descriptor instead. func (*XImportMissionControlResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{12} } // PairHistory contains the mission control state for a particular node pair. type PairHistory struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The source node pubkey of the pair. NodeFrom []byte `protobuf:"bytes,1,opt,name=node_from,json=nodeFrom,proto3" json:"node_from,omitempty"` // The destination node pubkey of the pair. NodeTo []byte `protobuf:"bytes,2,opt,name=node_to,json=nodeTo,proto3" json:"node_to,omitempty"` History *PairData `protobuf:"bytes,7,opt,name=history,proto3" json:"history,omitempty"` } func (x *PairHistory) Reset() { *x = PairHistory{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PairHistory) String() string { return protoimpl.X.MessageStringOf(x) } func (*PairHistory) ProtoMessage() {} func (x *PairHistory) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PairHistory.ProtoReflect.Descriptor instead. func (*PairHistory) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{13} } func (x *PairHistory) GetNodeFrom() []byte { if x != nil { return x.NodeFrom } return nil } func (x *PairHistory) GetNodeTo() []byte { if x != nil { return x.NodeTo } return nil } func (x *PairHistory) GetHistory() *PairData { if x != nil { return x.History } return nil } type PairData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Time of last failure. FailTime int64 `protobuf:"varint,1,opt,name=fail_time,json=failTime,proto3" json:"fail_time,omitempty"` // Lowest amount that failed to forward rounded to whole sats. This may be // set to zero if the failure is independent of amount. FailAmtSat int64 `protobuf:"varint,2,opt,name=fail_amt_sat,json=failAmtSat,proto3" json:"fail_amt_sat,omitempty"` // Lowest amount that failed to forward in millisats. This may be // set to zero if the failure is independent of amount. FailAmtMsat int64 `protobuf:"varint,4,opt,name=fail_amt_msat,json=failAmtMsat,proto3" json:"fail_amt_msat,omitempty"` // Time of last success. SuccessTime int64 `protobuf:"varint,5,opt,name=success_time,json=successTime,proto3" json:"success_time,omitempty"` // Highest amount that we could successfully forward rounded to whole sats. SuccessAmtSat int64 `protobuf:"varint,6,opt,name=success_amt_sat,json=successAmtSat,proto3" json:"success_amt_sat,omitempty"` // Highest amount that we could successfully forward in millisats. SuccessAmtMsat int64 `protobuf:"varint,7,opt,name=success_amt_msat,json=successAmtMsat,proto3" json:"success_amt_msat,omitempty"` } func (x *PairData) Reset() { *x = PairData{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PairData) String() string { return protoimpl.X.MessageStringOf(x) } func (*PairData) ProtoMessage() {} func (x *PairData) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PairData.ProtoReflect.Descriptor instead. func (*PairData) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{14} } func (x *PairData) GetFailTime() int64 { if x != nil { return x.FailTime } return 0 } func (x *PairData) GetFailAmtSat() int64 { if x != nil { return x.FailAmtSat } return 0 } func (x *PairData) GetFailAmtMsat() int64 { if x != nil { return x.FailAmtMsat } return 0 } func (x *PairData) GetSuccessTime() int64 { if x != nil { return x.SuccessTime } return 0 } func (x *PairData) GetSuccessAmtSat() int64 { if x != nil { return x.SuccessAmtSat } return 0 } func (x *PairData) GetSuccessAmtMsat() int64 { if x != nil { return x.SuccessAmtMsat } return 0 } type GetMissionControlConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *GetMissionControlConfigRequest) Reset() { *x = GetMissionControlConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetMissionControlConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetMissionControlConfigRequest) ProtoMessage() {} func (x *GetMissionControlConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GetMissionControlConfigRequest.ProtoReflect.Descriptor instead. func (*GetMissionControlConfigRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{15} } type GetMissionControlConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Mission control's currently active config. Config *MissionControlConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` } func (x *GetMissionControlConfigResponse) Reset() { *x = GetMissionControlConfigResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetMissionControlConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetMissionControlConfigResponse) ProtoMessage() {} func (x *GetMissionControlConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GetMissionControlConfigResponse.ProtoReflect.Descriptor instead. func (*GetMissionControlConfigResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{16} } func (x *GetMissionControlConfigResponse) GetConfig() *MissionControlConfig { if x != nil { return x.Config } return nil } type SetMissionControlConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The config to set for mission control. Note that all values *must* be set, // because the full config will be applied. Config *MissionControlConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` } func (x *SetMissionControlConfigRequest) Reset() { *x = SetMissionControlConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetMissionControlConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetMissionControlConfigRequest) ProtoMessage() {} func (x *SetMissionControlConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SetMissionControlConfigRequest.ProtoReflect.Descriptor instead. func (*SetMissionControlConfigRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{17} } func (x *SetMissionControlConfigRequest) GetConfig() *MissionControlConfig { if x != nil { return x.Config } return nil } type SetMissionControlConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SetMissionControlConfigResponse) Reset() { *x = SetMissionControlConfigResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetMissionControlConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetMissionControlConfigResponse) ProtoMessage() {} func (x *SetMissionControlConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SetMissionControlConfigResponse.ProtoReflect.Descriptor instead. func (*SetMissionControlConfigResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{18} } type MissionControlConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Deprecated, use AprioriParameters. The amount of time mission control will // take to restore a penalized node or channel back to 50% success probability, // expressed in seconds. Setting this value to a higher value will penalize // failures for longer, making mission control less likely to route through // nodes and channels that we have previously recorded failures for. // // Deprecated: Marked as deprecated in routerrpc/router.proto. HalfLifeSeconds uint64 `protobuf:"varint,1,opt,name=half_life_seconds,json=halfLifeSeconds,proto3" json:"half_life_seconds,omitempty"` // Deprecated, use AprioriParameters. The probability of success mission // control should assign to hop in a route where it has no other information // available. Higher values will make mission control more willing to try hops // that we have no information about, lower values will discourage trying these // hops. // // Deprecated: Marked as deprecated in routerrpc/router.proto. HopProbability float32 `protobuf:"fixed32,2,opt,name=hop_probability,json=hopProbability,proto3" json:"hop_probability,omitempty"` // Deprecated, use AprioriParameters. The importance that mission control // should place on historical results, expressed as a value in [0;1]. Setting // this value to 1 will ignore all historical payments and just use the hop // probability to assess the probability of success for each hop. A zero value // ignores hop probability completely and relies entirely on historical // results, unless none are available. // // Deprecated: Marked as deprecated in routerrpc/router.proto. Weight float32 `protobuf:"fixed32,3,opt,name=weight,proto3" json:"weight,omitempty"` // The maximum number of payment results that mission control will store. MaximumPaymentResults uint32 `protobuf:"varint,4,opt,name=maximum_payment_results,json=maximumPaymentResults,proto3" json:"maximum_payment_results,omitempty"` // The minimum time that must have passed since the previously recorded failure // before we raise the failure amount. MinimumFailureRelaxInterval uint64 `protobuf:"varint,5,opt,name=minimum_failure_relax_interval,json=minimumFailureRelaxInterval,proto3" json:"minimum_failure_relax_interval,omitempty"` // ProbabilityModel defines which probability estimator should be used in // pathfinding. Note that the bimodal estimator is experimental. Model MissionControlConfig_ProbabilityModel `protobuf:"varint,6,opt,name=model,proto3,enum=routerrpc.MissionControlConfig_ProbabilityModel" json:"model,omitempty"` // EstimatorConfig is populated dependent on the estimator type. // // Types that are assignable to EstimatorConfig: // // *MissionControlConfig_Apriori // *MissionControlConfig_Bimodal EstimatorConfig isMissionControlConfig_EstimatorConfig `protobuf_oneof:"EstimatorConfig"` } func (x *MissionControlConfig) Reset() { *x = MissionControlConfig{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MissionControlConfig) String() string { return protoimpl.X.MessageStringOf(x) } func (*MissionControlConfig) ProtoMessage() {} func (x *MissionControlConfig) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MissionControlConfig.ProtoReflect.Descriptor instead. func (*MissionControlConfig) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{19} } // Deprecated: Marked as deprecated in routerrpc/router.proto. func (x *MissionControlConfig) GetHalfLifeSeconds() uint64 { if x != nil { return x.HalfLifeSeconds } return 0 } // Deprecated: Marked as deprecated in routerrpc/router.proto. func (x *MissionControlConfig) GetHopProbability() float32 { if x != nil { return x.HopProbability } return 0 } // Deprecated: Marked as deprecated in routerrpc/router.proto. func (x *MissionControlConfig) GetWeight() float32 { if x != nil { return x.Weight } return 0 } func (x *MissionControlConfig) GetMaximumPaymentResults() uint32 { if x != nil { return x.MaximumPaymentResults } return 0 } func (x *MissionControlConfig) GetMinimumFailureRelaxInterval() uint64 { if x != nil { return x.MinimumFailureRelaxInterval } return 0 } func (x *MissionControlConfig) GetModel() MissionControlConfig_ProbabilityModel { if x != nil { return x.Model } return MissionControlConfig_APRIORI } func (m *MissionControlConfig) GetEstimatorConfig() isMissionControlConfig_EstimatorConfig { if m != nil { return m.EstimatorConfig } return nil } func (x *MissionControlConfig) GetApriori() *AprioriParameters { if x, ok := x.GetEstimatorConfig().(*MissionControlConfig_Apriori); ok { return x.Apriori } return nil } func (x *MissionControlConfig) GetBimodal() *BimodalParameters { if x, ok := x.GetEstimatorConfig().(*MissionControlConfig_Bimodal); ok { return x.Bimodal } return nil } type isMissionControlConfig_EstimatorConfig interface { isMissionControlConfig_EstimatorConfig() } type MissionControlConfig_Apriori struct { Apriori *AprioriParameters `protobuf:"bytes,7,opt,name=apriori,proto3,oneof"` } type MissionControlConfig_Bimodal struct { Bimodal *BimodalParameters `protobuf:"bytes,8,opt,name=bimodal,proto3,oneof"` } func (*MissionControlConfig_Apriori) isMissionControlConfig_EstimatorConfig() {} func (*MissionControlConfig_Bimodal) isMissionControlConfig_EstimatorConfig() {} type BimodalParameters struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // NodeWeight defines how strongly other previous forwardings on channels of a // router should be taken into account when computing a channel's probability // to route. The allowed values are in the range [0, 1], where a value of 0 // means that only direct information about a channel is taken into account. NodeWeight float64 `protobuf:"fixed64,1,opt,name=node_weight,json=nodeWeight,proto3" json:"node_weight,omitempty"` // ScaleMsat describes the scale over which channels statistically have some // liquidity left. The value determines how quickly the bimodal distribution // drops off from the edges of a channel. A larger value (compared to typical // channel capacities) means that the drop off is slow and that channel // balances are distributed more uniformly. A small value leads to the // assumption of very unbalanced channels. ScaleMsat uint64 `protobuf:"varint,2,opt,name=scale_msat,json=scaleMsat,proto3" json:"scale_msat,omitempty"` // DecayTime describes the information decay of knowledge about previous // successes and failures in channels. The smaller the decay time, the quicker // we forget about past forwardings. DecayTime uint64 `protobuf:"varint,3,opt,name=decay_time,json=decayTime,proto3" json:"decay_time,omitempty"` } func (x *BimodalParameters) Reset() { *x = BimodalParameters{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BimodalParameters) String() string { return protoimpl.X.MessageStringOf(x) } func (*BimodalParameters) ProtoMessage() {} func (x *BimodalParameters) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BimodalParameters.ProtoReflect.Descriptor instead. func (*BimodalParameters) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{20} } func (x *BimodalParameters) GetNodeWeight() float64 { if x != nil { return x.NodeWeight } return 0 } func (x *BimodalParameters) GetScaleMsat() uint64 { if x != nil { return x.ScaleMsat } return 0 } func (x *BimodalParameters) GetDecayTime() uint64 { if x != nil { return x.DecayTime } return 0 } type AprioriParameters struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The amount of time mission control will take to restore a penalized node // or channel back to 50% success probability, expressed in seconds. Setting // this value to a higher value will penalize failures for longer, making // mission control less likely to route through nodes and channels that we // have previously recorded failures for. HalfLifeSeconds uint64 `protobuf:"varint,1,opt,name=half_life_seconds,json=halfLifeSeconds,proto3" json:"half_life_seconds,omitempty"` // The probability of success mission control should assign to hop in a route // where it has no other information available. Higher values will make mission // control more willing to try hops that we have no information about, lower // values will discourage trying these hops. HopProbability float64 `protobuf:"fixed64,2,opt,name=hop_probability,json=hopProbability,proto3" json:"hop_probability,omitempty"` // The importance that mission control should place on historical results, // expressed as a value in [0;1]. Setting this value to 1 will ignore all // historical payments and just use the hop probability to assess the // probability of success for each hop. A zero value ignores hop probability // completely and relies entirely on historical results, unless none are // available. Weight float64 `protobuf:"fixed64,3,opt,name=weight,proto3" json:"weight,omitempty"` // The fraction of a channel's capacity that we consider to have liquidity. For // amounts that come close to or exceed the fraction, an additional penalty is // applied. A value of 1.0 disables the capacity factor. Allowed values are in // [0.75, 1.0]. CapacityFraction float64 `protobuf:"fixed64,4,opt,name=capacity_fraction,json=capacityFraction,proto3" json:"capacity_fraction,omitempty"` } func (x *AprioriParameters) Reset() { *x = AprioriParameters{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AprioriParameters) String() string { return protoimpl.X.MessageStringOf(x) } func (*AprioriParameters) ProtoMessage() {} func (x *AprioriParameters) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use AprioriParameters.ProtoReflect.Descriptor instead. func (*AprioriParameters) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{21} } func (x *AprioriParameters) GetHalfLifeSeconds() uint64 { if x != nil { return x.HalfLifeSeconds } return 0 } func (x *AprioriParameters) GetHopProbability() float64 { if x != nil { return x.HopProbability } return 0 } func (x *AprioriParameters) GetWeight() float64 { if x != nil { return x.Weight } return 0 } func (x *AprioriParameters) GetCapacityFraction() float64 { if x != nil { return x.CapacityFraction } return 0 } type QueryProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The source node pubkey of the pair. FromNode []byte `protobuf:"bytes,1,opt,name=from_node,json=fromNode,proto3" json:"from_node,omitempty"` // The destination node pubkey of the pair. ToNode []byte `protobuf:"bytes,2,opt,name=to_node,json=toNode,proto3" json:"to_node,omitempty"` // The amount for which to calculate a probability. AmtMsat int64 `protobuf:"varint,3,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` } func (x *QueryProbabilityRequest) Reset() { *x = QueryProbabilityRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryProbabilityRequest) ProtoMessage() {} func (x *QueryProbabilityRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryProbabilityRequest.ProtoReflect.Descriptor instead. func (*QueryProbabilityRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{22} } func (x *QueryProbabilityRequest) GetFromNode() []byte { if x != nil { return x.FromNode } return nil } func (x *QueryProbabilityRequest) GetToNode() []byte { if x != nil { return x.ToNode } return nil } func (x *QueryProbabilityRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } type QueryProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The success probability for the requested pair. Probability float64 `protobuf:"fixed64,1,opt,name=probability,proto3" json:"probability,omitempty"` // The historical data for the requested pair. History *PairData `protobuf:"bytes,2,opt,name=history,proto3" json:"history,omitempty"` } func (x *QueryProbabilityResponse) Reset() { *x = QueryProbabilityResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QueryProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*QueryProbabilityResponse) ProtoMessage() {} func (x *QueryProbabilityResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QueryProbabilityResponse.ProtoReflect.Descriptor instead. func (*QueryProbabilityResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{23} } func (x *QueryProbabilityResponse) GetProbability() float64 { if x != nil { return x.Probability } return 0 } func (x *QueryProbabilityResponse) GetHistory() *PairData { if x != nil { return x.History } return nil } type BuildRouteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The amount to send expressed in msat. If set to zero, the minimum routable // amount is used. AmtMsat int64 `protobuf:"varint,1,opt,name=amt_msat,json=amtMsat,proto3" json:"amt_msat,omitempty"` // CLTV delta from the current height that should be used for the timelock // of the final hop FinalCltvDelta int32 `protobuf:"varint,2,opt,name=final_cltv_delta,json=finalCltvDelta,proto3" json:"final_cltv_delta,omitempty"` // The channel id of the channel that must be taken to the first hop. If zero, // any channel may be used. OutgoingChanId uint64 `protobuf:"varint,3,opt,name=outgoing_chan_id,json=outgoingChanId,proto3" json:"outgoing_chan_id,omitempty"` // A list of hops that defines the route. This does not include the source hop // pubkey. HopPubkeys [][]byte `protobuf:"bytes,4,rep,name=hop_pubkeys,json=hopPubkeys,proto3" json:"hop_pubkeys,omitempty"` // An optional payment addr to be included within the last hop of the route. // This is also called payment secret in specifications (e.g. BOLT 11). PaymentAddr []byte `protobuf:"bytes,5,opt,name=payment_addr,json=paymentAddr,proto3" json:"payment_addr,omitempty"` } func (x *BuildRouteRequest) Reset() { *x = BuildRouteRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BuildRouteRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*BuildRouteRequest) ProtoMessage() {} func (x *BuildRouteRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BuildRouteRequest.ProtoReflect.Descriptor instead. func (*BuildRouteRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{24} } func (x *BuildRouteRequest) GetAmtMsat() int64 { if x != nil { return x.AmtMsat } return 0 } func (x *BuildRouteRequest) GetFinalCltvDelta() int32 { if x != nil { return x.FinalCltvDelta } return 0 } func (x *BuildRouteRequest) GetOutgoingChanId() uint64 { if x != nil { return x.OutgoingChanId } return 0 } func (x *BuildRouteRequest) GetHopPubkeys() [][]byte { if x != nil { return x.HopPubkeys } return nil } func (x *BuildRouteRequest) GetPaymentAddr() []byte { if x != nil { return x.PaymentAddr } return nil } type BuildRouteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Fully specified route that can be used to execute the payment. Route *lnrpc.Route `protobuf:"bytes,1,opt,name=route,proto3" json:"route,omitempty"` } func (x *BuildRouteResponse) Reset() { *x = BuildRouteResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BuildRouteResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*BuildRouteResponse) ProtoMessage() {} func (x *BuildRouteResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BuildRouteResponse.ProtoReflect.Descriptor instead. func (*BuildRouteResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{25} } func (x *BuildRouteResponse) GetRoute() *lnrpc.Route { if x != nil { return x.Route } return nil } type SubscribeHtlcEventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SubscribeHtlcEventsRequest) Reset() { *x = SubscribeHtlcEventsRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeHtlcEventsRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeHtlcEventsRequest) ProtoMessage() {} func (x *SubscribeHtlcEventsRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SubscribeHtlcEventsRequest.ProtoReflect.Descriptor instead. func (*SubscribeHtlcEventsRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{26} } // HtlcEvent contains the htlc event that was processed. These are served on a // best-effort basis; events are not persisted, delivery is not guaranteed // (in the event of a crash in the switch, forward events may be lost) and // some events may be replayed upon restart. Events consumed from this package // should be de-duplicated by the htlc's unique combination of incoming and // outgoing channel id and htlc id. [EXPERIMENTAL] type HtlcEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The short channel id that the incoming htlc arrived at our node on. This // value is zero for sends. IncomingChannelId uint64 `protobuf:"varint,1,opt,name=incoming_channel_id,json=incomingChannelId,proto3" json:"incoming_channel_id,omitempty"` // The short channel id that the outgoing htlc left our node on. This value // is zero for receives. OutgoingChannelId uint64 `protobuf:"varint,2,opt,name=outgoing_channel_id,json=outgoingChannelId,proto3" json:"outgoing_channel_id,omitempty"` // Incoming id is the index of the incoming htlc in the incoming channel. // This value is zero for sends. IncomingHtlcId uint64 `protobuf:"varint,3,opt,name=incoming_htlc_id,json=incomingHtlcId,proto3" json:"incoming_htlc_id,omitempty"` // Outgoing id is the index of the outgoing htlc in the outgoing channel. // This value is zero for receives. OutgoingHtlcId uint64 `protobuf:"varint,4,opt,name=outgoing_htlc_id,json=outgoingHtlcId,proto3" json:"outgoing_htlc_id,omitempty"` // The time in unix nanoseconds that the event occurred. TimestampNs uint64 `protobuf:"varint,5,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"` // The event type indicates whether the htlc was part of a send, receive or // forward. EventType HtlcEvent_EventType `protobuf:"varint,6,opt,name=event_type,json=eventType,proto3,enum=routerrpc.HtlcEvent_EventType" json:"event_type,omitempty"` // Types that are assignable to Event: // // *HtlcEvent_ForwardEvent // *HtlcEvent_ForwardFailEvent // *HtlcEvent_SettleEvent // *HtlcEvent_LinkFailEvent // *HtlcEvent_SubscribedEvent // *HtlcEvent_FinalHtlcEvent Event isHtlcEvent_Event `protobuf_oneof:"event"` } func (x *HtlcEvent) Reset() { *x = HtlcEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HtlcEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*HtlcEvent) ProtoMessage() {} func (x *HtlcEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HtlcEvent.ProtoReflect.Descriptor instead. func (*HtlcEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{27} } func (x *HtlcEvent) GetIncomingChannelId() uint64 { if x != nil { return x.IncomingChannelId } return 0 } func (x *HtlcEvent) GetOutgoingChannelId() uint64 { if x != nil { return x.OutgoingChannelId } return 0 } func (x *HtlcEvent) GetIncomingHtlcId() uint64 { if x != nil { return x.IncomingHtlcId } return 0 } func (x *HtlcEvent) GetOutgoingHtlcId() uint64 { if x != nil { return x.OutgoingHtlcId } return 0 } func (x *HtlcEvent) GetTimestampNs() uint64 { if x != nil { return x.TimestampNs } return 0 } func (x *HtlcEvent) GetEventType() HtlcEvent_EventType { if x != nil { return x.EventType } return HtlcEvent_UNKNOWN } func (m *HtlcEvent) GetEvent() isHtlcEvent_Event { if m != nil { return m.Event } return nil } func (x *HtlcEvent) GetForwardEvent() *ForwardEvent { if x, ok := x.GetEvent().(*HtlcEvent_ForwardEvent); ok { return x.ForwardEvent } return nil } func (x *HtlcEvent) GetForwardFailEvent() *ForwardFailEvent { if x, ok := x.GetEvent().(*HtlcEvent_ForwardFailEvent); ok { return x.ForwardFailEvent } return nil } func (x *HtlcEvent) GetSettleEvent() *SettleEvent { if x, ok := x.GetEvent().(*HtlcEvent_SettleEvent); ok { return x.SettleEvent } return nil } func (x *HtlcEvent) GetLinkFailEvent() *LinkFailEvent { if x, ok := x.GetEvent().(*HtlcEvent_LinkFailEvent); ok { return x.LinkFailEvent } return nil } func (x *HtlcEvent) GetSubscribedEvent() *SubscribedEvent { if x, ok := x.GetEvent().(*HtlcEvent_SubscribedEvent); ok { return x.SubscribedEvent } return nil } func (x *HtlcEvent) GetFinalHtlcEvent() *FinalHtlcEvent { if x, ok := x.GetEvent().(*HtlcEvent_FinalHtlcEvent); ok { return x.FinalHtlcEvent } return nil } type isHtlcEvent_Event interface { isHtlcEvent_Event() } type HtlcEvent_ForwardEvent struct { ForwardEvent *ForwardEvent `protobuf:"bytes,7,opt,name=forward_event,json=forwardEvent,proto3,oneof"` } type HtlcEvent_ForwardFailEvent struct { ForwardFailEvent *ForwardFailEvent `protobuf:"bytes,8,opt,name=forward_fail_event,json=forwardFailEvent,proto3,oneof"` } type HtlcEvent_SettleEvent struct { SettleEvent *SettleEvent `protobuf:"bytes,9,opt,name=settle_event,json=settleEvent,proto3,oneof"` } type HtlcEvent_LinkFailEvent struct { LinkFailEvent *LinkFailEvent `protobuf:"bytes,10,opt,name=link_fail_event,json=linkFailEvent,proto3,oneof"` } type HtlcEvent_SubscribedEvent struct { SubscribedEvent *SubscribedEvent `protobuf:"bytes,11,opt,name=subscribed_event,json=subscribedEvent,proto3,oneof"` } type HtlcEvent_FinalHtlcEvent struct { FinalHtlcEvent *FinalHtlcEvent `protobuf:"bytes,12,opt,name=final_htlc_event,json=finalHtlcEvent,proto3,oneof"` } func (*HtlcEvent_ForwardEvent) isHtlcEvent_Event() {} func (*HtlcEvent_ForwardFailEvent) isHtlcEvent_Event() {} func (*HtlcEvent_SettleEvent) isHtlcEvent_Event() {} func (*HtlcEvent_LinkFailEvent) isHtlcEvent_Event() {} func (*HtlcEvent_SubscribedEvent) isHtlcEvent_Event() {} func (*HtlcEvent_FinalHtlcEvent) isHtlcEvent_Event() {} type HtlcInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The timelock on the incoming htlc. IncomingTimelock uint32 `protobuf:"varint,1,opt,name=incoming_timelock,json=incomingTimelock,proto3" json:"incoming_timelock,omitempty"` // The timelock on the outgoing htlc. OutgoingTimelock uint32 `protobuf:"varint,2,opt,name=outgoing_timelock,json=outgoingTimelock,proto3" json:"outgoing_timelock,omitempty"` // The amount of the incoming htlc. IncomingAmtMsat uint64 `protobuf:"varint,3,opt,name=incoming_amt_msat,json=incomingAmtMsat,proto3" json:"incoming_amt_msat,omitempty"` // The amount of the outgoing htlc. OutgoingAmtMsat uint64 `protobuf:"varint,4,opt,name=outgoing_amt_msat,json=outgoingAmtMsat,proto3" json:"outgoing_amt_msat,omitempty"` } func (x *HtlcInfo) Reset() { *x = HtlcInfo{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HtlcInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*HtlcInfo) ProtoMessage() {} func (x *HtlcInfo) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use HtlcInfo.ProtoReflect.Descriptor instead. func (*HtlcInfo) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{28} } func (x *HtlcInfo) GetIncomingTimelock() uint32 { if x != nil { return x.IncomingTimelock } return 0 } func (x *HtlcInfo) GetOutgoingTimelock() uint32 { if x != nil { return x.OutgoingTimelock } return 0 } func (x *HtlcInfo) GetIncomingAmtMsat() uint64 { if x != nil { return x.IncomingAmtMsat } return 0 } func (x *HtlcInfo) GetOutgoingAmtMsat() uint64 { if x != nil { return x.OutgoingAmtMsat } return 0 } type ForwardEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Info contains details about the htlc that was forwarded. Info *HtlcInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` } func (x *ForwardEvent) Reset() { *x = ForwardEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardEvent) ProtoMessage() {} func (x *ForwardEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardEvent.ProtoReflect.Descriptor instead. func (*ForwardEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{29} } func (x *ForwardEvent) GetInfo() *HtlcInfo { if x != nil { return x.Info } return nil } type ForwardFailEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ForwardFailEvent) Reset() { *x = ForwardFailEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardFailEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardFailEvent) ProtoMessage() {} func (x *ForwardFailEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardFailEvent.ProtoReflect.Descriptor instead. func (*ForwardFailEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{30} } type SettleEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The revealed preimage. Preimage []byte `protobuf:"bytes,1,opt,name=preimage,proto3" json:"preimage,omitempty"` } func (x *SettleEvent) Reset() { *x = SettleEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SettleEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*SettleEvent) ProtoMessage() {} func (x *SettleEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SettleEvent.ProtoReflect.Descriptor instead. func (*SettleEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{31} } func (x *SettleEvent) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } type FinalHtlcEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Settled bool `protobuf:"varint,1,opt,name=settled,proto3" json:"settled,omitempty"` Offchain bool `protobuf:"varint,2,opt,name=offchain,proto3" json:"offchain,omitempty"` } func (x *FinalHtlcEvent) Reset() { *x = FinalHtlcEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FinalHtlcEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*FinalHtlcEvent) ProtoMessage() {} func (x *FinalHtlcEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FinalHtlcEvent.ProtoReflect.Descriptor instead. func (*FinalHtlcEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{32} } func (x *FinalHtlcEvent) GetSettled() bool { if x != nil { return x.Settled } return false } func (x *FinalHtlcEvent) GetOffchain() bool { if x != nil { return x.Offchain } return false } type SubscribedEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SubscribedEvent) Reset() { *x = SubscribedEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribedEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribedEvent) ProtoMessage() {} func (x *SubscribedEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SubscribedEvent.ProtoReflect.Descriptor instead. func (*SubscribedEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{33} } type LinkFailEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Info contains details about the htlc that we failed. Info *HtlcInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` // FailureCode is the BOLT error code for the failure. WireFailure lnrpc.Failure_FailureCode `protobuf:"varint,2,opt,name=wire_failure,json=wireFailure,proto3,enum=lnrpc.Failure_FailureCode" json:"wire_failure,omitempty"` // FailureDetail provides additional information about the reason for the // failure. This detail enriches the information provided by the wire message // and may be 'no detail' if the wire message requires no additional metadata. FailureDetail FailureDetail `protobuf:"varint,3,opt,name=failure_detail,json=failureDetail,proto3,enum=routerrpc.FailureDetail" json:"failure_detail,omitempty"` // A string representation of the link failure. FailureString string `protobuf:"bytes,4,opt,name=failure_string,json=failureString,proto3" json:"failure_string,omitempty"` } func (x *LinkFailEvent) Reset() { *x = LinkFailEvent{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LinkFailEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*LinkFailEvent) ProtoMessage() {} func (x *LinkFailEvent) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LinkFailEvent.ProtoReflect.Descriptor instead. func (*LinkFailEvent) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{34} } func (x *LinkFailEvent) GetInfo() *HtlcInfo { if x != nil { return x.Info } return nil } func (x *LinkFailEvent) GetWireFailure() lnrpc.Failure_FailureCode { if x != nil { return x.WireFailure } return lnrpc.Failure_FailureCode(0) } func (x *LinkFailEvent) GetFailureDetail() FailureDetail { if x != nil { return x.FailureDetail } return FailureDetail_UNKNOWN } func (x *LinkFailEvent) GetFailureString() string { if x != nil { return x.FailureString } return "" } type PaymentStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Current state the payment is in. State PaymentState `protobuf:"varint,1,opt,name=state,proto3,enum=routerrpc.PaymentState" json:"state,omitempty"` // The pre-image of the payment when state is SUCCEEDED. Preimage []byte `protobuf:"bytes,2,opt,name=preimage,proto3" json:"preimage,omitempty"` // The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. Htlcs []*lnrpc.HTLCAttempt `protobuf:"bytes,4,rep,name=htlcs,proto3" json:"htlcs,omitempty"` } func (x *PaymentStatus) Reset() { *x = PaymentStatus{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PaymentStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*PaymentStatus) ProtoMessage() {} func (x *PaymentStatus) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PaymentStatus.ProtoReflect.Descriptor instead. func (*PaymentStatus) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{35} } func (x *PaymentStatus) GetState() PaymentState { if x != nil { return x.State } return PaymentState_IN_FLIGHT } func (x *PaymentStatus) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } func (x *PaymentStatus) GetHtlcs() []*lnrpc.HTLCAttempt { if x != nil { return x.Htlcs } return nil } type CircuitKey struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // / The id of the channel that the is part of this circuit. ChanId uint64 `protobuf:"varint,1,opt,name=chan_id,json=chanId,proto3" json:"chan_id,omitempty"` // / The index of the incoming htlc in the incoming channel. HtlcId uint64 `protobuf:"varint,2,opt,name=htlc_id,json=htlcId,proto3" json:"htlc_id,omitempty"` } func (x *CircuitKey) Reset() { *x = CircuitKey{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CircuitKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*CircuitKey) ProtoMessage() {} func (x *CircuitKey) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CircuitKey.ProtoReflect.Descriptor instead. func (*CircuitKey) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{36} } func (x *CircuitKey) GetChanId() uint64 { if x != nil { return x.ChanId } return 0 } func (x *CircuitKey) GetHtlcId() uint64 { if x != nil { return x.HtlcId } return 0 } type ForwardHtlcInterceptRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The key of this forwarded htlc. It defines the incoming channel id and // the index in this channel. IncomingCircuitKey *CircuitKey `protobuf:"bytes,1,opt,name=incoming_circuit_key,json=incomingCircuitKey,proto3" json:"incoming_circuit_key,omitempty"` // The incoming htlc amount. IncomingAmountMsat uint64 `protobuf:"varint,5,opt,name=incoming_amount_msat,json=incomingAmountMsat,proto3" json:"incoming_amount_msat,omitempty"` // The incoming htlc expiry. IncomingExpiry uint32 `protobuf:"varint,6,opt,name=incoming_expiry,json=incomingExpiry,proto3" json:"incoming_expiry,omitempty"` // The htlc payment hash. This value is not guaranteed to be unique per // request. PaymentHash []byte `protobuf:"bytes,2,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` // The requested outgoing channel id for this forwarded htlc. Because of // non-strict forwarding, this isn't necessarily the channel over which the // packet will be forwarded eventually. A different channel to the same peer // may be selected as well. OutgoingRequestedChanId uint64 `protobuf:"varint,7,opt,name=outgoing_requested_chan_id,json=outgoingRequestedChanId,proto3" json:"outgoing_requested_chan_id,omitempty"` // The outgoing htlc amount. OutgoingAmountMsat uint64 `protobuf:"varint,3,opt,name=outgoing_amount_msat,json=outgoingAmountMsat,proto3" json:"outgoing_amount_msat,omitempty"` // The outgoing htlc expiry. OutgoingExpiry uint32 `protobuf:"varint,4,opt,name=outgoing_expiry,json=outgoingExpiry,proto3" json:"outgoing_expiry,omitempty"` // Any custom records that were present in the payload. CustomRecords map[uint64][]byte `protobuf:"bytes,8,rep,name=custom_records,json=customRecords,proto3" json:"custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The onion blob for the next hop OnionBlob []byte `protobuf:"bytes,9,opt,name=onion_blob,json=onionBlob,proto3" json:"onion_blob,omitempty"` // The block height at which this htlc will be auto-failed to prevent the // channel from force-closing. AutoFailHeight int32 `protobuf:"varint,10,opt,name=auto_fail_height,json=autoFailHeight,proto3" json:"auto_fail_height,omitempty"` } func (x *ForwardHtlcInterceptRequest) Reset() { *x = ForwardHtlcInterceptRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardHtlcInterceptRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardHtlcInterceptRequest) ProtoMessage() {} func (x *ForwardHtlcInterceptRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardHtlcInterceptRequest.ProtoReflect.Descriptor instead. func (*ForwardHtlcInterceptRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{37} } func (x *ForwardHtlcInterceptRequest) GetIncomingCircuitKey() *CircuitKey { if x != nil { return x.IncomingCircuitKey } return nil } func (x *ForwardHtlcInterceptRequest) GetIncomingAmountMsat() uint64 { if x != nil { return x.IncomingAmountMsat } return 0 } func (x *ForwardHtlcInterceptRequest) GetIncomingExpiry() uint32 { if x != nil { return x.IncomingExpiry } return 0 } func (x *ForwardHtlcInterceptRequest) GetPaymentHash() []byte { if x != nil { return x.PaymentHash } return nil } func (x *ForwardHtlcInterceptRequest) GetOutgoingRequestedChanId() uint64 { if x != nil { return x.OutgoingRequestedChanId } return 0 } func (x *ForwardHtlcInterceptRequest) GetOutgoingAmountMsat() uint64 { if x != nil { return x.OutgoingAmountMsat } return 0 } func (x *ForwardHtlcInterceptRequest) GetOutgoingExpiry() uint32 { if x != nil { return x.OutgoingExpiry } return 0 } func (x *ForwardHtlcInterceptRequest) GetCustomRecords() map[uint64][]byte { if x != nil { return x.CustomRecords } return nil } func (x *ForwardHtlcInterceptRequest) GetOnionBlob() []byte { if x != nil { return x.OnionBlob } return nil } func (x *ForwardHtlcInterceptRequest) GetAutoFailHeight() int32 { if x != nil { return x.AutoFailHeight } return 0 } // * // ForwardHtlcInterceptResponse enables the caller to resolve a previously hold // forward. The caller can choose either to: // - `Resume`: Execute the default behavior (usually forward). // - `Reject`: Fail the htlc backwards. // - `Settle`: Settle this htlc with a given preimage. type ForwardHtlcInterceptResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // * // The key of this forwarded htlc. It defines the incoming channel id and // the index in this channel. IncomingCircuitKey *CircuitKey `protobuf:"bytes,1,opt,name=incoming_circuit_key,json=incomingCircuitKey,proto3" json:"incoming_circuit_key,omitempty"` // The resolve action for this intercepted htlc. Action ResolveHoldForwardAction `protobuf:"varint,2,opt,name=action,proto3,enum=routerrpc.ResolveHoldForwardAction" json:"action,omitempty"` // The preimage in case the resolve action is Settle. Preimage []byte `protobuf:"bytes,3,opt,name=preimage,proto3" json:"preimage,omitempty"` // Encrypted failure message in case the resolve action is Fail. // // If failure_message is specified, the failure_code field must be set // to zero. FailureMessage []byte `protobuf:"bytes,4,opt,name=failure_message,json=failureMessage,proto3" json:"failure_message,omitempty"` // Return the specified failure code in case the resolve action is Fail. The // message data fields are populated automatically. // // If a non-zero failure_code is specified, failure_message must not be set. // // For backwards-compatibility reasons, TEMPORARY_CHANNEL_FAILURE is the // default value for this field. FailureCode lnrpc.Failure_FailureCode `protobuf:"varint,5,opt,name=failure_code,json=failureCode,proto3,enum=lnrpc.Failure_FailureCode" json:"failure_code,omitempty"` } func (x *ForwardHtlcInterceptResponse) Reset() { *x = ForwardHtlcInterceptResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ForwardHtlcInterceptResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ForwardHtlcInterceptResponse) ProtoMessage() {} func (x *ForwardHtlcInterceptResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ForwardHtlcInterceptResponse.ProtoReflect.Descriptor instead. func (*ForwardHtlcInterceptResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{38} } func (x *ForwardHtlcInterceptResponse) GetIncomingCircuitKey() *CircuitKey { if x != nil { return x.IncomingCircuitKey } return nil } func (x *ForwardHtlcInterceptResponse) GetAction() ResolveHoldForwardAction { if x != nil { return x.Action } return ResolveHoldForwardAction_SETTLE } func (x *ForwardHtlcInterceptResponse) GetPreimage() []byte { if x != nil { return x.Preimage } return nil } func (x *ForwardHtlcInterceptResponse) GetFailureMessage() []byte { if x != nil { return x.FailureMessage } return nil } func (x *ForwardHtlcInterceptResponse) GetFailureCode() lnrpc.Failure_FailureCode { if x != nil { return x.FailureCode } return lnrpc.Failure_FailureCode(0) } type UpdateChanStatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChanPoint *lnrpc.ChannelPoint `protobuf:"bytes,1,opt,name=chan_point,json=chanPoint,proto3" json:"chan_point,omitempty"` Action ChanStatusAction `protobuf:"varint,2,opt,name=action,proto3,enum=routerrpc.ChanStatusAction" json:"action,omitempty"` } func (x *UpdateChanStatusRequest) Reset() { *x = UpdateChanStatusRequest{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateChanStatusRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateChanStatusRequest) ProtoMessage() {} func (x *UpdateChanStatusRequest) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateChanStatusRequest.ProtoReflect.Descriptor instead. func (*UpdateChanStatusRequest) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{39} } func (x *UpdateChanStatusRequest) GetChanPoint() *lnrpc.ChannelPoint { if x != nil { return x.ChanPoint } return nil } func (x *UpdateChanStatusRequest) GetAction() ChanStatusAction { if x != nil { return x.Action } return ChanStatusAction_ENABLE } type UpdateChanStatusResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *UpdateChanStatusResponse) Reset() { *x = UpdateChanStatusResponse{} if protoimpl.UnsafeEnabled { mi := &file_routerrpc_router_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateChanStatusResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateChanStatusResponse) ProtoMessage() {} func (x *UpdateChanStatusResponse) ProtoReflect() protoreflect.Message { mi := &file_routerrpc_router_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateChanStatusResponse.ProtoReflect.Descriptor instead. func (*UpdateChanStatusResponse) Descriptor() ([]byte, []int) { return file_routerrpc_router_proto_rawDescGZIP(), []int{40} } var File_routerrpc_router_proto protoreflect.FileDescriptor var file_routerrpc_router_proto_rawDesc = []byte{ 0x0a, 0x16, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x1a, 0x0f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf4, 0x07, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6d, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x6d, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x74, 0x76, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x53, 0x61, 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x42, 0x04, 0x18, 0x01, 0x30, 0x01, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6c, 0x74, 0x76, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x65, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x6f, 0x70, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x69, 0x74, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x6f, 0x49, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6d, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x66, 0x1a, 0x44, 0x0a, 0x16, 0x44, 0x65, 0x73, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x68, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x6f, 0x49, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0x46, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x6f, 0x49, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xa8, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x65, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x42, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x7f, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x45, 0x72, 0x72, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x1c, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x50, 0x61, 0x69, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xe8, 0x01, 0x0a, 0x08, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x41, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x74, 0x53, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x59, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x89, 0x04, 0x0a, 0x14, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x0a, 0x11, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x68, 0x61, 0x6c, 0x66, 0x4c, 0x69, 0x66, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x0f, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x68, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1b, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x38, 0x0a, 0x07, 0x61, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x07, 0x61, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x12, 0x38, 0x0a, 0x07, 0x62, 0x69, 0x6d, 0x6f, 0x64, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6d, 0x6f, 0x64, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x07, 0x62, 0x69, 0x6d, 0x6f, 0x64, 0x61, 0x6c, 0x22, 0x2c, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x49, 0x4d, 0x4f, 0x44, 0x41, 0x4c, 0x10, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x72, 0x0a, 0x11, 0x42, 0x69, 0x6d, 0x6f, 0x64, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x63, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x11, 0x41, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x68, 0x61, 0x6c, 0x66, 0x4c, 0x69, 0x66, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x68, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x6f, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x22, 0x6b, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xca, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x74, 0x76, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x74, 0x76, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x70, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x68, 0x6f, 0x70, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0x38, 0x0a, 0x12, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x86, 0x06, 0x0a, 0x09, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x3c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x03, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xbc, 0x01, 0x0a, 0x08, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x22, 0x37, 0x0a, 0x0c, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x12, 0x0a, 0x10, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x46, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x11, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xdf, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x77, 0x69, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x68, 0x74, 0x6c, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x54, 0x4c, 0x43, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x05, 0x68, 0x74, 0x6c, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x3e, 0x0a, 0x0a, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x74, 0x6c, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x74, 0x6c, 0x63, 0x49, 0x64, 0x22, 0xe9, 0x04, 0x0a, 0x1b, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x73, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x73, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x60, 0x0a, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x61, 0x69, 0x6c, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa8, 0x02, 0x0a, 0x1c, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x48, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1a, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x81, 0x04, 0x0a, 0x0d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x4e, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x4c, 0x43, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, 0x4c, 0x43, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x09, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x52, 0x50, 0x41, 0x49, 0x44, 0x10, 0x0b, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x59, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x53, 0x4f, 0x4f, 0x4e, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x0d, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0e, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x10, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x11, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x54, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x50, 0x41, 0x49, 0x44, 0x10, 0x12, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x10, 0x13, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x14, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x50, 0x50, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x15, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x49, 0x52, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x16, 0x2a, 0xae, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x46, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x06, 0x2a, 0x3c, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x48, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x54, 0x54, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x53, 0x55, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x32, 0xb5, 0x0c, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x10, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x12, 0x1a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x56, 0x32, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x54, 0x4c, 0x43, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x64, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x15, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x27, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x58, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x74, 0x6c, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x4f, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x66, 0x0a, 0x0f, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x26, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x48, 0x74, 0x6c, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6e, 0x64, 0x2f, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_routerrpc_router_proto_rawDescOnce sync.Once file_routerrpc_router_proto_rawDescData = file_routerrpc_router_proto_rawDesc ) func file_routerrpc_router_proto_rawDescGZIP() []byte { file_routerrpc_router_proto_rawDescOnce.Do(func() { file_routerrpc_router_proto_rawDescData = protoimpl.X.CompressGZIP(file_routerrpc_router_proto_rawDescData) }) return file_routerrpc_router_proto_rawDescData } var file_routerrpc_router_proto_enumTypes = make([]protoimpl.EnumInfo, 6) var file_routerrpc_router_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_routerrpc_router_proto_goTypes = []interface{}{ (FailureDetail)(0), // 0: routerrpc.FailureDetail (PaymentState)(0), // 1: routerrpc.PaymentState (ResolveHoldForwardAction)(0), // 2: routerrpc.ResolveHoldForwardAction (ChanStatusAction)(0), // 3: routerrpc.ChanStatusAction (MissionControlConfig_ProbabilityModel)(0), // 4: routerrpc.MissionControlConfig.ProbabilityModel (HtlcEvent_EventType)(0), // 5: routerrpc.HtlcEvent.EventType (*SendPaymentRequest)(nil), // 6: routerrpc.SendPaymentRequest (*TrackPaymentRequest)(nil), // 7: routerrpc.TrackPaymentRequest (*TrackPaymentsRequest)(nil), // 8: routerrpc.TrackPaymentsRequest (*RouteFeeRequest)(nil), // 9: routerrpc.RouteFeeRequest (*RouteFeeResponse)(nil), // 10: routerrpc.RouteFeeResponse (*SendToRouteRequest)(nil), // 11: routerrpc.SendToRouteRequest (*SendToRouteResponse)(nil), // 12: routerrpc.SendToRouteResponse (*ResetMissionControlRequest)(nil), // 13: routerrpc.ResetMissionControlRequest (*ResetMissionControlResponse)(nil), // 14: routerrpc.ResetMissionControlResponse (*QueryMissionControlRequest)(nil), // 15: routerrpc.QueryMissionControlRequest (*QueryMissionControlResponse)(nil), // 16: routerrpc.QueryMissionControlResponse (*XImportMissionControlRequest)(nil), // 17: routerrpc.XImportMissionControlRequest (*XImportMissionControlResponse)(nil), // 18: routerrpc.XImportMissionControlResponse (*PairHistory)(nil), // 19: routerrpc.PairHistory (*PairData)(nil), // 20: routerrpc.PairData (*GetMissionControlConfigRequest)(nil), // 21: routerrpc.GetMissionControlConfigRequest (*GetMissionControlConfigResponse)(nil), // 22: routerrpc.GetMissionControlConfigResponse (*SetMissionControlConfigRequest)(nil), // 23: routerrpc.SetMissionControlConfigRequest (*SetMissionControlConfigResponse)(nil), // 24: routerrpc.SetMissionControlConfigResponse (*MissionControlConfig)(nil), // 25: routerrpc.MissionControlConfig (*BimodalParameters)(nil), // 26: routerrpc.BimodalParameters (*AprioriParameters)(nil), // 27: routerrpc.AprioriParameters (*QueryProbabilityRequest)(nil), // 28: routerrpc.QueryProbabilityRequest (*QueryProbabilityResponse)(nil), // 29: routerrpc.QueryProbabilityResponse (*BuildRouteRequest)(nil), // 30: routerrpc.BuildRouteRequest (*BuildRouteResponse)(nil), // 31: routerrpc.BuildRouteResponse (*SubscribeHtlcEventsRequest)(nil), // 32: routerrpc.SubscribeHtlcEventsRequest (*HtlcEvent)(nil), // 33: routerrpc.HtlcEvent (*HtlcInfo)(nil), // 34: routerrpc.HtlcInfo (*ForwardEvent)(nil), // 35: routerrpc.ForwardEvent (*ForwardFailEvent)(nil), // 36: routerrpc.ForwardFailEvent (*SettleEvent)(nil), // 37: routerrpc.SettleEvent (*FinalHtlcEvent)(nil), // 38: routerrpc.FinalHtlcEvent (*SubscribedEvent)(nil), // 39: routerrpc.SubscribedEvent (*LinkFailEvent)(nil), // 40: routerrpc.LinkFailEvent (*PaymentStatus)(nil), // 41: routerrpc.PaymentStatus (*CircuitKey)(nil), // 42: routerrpc.CircuitKey (*ForwardHtlcInterceptRequest)(nil), // 43: routerrpc.ForwardHtlcInterceptRequest (*ForwardHtlcInterceptResponse)(nil), // 44: routerrpc.ForwardHtlcInterceptResponse (*UpdateChanStatusRequest)(nil), // 45: routerrpc.UpdateChanStatusRequest (*UpdateChanStatusResponse)(nil), // 46: routerrpc.UpdateChanStatusResponse nil, // 47: routerrpc.SendPaymentRequest.DestCustomRecordsEntry nil, // 48: routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntry (*lnrpc.RouteHint)(nil), // 49: lnrpc.RouteHint (lnrpc.FeatureBit)(0), // 50: lnrpc.FeatureBit (lnrpc.PaymentFailureReason)(0), // 51: lnrpc.PaymentFailureReason (*lnrpc.Route)(nil), // 52: lnrpc.Route (*lnrpc.Failure)(nil), // 53: lnrpc.Failure (lnrpc.Failure_FailureCode)(0), // 54: lnrpc.Failure.FailureCode (*lnrpc.HTLCAttempt)(nil), // 55: lnrpc.HTLCAttempt (*lnrpc.ChannelPoint)(nil), // 56: lnrpc.ChannelPoint (*lnrpc.Payment)(nil), // 57: lnrpc.Payment } var file_routerrpc_router_proto_depIdxs = []int32{ 49, // 0: routerrpc.SendPaymentRequest.route_hints:type_name -> lnrpc.RouteHint 47, // 1: routerrpc.SendPaymentRequest.dest_custom_records:type_name -> routerrpc.SendPaymentRequest.DestCustomRecordsEntry 50, // 2: routerrpc.SendPaymentRequest.dest_features:type_name -> lnrpc.FeatureBit 51, // 3: routerrpc.RouteFeeResponse.failure_reason:type_name -> lnrpc.PaymentFailureReason 52, // 4: routerrpc.SendToRouteRequest.route:type_name -> lnrpc.Route 53, // 5: routerrpc.SendToRouteResponse.failure:type_name -> lnrpc.Failure 19, // 6: routerrpc.QueryMissionControlResponse.pairs:type_name -> routerrpc.PairHistory 19, // 7: routerrpc.XImportMissionControlRequest.pairs:type_name -> routerrpc.PairHistory 20, // 8: routerrpc.PairHistory.history:type_name -> routerrpc.PairData 25, // 9: routerrpc.GetMissionControlConfigResponse.config:type_name -> routerrpc.MissionControlConfig 25, // 10: routerrpc.SetMissionControlConfigRequest.config:type_name -> routerrpc.MissionControlConfig 4, // 11: routerrpc.MissionControlConfig.model:type_name -> routerrpc.MissionControlConfig.ProbabilityModel 27, // 12: routerrpc.MissionControlConfig.apriori:type_name -> routerrpc.AprioriParameters 26, // 13: routerrpc.MissionControlConfig.bimodal:type_name -> routerrpc.BimodalParameters 20, // 14: routerrpc.QueryProbabilityResponse.history:type_name -> routerrpc.PairData 52, // 15: routerrpc.BuildRouteResponse.route:type_name -> lnrpc.Route 5, // 16: routerrpc.HtlcEvent.event_type:type_name -> routerrpc.HtlcEvent.EventType 35, // 17: routerrpc.HtlcEvent.forward_event:type_name -> routerrpc.ForwardEvent 36, // 18: routerrpc.HtlcEvent.forward_fail_event:type_name -> routerrpc.ForwardFailEvent 37, // 19: routerrpc.HtlcEvent.settle_event:type_name -> routerrpc.SettleEvent 40, // 20: routerrpc.HtlcEvent.link_fail_event:type_name -> routerrpc.LinkFailEvent 39, // 21: routerrpc.HtlcEvent.subscribed_event:type_name -> routerrpc.SubscribedEvent 38, // 22: routerrpc.HtlcEvent.final_htlc_event:type_name -> routerrpc.FinalHtlcEvent 34, // 23: routerrpc.ForwardEvent.info:type_name -> routerrpc.HtlcInfo 34, // 24: routerrpc.LinkFailEvent.info:type_name -> routerrpc.HtlcInfo 54, // 25: routerrpc.LinkFailEvent.wire_failure:type_name -> lnrpc.Failure.FailureCode 0, // 26: routerrpc.LinkFailEvent.failure_detail:type_name -> routerrpc.FailureDetail 1, // 27: routerrpc.PaymentStatus.state:type_name -> routerrpc.PaymentState 55, // 28: routerrpc.PaymentStatus.htlcs:type_name -> lnrpc.HTLCAttempt 42, // 29: routerrpc.ForwardHtlcInterceptRequest.incoming_circuit_key:type_name -> routerrpc.CircuitKey 48, // 30: routerrpc.ForwardHtlcInterceptRequest.custom_records:type_name -> routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntry 42, // 31: routerrpc.ForwardHtlcInterceptResponse.incoming_circuit_key:type_name -> routerrpc.CircuitKey 2, // 32: routerrpc.ForwardHtlcInterceptResponse.action:type_name -> routerrpc.ResolveHoldForwardAction 54, // 33: routerrpc.ForwardHtlcInterceptResponse.failure_code:type_name -> lnrpc.Failure.FailureCode 56, // 34: routerrpc.UpdateChanStatusRequest.chan_point:type_name -> lnrpc.ChannelPoint 3, // 35: routerrpc.UpdateChanStatusRequest.action:type_name -> routerrpc.ChanStatusAction 6, // 36: routerrpc.Router.SendPaymentV2:input_type -> routerrpc.SendPaymentRequest 7, // 37: routerrpc.Router.TrackPaymentV2:input_type -> routerrpc.TrackPaymentRequest 8, // 38: routerrpc.Router.TrackPayments:input_type -> routerrpc.TrackPaymentsRequest 9, // 39: routerrpc.Router.EstimateRouteFee:input_type -> routerrpc.RouteFeeRequest 11, // 40: routerrpc.Router.SendToRoute:input_type -> routerrpc.SendToRouteRequest 11, // 41: routerrpc.Router.SendToRouteV2:input_type -> routerrpc.SendToRouteRequest 13, // 42: routerrpc.Router.ResetMissionControl:input_type -> routerrpc.ResetMissionControlRequest 15, // 43: routerrpc.Router.QueryMissionControl:input_type -> routerrpc.QueryMissionControlRequest 17, // 44: routerrpc.Router.XImportMissionControl:input_type -> routerrpc.XImportMissionControlRequest 21, // 45: routerrpc.Router.GetMissionControlConfig:input_type -> routerrpc.GetMissionControlConfigRequest 23, // 46: routerrpc.Router.SetMissionControlConfig:input_type -> routerrpc.SetMissionControlConfigRequest 28, // 47: routerrpc.Router.QueryProbability:input_type -> routerrpc.QueryProbabilityRequest 30, // 48: routerrpc.Router.BuildRoute:input_type -> routerrpc.BuildRouteRequest 32, // 49: routerrpc.Router.SubscribeHtlcEvents:input_type -> routerrpc.SubscribeHtlcEventsRequest 6, // 50: routerrpc.Router.SendPayment:input_type -> routerrpc.SendPaymentRequest 7, // 51: routerrpc.Router.TrackPayment:input_type -> routerrpc.TrackPaymentRequest 44, // 52: routerrpc.Router.HtlcInterceptor:input_type -> routerrpc.ForwardHtlcInterceptResponse 45, // 53: routerrpc.Router.UpdateChanStatus:input_type -> routerrpc.UpdateChanStatusRequest 57, // 54: routerrpc.Router.SendPaymentV2:output_type -> lnrpc.Payment 57, // 55: routerrpc.Router.TrackPaymentV2:output_type -> lnrpc.Payment 57, // 56: routerrpc.Router.TrackPayments:output_type -> lnrpc.Payment 10, // 57: routerrpc.Router.EstimateRouteFee:output_type -> routerrpc.RouteFeeResponse 12, // 58: routerrpc.Router.SendToRoute:output_type -> routerrpc.SendToRouteResponse 55, // 59: routerrpc.Router.SendToRouteV2:output_type -> lnrpc.HTLCAttempt 14, // 60: routerrpc.Router.ResetMissionControl:output_type -> routerrpc.ResetMissionControlResponse 16, // 61: routerrpc.Router.QueryMissionControl:output_type -> routerrpc.QueryMissionControlResponse 18, // 62: routerrpc.Router.XImportMissionControl:output_type -> routerrpc.XImportMissionControlResponse 22, // 63: routerrpc.Router.GetMissionControlConfig:output_type -> routerrpc.GetMissionControlConfigResponse 24, // 64: routerrpc.Router.SetMissionControlConfig:output_type -> routerrpc.SetMissionControlConfigResponse 29, // 65: routerrpc.Router.QueryProbability:output_type -> routerrpc.QueryProbabilityResponse 31, // 66: routerrpc.Router.BuildRoute:output_type -> routerrpc.BuildRouteResponse 33, // 67: routerrpc.Router.SubscribeHtlcEvents:output_type -> routerrpc.HtlcEvent 41, // 68: routerrpc.Router.SendPayment:output_type -> routerrpc.PaymentStatus 41, // 69: routerrpc.Router.TrackPayment:output_type -> routerrpc.PaymentStatus 43, // 70: routerrpc.Router.HtlcInterceptor:output_type -> routerrpc.ForwardHtlcInterceptRequest 46, // 71: routerrpc.Router.UpdateChanStatus:output_type -> routerrpc.UpdateChanStatusResponse 54, // [54:72] is the sub-list for method output_type 36, // [36:54] is the sub-list for method input_type 36, // [36:36] is the sub-list for extension type_name 36, // [36:36] is the sub-list for extension extendee 0, // [0:36] is the sub-list for field type_name } func init() { file_routerrpc_router_proto_init() } func file_routerrpc_router_proto_init() { if File_routerrpc_router_proto != nil { return } if !protoimpl.UnsafeEnabled { file_routerrpc_router_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendPaymentRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TrackPaymentRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TrackPaymentsRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteFeeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteFeeResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendToRouteRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendToRouteResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResetMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResetMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*XImportMissionControlRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*XImportMissionControlResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PairHistory); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PairData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMissionControlConfigRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMissionControlConfigResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMissionControlConfigRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetMissionControlConfigResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MissionControlConfig); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BimodalParameters); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AprioriParameters); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryProbabilityRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QueryProbabilityResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildRouteRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildRouteResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeHtlcEventsRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HtlcEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HtlcInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardFailEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SettleEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FinalHtlcEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribedEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LinkFailEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PaymentStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CircuitKey); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardHtlcInterceptRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardHtlcInterceptResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateChanStatusRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_routerrpc_router_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateChanStatusResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_routerrpc_router_proto_msgTypes[19].OneofWrappers = []interface{}{ (*MissionControlConfig_Apriori)(nil), (*MissionControlConfig_Bimodal)(nil), } file_routerrpc_router_proto_msgTypes[27].OneofWrappers = []interface{}{ (*HtlcEvent_ForwardEvent)(nil), (*HtlcEvent_ForwardFailEvent)(nil), (*HtlcEvent_SettleEvent)(nil), (*HtlcEvent_LinkFailEvent)(nil), (*HtlcEvent_SubscribedEvent)(nil), (*HtlcEvent_FinalHtlcEvent)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_routerrpc_router_proto_rawDesc, NumEnums: 6, NumMessages: 43, NumExtensions: 0, NumServices: 1, }, GoTypes: file_routerrpc_router_proto_goTypes, DependencyIndexes: file_routerrpc_router_proto_depIdxs, EnumInfos: file_routerrpc_router_proto_enumTypes, MessageInfos: file_routerrpc_router_proto_msgTypes, }.Build() File_routerrpc_router_proto = out.File file_routerrpc_router_proto_rawDesc = nil file_routerrpc_router_proto_goTypes = nil file_routerrpc_router_proto_depIdxs = nil }