From 3eed38d6022253a0c3738c7e91f3391f99fe4471 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 13 Nov 2019 20:54:34 -0800 Subject: [PATCH 1/5] lnrpc: add ability to provide chan point shims for funding, new funding modifiers In this commit, we start to expose some of the new external funding functionality over the RPC interface. First, we add a new `funding_shim` field to the regular `OpenChannel` method. This can be used by a caller to express that certain parameters of the funding flow have already been negotiated outside the protocol, and should be used instead. For example, a shim can be provided to use a particular key for the commitment key (ideally cold) rather than use one this is generated by the wallet as normal, or signal that signing will be carried out in an interactive manner (PSBT based). Next, we add a brand new method: `FundingStateStep`. FundingStateStep is an advanced funding related call that allows the caller to either execute some preparatory steps for a funding workflow, or manually progress a funding workflow. The primary way a funding flow is identified is via its pending channel ID. As an example, this method can be used to specify that we're expecting a funding flow for a particular pending channel ID, for which we need to use specific parameters. Alternatively, this can be used to interactively drive PSBT signing for funding for partially complete funding transactions. The new transition methods (funding state machine modifiers) in this commit allow a party to register a funding intent that should be used for a specified incoming pending channel ID. The "responder" to the external channel flow should use this to prep lnd to be able to handle the channel flow properly. --- lnrpc/rpc.pb.go | 1887 +++++++++++++++++++++++++--------------- lnrpc/rpc.proto | 107 ++- lnrpc/rpc.swagger.json | 87 ++ rpcserver.go | 21 + 4 files changed, 1410 insertions(+), 692 deletions(-) diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index cf4807c4..49a33f62 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -281,7 +281,7 @@ func (x ChannelEventUpdate_UpdateType) String() string { } func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{66, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{73, 0} } type Invoice_InvoiceState int32 @@ -312,7 +312,7 @@ func (x Invoice_InvoiceState) String() string { } func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{98, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{105, 0} } type Payment_PaymentStatus int32 @@ -343,7 +343,7 @@ func (x Payment_PaymentStatus) String() string { } func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{105, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{112, 0} } type HTLCAttempt_HTLCStatus int32 @@ -371,7 +371,7 @@ func (x HTLCAttempt_HTLCStatus) String() string { } func (HTLCAttempt_HTLCStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{106, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{113, 0} } type GenSeedRequest struct { @@ -4331,10 +4331,17 @@ type OpenChannelRequest struct { // //Note: If this value is set on channel creation, you will *not* be able to //cooperatively close out to a different address. - CloseAddress string `protobuf:"bytes,13,opt,name=close_address,proto3" json:"close_address,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CloseAddress string `protobuf:"bytes,13,opt,name=close_address,proto3" json:"close_address,omitempty"` + //* + //Funding shims are an optional argument that allow the caller to intercept + //certain funding functionality. For example, a shim can be provided to use a + //particular key for the commitment key (ideally cold) rather than use one + //that is generated by the wallet as normal, or signal that signing will be + //carried out in an interactive manner (PSBT based). + FundingShim *FundingShim `protobuf:"bytes,14,opt,name=funding_shim,proto3" json:"funding_shim,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} } @@ -4447,14 +4454,25 @@ func (m *OpenChannelRequest) GetCloseAddress() string { return "" } +func (m *OpenChannelRequest) GetFundingShim() *FundingShim { + if m != nil { + return m.FundingShim + } + return nil +} + type OpenStatusUpdate struct { // Types that are valid to be assigned to Update: // *OpenStatusUpdate_ChanPending // *OpenStatusUpdate_ChanOpen - Update isOpenStatusUpdate_Update `protobuf_oneof:"update"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Update isOpenStatusUpdate_Update `protobuf_oneof:"update"` + //* + //The pending channel ID of the created channel. This value may be used to + //further the funding flow manually via the FundingStateStep method. + PendingChanId []byte `protobuf:"bytes,4,opt,name=pending_chan_id,proto3" json:"pending_chan_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} } @@ -4519,6 +4537,13 @@ func (m *OpenStatusUpdate) GetChanOpen() *ChannelOpenUpdate { return nil } +func (m *OpenStatusUpdate) GetPendingChanId() []byte { + if m != nil { + return m.PendingChanId + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*OpenStatusUpdate) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -4527,6 +4552,404 @@ func (*OpenStatusUpdate) XXX_OneofWrappers() []interface{} { } } +type KeyLocator struct { + /// The family of key being identified. + KeyFamily int32 `protobuf:"varint,1,opt,name=key_family,json=keyFamily,proto3" json:"key_family,omitempty"` + /// The precise index of the key being identified. + KeyIndex int32 `protobuf:"varint,2,opt,name=key_index,json=keyIndex,proto3" json:"key_index,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyLocator) Reset() { *m = KeyLocator{} } +func (m *KeyLocator) String() string { return proto.CompactTextString(m) } +func (*KeyLocator) ProtoMessage() {} +func (*KeyLocator) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{62} +} + +func (m *KeyLocator) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyLocator.Unmarshal(m, b) +} +func (m *KeyLocator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyLocator.Marshal(b, m, deterministic) +} +func (m *KeyLocator) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyLocator.Merge(m, src) +} +func (m *KeyLocator) XXX_Size() int { + return xxx_messageInfo_KeyLocator.Size(m) +} +func (m *KeyLocator) XXX_DiscardUnknown() { + xxx_messageInfo_KeyLocator.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyLocator proto.InternalMessageInfo + +func (m *KeyLocator) GetKeyFamily() int32 { + if m != nil { + return m.KeyFamily + } + return 0 +} + +func (m *KeyLocator) GetKeyIndex() int32 { + if m != nil { + return m.KeyIndex + } + return 0 +} + +type KeyDescriptor struct { + //* + //The raw bytes of the key being identified. + RawKeyBytes []byte `protobuf:"bytes,1,opt,name=raw_key_bytes,json=rawKeyBytes,proto3" json:"raw_key_bytes,omitempty"` + //* + //The key locator that identifies which key to use for signing. + KeyLoc *KeyLocator `protobuf:"bytes,2,opt,name=key_loc,json=keyLoc,proto3" json:"key_loc,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyDescriptor) Reset() { *m = KeyDescriptor{} } +func (m *KeyDescriptor) String() string { return proto.CompactTextString(m) } +func (*KeyDescriptor) ProtoMessage() {} +func (*KeyDescriptor) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{63} +} + +func (m *KeyDescriptor) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyDescriptor.Unmarshal(m, b) +} +func (m *KeyDescriptor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyDescriptor.Marshal(b, m, deterministic) +} +func (m *KeyDescriptor) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyDescriptor.Merge(m, src) +} +func (m *KeyDescriptor) XXX_Size() int { + return xxx_messageInfo_KeyDescriptor.Size(m) +} +func (m *KeyDescriptor) XXX_DiscardUnknown() { + xxx_messageInfo_KeyDescriptor.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyDescriptor proto.InternalMessageInfo + +func (m *KeyDescriptor) GetRawKeyBytes() []byte { + if m != nil { + return m.RawKeyBytes + } + return nil +} + +func (m *KeyDescriptor) GetKeyLoc() *KeyLocator { + if m != nil { + return m.KeyLoc + } + return nil +} + +type ChanPointShim struct { + //* + //The size of the pre-crafted output to be used as the channel point for this + //channel funding. + Amt int64 `protobuf:"varint,1,opt,name=amt,proto3" json:"amt,omitempty"` + /// The target channel point to refrence in created commitment transactions. + ChanPoint *ChannelPoint `protobuf:"bytes,2,opt,name=chan_point,json=chanPoint,proto3" json:"chan_point,omitempty"` + /// Our local key to use when creating the multi-sig output. + LocalKey *KeyDescriptor `protobuf:"bytes,3,opt,name=local_key,json=localKey,proto3" json:"local_key,omitempty"` + /// The key of the remote party to use when creating the multi-sig output. + RemoteKey []byte `protobuf:"bytes,4,opt,name=remote_key,json=remoteKey,proto3" json:"remote_key,omitempty"` + //* + //If non-zero, then this will be used as the pending channel ID on the wire + //protocol to initate the funding request. This is an optional field, and + //should only be set if the responder is already expecting a specific pending + //channel ID. + PendingChanId []byte `protobuf:"bytes,5,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChanPointShim) Reset() { *m = ChanPointShim{} } +func (m *ChanPointShim) String() string { return proto.CompactTextString(m) } +func (*ChanPointShim) ProtoMessage() {} +func (*ChanPointShim) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{64} +} + +func (m *ChanPointShim) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ChanPointShim.Unmarshal(m, b) +} +func (m *ChanPointShim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ChanPointShim.Marshal(b, m, deterministic) +} +func (m *ChanPointShim) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChanPointShim.Merge(m, src) +} +func (m *ChanPointShim) XXX_Size() int { + return xxx_messageInfo_ChanPointShim.Size(m) +} +func (m *ChanPointShim) XXX_DiscardUnknown() { + xxx_messageInfo_ChanPointShim.DiscardUnknown(m) +} + +var xxx_messageInfo_ChanPointShim proto.InternalMessageInfo + +func (m *ChanPointShim) GetAmt() int64 { + if m != nil { + return m.Amt + } + return 0 +} + +func (m *ChanPointShim) GetChanPoint() *ChannelPoint { + if m != nil { + return m.ChanPoint + } + return nil +} + +func (m *ChanPointShim) GetLocalKey() *KeyDescriptor { + if m != nil { + return m.LocalKey + } + return nil +} + +func (m *ChanPointShim) GetRemoteKey() []byte { + if m != nil { + return m.RemoteKey + } + return nil +} + +func (m *ChanPointShim) GetPendingChanId() []byte { + if m != nil { + return m.PendingChanId + } + return nil +} + +type FundingShim struct { + // Types that are valid to be assigned to Shim: + // *FundingShim_ChanPointShim + Shim isFundingShim_Shim `protobuf_oneof:"shim"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FundingShim) Reset() { *m = FundingShim{} } +func (m *FundingShim) String() string { return proto.CompactTextString(m) } +func (*FundingShim) ProtoMessage() {} +func (*FundingShim) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{65} +} + +func (m *FundingShim) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FundingShim.Unmarshal(m, b) +} +func (m *FundingShim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FundingShim.Marshal(b, m, deterministic) +} +func (m *FundingShim) XXX_Merge(src proto.Message) { + xxx_messageInfo_FundingShim.Merge(m, src) +} +func (m *FundingShim) XXX_Size() int { + return xxx_messageInfo_FundingShim.Size(m) +} +func (m *FundingShim) XXX_DiscardUnknown() { + xxx_messageInfo_FundingShim.DiscardUnknown(m) +} + +var xxx_messageInfo_FundingShim proto.InternalMessageInfo + +type isFundingShim_Shim interface { + isFundingShim_Shim() +} + +type FundingShim_ChanPointShim struct { + ChanPointShim *ChanPointShim `protobuf:"bytes,1,opt,name=chan_point_shim,json=chanPointShim,proto3,oneof"` +} + +func (*FundingShim_ChanPointShim) isFundingShim_Shim() {} + +func (m *FundingShim) GetShim() isFundingShim_Shim { + if m != nil { + return m.Shim + } + return nil +} + +func (m *FundingShim) GetChanPointShim() *ChanPointShim { + if x, ok := m.GetShim().(*FundingShim_ChanPointShim); ok { + return x.ChanPointShim + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*FundingShim) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*FundingShim_ChanPointShim)(nil), + } +} + +type FundingShimCancel struct { + /// The pending channel ID of the channel to cancel the funding shim for. + PendingChanId []byte `protobuf:"bytes,1,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FundingShimCancel) Reset() { *m = FundingShimCancel{} } +func (m *FundingShimCancel) String() string { return proto.CompactTextString(m) } +func (*FundingShimCancel) ProtoMessage() {} +func (*FundingShimCancel) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{66} +} + +func (m *FundingShimCancel) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FundingShimCancel.Unmarshal(m, b) +} +func (m *FundingShimCancel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FundingShimCancel.Marshal(b, m, deterministic) +} +func (m *FundingShimCancel) XXX_Merge(src proto.Message) { + xxx_messageInfo_FundingShimCancel.Merge(m, src) +} +func (m *FundingShimCancel) XXX_Size() int { + return xxx_messageInfo_FundingShimCancel.Size(m) +} +func (m *FundingShimCancel) XXX_DiscardUnknown() { + xxx_messageInfo_FundingShimCancel.DiscardUnknown(m) +} + +var xxx_messageInfo_FundingShimCancel proto.InternalMessageInfo + +func (m *FundingShimCancel) GetPendingChanId() []byte { + if m != nil { + return m.PendingChanId + } + return nil +} + +type FundingTransitionMsg struct { + // Types that are valid to be assigned to Trigger: + // *FundingTransitionMsg_ShimRegister + // *FundingTransitionMsg_ShimCancel + Trigger isFundingTransitionMsg_Trigger `protobuf_oneof:"trigger"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FundingTransitionMsg) Reset() { *m = FundingTransitionMsg{} } +func (m *FundingTransitionMsg) String() string { return proto.CompactTextString(m) } +func (*FundingTransitionMsg) ProtoMessage() {} +func (*FundingTransitionMsg) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{67} +} + +func (m *FundingTransitionMsg) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FundingTransitionMsg.Unmarshal(m, b) +} +func (m *FundingTransitionMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FundingTransitionMsg.Marshal(b, m, deterministic) +} +func (m *FundingTransitionMsg) XXX_Merge(src proto.Message) { + xxx_messageInfo_FundingTransitionMsg.Merge(m, src) +} +func (m *FundingTransitionMsg) XXX_Size() int { + return xxx_messageInfo_FundingTransitionMsg.Size(m) +} +func (m *FundingTransitionMsg) XXX_DiscardUnknown() { + xxx_messageInfo_FundingTransitionMsg.DiscardUnknown(m) +} + +var xxx_messageInfo_FundingTransitionMsg proto.InternalMessageInfo + +type isFundingTransitionMsg_Trigger interface { + isFundingTransitionMsg_Trigger() +} + +type FundingTransitionMsg_ShimRegister struct { + ShimRegister *FundingShim `protobuf:"bytes,1,opt,name=shim_register,json=shimRegister,proto3,oneof"` +} + +type FundingTransitionMsg_ShimCancel struct { + ShimCancel *FundingShimCancel `protobuf:"bytes,2,opt,name=shim_cancel,json=shimCancel,proto3,oneof"` +} + +func (*FundingTransitionMsg_ShimRegister) isFundingTransitionMsg_Trigger() {} + +func (*FundingTransitionMsg_ShimCancel) isFundingTransitionMsg_Trigger() {} + +func (m *FundingTransitionMsg) GetTrigger() isFundingTransitionMsg_Trigger { + if m != nil { + return m.Trigger + } + return nil +} + +func (m *FundingTransitionMsg) GetShimRegister() *FundingShim { + if x, ok := m.GetTrigger().(*FundingTransitionMsg_ShimRegister); ok { + return x.ShimRegister + } + return nil +} + +func (m *FundingTransitionMsg) GetShimCancel() *FundingShimCancel { + if x, ok := m.GetTrigger().(*FundingTransitionMsg_ShimCancel); ok { + return x.ShimCancel + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*FundingTransitionMsg) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*FundingTransitionMsg_ShimRegister)(nil), + (*FundingTransitionMsg_ShimCancel)(nil), + } +} + +type FundingStateStepResp struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FundingStateStepResp) Reset() { *m = FundingStateStepResp{} } +func (m *FundingStateStepResp) String() string { return proto.CompactTextString(m) } +func (*FundingStateStepResp) ProtoMessage() {} +func (*FundingStateStepResp) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{68} +} + +func (m *FundingStateStepResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FundingStateStepResp.Unmarshal(m, b) +} +func (m *FundingStateStepResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FundingStateStepResp.Marshal(b, m, deterministic) +} +func (m *FundingStateStepResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_FundingStateStepResp.Merge(m, src) +} +func (m *FundingStateStepResp) XXX_Size() int { + return xxx_messageInfo_FundingStateStepResp.Size(m) +} +func (m *FundingStateStepResp) XXX_DiscardUnknown() { + xxx_messageInfo_FundingStateStepResp.DiscardUnknown(m) +} + +var xxx_messageInfo_FundingStateStepResp proto.InternalMessageInfo + type PendingHTLC struct { /// The direction within the channel that the htlc was sent Incoming bool `protobuf:"varint,1,opt,name=incoming,proto3" json:"incoming,omitempty"` @@ -4552,7 +4975,7 @@ func (m *PendingHTLC) Reset() { *m = PendingHTLC{} } func (m *PendingHTLC) String() string { return proto.CompactTextString(m) } func (*PendingHTLC) ProtoMessage() {} func (*PendingHTLC) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{62} + return fileDescriptor_77a6da22d6a3feb1, []int{69} } func (m *PendingHTLC) XXX_Unmarshal(b []byte) error { @@ -4625,7 +5048,7 @@ func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{} func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) } func (*PendingChannelsRequest) ProtoMessage() {} func (*PendingChannelsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{63} + return fileDescriptor_77a6da22d6a3feb1, []int{70} } func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error { @@ -4666,7 +5089,7 @@ func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) } func (*PendingChannelsResponse) ProtoMessage() {} func (*PendingChannelsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64} + return fileDescriptor_77a6da22d6a3feb1, []int{71} } func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error { @@ -4745,7 +5168,7 @@ func (m *PendingChannelsResponse_PendingChannel) Reset() { func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{71, 0} } func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error { @@ -4847,7 +5270,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string { } func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64, 1} + return fileDescriptor_77a6da22d6a3feb1, []int{71, 1} } func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error { @@ -4921,7 +5344,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string { } func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {} func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64, 2} + return fileDescriptor_77a6da22d6a3feb1, []int{71, 2} } func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error { @@ -4970,7 +5393,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64, 3} + return fileDescriptor_77a6da22d6a3feb1, []int{71, 3} } func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error { @@ -5035,7 +5458,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string { } func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64, 4} + return fileDescriptor_77a6da22d6a3feb1, []int{71, 4} } func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error { @@ -5115,7 +5538,7 @@ func (m *ChannelEventSubscription) Reset() { *m = ChannelEventSubscripti func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) } func (*ChannelEventSubscription) ProtoMessage() {} func (*ChannelEventSubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{65} + return fileDescriptor_77a6da22d6a3feb1, []int{72} } func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error { @@ -5153,7 +5576,7 @@ func (m *ChannelEventUpdate) Reset() { *m = ChannelEventUpdate{} } func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) } func (*ChannelEventUpdate) ProtoMessage() {} func (*ChannelEventUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{66} + return fileDescriptor_77a6da22d6a3feb1, []int{73} } func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error { @@ -5264,7 +5687,7 @@ func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} } func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) } func (*WalletBalanceRequest) ProtoMessage() {} func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{67} + return fileDescriptor_77a6da22d6a3feb1, []int{74} } func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error { @@ -5301,7 +5724,7 @@ func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} } func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) } func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{68} + return fileDescriptor_77a6da22d6a3feb1, []int{75} } func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error { @@ -5353,7 +5776,7 @@ func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} } func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) } func (*ChannelBalanceRequest) ProtoMessage() {} func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{69} + return fileDescriptor_77a6da22d6a3feb1, []int{76} } func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error { @@ -5388,7 +5811,7 @@ func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{} func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) } func (*ChannelBalanceResponse) ProtoMessage() {} func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{70} + return fileDescriptor_77a6da22d6a3feb1, []int{77} } func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error { @@ -5489,7 +5912,7 @@ func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} } func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) } func (*QueryRoutesRequest) ProtoMessage() {} func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{71} + return fileDescriptor_77a6da22d6a3feb1, []int{78} } func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error { @@ -5613,7 +6036,7 @@ func (m *NodePair) Reset() { *m = NodePair{} } func (m *NodePair) String() string { return proto.CompactTextString(m) } func (*NodePair) ProtoMessage() {} func (*NodePair) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{72} + return fileDescriptor_77a6da22d6a3feb1, []int{79} } func (m *NodePair) XXX_Unmarshal(b []byte) error { @@ -5666,7 +6089,7 @@ func (m *EdgeLocator) Reset() { *m = EdgeLocator{} } func (m *EdgeLocator) String() string { return proto.CompactTextString(m) } func (*EdgeLocator) ProtoMessage() {} func (*EdgeLocator) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{73} + return fileDescriptor_77a6da22d6a3feb1, []int{80} } func (m *EdgeLocator) XXX_Unmarshal(b []byte) error { @@ -5719,7 +6142,7 @@ func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} } func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) } func (*QueryRoutesResponse) ProtoMessage() {} func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{74} + return fileDescriptor_77a6da22d6a3feb1, []int{81} } func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error { @@ -5795,7 +6218,7 @@ func (m *Hop) Reset() { *m = Hop{} } func (m *Hop) String() string { return proto.CompactTextString(m) } func (*Hop) ProtoMessage() {} func (*Hop) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{75} + return fileDescriptor_77a6da22d6a3feb1, []int{82} } func (m *Hop) XXX_Unmarshal(b []byte) error { @@ -5917,7 +6340,7 @@ func (m *MPPRecord) Reset() { *m = MPPRecord{} } func (m *MPPRecord) String() string { return proto.CompactTextString(m) } func (*MPPRecord) ProtoMessage() {} func (*MPPRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{76} + return fileDescriptor_77a6da22d6a3feb1, []int{83} } func (m *MPPRecord) XXX_Unmarshal(b []byte) error { @@ -5995,7 +6418,7 @@ func (m *Route) Reset() { *m = Route{} } func (m *Route) String() string { return proto.CompactTextString(m) } func (*Route) ProtoMessage() {} func (*Route) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{77} + return fileDescriptor_77a6da22d6a3feb1, []int{84} } func (m *Route) XXX_Unmarshal(b []byte) error { @@ -6074,7 +6497,7 @@ func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} } func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) } func (*NodeInfoRequest) ProtoMessage() {} func (*NodeInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{78} + return fileDescriptor_77a6da22d6a3feb1, []int{85} } func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error { @@ -6131,7 +6554,7 @@ func (m *NodeInfo) Reset() { *m = NodeInfo{} } func (m *NodeInfo) String() string { return proto.CompactTextString(m) } func (*NodeInfo) ProtoMessage() {} func (*NodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{79} + return fileDescriptor_77a6da22d6a3feb1, []int{86} } func (m *NodeInfo) XXX_Unmarshal(b []byte) error { @@ -6201,7 +6624,7 @@ func (m *LightningNode) Reset() { *m = LightningNode{} } func (m *LightningNode) String() string { return proto.CompactTextString(m) } func (*LightningNode) ProtoMessage() {} func (*LightningNode) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{80} + return fileDescriptor_77a6da22d6a3feb1, []int{87} } func (m *LightningNode) XXX_Unmarshal(b []byte) error { @@ -6276,7 +6699,7 @@ func (m *NodeAddress) Reset() { *m = NodeAddress{} } func (m *NodeAddress) String() string { return proto.CompactTextString(m) } func (*NodeAddress) ProtoMessage() {} func (*NodeAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{81} + return fileDescriptor_77a6da22d6a3feb1, []int{88} } func (m *NodeAddress) XXX_Unmarshal(b []byte) error { @@ -6328,7 +6751,7 @@ func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} } func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) } func (*RoutingPolicy) ProtoMessage() {} func (*RoutingPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{82} + return fileDescriptor_77a6da22d6a3feb1, []int{89} } func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error { @@ -6426,7 +6849,7 @@ func (m *ChannelEdge) Reset() { *m = ChannelEdge{} } func (m *ChannelEdge) String() string { return proto.CompactTextString(m) } func (*ChannelEdge) ProtoMessage() {} func (*ChannelEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{83} + return fileDescriptor_77a6da22d6a3feb1, []int{90} } func (m *ChannelEdge) XXX_Unmarshal(b []byte) error { @@ -6519,7 +6942,7 @@ func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} } func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) } func (*ChannelGraphRequest) ProtoMessage() {} func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{84} + return fileDescriptor_77a6da22d6a3feb1, []int{91} } func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error { @@ -6562,7 +6985,7 @@ func (m *ChannelGraph) Reset() { *m = ChannelGraph{} } func (m *ChannelGraph) String() string { return proto.CompactTextString(m) } func (*ChannelGraph) ProtoMessage() {} func (*ChannelGraph) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{85} + return fileDescriptor_77a6da22d6a3feb1, []int{92} } func (m *ChannelGraph) XXX_Unmarshal(b []byte) error { @@ -6612,7 +7035,7 @@ func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} } func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) } func (*ChanInfoRequest) ProtoMessage() {} func (*ChanInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{86} + return fileDescriptor_77a6da22d6a3feb1, []int{93} } func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error { @@ -6650,7 +7073,7 @@ func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} } func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) } func (*NetworkInfoRequest) ProtoMessage() {} func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{87} + return fileDescriptor_77a6da22d6a3feb1, []int{94} } func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error { @@ -6693,7 +7116,7 @@ func (m *NetworkInfo) Reset() { *m = NetworkInfo{} } func (m *NetworkInfo) String() string { return proto.CompactTextString(m) } func (*NetworkInfo) ProtoMessage() {} func (*NetworkInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{88} + return fileDescriptor_77a6da22d6a3feb1, []int{95} } func (m *NetworkInfo) XXX_Unmarshal(b []byte) error { @@ -6801,7 +7224,7 @@ func (m *StopRequest) Reset() { *m = StopRequest{} } func (m *StopRequest) String() string { return proto.CompactTextString(m) } func (*StopRequest) ProtoMessage() {} func (*StopRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{89} + return fileDescriptor_77a6da22d6a3feb1, []int{96} } func (m *StopRequest) XXX_Unmarshal(b []byte) error { @@ -6832,7 +7255,7 @@ func (m *StopResponse) Reset() { *m = StopResponse{} } func (m *StopResponse) String() string { return proto.CompactTextString(m) } func (*StopResponse) ProtoMessage() {} func (*StopResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{90} + return fileDescriptor_77a6da22d6a3feb1, []int{97} } func (m *StopResponse) XXX_Unmarshal(b []byte) error { @@ -6863,7 +7286,7 @@ func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscrip func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) } func (*GraphTopologySubscription) ProtoMessage() {} func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{91} + return fileDescriptor_77a6da22d6a3feb1, []int{98} } func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error { @@ -6897,7 +7320,7 @@ func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} } func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) } func (*GraphTopologyUpdate) ProtoMessage() {} func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{92} + return fileDescriptor_77a6da22d6a3feb1, []int{99} } func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error { @@ -6954,7 +7377,7 @@ func (m *NodeUpdate) Reset() { *m = NodeUpdate{} } func (m *NodeUpdate) String() string { return proto.CompactTextString(m) } func (*NodeUpdate) ProtoMessage() {} func (*NodeUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{93} + return fileDescriptor_77a6da22d6a3feb1, []int{100} } func (m *NodeUpdate) XXX_Unmarshal(b []byte) error { @@ -7030,7 +7453,7 @@ func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} } func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) } func (*ChannelEdgeUpdate) ProtoMessage() {} func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{94} + return fileDescriptor_77a6da22d6a3feb1, []int{101} } func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error { @@ -7111,7 +7534,7 @@ func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} } func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) } func (*ClosedChannelUpdate) ProtoMessage() {} func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{95} + return fileDescriptor_77a6da22d6a3feb1, []int{102} } func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error { @@ -7182,7 +7605,7 @@ func (m *HopHint) Reset() { *m = HopHint{} } func (m *HopHint) String() string { return proto.CompactTextString(m) } func (*HopHint) ProtoMessage() {} func (*HopHint) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{96} + return fileDescriptor_77a6da22d6a3feb1, []int{103} } func (m *HopHint) XXX_Unmarshal(b []byte) error { @@ -7252,7 +7675,7 @@ func (m *RouteHint) Reset() { *m = RouteHint{} } func (m *RouteHint) String() string { return proto.CompactTextString(m) } func (*RouteHint) ProtoMessage() {} func (*RouteHint) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{97} + return fileDescriptor_77a6da22d6a3feb1, []int{104} } func (m *RouteHint) XXX_Unmarshal(b []byte) error { @@ -7381,7 +7804,7 @@ func (m *Invoice) Reset() { *m = Invoice{} } func (m *Invoice) String() string { return proto.CompactTextString(m) } func (*Invoice) ProtoMessage() {} func (*Invoice) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{98} + return fileDescriptor_77a6da22d6a3feb1, []int{105} } func (m *Invoice) XXX_Unmarshal(b []byte) error { @@ -7596,7 +8019,7 @@ func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} } func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) } func (*InvoiceHTLC) ProtoMessage() {} func (*InvoiceHTLC) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{99} + return fileDescriptor_77a6da22d6a3feb1, []int{106} } func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error { @@ -7709,7 +8132,7 @@ func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (*AddInvoiceResponse) ProtoMessage() {} func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{100} + return fileDescriptor_77a6da22d6a3feb1, []int{107} } func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error { @@ -7771,7 +8194,7 @@ func (m *PaymentHash) Reset() { *m = PaymentHash{} } func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (*PaymentHash) ProtoMessage() {} func (*PaymentHash) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{101} + return fileDescriptor_77a6da22d6a3feb1, []int{108} } func (m *PaymentHash) XXX_Unmarshal(b []byte) error { @@ -7831,7 +8254,7 @@ func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (*ListInvoiceRequest) ProtoMessage() {} func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{102} + return fileDescriptor_77a6da22d6a3feb1, []int{109} } func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error { @@ -7902,7 +8325,7 @@ func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (*ListInvoiceResponse) ProtoMessage() {} func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{103} + return fileDescriptor_77a6da22d6a3feb1, []int{110} } func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error { @@ -7966,7 +8389,7 @@ func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} } func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) } func (*InvoiceSubscription) ProtoMessage() {} func (*InvoiceSubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{104} + return fileDescriptor_77a6da22d6a3feb1, []int{111} } func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error { @@ -8039,7 +8462,7 @@ func (m *Payment) Reset() { *m = Payment{} } func (m *Payment) String() string { return proto.CompactTextString(m) } func (*Payment) ProtoMessage() {} func (*Payment) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{105} + return fileDescriptor_77a6da22d6a3feb1, []int{112} } func (m *Payment) XXX_Unmarshal(b []byte) error { @@ -8182,7 +8605,7 @@ func (m *HTLCAttempt) Reset() { *m = HTLCAttempt{} } func (m *HTLCAttempt) String() string { return proto.CompactTextString(m) } func (*HTLCAttempt) ProtoMessage() {} func (*HTLCAttempt) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{106} + return fileDescriptor_77a6da22d6a3feb1, []int{113} } func (m *HTLCAttempt) XXX_Unmarshal(b []byte) error { @@ -8246,7 +8669,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*ListPaymentsRequest) ProtoMessage() {} func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{107} + return fileDescriptor_77a6da22d6a3feb1, []int{114} } func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error { @@ -8286,7 +8709,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*ListPaymentsResponse) ProtoMessage() {} func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{108} + return fileDescriptor_77a6da22d6a3feb1, []int{115} } func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error { @@ -8324,7 +8747,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsRequest) ProtoMessage() {} func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{109} + return fileDescriptor_77a6da22d6a3feb1, []int{116} } func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error { @@ -8355,7 +8778,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{110} + return fileDescriptor_77a6da22d6a3feb1, []int{117} } func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error { @@ -8387,7 +8810,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} } func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) } func (*AbandonChannelRequest) ProtoMessage() {} func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{111} + return fileDescriptor_77a6da22d6a3feb1, []int{118} } func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error { @@ -8425,7 +8848,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{} func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) } func (*AbandonChannelResponse) ProtoMessage() {} func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{112} + return fileDescriptor_77a6da22d6a3feb1, []int{119} } func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error { @@ -8458,7 +8881,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (*DebugLevelRequest) ProtoMessage() {} func (*DebugLevelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{113} + return fileDescriptor_77a6da22d6a3feb1, []int{120} } func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error { @@ -8504,7 +8927,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (*DebugLevelResponse) ProtoMessage() {} func (*DebugLevelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{114} + return fileDescriptor_77a6da22d6a3feb1, []int{121} } func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error { @@ -8544,7 +8967,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} } func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (*PayReqString) ProtoMessage() {} func (*PayReqString) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{115} + return fileDescriptor_77a6da22d6a3feb1, []int{122} } func (m *PayReqString) XXX_Unmarshal(b []byte) error { @@ -8595,7 +9018,7 @@ func (m *PayReq) Reset() { *m = PayReq{} } func (m *PayReq) String() string { return proto.CompactTextString(m) } func (*PayReq) ProtoMessage() {} func (*PayReq) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{116} + return fileDescriptor_77a6da22d6a3feb1, []int{123} } func (m *PayReq) XXX_Unmarshal(b []byte) error { @@ -8720,7 +9143,7 @@ func (m *Feature) Reset() { *m = Feature{} } func (m *Feature) String() string { return proto.CompactTextString(m) } func (*Feature) ProtoMessage() {} func (*Feature) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{117} + return fileDescriptor_77a6da22d6a3feb1, []int{124} } func (m *Feature) XXX_Unmarshal(b []byte) error { @@ -8772,7 +9195,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (*FeeReportRequest) ProtoMessage() {} func (*FeeReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{118} + return fileDescriptor_77a6da22d6a3feb1, []int{125} } func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error { @@ -8811,7 +9234,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (*ChannelFeeReport) ProtoMessage() {} func (*ChannelFeeReport) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{119} + return fileDescriptor_77a6da22d6a3feb1, []int{126} } func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error { @@ -8878,7 +9301,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (*FeeReportResponse) ProtoMessage() {} func (*FeeReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{120} + return fileDescriptor_77a6da22d6a3feb1, []int{127} } func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error { @@ -8953,7 +9376,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateRequest) ProtoMessage() {} func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{121} + return fileDescriptor_77a6da22d6a3feb1, []int{128} } func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error { @@ -9071,7 +9494,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateResponse) ProtoMessage() {} func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{122} + return fileDescriptor_77a6da22d6a3feb1, []int{129} } func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error { @@ -9110,7 +9533,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryRequest) ProtoMessage() {} func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{123} + return fileDescriptor_77a6da22d6a3feb1, []int{130} } func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error { @@ -9187,7 +9610,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (*ForwardingEvent) ProtoMessage() {} func (*ForwardingEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{124} + return fileDescriptor_77a6da22d6a3feb1, []int{131} } func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error { @@ -9285,7 +9708,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryResponse) ProtoMessage() {} func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{125} + return fileDescriptor_77a6da22d6a3feb1, []int{132} } func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error { @@ -9332,7 +9755,7 @@ func (m *ExportChannelBackupRequest) Reset() { *m = ExportChannelBackupR func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) } func (*ExportChannelBackupRequest) ProtoMessage() {} func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{126} + return fileDescriptor_77a6da22d6a3feb1, []int{133} } func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error { @@ -9379,7 +9802,7 @@ func (m *ChannelBackup) Reset() { *m = ChannelBackup{} } func (m *ChannelBackup) String() string { return proto.CompactTextString(m) } func (*ChannelBackup) ProtoMessage() {} func (*ChannelBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{127} + return fileDescriptor_77a6da22d6a3feb1, []int{134} } func (m *ChannelBackup) XXX_Unmarshal(b []byte) error { @@ -9433,7 +9856,7 @@ func (m *MultiChanBackup) Reset() { *m = MultiChanBackup{} } func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) } func (*MultiChanBackup) ProtoMessage() {} func (*MultiChanBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{128} + return fileDescriptor_77a6da22d6a3feb1, []int{135} } func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error { @@ -9478,7 +9901,7 @@ func (m *ChanBackupExportRequest) Reset() { *m = ChanBackupExportRequest func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) } func (*ChanBackupExportRequest) ProtoMessage() {} func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{129} + return fileDescriptor_77a6da22d6a3feb1, []int{136} } func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error { @@ -9517,7 +9940,7 @@ func (m *ChanBackupSnapshot) Reset() { *m = ChanBackupSnapshot{} } func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) } func (*ChanBackupSnapshot) ProtoMessage() {} func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{130} + return fileDescriptor_77a6da22d6a3feb1, []int{137} } func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error { @@ -9565,7 +9988,7 @@ func (m *ChannelBackups) Reset() { *m = ChannelBackups{} } func (m *ChannelBackups) String() string { return proto.CompactTextString(m) } func (*ChannelBackups) ProtoMessage() {} func (*ChannelBackups) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{131} + return fileDescriptor_77a6da22d6a3feb1, []int{138} } func (m *ChannelBackups) XXX_Unmarshal(b []byte) error { @@ -9607,7 +10030,7 @@ func (m *RestoreChanBackupRequest) Reset() { *m = RestoreChanBackupReque func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) } func (*RestoreChanBackupRequest) ProtoMessage() {} func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{132} + return fileDescriptor_77a6da22d6a3feb1, []int{139} } func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error { @@ -9683,7 +10106,7 @@ func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} } func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) } func (*RestoreBackupResponse) ProtoMessage() {} func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{133} + return fileDescriptor_77a6da22d6a3feb1, []int{140} } func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error { @@ -9714,7 +10137,7 @@ func (m *ChannelBackupSubscription) Reset() { *m = ChannelBackupSubscrip func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) } func (*ChannelBackupSubscription) ProtoMessage() {} func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{134} + return fileDescriptor_77a6da22d6a3feb1, []int{141} } func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error { @@ -9745,7 +10168,7 @@ func (m *VerifyChanBackupResponse) Reset() { *m = VerifyChanBackupRespon func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) } func (*VerifyChanBackupResponse) ProtoMessage() {} func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{135} + return fileDescriptor_77a6da22d6a3feb1, []int{142} } func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error { @@ -9780,7 +10203,7 @@ func (m *MacaroonPermission) Reset() { *m = MacaroonPermission{} } func (m *MacaroonPermission) String() string { return proto.CompactTextString(m) } func (*MacaroonPermission) ProtoMessage() {} func (*MacaroonPermission) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{136} + return fileDescriptor_77a6da22d6a3feb1, []int{143} } func (m *MacaroonPermission) XXX_Unmarshal(b []byte) error { @@ -9827,7 +10250,7 @@ func (m *BakeMacaroonRequest) Reset() { *m = BakeMacaroonRequest{} } func (m *BakeMacaroonRequest) String() string { return proto.CompactTextString(m) } func (*BakeMacaroonRequest) ProtoMessage() {} func (*BakeMacaroonRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{137} + return fileDescriptor_77a6da22d6a3feb1, []int{144} } func (m *BakeMacaroonRequest) XXX_Unmarshal(b []byte) error { @@ -9867,7 +10290,7 @@ func (m *BakeMacaroonResponse) Reset() { *m = BakeMacaroonResponse{} } func (m *BakeMacaroonResponse) String() string { return proto.CompactTextString(m) } func (*BakeMacaroonResponse) ProtoMessage() {} func (*BakeMacaroonResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{138} + return fileDescriptor_77a6da22d6a3feb1, []int{145} } func (m *BakeMacaroonResponse) XXX_Unmarshal(b []byte) error { @@ -9973,6 +10396,13 @@ func init() { proto.RegisterType((*PendingUpdate)(nil), "lnrpc.PendingUpdate") proto.RegisterType((*OpenChannelRequest)(nil), "lnrpc.OpenChannelRequest") proto.RegisterType((*OpenStatusUpdate)(nil), "lnrpc.OpenStatusUpdate") + proto.RegisterType((*KeyLocator)(nil), "lnrpc.KeyLocator") + proto.RegisterType((*KeyDescriptor)(nil), "lnrpc.KeyDescriptor") + proto.RegisterType((*ChanPointShim)(nil), "lnrpc.ChanPointShim") + proto.RegisterType((*FundingShim)(nil), "lnrpc.FundingShim") + proto.RegisterType((*FundingShimCancel)(nil), "lnrpc.FundingShimCancel") + proto.RegisterType((*FundingTransitionMsg)(nil), "lnrpc.FundingTransitionMsg") + proto.RegisterType((*FundingStateStepResp)(nil), "lnrpc.FundingStateStepResp") proto.RegisterType((*PendingHTLC)(nil), "lnrpc.PendingHTLC") proto.RegisterType((*PendingChannelsRequest)(nil), "lnrpc.PendingChannelsRequest") proto.RegisterType((*PendingChannelsResponse)(nil), "lnrpc.PendingChannelsResponse") @@ -10066,600 +10496,620 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 9473 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5d, 0x6c, 0x24, 0x59, - 0x96, 0x96, 0xf3, 0xcf, 0xce, 0x3c, 0xf9, 0xe3, 0xf4, 0xf5, 0x5f, 0x56, 0xd6, 0x4f, 0xbb, 0x63, - 0x6a, 0xaa, 0xab, 0x6b, 0x7a, 0x5c, 0xd5, 0x9e, 0xee, 0xde, 0xda, 0x6e, 0x76, 0x77, 0x5c, 0xb6, - 0xab, 0xec, 0x6e, 0x97, 0xed, 0x0e, 0xbb, 0xba, 0xb6, 0x67, 0x76, 0x15, 0x13, 0xce, 0xbc, 0xb6, - 0x63, 0x2a, 0x33, 0x22, 0x3b, 0x22, 0xd2, 0x2e, 0x4f, 0xd3, 0x3c, 0x20, 0x40, 0x88, 0x17, 0x34, - 0xac, 0x90, 0x00, 0x81, 0x56, 0x9a, 0x05, 0x21, 0xc4, 0x03, 0xbc, 0x80, 0x16, 0xb4, 0x3c, 0xf1, - 0xb0, 0xbc, 0x00, 0x0f, 0x20, 0x21, 0xb1, 0x12, 0x12, 0x5a, 0x1e, 0x58, 0x21, 0xde, 0x80, 0x67, - 0x74, 0xcf, 0xfd, 0x89, 0x7b, 0x23, 0x22, 0xab, 0xdc, 0x33, 0xbd, 0xfd, 0x52, 0x95, 0xf7, 0xbb, - 0x37, 0xee, 0xef, 0x39, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0xd7, 0x50, 0x0b, 0x47, 0xbd, 0xd5, 0x51, - 0x18, 0xc4, 0x01, 0xa9, 0x0c, 0xfc, 0x70, 0xd4, 0xeb, 0xde, 0x38, 0x0d, 0x82, 0xd3, 0x01, 0xbd, - 0xef, 0x8e, 0xbc, 0xfb, 0xae, 0xef, 0x07, 0xb1, 0x1b, 0x7b, 0x81, 0x1f, 0xf1, 0x42, 0xd6, 0x4f, - 0xa0, 0xf5, 0x84, 0xfa, 0x87, 0x94, 0xf6, 0x6d, 0xfa, 0xc5, 0x98, 0x46, 0x31, 0xf9, 0x1e, 0xcc, - 0xb9, 0xf4, 0x67, 0x94, 0xf6, 0x9d, 0x91, 0x1b, 0x45, 0xa3, 0xb3, 0xd0, 0x8d, 0x68, 0xa7, 0xb0, - 0x52, 0xb8, 0xdb, 0xb0, 0xdb, 0x3c, 0xe3, 0x40, 0xe1, 0xe4, 0x4d, 0x68, 0x44, 0xac, 0x28, 0xf5, - 0xe3, 0x30, 0x18, 0x5d, 0x76, 0x8a, 0x58, 0xae, 0xce, 0xb0, 0x2d, 0x0e, 0x59, 0x03, 0x98, 0x55, - 0x2d, 0x44, 0xa3, 0xc0, 0x8f, 0x28, 0x79, 0x00, 0x0b, 0x3d, 0x6f, 0x74, 0x46, 0x43, 0x07, 0x3f, - 0x1e, 0xfa, 0x74, 0x18, 0xf8, 0x5e, 0xaf, 0x53, 0x58, 0x29, 0xdd, 0xad, 0xd9, 0x84, 0xe7, 0xb1, - 0x2f, 0x9e, 0x8a, 0x1c, 0xf2, 0x16, 0xcc, 0x52, 0x9f, 0xe3, 0xb4, 0x8f, 0x5f, 0x89, 0xa6, 0x5a, - 0x09, 0xcc, 0x3e, 0xb0, 0xfe, 0x7a, 0x11, 0xe6, 0x76, 0x7c, 0x2f, 0x7e, 0xee, 0x0e, 0x06, 0x34, - 0x96, 0x63, 0x7a, 0x0b, 0x66, 0x2f, 0x10, 0xc0, 0x31, 0x5d, 0x04, 0x61, 0x5f, 0x8c, 0xa8, 0xc5, - 0xe1, 0x03, 0x81, 0x4e, 0xec, 0x59, 0x71, 0x62, 0xcf, 0x72, 0xa7, 0xab, 0x34, 0x61, 0xba, 0xde, - 0x82, 0xd9, 0x90, 0xf6, 0x82, 0x73, 0x1a, 0x5e, 0x3a, 0x17, 0x9e, 0xdf, 0x0f, 0x2e, 0x3a, 0xe5, - 0x95, 0xc2, 0xdd, 0x8a, 0xdd, 0x92, 0xf0, 0x73, 0x44, 0xc9, 0x23, 0x98, 0xed, 0x9d, 0xb9, 0xbe, - 0x4f, 0x07, 0xce, 0xb1, 0xdb, 0x7b, 0x31, 0x1e, 0x45, 0x9d, 0xca, 0x4a, 0xe1, 0x6e, 0x7d, 0xed, - 0xda, 0x2a, 0xae, 0xea, 0xea, 0xc6, 0x99, 0xeb, 0x3f, 0xc2, 0x9c, 0x43, 0xdf, 0x1d, 0x45, 0x67, - 0x41, 0x6c, 0xb7, 0xc4, 0x17, 0x1c, 0x8e, 0xac, 0x05, 0x20, 0xfa, 0x4c, 0xf0, 0xb9, 0xb7, 0xfe, - 0x69, 0x01, 0xe6, 0x9f, 0xf9, 0x83, 0xa0, 0xf7, 0xe2, 0x97, 0x9c, 0xa2, 0x9c, 0x31, 0x14, 0xaf, - 0x3a, 0x86, 0xd2, 0xd7, 0x1d, 0xc3, 0x12, 0x2c, 0x98, 0x9d, 0x15, 0xa3, 0xa0, 0xb0, 0xc8, 0xbe, - 0x3e, 0xa5, 0xb2, 0x5b, 0x72, 0x18, 0x6f, 0x43, 0xbb, 0x37, 0x0e, 0x43, 0xea, 0x67, 0xc6, 0x31, - 0x2b, 0x70, 0x35, 0x90, 0x37, 0xa1, 0xe1, 0xd3, 0x8b, 0xa4, 0x98, 0xa0, 0x5d, 0x9f, 0x5e, 0xc8, - 0x22, 0x56, 0x07, 0x96, 0xd2, 0xcd, 0x88, 0x0e, 0xfc, 0xf7, 0x02, 0x94, 0x9f, 0xc5, 0x2f, 0x03, - 0xb2, 0x0a, 0xe5, 0xf8, 0x72, 0xc4, 0x39, 0xa4, 0xb5, 0x46, 0xc4, 0xd0, 0xd6, 0xfb, 0xfd, 0x90, - 0x46, 0xd1, 0xd1, 0xe5, 0x88, 0xda, 0x0d, 0x97, 0x27, 0x1c, 0x56, 0x8e, 0x74, 0x60, 0x46, 0xa4, - 0xb1, 0xc1, 0x9a, 0x2d, 0x93, 0xe4, 0x16, 0x80, 0x3b, 0x0c, 0xc6, 0x7e, 0xec, 0x44, 0x6e, 0x8c, - 0x53, 0x55, 0xb2, 0x35, 0x84, 0xdc, 0x80, 0xda, 0xe8, 0x85, 0x13, 0xf5, 0x42, 0x6f, 0x14, 0x23, - 0xd9, 0xd4, 0xec, 0x04, 0x20, 0xdf, 0x83, 0x6a, 0x30, 0x8e, 0x47, 0x81, 0xe7, 0xc7, 0x82, 0x54, - 0x66, 0x45, 0x5f, 0xf6, 0xc7, 0xf1, 0x01, 0x83, 0x6d, 0x55, 0x80, 0xdc, 0x86, 0x66, 0x2f, 0xf0, - 0x4f, 0xbc, 0x70, 0xc8, 0x85, 0x41, 0x67, 0x1a, 0x5b, 0x33, 0x41, 0xeb, 0x5f, 0x15, 0xa1, 0x7e, - 0x14, 0xba, 0x7e, 0xe4, 0xf6, 0x18, 0xc0, 0xba, 0x1e, 0xbf, 0x74, 0xce, 0xdc, 0xe8, 0x0c, 0x47, - 0x5b, 0xb3, 0x65, 0x92, 0x2c, 0xc1, 0x34, 0xef, 0x28, 0x8e, 0xa9, 0x64, 0x8b, 0x14, 0x79, 0x07, - 0xe6, 0xfc, 0xf1, 0xd0, 0x31, 0xdb, 0x2a, 0x21, 0xb5, 0x64, 0x33, 0xd8, 0x04, 0x1c, 0xb3, 0xb5, - 0xe6, 0x4d, 0xf0, 0x11, 0x6a, 0x08, 0xb1, 0xa0, 0x21, 0x52, 0xd4, 0x3b, 0x3d, 0xe3, 0xc3, 0xac, - 0xd8, 0x06, 0xc6, 0xea, 0x88, 0xbd, 0x21, 0x75, 0xa2, 0xd8, 0x1d, 0x8e, 0xc4, 0xb0, 0x34, 0x04, - 0xf3, 0x83, 0xd8, 0x1d, 0x38, 0x27, 0x94, 0x46, 0x9d, 0x19, 0x91, 0xaf, 0x10, 0x72, 0x07, 0x5a, - 0x7d, 0x1a, 0xc5, 0x8e, 0x58, 0x14, 0x1a, 0x75, 0xaa, 0xc8, 0xfa, 0x29, 0x94, 0xd5, 0x13, 0xba, - 0x17, 0x0e, 0x9b, 0x00, 0xfa, 0xb2, 0x53, 0xe3, 0x7d, 0x4d, 0x10, 0x46, 0x39, 0x4f, 0x68, 0xac, - 0xcd, 0x5e, 0x24, 0x28, 0xd4, 0xda, 0x05, 0xa2, 0xc1, 0x9b, 0x34, 0x76, 0xbd, 0x41, 0x44, 0x3e, - 0x80, 0x46, 0xac, 0x15, 0x46, 0x51, 0x58, 0x57, 0xe4, 0xa4, 0x7d, 0x60, 0x1b, 0xe5, 0xac, 0x33, - 0xa8, 0x3e, 0xa6, 0x74, 0xd7, 0x1b, 0x7a, 0x31, 0x59, 0x82, 0xca, 0x89, 0xf7, 0x92, 0x72, 0x82, - 0x2f, 0x6d, 0x4f, 0xd9, 0x3c, 0x49, 0xde, 0x00, 0xc0, 0x1f, 0xce, 0x50, 0x11, 0xd6, 0xf6, 0x94, - 0x5d, 0x43, 0xec, 0x29, 0xa3, 0xac, 0x2e, 0xcc, 0x8c, 0x68, 0xd8, 0xa3, 0x72, 0xfd, 0xb6, 0xa7, - 0x6c, 0x09, 0x3c, 0x9a, 0x81, 0xca, 0x80, 0xd5, 0x6e, 0xfd, 0x71, 0x05, 0xea, 0x87, 0xd4, 0x57, - 0x9c, 0x46, 0xa0, 0xcc, 0xe6, 0x44, 0x70, 0x17, 0xfe, 0x26, 0xdf, 0x81, 0x3a, 0xce, 0x53, 0x14, - 0x87, 0x9e, 0x7f, 0xca, 0x09, 0xfc, 0x51, 0xb1, 0x53, 0xb0, 0x81, 0xc1, 0x87, 0x88, 0x92, 0x36, - 0x94, 0xdc, 0xa1, 0x24, 0x70, 0xf6, 0x93, 0x5c, 0x83, 0xaa, 0x3b, 0x8c, 0x79, 0xf7, 0x1a, 0x08, - 0xcf, 0xb8, 0xc3, 0x18, 0xbb, 0xf6, 0x26, 0x34, 0x46, 0xee, 0xe5, 0x90, 0xf1, 0xb3, 0xa2, 0x8a, - 0x86, 0x5d, 0x17, 0xd8, 0x36, 0x23, 0x8b, 0x35, 0x98, 0xd7, 0x8b, 0xc8, 0xc6, 0x2b, 0xaa, 0xf1, - 0x39, 0xad, 0xb4, 0xe8, 0xc3, 0x5b, 0x30, 0x2b, 0xbf, 0x09, 0xf9, 0x78, 0x90, 0x56, 0x6a, 0x76, - 0x4b, 0xc0, 0x72, 0x94, 0x77, 0xa1, 0x7d, 0xe2, 0xf9, 0xee, 0xc0, 0xe9, 0x0d, 0xe2, 0x73, 0xa7, - 0x4f, 0x07, 0xb1, 0x8b, 0x54, 0x53, 0xb1, 0x5b, 0x88, 0x6f, 0x0c, 0xe2, 0xf3, 0x4d, 0x86, 0x92, - 0x77, 0xa0, 0x76, 0x42, 0xa9, 0x83, 0x93, 0xd5, 0xa9, 0x1a, 0x1c, 0x28, 0x57, 0xc8, 0xae, 0x9e, - 0xc8, 0xb5, 0x7a, 0x07, 0xda, 0xc1, 0x38, 0x3e, 0x0d, 0x3c, 0xff, 0xd4, 0x61, 0x32, 0xcf, 0xf1, - 0xfa, 0x48, 0x45, 0xe5, 0x47, 0xc5, 0x07, 0x05, 0xbb, 0x25, 0xf3, 0x98, 0xf4, 0xd9, 0xe9, 0x93, - 0x3b, 0x30, 0x3b, 0x70, 0xa3, 0xd8, 0x39, 0x0b, 0x46, 0xce, 0x68, 0x7c, 0xfc, 0x82, 0x5e, 0x76, - 0x9a, 0x38, 0x11, 0x4d, 0x06, 0x6f, 0x07, 0xa3, 0x03, 0x04, 0xc9, 0x4d, 0x00, 0xec, 0x27, 0xef, - 0x04, 0xac, 0x14, 0xee, 0x36, 0xed, 0x1a, 0x43, 0x78, 0xa3, 0x9f, 0xc3, 0x3c, 0x2e, 0x4f, 0x6f, - 0x1c, 0xc5, 0xc1, 0xd0, 0x61, 0xf2, 0x3a, 0xec, 0x47, 0x9d, 0x3a, 0xd2, 0xda, 0xdb, 0xa2, 0xb3, - 0xda, 0x1a, 0xaf, 0x6e, 0xd2, 0x28, 0xde, 0xc0, 0xc2, 0x36, 0x2f, 0xcb, 0x36, 0xf5, 0x4b, 0x7b, - 0xae, 0x9f, 0xc6, 0xc9, 0x3b, 0x40, 0xdc, 0xc1, 0x20, 0xb8, 0x70, 0x22, 0x3a, 0x38, 0x71, 0xc4, - 0x24, 0x76, 0x5a, 0x2b, 0x85, 0xbb, 0x55, 0xbb, 0x8d, 0x39, 0x87, 0x74, 0x70, 0x72, 0xc0, 0x71, - 0xf2, 0x01, 0x34, 0xb1, 0x23, 0x27, 0xd4, 0x8d, 0xc7, 0x21, 0x8d, 0x3a, 0xb3, 0x2b, 0xa5, 0xbb, - 0xad, 0xb5, 0x39, 0x35, 0x5f, 0x08, 0x3f, 0xf2, 0x62, 0xbb, 0xc1, 0xca, 0x89, 0x74, 0xd4, 0xdd, - 0x84, 0xa5, 0xfc, 0x2e, 0x31, 0xa2, 0x62, 0xb3, 0xc2, 0x88, 0xb1, 0x6c, 0xb3, 0x9f, 0x64, 0x01, - 0x2a, 0xe7, 0xee, 0x60, 0x4c, 0x85, 0x5c, 0xe7, 0x89, 0x0f, 0x8b, 0x0f, 0x0b, 0xd6, 0x1f, 0x16, - 0xa0, 0xc1, 0x47, 0x29, 0xf4, 0x91, 0xdb, 0xd0, 0x94, 0xd4, 0x40, 0xc3, 0x30, 0x08, 0x85, 0x78, - 0x33, 0x41, 0x72, 0x0f, 0xda, 0x12, 0x18, 0x85, 0xd4, 0x1b, 0xba, 0xa7, 0xb2, 0xee, 0x0c, 0x4e, - 0xd6, 0x92, 0x1a, 0xc3, 0x60, 0x1c, 0x53, 0xb1, 0xf3, 0x35, 0xc4, 0x00, 0x6d, 0x86, 0xd9, 0x66, - 0x11, 0x26, 0xde, 0x72, 0x48, 0xdd, 0xc0, 0xac, 0xbf, 0x5d, 0x00, 0xc2, 0xba, 0x7e, 0x14, 0xf0, - 0x2a, 0x04, 0x95, 0xa6, 0xb9, 0xa4, 0x70, 0x65, 0x2e, 0x29, 0xbe, 0x8a, 0x4b, 0x2c, 0xa8, 0xf0, - 0xde, 0x97, 0x73, 0x7a, 0xcf, 0xb3, 0x3e, 0x2e, 0x57, 0x4b, 0xed, 0xb2, 0xf5, 0x5f, 0x4b, 0xb0, - 0xb0, 0xc1, 0xb7, 0xee, 0xf5, 0x5e, 0x8f, 0x8e, 0x14, 0xff, 0xbc, 0x01, 0x75, 0x3f, 0xe8, 0x53, - 0x49, 0xb5, 0xbc, 0x63, 0xc0, 0x20, 0x8d, 0x64, 0xcf, 0x5c, 0xcf, 0xe7, 0x1d, 0xe7, 0xf3, 0x59, - 0x43, 0x04, 0xbb, 0x7d, 0x07, 0x66, 0x47, 0xd4, 0xef, 0xeb, 0x6c, 0xc2, 0x95, 0xab, 0xa6, 0x80, - 0x05, 0x87, 0xbc, 0x01, 0xf5, 0x93, 0x31, 0x2f, 0xc7, 0x84, 0x4b, 0x19, 0xe9, 0x00, 0x04, 0xb4, - 0xce, 0x65, 0xcc, 0x68, 0x1c, 0x9d, 0x61, 0x6e, 0x05, 0x73, 0x67, 0x58, 0x9a, 0x65, 0xdd, 0x04, - 0xe8, 0x8f, 0xa3, 0x58, 0x70, 0xcd, 0x34, 0x66, 0xd6, 0x18, 0xc2, 0xb9, 0xe6, 0xfb, 0x30, 0x3f, - 0x74, 0x5f, 0x3a, 0x48, 0x3f, 0x8e, 0xe7, 0x3b, 0x27, 0x03, 0xdc, 0x7d, 0x66, 0xb0, 0x5c, 0x7b, - 0xe8, 0xbe, 0xfc, 0x8c, 0xe5, 0xec, 0xf8, 0x8f, 0x11, 0x67, 0xa2, 0x45, 0xaa, 0x3d, 0x21, 0x8d, - 0x68, 0x78, 0x4e, 0x51, 0x1a, 0x94, 0x95, 0x6e, 0x63, 0x73, 0x94, 0xf5, 0x68, 0xc8, 0xc6, 0x1d, - 0x0f, 0x7a, 0x9c, 0xf5, 0xed, 0x99, 0xa1, 0xe7, 0x6f, 0xc7, 0x83, 0x1e, 0xb9, 0x01, 0xc0, 0x64, - 0xc9, 0x88, 0x86, 0xce, 0x8b, 0x0b, 0xe4, 0xe3, 0x32, 0xca, 0x8e, 0x03, 0x1a, 0x7e, 0x72, 0x41, - 0xae, 0x43, 0xad, 0x17, 0xa1, 0x30, 0x72, 0x2f, 0x3b, 0x75, 0x64, 0xf2, 0x6a, 0x2f, 0x62, 0x62, - 0xc8, 0xbd, 0x64, 0x8c, 0xc8, 0x7a, 0xeb, 0xe2, 0x2a, 0xd0, 0x3e, 0x56, 0x1f, 0xa1, 0x54, 0x6d, - 0x62, 0x67, 0xd7, 0x45, 0x06, 0x6b, 0x27, 0x22, 0xdf, 0x81, 0xa6, 0xec, 0xec, 0xc9, 0xc0, 0x3d, - 0x8d, 0x50, 0xac, 0x34, 0xed, 0x86, 0x00, 0x1f, 0x33, 0xcc, 0x7a, 0xce, 0x95, 0x2d, 0x6d, 0x6d, - 0x05, 0xdf, 0xb0, 0x6d, 0x1f, 0x11, 0x5c, 0xd7, 0xaa, 0x2d, 0x52, 0x79, 0x8b, 0x56, 0xcc, 0x59, - 0x34, 0xeb, 0x17, 0x05, 0x68, 0x88, 0x9a, 0x51, 0x43, 0x21, 0x0f, 0x80, 0xc8, 0x55, 0x8c, 0x5f, - 0x7a, 0x7d, 0xe7, 0xf8, 0x32, 0xa6, 0x11, 0x27, 0x9a, 0xed, 0x29, 0x3b, 0x27, 0x8f, 0xc9, 0x51, - 0x03, 0x8d, 0xe2, 0x90, 0xd3, 0xf4, 0xf6, 0x94, 0x9d, 0xc9, 0x61, 0x2c, 0xc6, 0x74, 0xa0, 0x71, - 0xec, 0x78, 0x7e, 0x9f, 0xbe, 0x44, 0x52, 0x6a, 0xda, 0x06, 0xf6, 0xa8, 0x05, 0x0d, 0xfd, 0x3b, - 0xeb, 0xa7, 0x50, 0x95, 0x1a, 0x14, 0x6a, 0x0f, 0xa9, 0x7e, 0xd9, 0x1a, 0x42, 0xba, 0x50, 0x35, - 0x7b, 0x61, 0x57, 0xbf, 0x4e, 0xdb, 0xd6, 0x6f, 0x42, 0x7b, 0x97, 0x11, 0x91, 0xcf, 0x88, 0x56, - 0xa8, 0x85, 0x4b, 0x30, 0xad, 0x31, 0x4f, 0xcd, 0x16, 0x29, 0xb6, 0xff, 0x9e, 0x05, 0x51, 0x2c, - 0xda, 0xc1, 0xdf, 0xd6, 0x1f, 0x17, 0x80, 0x6c, 0x45, 0xb1, 0x37, 0x74, 0x63, 0xfa, 0x98, 0x2a, - 0xf1, 0xb0, 0x0f, 0x0d, 0x56, 0xdb, 0x51, 0xb0, 0xce, 0x95, 0x34, 0xae, 0x5c, 0x7c, 0x4f, 0xb0, - 0x73, 0xf6, 0x83, 0x55, 0xbd, 0x34, 0x17, 0xf9, 0x46, 0x05, 0x8c, 0xdb, 0x62, 0x37, 0x3c, 0xa5, - 0x31, 0x6a, 0x70, 0x42, 0xff, 0x07, 0x0e, 0x6d, 0x04, 0xfe, 0x49, 0xf7, 0xb7, 0x60, 0x2e, 0x53, - 0x87, 0x2e, 0xa3, 0x6b, 0x39, 0x32, 0xba, 0xa4, 0xcb, 0xe8, 0x1e, 0xcc, 0x1b, 0xfd, 0x12, 0x14, - 0xd7, 0x81, 0x19, 0xc6, 0x18, 0x4c, 0x51, 0x28, 0x70, 0x45, 0x41, 0x24, 0xc9, 0x1a, 0x2c, 0x9c, - 0x50, 0x1a, 0xba, 0x31, 0x26, 0x91, 0x75, 0xd8, 0x9a, 0x88, 0x9a, 0x73, 0xf3, 0xac, 0x3f, 0x2d, - 0xc0, 0x2c, 0x93, 0xa6, 0x4f, 0x5d, 0xff, 0x52, 0xce, 0xd5, 0x6e, 0xee, 0x5c, 0xdd, 0xd5, 0x36, - 0x47, 0xad, 0xf4, 0xd7, 0x9d, 0xa8, 0x52, 0x7a, 0xa2, 0xc8, 0x0a, 0x34, 0x8c, 0xee, 0x56, 0xb8, - 0x46, 0x1a, 0xb9, 0xf1, 0x01, 0x0d, 0x1f, 0x5d, 0xc6, 0xf4, 0x57, 0x9f, 0xca, 0x3b, 0xd0, 0x4e, - 0xba, 0x2d, 0xe6, 0x91, 0x40, 0x99, 0x11, 0xa6, 0xa8, 0x00, 0x7f, 0x5b, 0x7f, 0xbf, 0xc0, 0x0b, - 0x6e, 0x04, 0x9e, 0xd2, 0x56, 0x59, 0x41, 0xa6, 0xf4, 0xca, 0x82, 0xec, 0xf7, 0x44, 0x6d, 0xff, - 0x57, 0x1f, 0x2c, 0x93, 0x89, 0x11, 0xf5, 0xfb, 0x8e, 0x3b, 0x18, 0xa0, 0x20, 0xae, 0xda, 0x33, - 0x2c, 0xbd, 0x3e, 0x18, 0x58, 0x6f, 0xc1, 0x9c, 0xd6, 0xbb, 0x57, 0x8c, 0x63, 0x0f, 0xc8, 0xae, - 0x17, 0xc5, 0xcf, 0xfc, 0x68, 0xa4, 0x29, 0x72, 0xd7, 0xa1, 0xc6, 0xa4, 0x2d, 0xeb, 0x19, 0xe7, - 0xdc, 0x8a, 0xcd, 0xc4, 0x2f, 0xeb, 0x57, 0x84, 0x99, 0xee, 0x4b, 0x91, 0x59, 0x14, 0x99, 0xee, - 0x4b, 0xcc, 0xb4, 0x1e, 0xc2, 0xbc, 0x51, 0x9f, 0x68, 0xfa, 0x4d, 0xa8, 0x8c, 0xe3, 0x97, 0x81, - 0x54, 0xd5, 0xeb, 0x82, 0x42, 0xd8, 0xa1, 0xd0, 0xe6, 0x39, 0xd6, 0x47, 0x30, 0xb7, 0x47, 0x2f, - 0x04, 0x23, 0xcb, 0x8e, 0xdc, 0x79, 0xed, 0x81, 0x11, 0xf3, 0xad, 0x55, 0x20, 0xfa, 0xc7, 0x09, - 0x03, 0xc8, 0xe3, 0x63, 0xc1, 0x38, 0x3e, 0x5a, 0x77, 0x80, 0x1c, 0x7a, 0xa7, 0xfe, 0x53, 0x1a, - 0x45, 0xee, 0xa9, 0x62, 0xfd, 0x36, 0x94, 0x86, 0xd1, 0xa9, 0x10, 0x55, 0xec, 0xa7, 0xf5, 0x03, - 0x98, 0x37, 0xca, 0x89, 0x8a, 0x6f, 0x40, 0x2d, 0xf2, 0x4e, 0x7d, 0x54, 0xb4, 0x44, 0xd5, 0x09, - 0x60, 0x3d, 0x86, 0x85, 0xcf, 0x68, 0xe8, 0x9d, 0x5c, 0xbe, 0xae, 0x7a, 0xb3, 0x9e, 0x62, 0xba, - 0x9e, 0x2d, 0x58, 0x4c, 0xd5, 0x23, 0x9a, 0xe7, 0xe4, 0x2b, 0x56, 0xb2, 0x6a, 0xf3, 0x84, 0x26, - 0xfb, 0x8a, 0xba, 0xec, 0xb3, 0x9e, 0x01, 0xd9, 0x08, 0x7c, 0x9f, 0xf6, 0xe2, 0x03, 0x4a, 0xc3, - 0xc4, 0x72, 0x95, 0xd0, 0x6a, 0x7d, 0x6d, 0x59, 0xcc, 0x6c, 0x5a, 0xa0, 0x0a, 0x22, 0x26, 0x50, - 0x1e, 0xd1, 0x70, 0x88, 0x15, 0x57, 0x6d, 0xfc, 0x6d, 0x2d, 0xc2, 0xbc, 0x51, 0xad, 0x38, 0xeb, - 0xbf, 0x0b, 0x8b, 0x9b, 0x5e, 0xd4, 0xcb, 0x36, 0xd8, 0x81, 0x99, 0xd1, 0xf8, 0xd8, 0x49, 0x38, - 0x51, 0x26, 0xd9, 0xf1, 0x2f, 0xfd, 0x89, 0xa8, 0xec, 0xaf, 0x15, 0xa0, 0xbc, 0x7d, 0xb4, 0xbb, - 0xc1, 0xf6, 0x0a, 0xcf, 0xef, 0x05, 0x43, 0xa6, 0x85, 0xf1, 0x41, 0xab, 0xf4, 0x44, 0x0e, 0xbb, - 0x01, 0x35, 0x54, 0xde, 0xd8, 0x89, 0x57, 0xe8, 0x41, 0x09, 0xc0, 0x4e, 0xdb, 0xf4, 0xe5, 0xc8, - 0x0b, 0xf1, 0x38, 0x2d, 0x0f, 0xc9, 0x65, 0xdc, 0x66, 0xb2, 0x19, 0xd6, 0xbf, 0x9b, 0x81, 0x19, - 0xb1, 0xf9, 0xf2, 0x8d, 0x3c, 0xf6, 0xce, 0x69, 0xb2, 0x91, 0xb3, 0x14, 0x53, 0x8c, 0x43, 0x3a, - 0x0c, 0x62, 0xa5, 0xbf, 0xf1, 0x65, 0x30, 0x41, 0xb4, 0x26, 0x08, 0x25, 0x82, 0xdb, 0x1f, 0x4a, - 0xbc, 0x94, 0x01, 0x92, 0x1b, 0x30, 0x23, 0x95, 0x81, 0xb2, 0x3a, 0xe8, 0x48, 0x88, 0xcd, 0x46, - 0xcf, 0x1d, 0xb9, 0x3d, 0x2f, 0xbe, 0x14, 0x62, 0x41, 0xa5, 0x59, 0xfd, 0x83, 0xa0, 0xe7, 0x0e, - 0x9c, 0x63, 0x77, 0xe0, 0xfa, 0x3d, 0x2a, 0xad, 0x15, 0x06, 0xc8, 0x4e, 0xee, 0xa2, 0x5b, 0xb2, - 0x18, 0x3f, 0xdd, 0xa7, 0x50, 0xb6, 0x87, 0xf7, 0x82, 0xe1, 0xd0, 0x63, 0xa7, 0x0f, 0xae, 0x9a, - 0x95, 0x6c, 0x0d, 0xe1, 0xb6, 0x11, 0x4c, 0x5d, 0xf0, 0x19, 0xac, 0x49, 0xdb, 0x88, 0x06, 0xb2, - 0x5a, 0x52, 0x1a, 0x5a, 0xc9, 0xd6, 0x10, 0xb6, 0x16, 0x63, 0x3f, 0xa2, 0x71, 0x3c, 0xa0, 0x7d, - 0xd5, 0xa1, 0x3a, 0x16, 0xcb, 0x66, 0x90, 0x07, 0x30, 0xcf, 0x6d, 0x10, 0x91, 0x1b, 0x07, 0xd1, - 0x99, 0x17, 0x39, 0x11, 0x3b, 0x3e, 0xf1, 0xb3, 0x70, 0x5e, 0x16, 0x79, 0x08, 0xcb, 0x29, 0x38, - 0xa4, 0x3d, 0xea, 0x9d, 0xd3, 0x3e, 0xaa, 0x70, 0x25, 0x7b, 0x52, 0x36, 0x59, 0x81, 0xba, 0x3f, - 0x1e, 0x3a, 0xe3, 0x51, 0xdf, 0x65, 0x4a, 0x4c, 0x0b, 0x95, 0x4b, 0x1d, 0x22, 0xef, 0x82, 0xd4, - 0xd3, 0x84, 0xf6, 0x38, 0x6b, 0x48, 0x38, 0x46, 0xbd, 0xb6, 0x59, 0x82, 0x11, 0x66, 0xa2, 0x92, - 0xb6, 0xc5, 0xb9, 0x53, 0x02, 0xc8, 0x27, 0xa1, 0x77, 0xee, 0xc6, 0xb4, 0x33, 0xc7, 0x85, 0xba, - 0x48, 0xb2, 0xef, 0x3c, 0xdf, 0x8b, 0x3d, 0x37, 0x0e, 0xc2, 0x0e, 0xc1, 0xbc, 0x04, 0x60, 0x93, - 0x88, 0xf4, 0x11, 0xc5, 0x6e, 0x3c, 0x8e, 0x84, 0x86, 0x3a, 0x8f, 0xc4, 0x95, 0xcd, 0x20, 0x1f, - 0xc0, 0x12, 0xa7, 0x08, 0xcc, 0x12, 0xba, 0x37, 0xaa, 0x0a, 0x0b, 0x38, 0x23, 0x13, 0x72, 0xd9, - 0x54, 0x0a, 0x12, 0xc9, 0x7c, 0xb8, 0xc8, 0xa7, 0x72, 0x42, 0x36, 0xeb, 0x1f, 0xeb, 0x81, 0xd7, - 0x73, 0x44, 0x09, 0xc6, 0x22, 0x4b, 0x38, 0x8a, 0x6c, 0x06, 0x23, 0xf1, 0x81, 0x77, 0x42, 0x63, - 0x6f, 0x48, 0x3b, 0xcb, 0x9c, 0xc4, 0x65, 0x9a, 0x31, 0xe0, 0x78, 0x84, 0x39, 0x1d, 0xce, 0xf0, - 0x3c, 0x85, 0xc4, 0x38, 0x08, 0x22, 0x2a, 0x2d, 0x4f, 0x9d, 0x6b, 0x82, 0xb5, 0x74, 0xd0, 0xfa, - 0xfd, 0x02, 0xdf, 0xa2, 0x04, 0x3b, 0x47, 0xda, 0xe1, 0x8b, 0x33, 0xb2, 0x13, 0xf8, 0x83, 0x4b, - 0xc1, 0xdb, 0xc0, 0xa1, 0x7d, 0x7f, 0x70, 0xc9, 0xd4, 0x7f, 0xcf, 0xd7, 0x8b, 0x70, 0x69, 0xd8, - 0x90, 0x20, 0x16, 0x7a, 0x03, 0xea, 0xa3, 0xf1, 0xf1, 0xc0, 0xeb, 0xf1, 0x22, 0x25, 0x5e, 0x0b, - 0x87, 0xb0, 0x00, 0x3b, 0x7d, 0xf2, 0xf5, 0xe4, 0x25, 0xca, 0x58, 0xa2, 0x2e, 0x30, 0x56, 0xc4, - 0x7a, 0x04, 0x0b, 0x66, 0x07, 0x85, 0xd8, 0xbf, 0x07, 0x55, 0x21, 0x25, 0xa4, 0x19, 0xa2, 0xa5, - 0x19, 0x87, 0xd9, 0x61, 0x49, 0xe5, 0x5b, 0xff, 0xba, 0x0c, 0xf3, 0x02, 0xdd, 0x60, 0xc3, 0x3f, - 0x1c, 0x0f, 0x87, 0x6e, 0x98, 0x23, 0x7e, 0x0a, 0xaf, 0x11, 0x3f, 0xc5, 0xac, 0xf8, 0xb9, 0x65, - 0x9c, 0x42, 0xb9, 0xfc, 0xd2, 0x10, 0x72, 0x17, 0x66, 0xd9, 0x94, 0xf3, 0x43, 0x81, 0x6e, 0x9f, - 0x4c, 0xc3, 0x59, 0x91, 0x59, 0xc9, 0x13, 0x99, 0xba, 0xb8, 0x9b, 0x4e, 0x89, 0x3b, 0x0b, 0x1a, - 0x7c, 0x79, 0x85, 0x04, 0x9f, 0x11, 0x47, 0x32, 0x0d, 0x63, 0xfd, 0x49, 0x0b, 0x17, 0x2e, 0xc9, - 0x66, 0xf3, 0x44, 0x8b, 0x37, 0xa4, 0xb8, 0x43, 0x68, 0xa5, 0x6b, 0x42, 0xb4, 0x64, 0xb3, 0xc8, - 0x63, 0x00, 0xde, 0x16, 0xaa, 0x29, 0x80, 0x6a, 0xca, 0x1d, 0x73, 0x55, 0xf4, 0xf9, 0x5f, 0x65, - 0x89, 0x71, 0x48, 0x51, 0x75, 0xd1, 0xbe, 0xb4, 0xfe, 0x46, 0x01, 0xea, 0x5a, 0x1e, 0x59, 0x84, - 0xb9, 0x8d, 0xfd, 0xfd, 0x83, 0x2d, 0x7b, 0xfd, 0x68, 0xe7, 0xb3, 0x2d, 0x67, 0x63, 0x77, 0xff, - 0x70, 0xab, 0x3d, 0xc5, 0xe0, 0xdd, 0xfd, 0x8d, 0xf5, 0x5d, 0xe7, 0xf1, 0xbe, 0xbd, 0x21, 0xe1, - 0x02, 0x59, 0x02, 0x62, 0x6f, 0x3d, 0xdd, 0x3f, 0xda, 0x32, 0xf0, 0x22, 0x69, 0x43, 0xe3, 0x91, - 0xbd, 0xb5, 0xbe, 0xb1, 0x2d, 0x90, 0x12, 0x59, 0x80, 0xf6, 0xe3, 0x67, 0x7b, 0x9b, 0x3b, 0x7b, - 0x4f, 0x9c, 0x8d, 0xf5, 0xbd, 0x8d, 0xad, 0xdd, 0xad, 0xcd, 0x76, 0x99, 0x34, 0xa1, 0xb6, 0xfe, - 0x68, 0x7d, 0x6f, 0x73, 0x7f, 0x6f, 0x6b, 0xb3, 0x5d, 0xb1, 0xfe, 0x5b, 0x01, 0x16, 0xb1, 0xd7, - 0xfd, 0x34, 0x93, 0xac, 0x40, 0xbd, 0x17, 0x04, 0x23, 0x76, 0x3c, 0x48, 0x36, 0x40, 0x1d, 0x62, - 0x0c, 0xc0, 0x45, 0xc7, 0x49, 0x10, 0xf6, 0xa8, 0xe0, 0x11, 0x40, 0xe8, 0x31, 0x43, 0x18, 0x03, - 0x88, 0xe5, 0xe5, 0x25, 0x38, 0x8b, 0xd4, 0x39, 0xc6, 0x8b, 0x2c, 0xc1, 0xf4, 0x71, 0x48, 0xdd, - 0xde, 0x99, 0xe0, 0x0e, 0x91, 0x22, 0x6f, 0x27, 0xe7, 0xd7, 0x1e, 0x9b, 0xfd, 0x01, 0xed, 0x23, - 0xc5, 0x54, 0xed, 0x59, 0x81, 0x6f, 0x08, 0x98, 0xc9, 0x4a, 0xf7, 0xd8, 0xf5, 0xfb, 0x81, 0x4f, - 0xfb, 0x42, 0x39, 0x4e, 0x00, 0xeb, 0x00, 0x96, 0xd2, 0xe3, 0x13, 0x3c, 0xf6, 0x81, 0xc6, 0x63, - 0x5c, 0x57, 0xed, 0x4e, 0x5e, 0x4d, 0x8d, 0xdf, 0xfe, 0xb4, 0x04, 0x65, 0xa6, 0xba, 0x4c, 0x56, - 0x73, 0x74, 0x6d, 0xb4, 0x94, 0x71, 0x66, 0xe0, 0x91, 0x98, 0x6f, 0x64, 0xc2, 0x1c, 0x93, 0x20, - 0x49, 0x7e, 0x48, 0x7b, 0xe7, 0xc2, 0x20, 0xa3, 0x21, 0x8c, 0x41, 0xd8, 0x51, 0x01, 0xbf, 0x16, - 0x0c, 0x22, 0xd3, 0x32, 0x0f, 0xbf, 0x9c, 0x49, 0xf2, 0xf0, 0xbb, 0x0e, 0xcc, 0x78, 0xfe, 0x71, - 0x30, 0xf6, 0xfb, 0xc8, 0x10, 0x55, 0x5b, 0x26, 0xd1, 0x7d, 0x82, 0x8c, 0xca, 0xa4, 0x2c, 0x27, - 0xff, 0x04, 0x20, 0x6b, 0x50, 0x8b, 0x2e, 0xfd, 0x9e, 0x4e, 0xf3, 0x0b, 0x62, 0x96, 0xd8, 0x1c, - 0xac, 0x1e, 0x5e, 0xfa, 0x3d, 0xa4, 0xf0, 0xa4, 0x18, 0x79, 0x1f, 0xaa, 0xca, 0x80, 0xc9, 0x85, - 0xd7, 0x35, 0xfd, 0x13, 0x69, 0xb5, 0xe4, 0xe7, 0x42, 0x55, 0xb4, 0xfb, 0x09, 0x34, 0x8d, 0x2c, - 0xfd, 0x30, 0xd7, 0xe4, 0x87, 0xb9, 0xdb, 0xfa, 0x61, 0x2e, 0x91, 0x89, 0xe2, 0x33, 0xfd, 0x70, - 0xf7, 0x5b, 0x50, 0x95, 0x5d, 0x63, 0xac, 0xf1, 0x6c, 0xef, 0x93, 0xbd, 0xfd, 0xe7, 0x7b, 0xce, - 0xe1, 0xe7, 0x7b, 0x1b, 0xed, 0x29, 0x32, 0x0b, 0xf5, 0xf5, 0x0d, 0xe4, 0x36, 0x04, 0x0a, 0xac, - 0xc8, 0xc1, 0xfa, 0xe1, 0xa1, 0x42, 0x8a, 0x16, 0x81, 0x36, 0x93, 0xcc, 0xac, 0xc7, 0xca, 0x45, - 0xf1, 0x01, 0xcc, 0x69, 0x58, 0x72, 0xde, 0x19, 0x31, 0x20, 0x75, 0xde, 0x41, 0xe5, 0x96, 0xe7, - 0x58, 0xcb, 0xb0, 0xc8, 0x92, 0x5b, 0xe7, 0xd4, 0x8f, 0x0f, 0xc7, 0xc7, 0xdc, 0x33, 0xe5, 0x05, - 0xbe, 0xf5, 0x57, 0x0b, 0x50, 0x53, 0x39, 0xaf, 0xa0, 0x27, 0xe9, 0x4c, 0x2b, 0xe2, 0x02, 0x74, - 0xb5, 0x26, 0xf0, 0xcb, 0x55, 0xfc, 0xd7, 0x38, 0x23, 0xd5, 0x14, 0xc4, 0x06, 0x7b, 0xb0, 0xb5, - 0x65, 0x3b, 0xfb, 0x7b, 0xbb, 0x3b, 0x7b, 0x4c, 0xb2, 0xb0, 0xc1, 0x22, 0xf0, 0xf8, 0x31, 0x22, - 0x05, 0xab, 0x0d, 0xad, 0x27, 0x34, 0xde, 0xf1, 0x4f, 0x02, 0x39, 0xd4, 0xff, 0x57, 0x81, 0x59, - 0x05, 0x25, 0x67, 0xac, 0x73, 0x1a, 0x46, 0x5e, 0xe0, 0xa3, 0x76, 0x54, 0xb3, 0x65, 0x92, 0x89, - 0x5d, 0xaf, 0x4f, 0xfd, 0xd8, 0x8b, 0x2f, 0x1d, 0xc3, 0x28, 0x93, 0x86, 0xd9, 0x79, 0xc6, 0x1d, - 0x78, 0xae, 0x74, 0xf2, 0xf1, 0x04, 0x43, 0x7b, 0xc1, 0x20, 0x08, 0x51, 0x0d, 0xaa, 0xd9, 0x3c, - 0x41, 0xd6, 0x60, 0x81, 0xa9, 0x5f, 0xba, 0xc9, 0x0c, 0x99, 0x95, 0x5b, 0x88, 0x72, 0xf3, 0x98, - 0x58, 0x67, 0xb8, 0xd8, 0xbb, 0xd5, 0x27, 0x5c, 0xdb, 0xcf, 0xcb, 0x22, 0xef, 0xc1, 0x22, 0x83, - 0xd5, 0x7e, 0xaf, 0xbe, 0x99, 0xc5, 0x6f, 0xf2, 0x33, 0x19, 0xd7, 0xf0, 0xf6, 0xd9, 0xca, 0x57, - 0xb8, 0x62, 0xa7, 0x80, 0x8c, 0x47, 0x6e, 0x9a, 0x6f, 0x55, 0x69, 0x8f, 0x9c, 0xe6, 0xd5, 0xab, - 0x66, 0xbc, 0x7a, 0xef, 0xc1, 0xe2, 0x31, 0x8d, 0x62, 0xe7, 0x8c, 0xba, 0x7d, 0x1a, 0x22, 0x37, - 0x72, 0xe7, 0x1d, 0xd7, 0x63, 0xf3, 0x33, 0x71, 0x03, 0xbc, 0xf4, 0x7b, 0xb4, 0xef, 0xc4, 0x81, - 0x83, 0x1b, 0x35, 0xf2, 0x74, 0xd5, 0x4e, 0xc3, 0x66, 0xc9, 0xd3, 0xd0, 0x1d, 0x9d, 0x09, 0x45, - 0x33, 0x0d, 0x33, 0x15, 0x21, 0xa6, 0x51, 0xec, 0x53, 0xee, 0x3a, 0xa9, 0xa2, 0x59, 0x5c, 0x42, - 0xe4, 0x36, 0x4c, 0x63, 0x85, 0x51, 0xa7, 0x8d, 0x0c, 0xd0, 0x48, 0x84, 0xa8, 0xe7, 0xdb, 0x22, - 0x8f, 0x1d, 0x2b, 0xc7, 0xa1, 0x17, 0x75, 0x1a, 0xe8, 0x35, 0xc4, 0xdf, 0xe4, 0x87, 0x9a, 0x9c, - 0x98, 0xc7, 0x6f, 0x6f, 0x8b, 0x6f, 0x53, 0x94, 0xf7, 0xad, 0x88, 0x8c, 0x8f, 0xcb, 0xd5, 0x7a, - 0xbb, 0x61, 0xfd, 0x1a, 0x54, 0xb0, 0xe7, 0x48, 0x93, 0x38, 0x7f, 0x05, 0x41, 0x93, 0x88, 0x76, - 0x60, 0xc6, 0xa7, 0xf1, 0x45, 0x10, 0xbe, 0x90, 0x6e, 0x6a, 0x91, 0xb4, 0x7e, 0x86, 0x67, 0x6f, - 0xe5, 0xb6, 0x7d, 0x86, 0x87, 0x06, 0x72, 0x1d, 0x6a, 0x7c, 0x4d, 0xa3, 0x33, 0x57, 0x98, 0x03, - 0xaa, 0x08, 0x1c, 0x9e, 0xb9, 0x6c, 0x7f, 0x34, 0xc8, 0x84, 0x5b, 0x58, 0xea, 0x88, 0x6d, 0x73, - 0x2a, 0xb9, 0x0d, 0x2d, 0xe9, 0x10, 0x8e, 0x9c, 0x01, 0x3d, 0x89, 0xa5, 0x7d, 0xd4, 0x1f, 0x0f, - 0xd1, 0x0c, 0xb3, 0x4b, 0x4f, 0x62, 0x6b, 0x0f, 0xe6, 0xc4, 0x9e, 0xb5, 0x3f, 0xa2, 0xb2, 0xe9, - 0x5f, 0xcf, 0xd3, 0xff, 0xea, 0x6b, 0xf3, 0xe6, 0x26, 0xc7, 0x5d, 0xe0, 0x66, 0x49, 0xcb, 0x06, - 0xa2, 0xef, 0x81, 0xa2, 0x42, 0xa1, 0x80, 0x49, 0x0b, 0xb0, 0x18, 0x8e, 0x81, 0xb1, 0xf9, 0x89, - 0xc6, 0xbd, 0x9e, 0x74, 0xe3, 0x57, 0x6d, 0x99, 0xb4, 0xfe, 0x73, 0x01, 0xe6, 0xb1, 0x36, 0xa9, - 0xc1, 0x0a, 0x3d, 0xe3, 0xe1, 0xd7, 0xe8, 0xa6, 0xb4, 0xbf, 0x73, 0xab, 0xf3, 0x02, 0x54, 0x74, - 0xcd, 0x83, 0x27, 0xbe, 0xbe, 0xb5, 0xad, 0x9c, 0xb1, 0xb6, 0xdd, 0x83, 0x76, 0x9f, 0x0e, 0x3c, - 0x0c, 0xe5, 0x90, 0xfb, 0x38, 0x57, 0x57, 0x33, 0xb8, 0xf5, 0x77, 0x0a, 0x30, 0xc7, 0x15, 0x05, - 0x3c, 0x73, 0x89, 0xa9, 0xfa, 0x0b, 0xf2, 0x7c, 0x22, 0x04, 0x94, 0x18, 0x54, 0xb2, 0x75, 0x22, - 0xca, 0x0b, 0x6f, 0x4f, 0xd9, 0x66, 0x61, 0xf2, 0x11, 0x6a, 0xdd, 0xbe, 0x83, 0x68, 0x4e, 0x70, - 0x88, 0xb9, 0x2e, 0xdb, 0x53, 0xb6, 0x56, 0xfc, 0x51, 0x95, 0x1d, 0x99, 0x18, 0x6e, 0x3d, 0x81, - 0xa6, 0xd1, 0x90, 0x61, 0x15, 0x6c, 0x70, 0xab, 0x60, 0xc6, 0xfc, 0x5e, 0xcc, 0x31, 0xbf, 0xff, - 0x49, 0x09, 0x08, 0x23, 0xac, 0xd4, 0xca, 0xad, 0x98, 0x3e, 0x2c, 0x19, 0x27, 0x92, 0x40, 0x64, - 0x0d, 0x88, 0x96, 0x94, 0xbe, 0xb5, 0x92, 0xf2, 0xad, 0xe5, 0xe4, 0x32, 0xa9, 0x2f, 0xb4, 0x4a, - 0xe5, 0xb7, 0x42, 0x8b, 0x0f, 0x5f, 0xa6, 0xdc, 0x3c, 0xa6, 0xf9, 0xa0, 0x13, 0x8b, 0x9d, 0x4d, - 0x85, 0x95, 0x44, 0xa6, 0xd3, 0xf4, 0x30, 0xfd, 0x5a, 0x7a, 0x98, 0xc9, 0xd0, 0x83, 0x76, 0x4e, - 0xaf, 0x9a, 0xe7, 0xf4, 0xdb, 0xd0, 0x94, 0xbe, 0x2a, 0xee, 0xa6, 0x17, 0x46, 0x11, 0x03, 0x64, - 0xf4, 0x24, 0x8f, 0xca, 0xca, 0x18, 0xc0, 0x9d, 0xd0, 0x19, 0x9c, 0x6d, 0x2c, 0x89, 0x3d, 0xb6, - 0x8e, 0x9d, 0x4d, 0x00, 0x3c, 0x59, 0x33, 0x2a, 0x71, 0xc6, 0xbe, 0x88, 0x11, 0xa1, 0x7d, 0x34, - 0x87, 0xb0, 0x93, 0x75, 0x3a, 0x23, 0x7b, 0x4a, 0x6e, 0xe6, 0x9d, 0x92, 0xff, 0x56, 0x01, 0xda, - 0x6c, 0x75, 0x0d, 0x02, 0xfe, 0x10, 0x90, 0xd7, 0xae, 0x48, 0xbf, 0x46, 0x59, 0xf2, 0x10, 0x6a, - 0x98, 0x0e, 0x46, 0xd4, 0x17, 0xd4, 0xdb, 0x31, 0xa9, 0x37, 0x91, 0x52, 0xdb, 0x53, 0x76, 0x52, - 0x58, 0xa3, 0xdd, 0xff, 0x58, 0x80, 0xba, 0x68, 0xe5, 0x97, 0xb6, 0x0a, 0x76, 0xb5, 0xd0, 0x1f, - 0xae, 0x86, 0x27, 0x91, 0x3e, 0x77, 0x61, 0x76, 0xc8, 0x76, 0x00, 0xa6, 0x9a, 0x18, 0x16, 0xc1, - 0x34, 0xcc, 0x34, 0x0a, 0x14, 0xc8, 0x91, 0x13, 0x7b, 0x03, 0x47, 0xe6, 0x8a, 0x20, 0x9b, 0xbc, - 0x2c, 0x26, 0x97, 0xa2, 0xd8, 0x3d, 0xa5, 0x62, 0xdb, 0xe7, 0x09, 0xab, 0x03, 0x4b, 0x07, 0x89, - 0x97, 0x4f, 0x3b, 0x69, 0x59, 0xff, 0xac, 0x09, 0xcb, 0x99, 0x2c, 0x15, 0x12, 0x28, 0xcc, 0x5c, - 0x03, 0x6f, 0x78, 0x1c, 0xa8, 0x63, 0x6a, 0x41, 0xb7, 0x80, 0x19, 0x59, 0xe4, 0x14, 0x16, 0xa5, - 0x56, 0xc4, 0xe6, 0x34, 0xd1, 0x67, 0x8a, 0xb8, 0xc5, 0xbe, 0x6b, 0x2e, 0x61, 0xba, 0x41, 0x89, - 0xeb, 0xec, 0x9e, 0x5f, 0x1f, 0x39, 0x83, 0x8e, 0x52, 0xbf, 0xc4, 0x16, 0xa0, 0xa9, 0x68, 0xac, - 0xad, 0x77, 0x5e, 0xd3, 0x96, 0x71, 0x30, 0xb3, 0x27, 0xd6, 0x46, 0x2e, 0xe1, 0x96, 0xcc, 0x43, - 0x19, 0x9f, 0x6d, 0xaf, 0x7c, 0xa5, 0xb1, 0xe1, 0x91, 0xd3, 0x6c, 0xf4, 0x35, 0x15, 0x93, 0x9f, - 0xc2, 0xd2, 0x85, 0xeb, 0xc5, 0xb2, 0x5b, 0x9a, 0x7a, 0x58, 0xc1, 0x26, 0xd7, 0x5e, 0xd3, 0xe4, - 0x73, 0xfe, 0xb1, 0xb1, 0xf1, 0x4d, 0xa8, 0xb1, 0xfb, 0x47, 0x45, 0x68, 0x99, 0xf5, 0x30, 0x32, - 0x15, 0x12, 0x42, 0x4a, 0x4a, 0xa9, 0x58, 0xa7, 0xe0, 0xac, 0xb5, 0xa7, 0x98, 0x67, 0xed, 0xd1, - 0xed, 0x2b, 0xa5, 0xd7, 0x99, 0x93, 0xcb, 0x57, 0x33, 0x27, 0x57, 0x72, 0xcd, 0xc9, 0x93, 0xad, - 0x8e, 0xd3, 0xbf, 0xac, 0xd5, 0x71, 0xe6, 0x95, 0x56, 0xc7, 0xee, 0xff, 0x2d, 0x00, 0xc9, 0x52, - 0x2f, 0x79, 0xc2, 0x0d, 0x5c, 0x3e, 0x1d, 0x08, 0x21, 0xf6, 0xfd, 0xab, 0x71, 0x80, 0x5c, 0x2d, - 0xf9, 0x35, 0x63, 0x45, 0x3d, 0x2e, 0x4f, 0x57, 0xda, 0x9a, 0x76, 0x5e, 0x56, 0xca, 0xa4, 0x5e, - 0x7e, 0xbd, 0x49, 0xbd, 0xf2, 0x7a, 0x93, 0xfa, 0x74, 0xda, 0xa4, 0xde, 0xfd, 0x2b, 0x05, 0x98, - 0xcf, 0x21, 0xb3, 0x6f, 0x6e, 0xe0, 0x8c, 0x30, 0x0c, 0xe9, 0x53, 0x14, 0x84, 0xa1, 0x83, 0xdd, - 0xbf, 0x08, 0x4d, 0x83, 0xb5, 0xbe, 0xb9, 0xf6, 0xd3, 0x7a, 0x27, 0xa7, 0x6c, 0x03, 0xeb, 0xfe, - 0xaf, 0x22, 0x90, 0x2c, 0x7b, 0x7f, 0xab, 0x7d, 0xc8, 0xce, 0x53, 0x29, 0x67, 0x9e, 0xfe, 0x5c, - 0x77, 0x9e, 0x77, 0x60, 0x4e, 0x04, 0x1b, 0x6b, 0x26, 0x4d, 0x4e, 0x31, 0xd9, 0x0c, 0xa6, 0x79, - 0x9b, 0xfe, 0x8c, 0xaa, 0x11, 0x5c, 0xa9, 0x6d, 0xbf, 0x29, 0xb7, 0x86, 0xd5, 0x85, 0x8e, 0x98, - 0xa1, 0xac, 0x4d, 0xe3, 0x5f, 0x94, 0xd4, 0xe1, 0x01, 0x33, 0x85, 0x42, 0xf1, 0x1e, 0x34, 0xf4, - 0xed, 0x43, 0x2c, 0x47, 0xca, 0xaa, 0xcd, 0x54, 0x09, 0xbd, 0x14, 0xd9, 0x84, 0x16, 0x0a, 0xc9, - 0xbe, 0xfa, 0x8e, 0x1f, 0xe3, 0x5e, 0x61, 0xa9, 0xdb, 0x9e, 0xb2, 0x53, 0xdf, 0x90, 0xdf, 0x80, - 0x96, 0x79, 0x7e, 0x17, 0x5a, 0x49, 0xde, 0x19, 0x83, 0x7d, 0x6e, 0x16, 0x26, 0xeb, 0xd0, 0x4e, - 0x1b, 0x00, 0x44, 0xe4, 0xd7, 0x84, 0x0a, 0x32, 0xc5, 0xc9, 0x43, 0x61, 0xc0, 0xa9, 0xa0, 0x01, - 0xe7, 0xb6, 0xf9, 0x99, 0x36, 0x4d, 0xab, 0xfc, 0x3f, 0xcd, 0x94, 0xf3, 0x3b, 0x00, 0x09, 0x46, - 0xda, 0xd0, 0xd8, 0x3f, 0xd8, 0xda, 0x73, 0x36, 0xb6, 0xd7, 0xf7, 0xf6, 0xb6, 0x76, 0xdb, 0x53, - 0x84, 0x40, 0x0b, 0x0d, 0xbe, 0x9b, 0x0a, 0x2b, 0x30, 0x4c, 0x98, 0xb7, 0x24, 0x56, 0x24, 0x0b, - 0xd0, 0xde, 0xd9, 0x4b, 0xa1, 0xa5, 0x47, 0x35, 0xc5, 0x1f, 0xd6, 0x12, 0x2c, 0xf0, 0x60, 0xf2, - 0x47, 0x9c, 0x3c, 0xa4, 0x76, 0xf2, 0x0f, 0x0a, 0xb0, 0x98, 0xca, 0x48, 0xc2, 0x03, 0xb9, 0x02, - 0x62, 0x6a, 0x25, 0x26, 0x88, 0xce, 0x2a, 0xa9, 0x91, 0xa6, 0x24, 0x48, 0x36, 0x83, 0xd1, 0xbc, - 0xa6, 0xc1, 0xa6, 0x38, 0x29, 0x2f, 0xcb, 0x5a, 0x56, 0x51, 0x58, 0xa9, 0x8e, 0x9f, 0xf0, 0x20, - 0x75, 0x3d, 0x23, 0x31, 0x64, 0x99, 0x5d, 0x96, 0x49, 0x76, 0xf8, 0x30, 0x94, 0x1d, 0xb3, 0xbf, - 0xb9, 0x79, 0xd6, 0xff, 0x2e, 0x03, 0xf9, 0x74, 0x4c, 0xc3, 0x4b, 0x8c, 0xff, 0x53, 0xf6, 0xf3, - 0xe5, 0xb4, 0x35, 0x6f, 0x7a, 0x34, 0x3e, 0xfe, 0x84, 0x5e, 0xca, 0x38, 0xdf, 0xe2, 0x95, 0xe2, - 0x7c, 0xf3, 0xe2, 0x6c, 0xcb, 0xaf, 0x8f, 0xb3, 0xad, 0xbc, 0x2e, 0xce, 0xf6, 0x3b, 0xd0, 0xf4, - 0x4e, 0xfd, 0x80, 0x89, 0x03, 0xa6, 0x42, 0x44, 0x9d, 0xe9, 0x95, 0x12, 0x3b, 0xcc, 0x0b, 0x70, - 0x8f, 0x61, 0xe4, 0xa3, 0xa4, 0x10, 0xed, 0x9f, 0x62, 0x5c, 0xb8, 0x2e, 0x20, 0xb6, 0xfa, 0xa7, - 0x74, 0x37, 0xe8, 0xb9, 0x71, 0x10, 0xe2, 0x69, 0x4e, 0x7e, 0xcc, 0xf0, 0x88, 0xdc, 0x86, 0x56, - 0x14, 0x8c, 0x99, 0x52, 0x25, 0xa7, 0x81, 0xdb, 0xb8, 0x1a, 0x1c, 0x3d, 0xe0, 0x93, 0xb1, 0x0a, - 0xf3, 0xe3, 0x88, 0x3a, 0x43, 0x2f, 0x8a, 0xd8, 0xc6, 0xd9, 0x0b, 0xfc, 0x38, 0x0c, 0x06, 0xc2, - 0x66, 0x35, 0x37, 0x8e, 0xe8, 0x53, 0x9e, 0xb3, 0xc1, 0x33, 0xc8, 0x7b, 0x49, 0x97, 0x46, 0xae, - 0x17, 0x46, 0x1d, 0xc0, 0x2e, 0xc9, 0x91, 0xb2, 0x7e, 0x1f, 0xb8, 0x5e, 0xa8, 0xfa, 0xc2, 0x12, - 0x51, 0x2a, 0xfe, 0xb7, 0x9e, 0x8e, 0xff, 0xfd, 0x49, 0x7e, 0xfc, 0x6f, 0x13, 0xab, 0x7e, 0x20, - 0xaa, 0xce, 0x2e, 0xf1, 0xd5, 0xc3, 0x80, 0xbf, 0x99, 0x00, 0x5d, 0x11, 0x53, 0xba, 0x0a, 0x55, - 0x39, 0x4c, 0x76, 0xa2, 0x3f, 0x09, 0x83, 0xa1, 0x3c, 0xd1, 0xb3, 0xdf, 0xa4, 0x05, 0xc5, 0x38, - 0x10, 0x1f, 0x17, 0xe3, 0xc0, 0xfa, 0x5d, 0xa8, 0x6b, 0x2b, 0x45, 0xde, 0xe4, 0xc6, 0x05, 0xa6, - 0x13, 0x0a, 0x53, 0x00, 0xf7, 0xf9, 0xd5, 0x04, 0xba, 0xd3, 0x27, 0xdf, 0x83, 0xb9, 0xbe, 0x17, - 0x52, 0x0c, 0xa5, 0x77, 0x42, 0x7a, 0x4e, 0xc3, 0x48, 0x1a, 0x59, 0xda, 0x2a, 0xc3, 0xe6, 0xb8, - 0xe5, 0xc0, 0xbc, 0x31, 0x35, 0x4a, 0x38, 0x4c, 0x63, 0x20, 0xac, 0xb4, 0x8b, 0x9b, 0x41, 0xb2, - 0x22, 0x8f, 0x6d, 0xab, 0xc2, 0x3e, 0xe4, 0x8c, 0xc2, 0xe0, 0x18, 0x1b, 0x29, 0xd8, 0x06, 0x66, - 0xfd, 0xcf, 0x12, 0x94, 0xb6, 0x83, 0x91, 0xee, 0xa9, 0x2c, 0x64, 0x3d, 0x95, 0x42, 0xff, 0x75, - 0x94, 0x7a, 0x2b, 0x94, 0x14, 0x03, 0x24, 0xf7, 0xa0, 0xc5, 0x38, 0x2d, 0x0e, 0x98, 0xbe, 0x7f, - 0xe1, 0x86, 0x3c, 0x6a, 0xb6, 0x84, 0xe4, 0x9b, 0xca, 0x21, 0x0b, 0x50, 0x52, 0x6a, 0x1b, 0x16, - 0x60, 0x49, 0x76, 0xd8, 0xc4, 0x98, 0x91, 0x4b, 0x61, 0xf5, 0x15, 0x29, 0x26, 0xb8, 0xcc, 0xef, - 0x39, 0x3b, 0xf3, 0xcd, 0x37, 0x2f, 0x8b, 0xe9, 0xe2, 0x8c, 0x61, 0x87, 0x89, 0x6a, 0xab, 0xd2, - 0xba, 0x2b, 0xa0, 0x6a, 0xba, 0x02, 0x56, 0xa0, 0x1e, 0x0f, 0xce, 0x9d, 0x91, 0x7b, 0x39, 0x08, - 0xdc, 0xbe, 0x60, 0x14, 0x1d, 0x22, 0x0f, 0x00, 0x86, 0xa3, 0x91, 0xa0, 0x62, 0xb4, 0x33, 0xd4, - 0xd7, 0xda, 0x62, 0xf6, 0x9f, 0x1e, 0x1c, 0x70, 0xea, 0xb3, 0xb5, 0x32, 0x64, 0x0b, 0x5a, 0xb9, - 0xa1, 0xef, 0x37, 0x65, 0x64, 0x43, 0x30, 0x5a, 0xcd, 0xa1, 0xf3, 0xd4, 0x47, 0xdd, 0x1f, 0x02, - 0xf9, 0x15, 0x23, 0xd0, 0x9f, 0x43, 0x4d, 0xf5, 0x50, 0x8f, 0xfb, 0xc6, 0xf0, 0xa5, 0xba, 0x19, - 0xf7, 0x8d, 0xd1, 0x4a, 0x77, 0xa0, 0xc5, 0x77, 0x1b, 0x25, 0x3f, 0x79, 0xc8, 0x49, 0x0a, 0xb5, - 0xfe, 0xac, 0x00, 0x15, 0xa4, 0x3c, 0xa6, 0x7e, 0xf1, 0x3c, 0xe5, 0xe2, 0x15, 0xd6, 0xe2, 0x34, - 0x4c, 0x2c, 0xe3, 0x4a, 0x4c, 0x51, 0x91, 0x81, 0x7e, 0x2d, 0x66, 0x05, 0x6a, 0xaa, 0x25, 0x8d, - 0x94, 0x12, 0x90, 0xdc, 0x82, 0xf2, 0x59, 0x30, 0x92, 0x27, 0x54, 0x48, 0x66, 0xd4, 0x46, 0x3c, - 0xe9, 0x0f, 0xab, 0x8f, 0x0f, 0x81, 0x9f, 0x02, 0xd2, 0x70, 0xce, 0x58, 0xa7, 0x73, 0xc7, 0xfa, - 0x0c, 0x66, 0x99, 0x7c, 0xd0, 0xbc, 0x39, 0x93, 0xf7, 0xa2, 0xb7, 0x99, 0x6a, 0xd3, 0x1b, 0x8c, - 0xfb, 0x54, 0xb7, 0x13, 0xa0, 0x17, 0x40, 0xe0, 0x52, 0x43, 0xb6, 0xfe, 0x79, 0x81, 0xcb, 0x1d, - 0x56, 0x2f, 0xb9, 0x0b, 0x65, 0xb6, 0x6d, 0xa4, 0xcc, 0x42, 0x2a, 0xa4, 0x8c, 0x95, 0xb3, 0xb1, - 0x04, 0x5b, 0x45, 0x34, 0x60, 0xeb, 0xb5, 0x73, 0xf3, 0x75, 0x72, 0xc8, 0x56, 0x23, 0x4b, 0x9d, - 0x4d, 0x53, 0x28, 0x59, 0xd5, 0x3c, 0xb6, 0x65, 0x63, 0x2b, 0x92, 0x9a, 0x54, 0xff, 0x94, 0x6a, - 0x9e, 0xda, 0x7f, 0x59, 0x84, 0xa6, 0xd1, 0x27, 0xc6, 0x3d, 0x78, 0x61, 0x84, 0x5b, 0x99, 0xc4, - 0xca, 0xeb, 0x90, 0xce, 0x79, 0x45, 0x93, 0xf3, 0x94, 0xeb, 0xaa, 0xa4, 0xbb, 0xae, 0x1e, 0x40, - 0x2d, 0xb9, 0x13, 0x65, 0x76, 0x8a, 0xb5, 0x28, 0x83, 0xeb, 0x92, 0x42, 0x89, 0xb3, 0xab, 0xa2, - 0x3b, 0xbb, 0x7e, 0x53, 0x73, 0x86, 0x4c, 0x63, 0x35, 0x56, 0xde, 0xac, 0x7e, 0x3b, 0xde, 0xd3, - 0x8f, 0xa0, 0xae, 0x75, 0x5e, 0x77, 0x7a, 0x14, 0x0c, 0xa7, 0x87, 0x0a, 0x83, 0x2d, 0x26, 0x61, - 0xb0, 0xd6, 0xcf, 0x8b, 0xd0, 0x64, 0xbc, 0xe6, 0xf9, 0xa7, 0x07, 0xc1, 0xc0, 0xeb, 0x5d, 0x22, - 0x8d, 0x4b, 0xb6, 0x12, 0x3a, 0x8c, 0xe4, 0x39, 0x13, 0x66, 0x32, 0x51, 0xc5, 0xfe, 0x73, 0x01, - 0xae, 0xd2, 0x4c, 0xc2, 0x33, 0xf9, 0x78, 0xec, 0x46, 0x54, 0xbb, 0xb1, 0x65, 0x9b, 0x20, 0x93, - 0xc3, 0x0c, 0xc0, 0xa0, 0xe6, 0xa1, 0x37, 0x18, 0x78, 0xbc, 0x2c, 0x3f, 0x7c, 0xe7, 0x65, 0xb1, - 0x36, 0xfb, 0x5e, 0xe4, 0x1e, 0x27, 0x21, 0x06, 0x2a, 0x8d, 0xf6, 0x5d, 0xf7, 0xa5, 0x66, 0xdf, - 0xe5, 0xb7, 0x20, 0x4c, 0x30, 0x4d, 0x55, 0x33, 0x19, 0xaa, 0xb2, 0xfe, 0x6d, 0x11, 0xea, 0x1a, - 0x8d, 0x32, 0xd9, 0x92, 0xbb, 0x09, 0x6b, 0xa8, 0x88, 0xbd, 0xf1, 0x0d, 0x73, 0x8e, 0x86, 0x90, - 0xdb, 0x66, 0xab, 0xe8, 0x17, 0x42, 0xe9, 0x63, 0xd0, 0xf3, 0x0d, 0xa8, 0x31, 0x3e, 0x7c, 0x17, - 0x6d, 0x47, 0xe2, 0x76, 0xa4, 0x02, 0x64, 0xee, 0x1a, 0xe6, 0x56, 0x92, 0x5c, 0x04, 0x5e, 0x19, - 0x8d, 0xf3, 0x10, 0x1a, 0xa2, 0x1a, 0x5c, 0x63, 0x1c, 0x74, 0x22, 0x09, 0x8c, 0xf5, 0xb7, 0x8d, - 0x92, 0xf2, 0xcb, 0x35, 0xf9, 0x65, 0xf5, 0x75, 0x5f, 0xca, 0x92, 0xd6, 0x13, 0x15, 0xe8, 0xf4, - 0x24, 0x74, 0x47, 0x67, 0x52, 0xba, 0x3d, 0x80, 0x79, 0x29, 0xc4, 0xc6, 0xbe, 0xeb, 0xfb, 0xc1, - 0xd8, 0xef, 0x51, 0x19, 0x31, 0x9b, 0x97, 0x65, 0xf5, 0xd5, 0xfd, 0x0a, 0xac, 0x88, 0xdc, 0x83, - 0x0a, 0xd7, 0x82, 0xb9, 0xae, 0x92, 0x2f, 0xcf, 0x78, 0x11, 0x72, 0x17, 0x2a, 0x5c, 0x19, 0x2e, - 0x4e, 0x94, 0x40, 0xbc, 0x80, 0xb5, 0x0a, 0xb3, 0x78, 0xa1, 0x43, 0x13, 0xc4, 0xd7, 0xf3, 0x74, - 0x98, 0xe9, 0x1e, 0xbf, 0xf6, 0xb1, 0x00, 0x64, 0x8f, 0xf3, 0x95, 0xee, 0x89, 0xff, 0xb3, 0x12, - 0xd4, 0x35, 0x98, 0x09, 0x4b, 0x74, 0xcb, 0x3a, 0x7d, 0xcf, 0x1d, 0xd2, 0x98, 0x86, 0x82, 0x97, - 0x52, 0x28, 0x2b, 0xe7, 0x9e, 0x9f, 0x3a, 0xc1, 0x38, 0x76, 0xfa, 0xf4, 0x34, 0xa4, 0x54, 0x28, - 0x57, 0x29, 0x94, 0x95, 0x63, 0xd4, 0xac, 0x95, 0xe3, 0x1e, 0xc6, 0x14, 0x2a, 0x3d, 0xde, 0x7c, - 0x9e, 0xca, 0x89, 0xc7, 0x9b, 0xcf, 0x4a, 0x5a, 0xcc, 0x57, 0x72, 0xc4, 0xfc, 0x07, 0xb0, 0xc4, - 0x05, 0xba, 0x90, 0x1e, 0x4e, 0x8a, 0xb8, 0x26, 0xe4, 0x92, 0x7b, 0xd0, 0x66, 0x7d, 0x96, 0xac, - 0x11, 0x79, 0x3f, 0xe3, 0x3c, 0x56, 0xb0, 0x33, 0x38, 0x2b, 0x8b, 0xde, 0x12, 0xbd, 0x2c, 0x8f, - 0x00, 0xcb, 0xe0, 0x58, 0xd6, 0x7d, 0x69, 0x96, 0xad, 0x89, 0xb2, 0x29, 0x9c, 0x3c, 0x84, 0xe5, - 0x21, 0xed, 0x7b, 0xae, 0x59, 0x85, 0x93, 0x68, 0x1c, 0x93, 0xb2, 0x59, 0x2b, 0x6c, 0x16, 0x7e, - 0x16, 0x0c, 0x8f, 0x3d, 0xbe, 0xcb, 0x72, 0xbf, 0x4e, 0xd9, 0xce, 0xe0, 0x56, 0x13, 0xea, 0x87, - 0x71, 0x30, 0x92, 0x4b, 0xdf, 0x82, 0x06, 0x4f, 0x8a, 0x18, 0xe9, 0xeb, 0x70, 0x0d, 0xe9, 0xf5, - 0x28, 0x18, 0x05, 0x83, 0xe0, 0xf4, 0xd2, 0xb0, 0xbb, 0xfc, 0xfb, 0x02, 0xcc, 0x1b, 0xb9, 0x89, - 0xe1, 0x05, 0x8d, 0xc4, 0x32, 0xb0, 0x95, 0x93, 0xf8, 0x9c, 0xb6, 0x47, 0xf1, 0x82, 0xdc, 0x73, - 0xf7, 0x4c, 0xc4, 0xba, 0xae, 0x27, 0xb7, 0xb5, 0xe4, 0x87, 0x9c, 0xde, 0x3b, 0x59, 0x7a, 0x17, - 0xdf, 0xcb, 0x7b, 0x5c, 0xb2, 0x8a, 0xdf, 0x10, 0xf1, 0x7a, 0x7d, 0x31, 0xe8, 0x92, 0x19, 0x63, - 0xa5, 0xdb, 0xe9, 0x64, 0x0f, 0x7a, 0x0a, 0x8c, 0xac, 0x5f, 0x14, 0x00, 0x92, 0xde, 0x61, 0x94, - 0x97, 0xda, 0x67, 0xf9, 0x83, 0x08, 0xda, 0x9e, 0xfa, 0x26, 0x34, 0x54, 0xa4, 0x49, 0xb2, 0x75, - 0xd7, 0x25, 0xc6, 0x54, 0x9d, 0xb7, 0x60, 0xf6, 0x74, 0x10, 0x1c, 0xa3, 0x4a, 0x25, 0xf6, 0x59, - 0x1e, 0x29, 0xde, 0xe2, 0xb0, 0xdc, 0x3d, 0x93, 0x7d, 0xbe, 0x9c, 0x1b, 0xa2, 0xa2, 0xef, 0xda, - 0x6c, 0xaf, 0x9b, 0xcb, 0xcc, 0xc4, 0x2b, 0xb9, 0x9c, 0xac, 0x65, 0xc4, 0xfa, 0x04, 0x67, 0x37, - 0x1e, 0xc8, 0x0e, 0x5e, 0x6b, 0xb6, 0xff, 0x08, 0x5a, 0x21, 0x97, 0x99, 0x52, 0xa0, 0x96, 0x5f, - 0x21, 0x50, 0x9b, 0xa1, 0xb1, 0x33, 0xbf, 0x0d, 0x6d, 0xb7, 0x7f, 0x4e, 0xc3, 0xd8, 0x43, 0x33, - 0x26, 0xea, 0x74, 0x7c, 0x80, 0xb3, 0x1a, 0x8e, 0xaa, 0xd3, 0x5b, 0x30, 0x2b, 0xe2, 0xf6, 0x55, - 0x49, 0x71, 0x35, 0x38, 0x81, 0x59, 0x41, 0xeb, 0x1f, 0x4b, 0x47, 0xbf, 0xb9, 0xba, 0xaf, 0x9e, - 0x15, 0x7d, 0x84, 0xc5, 0xd4, 0x08, 0xbf, 0x23, 0xdc, 0x98, 0x7d, 0x69, 0x2f, 0x2d, 0x69, 0x91, - 0x9f, 0x7d, 0x11, 0x28, 0x61, 0x4e, 0x6b, 0xf9, 0x2a, 0xd3, 0x6a, 0xfd, 0x97, 0x02, 0xcc, 0x6c, - 0x07, 0xa3, 0x6d, 0x8f, 0x07, 0x5f, 0x21, 0x9b, 0xa8, 0x4b, 0x33, 0x32, 0xf9, 0x9a, 0x08, 0xd9, - 0x5c, 0xad, 0xa4, 0x99, 0xd6, 0x4a, 0x7e, 0x08, 0xd7, 0xd1, 0x62, 0x1f, 0x06, 0xa3, 0x20, 0x64, - 0xec, 0xea, 0x0e, 0xb8, 0x0a, 0x12, 0xf8, 0xf1, 0x99, 0x14, 0xa7, 0xaf, 0x2a, 0x82, 0x66, 0xb4, - 0x41, 0x7c, 0xee, 0xf0, 0xe3, 0xa6, 0xd0, 0xa2, 0xb8, 0x94, 0xcd, 0x66, 0x58, 0xbf, 0x0e, 0x35, - 0x3c, 0xee, 0xe0, 0xd0, 0xde, 0x81, 0xda, 0x59, 0x30, 0x72, 0xce, 0x3c, 0x3f, 0x96, 0xec, 0xdf, - 0x4a, 0xce, 0x21, 0xdb, 0x38, 0x29, 0xaa, 0x80, 0xf5, 0x1f, 0x66, 0x60, 0x66, 0xc7, 0x3f, 0x0f, - 0xbc, 0x1e, 0x06, 0x0c, 0x0c, 0xe9, 0x30, 0x90, 0xd7, 0x88, 0xd8, 0x6f, 0xbc, 0xe1, 0x9f, 0x5c, - 0xf4, 0xe5, 0x2c, 0xa4, 0x21, 0xec, 0x80, 0x1c, 0xea, 0x17, 0x75, 0x45, 0x2a, 0x39, 0xf5, 0x55, - 0xb4, 0x8b, 0x58, 0xac, 0x36, 0x7e, 0x81, 0x14, 0xe7, 0x8e, 0x87, 0x7f, 0x6b, 0x08, 0x9b, 0x7c, - 0x11, 0xb9, 0xcb, 0x43, 0x3b, 0x79, 0xec, 0x91, 0x80, 0xf0, 0xd0, 0x1f, 0x52, 0xee, 0x73, 0x51, - 0xaa, 0x17, 0x3b, 0xf4, 0xeb, 0x20, 0x53, 0xcf, 0xf8, 0x07, 0xbc, 0x0c, 0xdf, 0x0e, 0x74, 0x88, - 0x29, 0xa8, 0xe9, 0x6b, 0xef, 0xfc, 0xe9, 0x82, 0x34, 0xcc, 0x43, 0x43, 0x94, 0xd0, 0xe5, 0xe3, - 0x04, 0x7e, 0xd9, 0x39, 0x8d, 0x6b, 0xa6, 0x02, 0x7e, 0xc1, 0x41, 0x9a, 0x0a, 0x18, 0xc9, 0xb8, - 0x83, 0xc1, 0xb1, 0xdb, 0x7b, 0xc1, 0x4f, 0xb6, 0x0d, 0xee, 0xaa, 0x33, 0x40, 0x8c, 0xbf, 0x4d, - 0xd6, 0x15, 0x5d, 0xf7, 0x65, 0x5b, 0x87, 0xc8, 0x1a, 0xd4, 0xd1, 0x8c, 0x22, 0x56, 0xb6, 0x85, - 0x2b, 0xdb, 0xd6, 0xed, 0x2c, 0xb8, 0xb6, 0x7a, 0x21, 0x3d, 0x94, 0x61, 0x36, 0x73, 0xe5, 0xc0, - 0xed, 0xf7, 0x45, 0x14, 0x48, 0x9b, 0x5f, 0xf6, 0x55, 0x00, 0x1a, 0x6a, 0xf8, 0x84, 0xf1, 0x02, - 0x73, 0x58, 0xc0, 0xc0, 0xc8, 0x2d, 0x6e, 0xc6, 0x1c, 0xb9, 0x5e, 0x1f, 0x43, 0xc9, 0xf8, 0x59, - 0x58, 0x61, 0xac, 0x0e, 0xf9, 0x1b, 0x37, 0xce, 0x79, 0x9c, 0x15, 0x03, 0x63, 0x73, 0xa3, 0xd2, - 0xc3, 0xe4, 0x8e, 0x82, 0x09, 0x92, 0x77, 0xd1, 0xc3, 0x1e, 0x53, 0xbc, 0x88, 0xd0, 0x5a, 0xbb, - 0x2e, 0xc6, 0x2c, 0xc8, 0x56, 0xfe, 0x7f, 0xc8, 0x8a, 0xd8, 0xbc, 0x24, 0x53, 0xdb, 0xb8, 0x93, - 0x63, 0xc9, 0x50, 0xdb, 0x44, 0x51, 0x74, 0x72, 0xf0, 0x02, 0xe4, 0xa1, 0x76, 0x12, 0xeb, 0x60, - 0xe1, 0x1b, 0xa9, 0xfa, 0xbf, 0x95, 0x33, 0xd8, 0x3a, 0x34, 0xf4, 0x71, 0x90, 0x2a, 0x94, 0xf7, - 0x0f, 0xb6, 0xf6, 0xda, 0x53, 0xa4, 0x0e, 0x33, 0x87, 0x5b, 0x47, 0x47, 0xbb, 0x5b, 0x9b, 0xed, - 0x02, 0x69, 0x40, 0x55, 0x45, 0x77, 0x17, 0x59, 0x6a, 0x7d, 0x63, 0x63, 0xeb, 0xe0, 0x68, 0x6b, - 0xb3, 0x5d, 0xfa, 0xb8, 0x5c, 0x2d, 0xb6, 0x4b, 0xa8, 0x40, 0x6a, 0xc3, 0x7c, 0x8d, 0x1d, 0xed, - 0x16, 0x00, 0x1e, 0x6c, 0x92, 0x68, 0xa0, 0xb2, 0xad, 0x21, 0x4c, 0x50, 0x2b, 0xfb, 0x43, 0x89, - 0x5f, 0xc0, 0x96, 0x69, 0x5c, 0x3c, 0xbc, 0xe9, 0xac, 0x3b, 0xb6, 0x2a, 0xb6, 0x09, 0x32, 0xc2, - 0x16, 0x00, 0x86, 0x1c, 0x73, 0x71, 0xa0, 0x43, 0x8c, 0x50, 0x42, 0x1a, 0x05, 0x83, 0x73, 0xca, - 0x8b, 0x70, 0xf5, 0xd0, 0xc0, 0x58, 0x5b, 0x42, 0xe2, 0x69, 0xd7, 0x01, 0x2a, 0xb6, 0x09, 0x92, - 0xef, 0x4b, 0x42, 0xa9, 0x22, 0xa1, 0x2c, 0x67, 0x57, 0xdd, 0x20, 0x92, 0xa7, 0x19, 0x43, 0x58, - 0x0d, 0x09, 0xe0, 0xbb, 0xd9, 0xef, 0xae, 0x60, 0x10, 0x23, 0xab, 0x40, 0x86, 0xa3, 0x91, 0x93, - 0x63, 0xa1, 0x2a, 0xdb, 0x39, 0x39, 0xdf, 0x80, 0x01, 0x2d, 0x06, 0xb2, 0xde, 0xef, 0x8b, 0x6e, - 0xea, 0xf7, 0xd1, 0x43, 0xfd, 0x01, 0x04, 0x29, 0x92, 0x73, 0xc4, 0x5e, 0x31, 0x5f, 0xec, 0xbd, - 0x52, 0x38, 0x58, 0x3b, 0x50, 0x3f, 0xd0, 0x9e, 0x54, 0xb0, 0xd8, 0x0e, 0x21, 0x1f, 0x53, 0xe0, - 0x7b, 0x07, 0x37, 0x9c, 0x25, 0xa8, 0xd6, 0xa5, 0xa2, 0xde, 0x25, 0xeb, 0x1f, 0x16, 0xf8, 0x2d, - 0x55, 0x35, 0x04, 0xde, 0xbe, 0x05, 0x0d, 0xe5, 0x7b, 0x49, 0xae, 0xec, 0x18, 0x18, 0x2b, 0x83, - 0xdd, 0x71, 0x82, 0x93, 0x93, 0x88, 0xca, 0xe0, 0x7a, 0x03, 0x93, 0xca, 0x38, 0x53, 0xef, 0x3d, - 0xde, 0x42, 0x24, 0x82, 0xec, 0x33, 0x38, 0xa3, 0x74, 0x61, 0xfb, 0x96, 0xd7, 0x0a, 0x54, 0x5a, - 0xdd, 0x2c, 0x4a, 0xcf, 0xf4, 0x3d, 0xa8, 0xaa, 0x7a, 0xcd, 0x9d, 0x56, 0x96, 0x54, 0xf9, 0x6c, - 0x47, 0xc7, 0x83, 0xba, 0xd1, 0x69, 0xce, 0x70, 0xd9, 0x0c, 0x46, 0x4b, 0x27, 0x5e, 0x98, 0x2e, - 0xce, 0x39, 0x30, 0x27, 0xc7, 0x7a, 0x0e, 0xf3, 0x52, 0x7c, 0x68, 0xa7, 0x04, 0x73, 0x21, 0x0b, - 0xaf, 0x93, 0xf2, 0xc5, 0xac, 0x94, 0xb7, 0xfe, 0x4d, 0x19, 0x66, 0xe4, 0x7b, 0x25, 0x56, 0xce, - 0xfb, 0x1a, 0x35, 0xf3, 0x69, 0x0e, 0xd2, 0x31, 0x2e, 0x60, 0x23, 0x21, 0x88, 0xbd, 0xff, 0x6e, - 0x7a, 0xf7, 0x4e, 0x0c, 0xa8, 0xa9, 0x1d, 0x7c, 0x09, 0xca, 0x23, 0x37, 0x3e, 0x43, 0xfb, 0x1a, - 0xa7, 0x25, 0x4c, 0x4b, 0x13, 0x7d, 0xc5, 0x34, 0xd1, 0xe7, 0x3d, 0x48, 0xc2, 0x55, 0xd5, 0xec, - 0x83, 0x24, 0x37, 0xa0, 0xc6, 0xb5, 0x8d, 0xc4, 0x0a, 0x9f, 0x00, 0x29, 0xed, 0xa4, 0x9a, 0xd1, - 0x4e, 0xae, 0xae, 0x37, 0xbc, 0x07, 0xd3, 0xfc, 0x52, 0x9e, 0xb8, 0x44, 0x21, 0xb7, 0x14, 0x31, - 0x93, 0xf2, 0x7f, 0x1e, 0x83, 0x67, 0x8b, 0xb2, 0xfa, 0xb5, 0xfe, 0xba, 0x79, 0xad, 0x5f, 0x77, - 0x1e, 0x34, 0x52, 0xce, 0x83, 0x7b, 0xd0, 0x56, 0xd3, 0x87, 0x06, 0x36, 0x3f, 0x12, 0x41, 0xe3, - 0x19, 0x3c, 0xd9, 0x16, 0x5b, 0xc6, 0xb6, 0xc8, 0x24, 0xdc, 0x7a, 0x1c, 0xd3, 0xe1, 0x28, 0x16, - 0xdb, 0xa2, 0xf5, 0x18, 0x9a, 0x46, 0x27, 0xd9, 0x36, 0x24, 0xae, 0x55, 0xb4, 0xa7, 0x48, 0x13, - 0x6a, 0x3b, 0x7b, 0xce, 0xe3, 0xdd, 0x9d, 0x27, 0xdb, 0x47, 0xed, 0x02, 0x4b, 0x1e, 0x3e, 0xdb, - 0xd8, 0xd8, 0xda, 0xda, 0xc4, 0x6d, 0x09, 0x60, 0xfa, 0xf1, 0xfa, 0x0e, 0xdb, 0xa2, 0x4a, 0xd6, - 0xff, 0x29, 0x40, 0x5d, 0xab, 0x9e, 0xbc, 0xaf, 0x66, 0x86, 0xdf, 0xfc, 0xbe, 0x99, 0xed, 0xc2, - 0xaa, 0x14, 0xd4, 0xda, 0xd4, 0xa8, 0x37, 0x58, 0x8a, 0x13, 0xdf, 0x60, 0x61, 0xcb, 0xe3, 0xf2, - 0x1a, 0xd4, 0x3c, 0xf0, 0xd3, 0x53, 0x1a, 0xe6, 0x71, 0x56, 0xc9, 0xee, 0xc2, 0x4a, 0x72, 0x8b, - 0x61, 0x1a, 0xb6, 0x3e, 0x00, 0x48, 0x7a, 0x63, 0x0e, 0x7b, 0xca, 0x1c, 0x76, 0x41, 0x1b, 0x76, - 0xd1, 0xda, 0xe4, 0x02, 0x43, 0x4c, 0xa1, 0xf2, 0x12, 0x7f, 0x1f, 0x88, 0x34, 0x50, 0x61, 0x3c, - 0xe3, 0x68, 0x40, 0x63, 0x79, 0xd9, 0x6a, 0x4e, 0xe4, 0xec, 0xa8, 0x0c, 0x79, 0x5f, 0x30, 0xa9, - 0x25, 0x91, 0x3b, 0x82, 0xe2, 0xd2, 0x72, 0x47, 0x14, 0xb5, 0x55, 0xbe, 0xd5, 0x85, 0xce, 0x26, - 0x65, 0xb5, 0xad, 0x0f, 0x06, 0xa9, 0xee, 0x58, 0xd7, 0xe1, 0x5a, 0x4e, 0x9e, 0x30, 0x3f, 0x7c, - 0x0a, 0x8b, 0xeb, 0xfc, 0x5e, 0xd5, 0x37, 0x15, 0xc2, 0x6d, 0x75, 0x60, 0x29, 0x5d, 0xa5, 0x68, - 0xec, 0x31, 0xcc, 0x6d, 0xd2, 0xe3, 0xf1, 0xe9, 0x2e, 0x3d, 0x4f, 0x1a, 0x22, 0x50, 0x8e, 0xce, - 0x82, 0x0b, 0x31, 0x3f, 0xf8, 0x9b, 0xdc, 0x04, 0x18, 0xb0, 0x32, 0x4e, 0x34, 0xa2, 0x3d, 0x79, - 0xb3, 0x1e, 0x91, 0xc3, 0x11, 0xed, 0x59, 0x1f, 0x00, 0xd1, 0xeb, 0x11, 0xf3, 0xc5, 0x8e, 0x04, - 0xe3, 0x63, 0x27, 0xba, 0x8c, 0x62, 0x3a, 0x94, 0x4f, 0x06, 0xe8, 0x90, 0xf5, 0x16, 0x34, 0x0e, - 0xdc, 0x4b, 0x9b, 0x7e, 0x21, 0xde, 0xfc, 0x59, 0x86, 0x99, 0x91, 0x7b, 0xc9, 0xf8, 0x59, 0xb9, - 0x50, 0x30, 0xdb, 0xfa, 0xc3, 0x32, 0x4c, 0xf3, 0x92, 0xac, 0xd6, 0x3e, 0x8d, 0x62, 0xcf, 0x47, - 0x1e, 0x93, 0xb5, 0x6a, 0x50, 0x46, 0x60, 0x16, 0x73, 0x04, 0xa6, 0x30, 0xa5, 0xc9, 0x1b, 0xca, - 0x82, 0x64, 0x0d, 0x8c, 0x89, 0xad, 0xe4, 0x42, 0x08, 0xa7, 0xd4, 0x04, 0x48, 0xf9, 0x28, 0x93, - 0x83, 0x07, 0xef, 0x9f, 0xdc, 0x0b, 0x84, 0x4c, 0xd4, 0xa1, 0xdc, 0xe3, 0xcd, 0x8c, 0x8c, 0x7c, - 0x4f, 0x1d, 0x6f, 0x32, 0xc7, 0x98, 0xea, 0x15, 0x8e, 0x31, 0xdc, 0xbe, 0xf6, 0xaa, 0x63, 0x0c, - 0x5c, 0xe5, 0x18, 0x73, 0x15, 0xdf, 0x60, 0x17, 0xaa, 0xb8, 0xa7, 0x6b, 0x22, 0x52, 0xa6, 0xc9, - 0xaf, 0x69, 0x3a, 0x3e, 0x77, 0xf3, 0x5f, 0x4f, 0xf8, 0xc5, 0xa6, 0x5f, 0x7c, 0x3b, 0x2a, 0xfe, - 0x8f, 0x61, 0x46, 0xa0, 0x8c, 0xb2, 0x7d, 0x77, 0x28, 0x5f, 0x86, 0xc0, 0xdf, 0x6c, 0xea, 0xf0, - 0x82, 0xfa, 0x17, 0x63, 0x2f, 0xa4, 0x7d, 0x79, 0x7b, 0x52, 0x83, 0x30, 0x2a, 0x3a, 0x72, 0x5e, - 0xf8, 0xc1, 0x85, 0x2f, 0xee, 0x4f, 0xaa, 0xb4, 0x45, 0xa0, 0x8d, 0x2f, 0xc4, 0x8c, 0x82, 0x50, - 0x3e, 0xf6, 0x61, 0xfd, 0xdd, 0x02, 0xb4, 0x05, 0xa3, 0xa9, 0x3c, 0x19, 0x10, 0xf0, 0xaa, 0x4b, - 0xc2, 0xb7, 0xa1, 0x89, 0xb6, 0x0c, 0xb5, 0xe5, 0x08, 0xe7, 0xba, 0x01, 0xb2, 0xfe, 0xca, 0xb0, - 0xc4, 0xa1, 0x37, 0x10, 0x74, 0xab, 0x43, 0x72, 0xd7, 0x0a, 0x5d, 0x71, 0xed, 0xa2, 0x60, 0xab, - 0xb4, 0xf5, 0x47, 0x05, 0x98, 0xd3, 0x3a, 0x2c, 0x18, 0xf5, 0x23, 0x68, 0xa8, 0x87, 0x98, 0xa8, - 0x52, 0xaa, 0x96, 0x4d, 0xc9, 0x92, 0x7c, 0x66, 0x14, 0x46, 0x7a, 0x77, 0x2f, 0xb1, 0x83, 0xd1, - 0x78, 0x28, 0xb4, 0x19, 0x1d, 0x62, 0x74, 0x74, 0x41, 0xe9, 0x0b, 0x55, 0x84, 0xeb, 0x53, 0x06, - 0x86, 0x3e, 0xa0, 0xc0, 0x8f, 0xcf, 0x54, 0xa1, 0xb2, 0xf0, 0x01, 0xe9, 0xa0, 0xf5, 0x27, 0x45, - 0x98, 0xe7, 0x46, 0x35, 0x61, 0xcc, 0x54, 0x6f, 0x61, 0x4c, 0x73, 0xfb, 0x22, 0x17, 0x5a, 0xdb, - 0x53, 0xb6, 0x48, 0x93, 0xf7, 0xaf, 0x68, 0x08, 0x54, 0xf7, 0x3b, 0x26, 0xac, 0x45, 0x29, 0x6f, - 0x2d, 0x5e, 0x31, 0xd3, 0x79, 0xee, 0xb8, 0x4a, 0xbe, 0x3b, 0xee, 0x6a, 0xee, 0xaf, 0xcc, 0x25, - 0x88, 0x19, 0x51, 0xca, 0xb8, 0x04, 0xb1, 0x06, 0xcb, 0x06, 0x80, 0xf2, 0xda, 0x3b, 0xf1, 0xa8, - 0xbc, 0x91, 0x3a, 0x17, 0xd1, 0xd8, 0x31, 0x8a, 0x3c, 0x9a, 0x81, 0x4a, 0xd4, 0x0b, 0x46, 0xd4, - 0x5a, 0x82, 0x05, 0x73, 0x72, 0xc5, 0x2e, 0xf1, 0x8b, 0x02, 0x74, 0x1e, 0xf3, 0xa0, 0x0a, 0xcf, - 0x3f, 0xdd, 0xf6, 0xa2, 0x38, 0x08, 0xd5, 0x93, 0x45, 0xb7, 0x00, 0xa2, 0xd8, 0x0d, 0xc5, 0x39, - 0x93, 0x2b, 0xbb, 0x1a, 0xc2, 0xe6, 0x88, 0xfa, 0x7d, 0x9e, 0xcb, 0x69, 0x43, 0xa5, 0x33, 0x87, - 0x09, 0x61, 0x72, 0x34, 0x54, 0xf2, 0x3b, 0xfc, 0x6e, 0x16, 0x9b, 0x0c, 0x7a, 0x8e, 0x5b, 0x2f, - 0xb7, 0xe3, 0xa5, 0x50, 0xeb, 0xf7, 0x8b, 0x30, 0x9b, 0x74, 0x92, 0xdf, 0xf5, 0x34, 0x04, 0xb8, - 0xd0, 0xc3, 0x13, 0x01, 0x2e, 0xdc, 0x83, 0x8e, 0xc7, 0x14, 0x73, 0xcd, 0xea, 0xa8, 0xa1, 0xe4, - 0x36, 0xd4, 0x65, 0x2a, 0x18, 0xc7, 0xda, 0xdb, 0x21, 0x3a, 0xcc, 0xef, 0x46, 0xb0, 0xa3, 0x81, - 0x38, 0xe6, 0x88, 0x14, 0xde, 0x50, 0x1e, 0xc6, 0xf8, 0x25, 0x5f, 0x53, 0x99, 0x64, 0x02, 0x8d, - 0xe9, 0xd4, 0x7c, 0x0d, 0x51, 0x9f, 0xd6, 0x75, 0xcd, 0xaa, 0x7a, 0x73, 0x4d, 0xf1, 0x3c, 0xaf, - 0x31, 0xb9, 0xfe, 0x52, 0xb6, 0x75, 0x48, 0x5a, 0x7d, 0x82, 0xb1, 0x71, 0xfc, 0x35, 0x30, 0xeb, - 0x6f, 0x16, 0xe0, 0x5a, 0xce, 0x32, 0x0a, 0x19, 0xb0, 0x09, 0x73, 0x27, 0x2a, 0x53, 0x4e, 0x35, - 0x17, 0x04, 0x4b, 0x52, 0xb8, 0x9a, 0xd3, 0x6b, 0x67, 0x3f, 0x50, 0xc7, 0x2d, 0xbe, 0x78, 0xc6, - 0x6d, 0xa7, 0x6c, 0x86, 0x75, 0x00, 0xdd, 0xad, 0x97, 0x4c, 0xa4, 0x6c, 0xe8, 0x0f, 0xef, 0x4a, - 0xca, 0x5a, 0xcb, 0x88, 0xcc, 0xd7, 0x1b, 0x9b, 0x4f, 0xa0, 0x69, 0xd4, 0x45, 0x7e, 0x70, 0xd5, - 0x4a, 0x74, 0xee, 0x5f, 0x11, 0xab, 0xce, 0x5f, 0x0e, 0x96, 0x77, 0xae, 0x34, 0xc8, 0x3a, 0x87, - 0xd9, 0xa7, 0xe3, 0x41, 0xec, 0x25, 0xaf, 0x08, 0x93, 0xf7, 0xc5, 0x47, 0x58, 0x85, 0x9c, 0xba, - 0xdc, 0xa6, 0xf4, 0x72, 0x6c, 0xc6, 0x86, 0xac, 0x26, 0x27, 0xdb, 0x62, 0x36, 0xc3, 0xba, 0x06, - 0xcb, 0x49, 0x93, 0x7c, 0xee, 0xe4, 0xb6, 0xf3, 0x07, 0x05, 0x1e, 0x12, 0x6c, 0x3e, 0x6a, 0x4c, - 0x9e, 0xc0, 0x7c, 0xe4, 0xf9, 0xa7, 0x03, 0xaa, 0xd7, 0x13, 0x89, 0x99, 0x58, 0x34, 0xbb, 0x27, - 0x1e, 0x3e, 0xb6, 0xf3, 0xbe, 0x60, 0x04, 0x92, 0xdf, 0xd1, 0x84, 0x40, 0x52, 0x53, 0x92, 0x37, - 0x80, 0x8f, 0xa1, 0x65, 0x36, 0x46, 0x1e, 0x8a, 0x4b, 0x50, 0x49, 0xcf, 0x74, 0xef, 0xb0, 0x49, - 0x19, 0x46, 0x49, 0xeb, 0xe7, 0x05, 0xe8, 0xd8, 0x94, 0x91, 0x31, 0xd5, 0x1a, 0x15, 0xd4, 0xf3, - 0x51, 0xa6, 0xda, 0xc9, 0x03, 0x56, 0x97, 0xab, 0xe4, 0x58, 0x57, 0x27, 0x2e, 0xca, 0xf6, 0x54, - 0xce, 0xa8, 0x1e, 0x55, 0x61, 0x5a, 0x8c, 0x6f, 0x19, 0x16, 0x45, 0x97, 0x64, 0x77, 0x12, 0xb7, - 0xa2, 0xd1, 0xa8, 0xe1, 0x56, 0xec, 0x42, 0x87, 0xbf, 0x4c, 0xa5, 0x8f, 0x43, 0x7c, 0xb8, 0x09, - 0xe4, 0xa9, 0xdb, 0x73, 0xc3, 0x20, 0xf0, 0x0f, 0x68, 0x28, 0x62, 0x38, 0x51, 0xfb, 0x44, 0xaf, - 0x9b, 0x54, 0x94, 0x79, 0x4a, 0x3e, 0xa6, 0x14, 0xf8, 0xf2, 0xd1, 0x2a, 0x9e, 0xb2, 0x6c, 0x98, - 0x7f, 0xe4, 0xbe, 0xa0, 0xb2, 0xa6, 0x64, 0x96, 0xea, 0x23, 0x55, 0xa9, 0x9c, 0x7b, 0x79, 0x0b, - 0x32, 0xdb, 0xac, 0xad, 0x97, 0xb6, 0xd6, 0x60, 0xc1, 0xac, 0x53, 0x88, 0x92, 0x2e, 0x54, 0x87, - 0x02, 0x13, 0xbd, 0x53, 0xe9, 0x7b, 0x5f, 0x41, 0x5d, 0x7b, 0x6d, 0x8c, 0x2c, 0xc3, 0xfc, 0xf3, - 0x9d, 0xa3, 0xbd, 0xad, 0xc3, 0x43, 0xe7, 0xe0, 0xd9, 0xa3, 0x4f, 0xb6, 0x3e, 0x77, 0xb6, 0xd7, - 0x0f, 0xb7, 0xdb, 0x53, 0x64, 0x09, 0xc8, 0xde, 0xd6, 0xe1, 0xd1, 0xd6, 0xa6, 0x81, 0x17, 0xc8, - 0x2d, 0xe8, 0x3e, 0xdb, 0x7b, 0x76, 0xb8, 0xb5, 0xe9, 0xe4, 0x7d, 0x57, 0x24, 0x37, 0xe1, 0x9a, - 0xc8, 0xcf, 0xf9, 0xbc, 0x74, 0xef, 0x23, 0x68, 0xa7, 0xcd, 0x92, 0x86, 0x39, 0xf7, 0x55, 0x76, - 0xdf, 0x7b, 0xff, 0xa8, 0x04, 0x90, 0xbc, 0x0e, 0x4b, 0x3a, 0xb0, 0xb0, 0xb9, 0x7e, 0xb4, 0xbe, - 0xbb, 0xcf, 0x3a, 0x61, 0xef, 0x1f, 0x6d, 0x6d, 0x1c, 0x39, 0xf6, 0xd6, 0xa7, 0xed, 0xa9, 0xdc, - 0x9c, 0xfd, 0x03, 0x76, 0x64, 0x5f, 0x86, 0xf9, 0x9d, 0xbd, 0x9d, 0xa3, 0x9d, 0xf5, 0x5d, 0xc7, - 0xde, 0x7f, 0xb6, 0xb3, 0xf7, 0x84, 0xbf, 0x84, 0x50, 0x22, 0x6f, 0xc0, 0xf5, 0x67, 0x07, 0x8f, - 0xed, 0xfd, 0xbd, 0x23, 0xe7, 0x70, 0xfb, 0xd9, 0xd1, 0x26, 0xbe, 0xa3, 0xb0, 0x61, 0xef, 0x1c, - 0xf0, 0x3a, 0xcb, 0xaf, 0x2a, 0xc0, 0xaa, 0xae, 0xb0, 0x19, 0x7b, 0xb2, 0x7f, 0x78, 0xb8, 0x73, - 0xe0, 0x7c, 0xfa, 0x6c, 0xcb, 0xde, 0xd9, 0x3a, 0xc4, 0x0f, 0xa7, 0x73, 0x70, 0x56, 0x7e, 0x86, - 0xcc, 0x41, 0xf3, 0x68, 0xf7, 0x33, 0x67, 0x7f, 0x6f, 0x67, 0x7f, 0x0f, 0x8b, 0x56, 0x4d, 0x88, - 0x95, 0xaa, 0x91, 0x2e, 0x2c, 0x6d, 0xfd, 0xf6, 0x91, 0x93, 0x53, 0x33, 0x4c, 0xc8, 0x63, 0xdf, - 0xd5, 0xc9, 0x35, 0x58, 0x3c, 0x3c, 0x5a, 0x3f, 0xda, 0xd9, 0x70, 0xc4, 0x43, 0x2a, 0x6c, 0x11, - 0xd8, 0x67, 0x8d, 0xfc, 0x2c, 0xf6, 0x55, 0x93, 0x2c, 0x40, 0xfb, 0x60, 0xfd, 0xf3, 0xa7, 0x5b, - 0x7b, 0x47, 0xce, 0xfa, 0xe6, 0xa6, 0x8d, 0x1f, 0xb4, 0x32, 0x28, 0x2b, 0x3b, 0xcb, 0x16, 0xea, - 0xe9, 0xc1, 0x01, 0x16, 0x69, 0xcb, 0x04, 0xcb, 0x99, 0x5b, 0xfb, 0x79, 0x09, 0x5a, 0x3c, 0x98, - 0x9e, 0x3f, 0xdf, 0x4e, 0x43, 0xf2, 0x14, 0x66, 0xc4, 0xdf, 0x01, 0x20, 0x8b, 0xea, 0xfa, 0xbb, - 0xfe, 0x97, 0x07, 0xba, 0x4b, 0x69, 0x58, 0xb0, 0xdf, 0xfc, 0x5f, 0xfe, 0x4f, 0xff, 0xe3, 0xf7, - 0x8a, 0x4d, 0x52, 0xbf, 0x7f, 0xfe, 0xee, 0xfd, 0x53, 0xea, 0x47, 0xac, 0x8e, 0xdf, 0x01, 0x48, - 0x5e, 0xb7, 0x27, 0x1d, 0x65, 0x7d, 0x4c, 0x3d, 0xfd, 0xdf, 0xbd, 0x96, 0x93, 0x23, 0xea, 0xbd, - 0x86, 0xf5, 0xce, 0x5b, 0x2d, 0x56, 0xaf, 0xe7, 0x7b, 0x31, 0x7f, 0xe9, 0xfe, 0xc3, 0xc2, 0x3d, - 0xd2, 0x87, 0x86, 0xfe, 0xee, 0x3c, 0x91, 0xde, 0xfc, 0x9c, 0x97, 0xf3, 0xbb, 0xd7, 0x73, 0xf3, - 0xa4, 0xcc, 0xc1, 0x36, 0x16, 0xad, 0x36, 0x6b, 0x63, 0x8c, 0x25, 0x92, 0x56, 0x06, 0x5c, 0x12, - 0x27, 0xcf, 0xcb, 0x93, 0x1b, 0x9a, 0x70, 0xcc, 0x3c, 0x6e, 0xdf, 0xbd, 0x39, 0x21, 0x57, 0xb4, - 0x75, 0x13, 0xdb, 0x5a, 0xb6, 0x08, 0x6b, 0xab, 0x87, 0x65, 0xe4, 0xe3, 0xf6, 0x1f, 0x16, 0xee, - 0xad, 0xfd, 0xde, 0x5d, 0xa8, 0xa9, 0x48, 0x1f, 0xf2, 0x53, 0x68, 0x1a, 0xb7, 0x1d, 0x88, 0x1c, - 0x46, 0xde, 0xe5, 0x88, 0xee, 0x8d, 0xfc, 0x4c, 0xd1, 0xf0, 0x2d, 0x6c, 0xb8, 0x43, 0x96, 0x58, - 0xc3, 0xe2, 0xba, 0xc0, 0x7d, 0xbc, 0xb7, 0xc3, 0x1f, 0x13, 0x78, 0xa1, 0xed, 0x38, 0xbc, 0xb1, - 0x1b, 0xe9, 0x4d, 0xc0, 0x68, 0xed, 0xe6, 0x84, 0x5c, 0xd1, 0xdc, 0x0d, 0x6c, 0x6e, 0x89, 0x2c, - 0xe8, 0xcd, 0xa9, 0xe8, 0x1b, 0x8a, 0x0f, 0x7a, 0xe8, 0x2f, 0xaf, 0x93, 0x9b, 0xc9, 0x73, 0x0b, - 0x39, 0x2f, 0xb2, 0x2b, 0x12, 0xc9, 0x3e, 0xcb, 0x6e, 0x75, 0xb0, 0x29, 0x42, 0x70, 0xf9, 0xf4, - 0x87, 0xd7, 0xc9, 0x31, 0xd4, 0xb5, 0x07, 0x4a, 0xc9, 0xb5, 0x89, 0x8f, 0xa9, 0x76, 0xbb, 0x79, - 0x59, 0x79, 0x43, 0xd1, 0xeb, 0xbf, 0xcf, 0x14, 0xd2, 0x1f, 0x43, 0x4d, 0x3d, 0x79, 0x49, 0x96, - 0xb5, 0x27, 0x48, 0xf5, 0x27, 0x3a, 0xbb, 0x9d, 0x6c, 0x46, 0x1e, 0xf1, 0xe9, 0xb5, 0x33, 0xe2, - 0x7b, 0x0e, 0x75, 0xed, 0x59, 0x4b, 0x35, 0x80, 0xec, 0xd3, 0x99, 0x6a, 0x00, 0x39, 0xaf, 0x60, - 0x5a, 0x73, 0xd8, 0x44, 0x9d, 0xd4, 0x90, 0xbe, 0xe3, 0x97, 0x41, 0x44, 0x76, 0x61, 0x51, 0xec, - 0xac, 0xc7, 0xf4, 0xeb, 0x2c, 0x43, 0xce, 0x63, 0xf7, 0x0f, 0x0a, 0xe4, 0x23, 0xa8, 0xca, 0xd7, - 0x4b, 0xc9, 0x52, 0xfe, 0x2b, 0xac, 0xdd, 0xe5, 0x0c, 0x2e, 0xb6, 0xc1, 0xcf, 0x01, 0x92, 0x37, - 0x34, 0x95, 0x90, 0xc8, 0xbc, 0xc9, 0xa9, 0x28, 0x20, 0xfb, 0xe0, 0xa6, 0xb5, 0x84, 0x03, 0x6c, - 0x13, 0x14, 0x12, 0x3e, 0xbd, 0x90, 0x0f, 0x1c, 0xfd, 0x04, 0xea, 0xda, 0x33, 0x9a, 0x6a, 0xfa, - 0xb2, 0x4f, 0x70, 0xaa, 0xe9, 0xcb, 0x79, 0x75, 0xd3, 0xea, 0x62, 0xed, 0x0b, 0xd6, 0x2c, 0xab, - 0x3d, 0xf2, 0x4e, 0xfd, 0x21, 0x2f, 0xc0, 0x16, 0xe8, 0x0c, 0x9a, 0xc6, 0x5b, 0x99, 0x8a, 0x43, - 0xf3, 0x5e, 0xe2, 0x54, 0x1c, 0x9a, 0xfb, 0xbc, 0xa6, 0xa4, 0x33, 0x6b, 0x8e, 0xb5, 0x73, 0x8e, - 0x45, 0xb4, 0x96, 0x7e, 0x04, 0x75, 0xed, 0xdd, 0x4b, 0x35, 0x96, 0xec, 0x13, 0x9b, 0x6a, 0x2c, - 0x79, 0xcf, 0x64, 0x2e, 0x60, 0x1b, 0x2d, 0x0b, 0x49, 0x01, 0xdf, 0x87, 0x61, 0x75, 0xff, 0x14, - 0x5a, 0xe6, 0x4b, 0x98, 0x8a, 0xf7, 0x73, 0xdf, 0xd4, 0x54, 0xbc, 0x3f, 0xe1, 0xf9, 0x4c, 0x41, - 0xd2, 0xf7, 0xe6, 0x55, 0x23, 0xf7, 0xbf, 0x14, 0x81, 0xcb, 0x5f, 0x91, 0x4f, 0x99, 0x80, 0x13, - 0xef, 0x16, 0x91, 0x65, 0x8d, 0x6a, 0xf5, 0xd7, 0x8d, 0x14, 0xbf, 0x64, 0x9e, 0x38, 0x32, 0x89, - 0x99, 0xbf, 0x70, 0xf3, 0x04, 0xe6, 0x15, 0x31, 0xab, 0x77, 0x88, 0x22, 0x35, 0x86, 0xdc, 0xe7, - 0x8e, 0xba, 0xed, 0x74, 0xee, 0x83, 0x02, 0xdf, 0xfe, 0xf0, 0xb5, 0x17, 0x6d, 0xfb, 0xd3, 0x9f, - 0x22, 0xd2, 0xb6, 0x3f, 0xe3, 0x51, 0x98, 0xf4, 0xf6, 0x17, 0x7b, 0xac, 0x0e, 0x1f, 0x66, 0x53, - 0x57, 0x3b, 0x15, 0x7b, 0xe5, 0xdf, 0xbe, 0xef, 0xde, 0x7a, 0xf5, 0x8d, 0x50, 0x53, 0x14, 0x49, - 0x69, 0x7a, 0x5f, 0xbe, 0x75, 0xf0, 0xbb, 0xd0, 0xd0, 0x1f, 0xf0, 0x23, 0xba, 0x4c, 0x48, 0xb7, - 0x74, 0x3d, 0x37, 0xcf, 0xa4, 0x12, 0xd2, 0xd0, 0x9b, 0x21, 0x9f, 0xc1, 0x92, 0x9a, 0x66, 0xfd, - 0xb6, 0x60, 0x44, 0xde, 0xc8, 0xb9, 0x43, 0x68, 0x4c, 0xf6, 0xb5, 0x89, 0x97, 0x0c, 0x1f, 0x14, - 0x18, 0xf5, 0x99, 0xaf, 0xa2, 0x25, 0x3b, 0x4f, 0xde, 0x63, 0x70, 0xc9, 0xce, 0x93, 0xfb, 0x94, - 0x9a, 0xa4, 0x3e, 0x32, 0x6f, 0xcc, 0x11, 0x8f, 0xcf, 0x22, 0x3f, 0x82, 0x59, 0xed, 0x3e, 0xf6, - 0xe1, 0xa5, 0xdf, 0x53, 0x9c, 0x94, 0x7d, 0x54, 0xa4, 0x9b, 0x77, 0x2c, 0xb5, 0x96, 0xb1, 0xfe, - 0x39, 0xcb, 0x98, 0x1c, 0xc6, 0x45, 0x1b, 0x50, 0xd7, 0xef, 0x7a, 0xbf, 0xa2, 0xde, 0x65, 0x2d, - 0x4b, 0x7f, 0xe9, 0xe2, 0x41, 0x81, 0x1c, 0xf0, 0x38, 0x5d, 0xf5, 0x8e, 0x7b, 0x10, 0xa6, 0xf7, - 0x61, 0xf3, 0x7d, 0x77, 0xb5, 0x90, 0x79, 0x2f, 0xfb, 0xdf, 0x2d, 0x3c, 0x28, 0x90, 0xbf, 0x57, - 0x80, 0x86, 0x71, 0x17, 0xdb, 0x88, 0x7a, 0x4c, 0xf5, 0xac, 0xa3, 0xe7, 0xe9, 0x5d, 0xb3, 0x6c, - 0x1c, 0xf6, 0xee, 0xbd, 0x8f, 0x8d, 0x69, 0xfd, 0xd2, 0xb0, 0xcd, 0xae, 0xa6, 0x1f, 0x73, 0xff, - 0x2a, 0x5d, 0x40, 0x7f, 0xca, 0xe5, 0xab, 0x07, 0x05, 0xf2, 0x4f, 0x0a, 0xd0, 0x32, 0x9d, 0x2e, - 0x6a, 0xb8, 0xb9, 0xee, 0x1d, 0xb5, 0xf8, 0x13, 0x3c, 0x35, 0x3f, 0xc2, 0x5e, 0x1e, 0xdd, 0xb3, - 0x8d, 0x5e, 0x8a, 0x17, 0xf8, 0x7e, 0xb5, 0xde, 0x92, 0x0f, 0xf9, 0xdf, 0x56, 0x91, 0xfe, 0x66, - 0x92, 0xfd, 0x5b, 0x1c, 0x8a, 0x60, 0xf4, 0xbf, 0x5c, 0x81, 0x8b, 0xf0, 0x13, 0xfe, 0x88, 0xb9, - 0x74, 0x5a, 0x32, 0xba, 0xbb, 0xea, 0xf7, 0xd6, 0x6d, 0x1c, 0xd3, 0x2d, 0xeb, 0x9a, 0x31, 0xa6, - 0xb4, 0xaa, 0xb0, 0xce, 0x7b, 0x27, 0xfe, 0xe8, 0x44, 0xb2, 0xd7, 0x65, 0xfe, 0x10, 0xc5, 0xe4, - 0x4e, 0x0e, 0x79, 0x27, 0x45, 0x71, 0x83, 0x39, 0xae, 0x58, 0x8d, 0x75, 0x0f, 0xfb, 0x7a, 0xdb, - 0x7a, 0x63, 0x62, 0x5f, 0xef, 0xa3, 0xeb, 0x84, 0xf5, 0xf8, 0x00, 0x20, 0x89, 0x0f, 0x21, 0xa9, - 0xd8, 0x04, 0x25, 0x32, 0xb2, 0x21, 0x24, 0x26, 0x07, 0xca, 0x10, 0x06, 0x56, 0xe3, 0x8f, 0xb9, - 0x00, 0xdc, 0x91, 0x51, 0x0d, 0xba, 0xbe, 0x64, 0x06, 0x71, 0x18, 0xfa, 0x52, 0xba, 0x7e, 0x43, - 0xfc, 0xa9, 0x10, 0x89, 0x67, 0xd0, 0xdc, 0x0d, 0x82, 0x17, 0xe3, 0x91, 0x0a, 0x48, 0x34, 0xbd, - 0x9a, 0xdb, 0x6e, 0x74, 0xd6, 0x4d, 0x8d, 0xc2, 0x5a, 0xc1, 0xaa, 0xba, 0xa4, 0xa3, 0x55, 0x75, - 0xff, 0xcb, 0x24, 0xf6, 0xe4, 0x2b, 0xe2, 0xc2, 0x9c, 0x92, 0xaa, 0xaa, 0xe3, 0x5d, 0xb3, 0x1a, - 0x43, 0x96, 0xa6, 0x9b, 0x30, 0x14, 0x7b, 0xd9, 0xdb, 0xfb, 0x91, 0xac, 0x13, 0x65, 0x4a, 0x63, - 0x93, 0xf6, 0xf0, 0x9a, 0x26, 0xba, 0x06, 0xe7, 0x0d, 0xf7, 0x12, 0xf7, 0x29, 0x76, 0x9b, 0x06, - 0x68, 0xee, 0x34, 0x23, 0xf7, 0x32, 0xa4, 0x5f, 0xdc, 0xff, 0x52, 0x38, 0x1d, 0xbf, 0x92, 0x3b, - 0x8d, 0xf4, 0xca, 0x1a, 0x3b, 0x4d, 0xca, 0x8d, 0x6b, 0xec, 0x34, 0x19, 0x37, 0xae, 0x31, 0xd5, - 0xd2, 0x2b, 0x4c, 0x06, 0x30, 0x97, 0xf1, 0xfc, 0xaa, 0x4d, 0x66, 0x92, 0xbf, 0xb8, 0xbb, 0x32, - 0xb9, 0x80, 0xd9, 0xda, 0x3d, 0xb3, 0xb5, 0x43, 0x68, 0x6e, 0x52, 0x3e, 0x59, 0xfc, 0x06, 0x46, - 0xea, 0x42, 0xbf, 0x7e, 0xbf, 0x23, 0xbd, 0x25, 0x60, 0x9e, 0xa9, 0x93, 0xf0, 0x77, 0xea, 0x7e, - 0x0c, 0xf5, 0x27, 0x34, 0x96, 0x57, 0x2e, 0x94, 0x56, 0x9c, 0xba, 0x83, 0xd1, 0xcd, 0xb9, 0xb1, - 0x61, 0xd2, 0x0c, 0xd6, 0x76, 0x9f, 0xf6, 0x4f, 0x29, 0x17, 0x4e, 0x8e, 0xd7, 0xff, 0x8a, 0xfc, - 0x36, 0x56, 0xae, 0x2e, 0xc0, 0x2d, 0x69, 0xf1, 0xf3, 0x7a, 0xe5, 0xb3, 0x29, 0x3c, 0xaf, 0x66, - 0x3f, 0xe8, 0x53, 0x4d, 0x3b, 0xf3, 0xa1, 0xae, 0x5d, 0xa0, 0x55, 0x0c, 0x94, 0xbd, 0x6f, 0xac, - 0x18, 0x28, 0xe7, 0xbe, 0xad, 0x75, 0x17, 0xdb, 0xb1, 0xc8, 0x4a, 0xd2, 0x0e, 0xbf, 0x63, 0x9b, - 0xb4, 0x74, 0xff, 0x4b, 0x77, 0x18, 0x7f, 0x45, 0x9e, 0xe3, 0x63, 0x8f, 0xfa, 0x95, 0x92, 0x44, - 0xcd, 0x4f, 0xdf, 0x3e, 0x51, 0x93, 0xa5, 0x65, 0x99, 0xaa, 0x3f, 0x6f, 0x0a, 0x75, 0xaf, 0xf7, - 0x01, 0x0e, 0xe3, 0x60, 0xb4, 0xe9, 0xd2, 0x61, 0xe0, 0x27, 0xb2, 0x36, 0xb9, 0xd0, 0x90, 0xc8, - 0x2f, 0xed, 0x56, 0x03, 0x79, 0xae, 0x9d, 0x8b, 0x8c, 0x5b, 0x39, 0x92, 0xb8, 0x26, 0xde, 0x79, - 0x50, 0x13, 0x92, 0x73, 0xef, 0xe1, 0x41, 0x81, 0xac, 0x03, 0x24, 0xae, 0x7f, 0x75, 0xca, 0xc9, - 0x44, 0x15, 0x28, 0xb1, 0x97, 0x13, 0x27, 0x70, 0x00, 0xb5, 0xc4, 0x51, 0xba, 0x9c, 0x5c, 0xa7, - 0x37, 0xdc, 0xaa, 0x6a, 0x07, 0xcf, 0xb8, 0x2f, 0xad, 0x36, 0x4e, 0x15, 0x90, 0x2a, 0x9b, 0x2a, - 0xf4, 0x49, 0x7a, 0x30, 0xcf, 0x3b, 0xa8, 0x14, 0x1c, 0x0c, 0xc4, 0x57, 0x6f, 0x7a, 0x66, 0x5d, - 0x88, 0x8a, 0x9b, 0x73, 0x3d, 0x60, 0x86, 0xb1, 0x86, 0x51, 0x2b, 0xbf, 0x04, 0xc0, 0x44, 0xf3, - 0x10, 0xe6, 0x32, 0x4e, 0x15, 0xc5, 0xd2, 0x93, 0xbc, 0x66, 0x8a, 0xa5, 0x27, 0xfa, 0x63, 0xac, - 0x45, 0x6c, 0x72, 0xd6, 0x02, 0x3c, 0x9c, 0x5d, 0x78, 0x71, 0xef, 0x8c, 0x35, 0xf7, 0x07, 0x05, - 0x98, 0xcf, 0xf1, 0x99, 0x90, 0x37, 0xe5, 0x39, 0x7f, 0xa2, 0x3f, 0xa5, 0x9b, 0x6b, 0x52, 0xb7, - 0x0e, 0xb1, 0x9d, 0xa7, 0xe4, 0x13, 0x63, 0x63, 0xe3, 0xd6, 0x6c, 0xc1, 0x99, 0xaf, 0x54, 0x2a, - 0x72, 0x35, 0x8a, 0x2f, 0x60, 0x99, 0x77, 0x64, 0x7d, 0x30, 0x48, 0x99, 0xfb, 0x6f, 0x65, 0xfe, - 0xfe, 0xa2, 0xe1, 0xc6, 0xe8, 0x4e, 0xfe, 0xfb, 0x8c, 0x13, 0x14, 0x60, 0xde, 0x55, 0x32, 0x86, - 0x76, 0xda, 0x84, 0x4e, 0x26, 0xd7, 0xd5, 0x7d, 0xc3, 0x38, 0xb1, 0xe6, 0x98, 0xdd, 0xbf, 0x8b, - 0x8d, 0xbd, 0x61, 0x75, 0xf3, 0xe6, 0x85, 0x1f, 0x62, 0xd9, 0x7a, 0xfc, 0x25, 0x65, 0xef, 0x4f, - 0x8d, 0x53, 0x36, 0x30, 0xc9, 0x41, 0xa1, 0xce, 0xcc, 0xf9, 0xee, 0x82, 0x3b, 0xd8, 0xfc, 0x8a, - 0x75, 0x3d, 0xaf, 0xf9, 0x90, 0x7f, 0xc2, 0x4f, 0xcf, 0xcb, 0x69, 0xbe, 0x96, 0x3d, 0x58, 0xc9, - 0x5b, 0xef, 0x89, 0xa7, 0x97, 0xd4, 0x5c, 0x4f, 0xa1, 0x6e, 0xd7, 0xd0, 0xed, 0xfb, 0x8a, 0x7d, - 0x72, 0x1c, 0x09, 0x8a, 0x7d, 0xf2, 0x1c, 0x02, 0xa6, 0x5e, 0x23, 0x5d, 0x01, 0x1f, 0x16, 0xee, - 0x3d, 0x7a, 0xeb, 0x47, 0xdf, 0x3d, 0xf5, 0xe2, 0xb3, 0xf1, 0xf1, 0x6a, 0x2f, 0x18, 0xde, 0x1f, - 0x48, 0xfb, 0xa0, 0xb8, 0x9c, 0x76, 0x7f, 0xe0, 0xf7, 0xef, 0x63, 0xb5, 0xc7, 0xd3, 0xf8, 0x07, - 0x63, 0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x46, 0xa4, 0x00, 0x62, 0x76, 0x00, - 0x00, + // 9799 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4d, 0x6c, 0x24, 0xc9, + 0x95, 0x5e, 0x67, 0xfd, 0x90, 0x55, 0xaf, 0x7e, 0x58, 0x0c, 0xb2, 0xc9, 0xea, 0xea, 0x9f, 0xe9, + 0x49, 0xb5, 0x66, 0x5a, 0xad, 0x11, 0xbb, 0x87, 0x92, 0x66, 0x7b, 0xa7, 0xbd, 0x5a, 0xf1, 0xaf, + 0x9b, 0xd4, 0xb0, 0x49, 0x2a, 0xc9, 0x56, 0xaf, 0xa4, 0x5d, 0xa4, 0x92, 0x55, 0x41, 0x32, 0xd5, + 0x55, 0x99, 0x35, 0x99, 0x59, 0x64, 0x53, 0xf2, 0xf8, 0x60, 0xd8, 0x86, 0xe1, 0x8b, 0x21, 0x2c, + 0x0c, 0x78, 0x0d, 0x1b, 0x0b, 0x68, 0x6d, 0x18, 0x86, 0x0f, 0xf6, 0xc5, 0xc6, 0xda, 0x90, 0x4f, + 0x3e, 0xac, 0x2f, 0xb6, 0x0f, 0x36, 0x60, 0xc0, 0x06, 0x0c, 0x2c, 0xd6, 0x07, 0x2f, 0x0c, 0xdf, + 0x6c, 0x9f, 0x8d, 0x78, 0xf1, 0x93, 0x11, 0x99, 0x59, 0xec, 0x1e, 0x49, 0x3b, 0x97, 0x6e, 0xc6, + 0xf7, 0x22, 0xe3, 0xf7, 0xbd, 0x17, 0x2f, 0xde, 0x8b, 0x88, 0x82, 0x7a, 0x34, 0xee, 0xaf, 0x8c, + 0xa3, 0x30, 0x09, 0x49, 0x75, 0x18, 0x44, 0xe3, 0x7e, 0xef, 0xd6, 0x69, 0x18, 0x9e, 0x0e, 0xe9, + 0x43, 0x6f, 0xec, 0x3f, 0xf4, 0x82, 0x20, 0x4c, 0xbc, 0xc4, 0x0f, 0x83, 0x98, 0x67, 0xb2, 0x7f, + 0x04, 0xed, 0x67, 0x34, 0x38, 0xa4, 0x74, 0xe0, 0xd0, 0x4f, 0x27, 0x34, 0x4e, 0xc8, 0x57, 0x61, + 0xde, 0xa3, 0x3f, 0xa1, 0x74, 0xe0, 0x8e, 0xbd, 0x38, 0x1e, 0x9f, 0x45, 0x5e, 0x4c, 0xbb, 0xd6, + 0x5d, 0xeb, 0x7e, 0xd3, 0xe9, 0x70, 0xc2, 0x81, 0xc2, 0xc9, 0xbb, 0xd0, 0x8c, 0x59, 0x56, 0x1a, + 0x24, 0x51, 0x38, 0xbe, 0xec, 0x96, 0x30, 0x5f, 0x83, 0x61, 0x5b, 0x1c, 0xb2, 0x87, 0x30, 0xa7, + 0x6a, 0x88, 0xc7, 0x61, 0x10, 0x53, 0xf2, 0x08, 0x16, 0xfb, 0xfe, 0xf8, 0x8c, 0x46, 0x2e, 0x7e, + 0x3c, 0x0a, 0xe8, 0x28, 0x0c, 0xfc, 0x7e, 0xd7, 0xba, 0x5b, 0xbe, 0x5f, 0x77, 0x08, 0xa7, 0xb1, + 0x2f, 0x9e, 0x0b, 0x0a, 0x79, 0x1f, 0xe6, 0x68, 0xc0, 0x71, 0x3a, 0xc0, 0xaf, 0x44, 0x55, 0xed, + 0x14, 0x66, 0x1f, 0xd8, 0x7f, 0xb3, 0x04, 0xf3, 0x3b, 0x81, 0x9f, 0xbc, 0xf4, 0x86, 0x43, 0x9a, + 0xc8, 0x3e, 0xbd, 0x0f, 0x73, 0x17, 0x08, 0x60, 0x9f, 0x2e, 0xc2, 0x68, 0x20, 0x7a, 0xd4, 0xe6, + 0xf0, 0x81, 0x40, 0xa7, 0xb6, 0xac, 0x34, 0xb5, 0x65, 0x85, 0xc3, 0x55, 0x9e, 0x32, 0x5c, 0xef, + 0xc3, 0x5c, 0x44, 0xfb, 0xe1, 0x39, 0x8d, 0x2e, 0xdd, 0x0b, 0x3f, 0x18, 0x84, 0x17, 0xdd, 0xca, + 0x5d, 0xeb, 0x7e, 0xd5, 0x69, 0x4b, 0xf8, 0x25, 0xa2, 0x64, 0x1d, 0xe6, 0xfa, 0x67, 0x5e, 0x10, + 0xd0, 0xa1, 0x7b, 0xec, 0xf5, 0x5f, 0x4d, 0xc6, 0x71, 0xb7, 0x7a, 0xd7, 0xba, 0xdf, 0x58, 0xbd, + 0xb1, 0x82, 0xb3, 0xba, 0xb2, 0x71, 0xe6, 0x05, 0xeb, 0x48, 0x39, 0x0c, 0xbc, 0x71, 0x7c, 0x16, + 0x26, 0x4e, 0x5b, 0x7c, 0xc1, 0xe1, 0xd8, 0x5e, 0x04, 0xa2, 0x8f, 0x04, 0x1f, 0x7b, 0xfb, 0x9f, + 0x5a, 0xb0, 0xf0, 0x22, 0x18, 0x86, 0xfd, 0x57, 0xbf, 0xe4, 0x10, 0x15, 0xf4, 0xa1, 0xf4, 0xb6, + 0x7d, 0x28, 0x7f, 0xde, 0x3e, 0x2c, 0xc1, 0xa2, 0xd9, 0x58, 0xd1, 0x0b, 0x0a, 0xd7, 0xd9, 0xd7, + 0xa7, 0x54, 0x36, 0x4b, 0x76, 0xe3, 0x2b, 0xd0, 0xe9, 0x4f, 0xa2, 0x88, 0x06, 0xb9, 0x7e, 0xcc, + 0x09, 0x5c, 0x75, 0xe4, 0x5d, 0x68, 0x06, 0xf4, 0x22, 0xcd, 0x26, 0x78, 0x37, 0xa0, 0x17, 0x32, + 0x8b, 0xdd, 0x85, 0xa5, 0x6c, 0x35, 0xa2, 0x01, 0x7f, 0x6a, 0x41, 0xe5, 0x45, 0xf2, 0x3a, 0x24, + 0x2b, 0x50, 0x49, 0x2e, 0xc7, 0x5c, 0x42, 0xda, 0xab, 0x44, 0x74, 0x6d, 0x6d, 0x30, 0x88, 0x68, + 0x1c, 0x1f, 0x5d, 0x8e, 0xa9, 0xd3, 0xf4, 0x78, 0xc2, 0x65, 0xf9, 0x48, 0x17, 0x66, 0x45, 0x1a, + 0x2b, 0xac, 0x3b, 0x32, 0x49, 0xee, 0x00, 0x78, 0xa3, 0x70, 0x12, 0x24, 0x6e, 0xec, 0x25, 0x38, + 0x54, 0x65, 0x47, 0x43, 0xc8, 0x2d, 0xa8, 0x8f, 0x5f, 0xb9, 0x71, 0x3f, 0xf2, 0xc7, 0x09, 0xb2, + 0x4d, 0xdd, 0x49, 0x01, 0xf2, 0x55, 0xa8, 0x85, 0x93, 0x64, 0x1c, 0xfa, 0x41, 0x22, 0x58, 0x65, + 0x4e, 0xb4, 0x65, 0x7f, 0x92, 0x1c, 0x30, 0xd8, 0x51, 0x19, 0xc8, 0x3d, 0x68, 0xf5, 0xc3, 0xe0, + 0xc4, 0x8f, 0x46, 0x5c, 0x19, 0x74, 0x67, 0xb0, 0x36, 0x13, 0xb4, 0xff, 0x55, 0x09, 0x1a, 0x47, + 0x91, 0x17, 0xc4, 0x5e, 0x9f, 0x01, 0xac, 0xe9, 0xc9, 0x6b, 0xf7, 0xcc, 0x8b, 0xcf, 0xb0, 0xb7, + 0x75, 0x47, 0x26, 0xc9, 0x12, 0xcc, 0xf0, 0x86, 0x62, 0x9f, 0xca, 0x8e, 0x48, 0x91, 0x0f, 0x60, + 0x3e, 0x98, 0x8c, 0x5c, 0xb3, 0xae, 0x32, 0x72, 0x4b, 0x9e, 0xc0, 0x06, 0xe0, 0x98, 0xcd, 0x35, + 0xaf, 0x82, 0xf7, 0x50, 0x43, 0x88, 0x0d, 0x4d, 0x91, 0xa2, 0xfe, 0xe9, 0x19, 0xef, 0x66, 0xd5, + 0x31, 0x30, 0x56, 0x46, 0xe2, 0x8f, 0xa8, 0x1b, 0x27, 0xde, 0x68, 0x2c, 0xba, 0xa5, 0x21, 0x48, + 0x0f, 0x13, 0x6f, 0xe8, 0x9e, 0x50, 0x1a, 0x77, 0x67, 0x05, 0x5d, 0x21, 0xe4, 0x3d, 0x68, 0x0f, + 0x68, 0x9c, 0xb8, 0x62, 0x52, 0x68, 0xdc, 0xad, 0xa1, 0xe8, 0x67, 0x50, 0x56, 0x4e, 0xe4, 0x5d, + 0xb8, 0x6c, 0x00, 0xe8, 0xeb, 0x6e, 0x9d, 0xb7, 0x35, 0x45, 0x18, 0xe7, 0x3c, 0xa3, 0x89, 0x36, + 0x7a, 0xb1, 0xe0, 0x50, 0x7b, 0x17, 0x88, 0x06, 0x6f, 0xd2, 0xc4, 0xf3, 0x87, 0x31, 0xf9, 0x08, + 0x9a, 0x89, 0x96, 0x19, 0x55, 0x61, 0x43, 0xb1, 0x93, 0xf6, 0x81, 0x63, 0xe4, 0xb3, 0xcf, 0xa0, + 0xf6, 0x94, 0xd2, 0x5d, 0x7f, 0xe4, 0x27, 0x64, 0x09, 0xaa, 0x27, 0xfe, 0x6b, 0xca, 0x19, 0xbe, + 0xbc, 0x7d, 0xcd, 0xe1, 0x49, 0xf2, 0x0e, 0x00, 0xfe, 0xe1, 0x8e, 0x14, 0x63, 0x6d, 0x5f, 0x73, + 0xea, 0x88, 0x3d, 0x67, 0x9c, 0xd5, 0x83, 0xd9, 0x31, 0x8d, 0xfa, 0x54, 0xce, 0xdf, 0xf6, 0x35, + 0x47, 0x02, 0xeb, 0xb3, 0x50, 0x1d, 0xb2, 0xd2, 0xed, 0x3f, 0xa9, 0x42, 0xe3, 0x90, 0x06, 0x4a, + 0xd2, 0x08, 0x54, 0xd8, 0x98, 0x08, 0xe9, 0xc2, 0xbf, 0xc9, 0x97, 0xa0, 0x81, 0xe3, 0x14, 0x27, + 0x91, 0x1f, 0x9c, 0x72, 0x06, 0x5f, 0x2f, 0x75, 0x2d, 0x07, 0x18, 0x7c, 0x88, 0x28, 0xe9, 0x40, + 0xd9, 0x1b, 0x49, 0x06, 0x67, 0x7f, 0x92, 0x1b, 0x50, 0xf3, 0x46, 0x09, 0x6f, 0x5e, 0x13, 0xe1, + 0x59, 0x6f, 0x94, 0x60, 0xd3, 0xde, 0x85, 0xe6, 0xd8, 0xbb, 0x1c, 0x31, 0x79, 0x56, 0x5c, 0xd1, + 0x74, 0x1a, 0x02, 0xdb, 0x66, 0x6c, 0xb1, 0x0a, 0x0b, 0x7a, 0x16, 0x59, 0x79, 0x55, 0x55, 0x3e, + 0xaf, 0xe5, 0x16, 0x6d, 0x78, 0x1f, 0xe6, 0xe4, 0x37, 0x11, 0xef, 0x0f, 0xf2, 0x4a, 0xdd, 0x69, + 0x0b, 0x58, 0xf6, 0xf2, 0x3e, 0x74, 0x4e, 0xfc, 0xc0, 0x1b, 0xba, 0xfd, 0x61, 0x72, 0xee, 0x0e, + 0xe8, 0x30, 0xf1, 0x90, 0x6b, 0xaa, 0x4e, 0x1b, 0xf1, 0x8d, 0x61, 0x72, 0xbe, 0xc9, 0x50, 0xf2, + 0x01, 0xd4, 0x4f, 0x28, 0x75, 0x71, 0xb0, 0xba, 0x35, 0x43, 0x02, 0xe5, 0x0c, 0x39, 0xb5, 0x13, + 0x39, 0x57, 0x1f, 0x40, 0x27, 0x9c, 0x24, 0xa7, 0xa1, 0x1f, 0x9c, 0xba, 0x4c, 0xe7, 0xb9, 0xfe, + 0x00, 0xb9, 0xa8, 0xb2, 0x5e, 0x7a, 0x64, 0x39, 0x6d, 0x49, 0x63, 0xda, 0x67, 0x67, 0x40, 0xde, + 0x83, 0xb9, 0xa1, 0x17, 0x27, 0xee, 0x59, 0x38, 0x76, 0xc7, 0x93, 0xe3, 0x57, 0xf4, 0xb2, 0xdb, + 0xc2, 0x81, 0x68, 0x31, 0x78, 0x3b, 0x1c, 0x1f, 0x20, 0x48, 0x6e, 0x03, 0x60, 0x3b, 0x79, 0x23, + 0xe0, 0xae, 0x75, 0xbf, 0xe5, 0xd4, 0x19, 0xc2, 0x2b, 0xfd, 0x3e, 0x2c, 0xe0, 0xf4, 0xf4, 0x27, + 0x71, 0x12, 0x8e, 0x5c, 0xa6, 0xaf, 0xa3, 0x41, 0xdc, 0x6d, 0x20, 0xaf, 0x7d, 0x45, 0x34, 0x56, + 0x9b, 0xe3, 0x95, 0x4d, 0x1a, 0x27, 0x1b, 0x98, 0xd9, 0xe1, 0x79, 0xd9, 0xa2, 0x7e, 0xe9, 0xcc, + 0x0f, 0xb2, 0x38, 0xf9, 0x00, 0x88, 0x37, 0x1c, 0x86, 0x17, 0x6e, 0x4c, 0x87, 0x27, 0xae, 0x18, + 0xc4, 0x6e, 0xfb, 0xae, 0x75, 0xbf, 0xe6, 0x74, 0x90, 0x72, 0x48, 0x87, 0x27, 0x07, 0x1c, 0x27, + 0x1f, 0x41, 0x0b, 0x1b, 0x72, 0x42, 0xbd, 0x64, 0x12, 0xd1, 0xb8, 0x3b, 0x77, 0xb7, 0x7c, 0xbf, + 0xbd, 0x3a, 0xaf, 0xc6, 0x0b, 0xe1, 0x75, 0x3f, 0x71, 0x9a, 0x2c, 0x9f, 0x48, 0xc7, 0xbd, 0x4d, + 0x58, 0x2a, 0x6e, 0x12, 0x63, 0x2a, 0x36, 0x2a, 0x8c, 0x19, 0x2b, 0x0e, 0xfb, 0x93, 0x2c, 0x42, + 0xf5, 0xdc, 0x1b, 0x4e, 0xa8, 0xd0, 0xeb, 0x3c, 0xf1, 0x71, 0xe9, 0xb1, 0x65, 0xff, 0xb1, 0x05, + 0x4d, 0xde, 0x4b, 0x61, 0x8f, 0xdc, 0x83, 0x96, 0xe4, 0x06, 0x1a, 0x45, 0x61, 0x24, 0xd4, 0x9b, + 0x09, 0x92, 0x07, 0xd0, 0x91, 0xc0, 0x38, 0xa2, 0xfe, 0xc8, 0x3b, 0x95, 0x65, 0xe7, 0x70, 0xb2, + 0x9a, 0x96, 0x18, 0x85, 0x93, 0x84, 0x8a, 0x95, 0xaf, 0x29, 0x3a, 0xe8, 0x30, 0xcc, 0x31, 0xb3, + 0x30, 0xf5, 0x56, 0xc0, 0xea, 0x06, 0x66, 0xff, 0x1d, 0x0b, 0x08, 0x6b, 0xfa, 0x51, 0xc8, 0x8b, + 0x10, 0x5c, 0x9a, 0x95, 0x12, 0xeb, 0xad, 0xa5, 0xa4, 0x74, 0x95, 0x94, 0xd8, 0x50, 0xe5, 0xad, + 0xaf, 0x14, 0xb4, 0x9e, 0x93, 0xbe, 0x53, 0xa9, 0x95, 0x3b, 0x15, 0xfb, 0xbf, 0x96, 0x61, 0x71, + 0x83, 0x2f, 0xdd, 0x6b, 0xfd, 0x3e, 0x1d, 0x2b, 0xf9, 0x79, 0x07, 0x1a, 0x41, 0x38, 0xa0, 0x92, + 0x6b, 0x79, 0xc3, 0x80, 0x41, 0x1a, 0xcb, 0x9e, 0x79, 0x7e, 0xc0, 0x1b, 0xce, 0xc7, 0xb3, 0x8e, + 0x08, 0x36, 0xfb, 0x3d, 0x98, 0x1b, 0xd3, 0x60, 0xa0, 0x8b, 0x09, 0x37, 0xae, 0x5a, 0x02, 0x16, + 0x12, 0xf2, 0x0e, 0x34, 0x4e, 0x26, 0x3c, 0x1f, 0x53, 0x2e, 0x15, 0xe4, 0x03, 0x10, 0xd0, 0x1a, + 0xd7, 0x31, 0xe3, 0x49, 0x7c, 0x86, 0xd4, 0x2a, 0x52, 0x67, 0x59, 0x9a, 0x91, 0x6e, 0x03, 0x0c, + 0x26, 0x71, 0x22, 0xa4, 0x66, 0x06, 0x89, 0x75, 0x86, 0x70, 0xa9, 0xf9, 0x1a, 0x2c, 0x8c, 0xbc, + 0xd7, 0x2e, 0xf2, 0x8f, 0xeb, 0x07, 0xee, 0xc9, 0x10, 0x57, 0x9f, 0x59, 0xcc, 0xd7, 0x19, 0x79, + 0xaf, 0xbf, 0xc7, 0x28, 0x3b, 0xc1, 0x53, 0xc4, 0x99, 0x6a, 0x91, 0x66, 0x4f, 0x44, 0x63, 0x1a, + 0x9d, 0x53, 0xd4, 0x06, 0x15, 0x65, 0xdb, 0x38, 0x1c, 0x65, 0x2d, 0x1a, 0xb1, 0x7e, 0x27, 0xc3, + 0x3e, 0x17, 0x7d, 0x67, 0x76, 0xe4, 0x07, 0xdb, 0xc9, 0xb0, 0x4f, 0x6e, 0x01, 0x30, 0x5d, 0x32, + 0xa6, 0x91, 0xfb, 0xea, 0x02, 0xe5, 0xb8, 0x82, 0xba, 0xe3, 0x80, 0x46, 0x9f, 0x5c, 0x90, 0x9b, + 0x50, 0xef, 0xc7, 0xa8, 0x8c, 0xbc, 0xcb, 0x6e, 0x03, 0x85, 0xbc, 0xd6, 0x8f, 0x99, 0x1a, 0xf2, + 0x2e, 0x99, 0x20, 0xb2, 0xd6, 0x7a, 0x38, 0x0b, 0x74, 0x80, 0xc5, 0xc7, 0xa8, 0x55, 0x5b, 0xd8, + 0xd8, 0x35, 0x41, 0x60, 0xf5, 0xc4, 0xe4, 0x4b, 0xd0, 0x92, 0x8d, 0x3d, 0x19, 0x7a, 0xa7, 0x31, + 0xaa, 0x95, 0x96, 0xd3, 0x14, 0xe0, 0x53, 0x86, 0xd9, 0x2f, 0xb9, 0xb1, 0xa5, 0xcd, 0xad, 0x90, + 0x1b, 0xb6, 0xec, 0x23, 0x82, 0xf3, 0x5a, 0x73, 0x44, 0xaa, 0x68, 0xd2, 0x4a, 0x05, 0x93, 0x66, + 0xff, 0xdc, 0x82, 0xa6, 0x28, 0x19, 0x2d, 0x14, 0xf2, 0x08, 0x88, 0x9c, 0xc5, 0xe4, 0xb5, 0x3f, + 0x70, 0x8f, 0x2f, 0x13, 0x1a, 0x73, 0xa6, 0xd9, 0xbe, 0xe6, 0x14, 0xd0, 0x98, 0x1e, 0x35, 0xd0, + 0x38, 0x89, 0x38, 0x4f, 0x6f, 0x5f, 0x73, 0x72, 0x14, 0x26, 0x62, 0xcc, 0x06, 0x9a, 0x24, 0xae, + 0x1f, 0x0c, 0xe8, 0x6b, 0x64, 0xa5, 0x96, 0x63, 0x60, 0xeb, 0x6d, 0x68, 0xea, 0xdf, 0xd9, 0x3f, + 0x86, 0x9a, 0xb4, 0xa0, 0xd0, 0x7a, 0xc8, 0xb4, 0xcb, 0xd1, 0x10, 0xd2, 0x83, 0x9a, 0xd9, 0x0a, + 0xa7, 0xf6, 0x79, 0xea, 0xb6, 0xbf, 0x05, 0x9d, 0x5d, 0xc6, 0x44, 0x01, 0x63, 0x5a, 0x61, 0x16, + 0x2e, 0xc1, 0x8c, 0x26, 0x3c, 0x75, 0x47, 0xa4, 0xd8, 0xfa, 0x7b, 0x16, 0xc6, 0x89, 0xa8, 0x07, + 0xff, 0xb6, 0xff, 0xc4, 0x02, 0xb2, 0x15, 0x27, 0xfe, 0xc8, 0x4b, 0xe8, 0x53, 0xaa, 0xd4, 0xc3, + 0x3e, 0x34, 0x59, 0x69, 0x47, 0xe1, 0x1a, 0x37, 0xd2, 0xb8, 0x71, 0xf1, 0x55, 0x21, 0xce, 0xf9, + 0x0f, 0x56, 0xf4, 0xdc, 0x5c, 0xe5, 0x1b, 0x05, 0x30, 0x69, 0x4b, 0xbc, 0xe8, 0x94, 0x26, 0x68, + 0xc1, 0x09, 0xfb, 0x1f, 0x38, 0xb4, 0x11, 0x06, 0x27, 0xbd, 0xdf, 0x86, 0xf9, 0x5c, 0x19, 0xba, + 0x8e, 0xae, 0x17, 0xe8, 0xe8, 0xb2, 0xae, 0xa3, 0xfb, 0xb0, 0x60, 0xb4, 0x4b, 0x70, 0x5c, 0x17, + 0x66, 0x99, 0x60, 0x30, 0x43, 0xc1, 0xe2, 0x86, 0x82, 0x48, 0x92, 0x55, 0x58, 0x3c, 0xa1, 0x34, + 0xf2, 0x12, 0x4c, 0xa2, 0xe8, 0xb0, 0x39, 0x11, 0x25, 0x17, 0xd2, 0xec, 0x3f, 0xb3, 0x60, 0x8e, + 0x69, 0xd3, 0xe7, 0x5e, 0x70, 0x29, 0xc7, 0x6a, 0xb7, 0x70, 0xac, 0xee, 0x6b, 0x8b, 0xa3, 0x96, + 0xfb, 0xf3, 0x0e, 0x54, 0x39, 0x3b, 0x50, 0xe4, 0x2e, 0x34, 0x8d, 0xe6, 0x56, 0xb9, 0x45, 0x1a, + 0x7b, 0xc9, 0x01, 0x8d, 0xd6, 0x2f, 0x13, 0xfa, 0xab, 0x0f, 0xe5, 0x7b, 0xd0, 0x49, 0x9b, 0x2d, + 0xc6, 0x91, 0x40, 0x85, 0x31, 0xa6, 0x28, 0x00, 0xff, 0xb6, 0xff, 0xbe, 0xc5, 0x33, 0x6e, 0x84, + 0xbe, 0xb2, 0x56, 0x59, 0x46, 0x66, 0xf4, 0xca, 0x8c, 0xec, 0xef, 0xa9, 0xd6, 0xfe, 0xaf, 0xde, + 0x59, 0xa6, 0x13, 0x63, 0x1a, 0x0c, 0x5c, 0x6f, 0x38, 0x44, 0x45, 0x5c, 0x73, 0x66, 0x59, 0x7a, + 0x6d, 0x38, 0xb4, 0xdf, 0x87, 0x79, 0xad, 0x75, 0x57, 0xf4, 0x63, 0x0f, 0xc8, 0xae, 0x1f, 0x27, + 0x2f, 0x82, 0x78, 0xac, 0x19, 0x72, 0x37, 0xa1, 0xce, 0xb4, 0x2d, 0x6b, 0x19, 0x97, 0xdc, 0xaa, + 0xc3, 0xd4, 0x2f, 0x6b, 0x57, 0x8c, 0x44, 0xef, 0xb5, 0x20, 0x96, 0x04, 0xd1, 0x7b, 0x8d, 0x44, + 0xfb, 0x31, 0x2c, 0x18, 0xe5, 0x89, 0xaa, 0xdf, 0x85, 0xea, 0x24, 0x79, 0x1d, 0x4a, 0x53, 0xbd, + 0x21, 0x38, 0x84, 0x6d, 0x0a, 0x1d, 0x4e, 0xb1, 0x9f, 0xc0, 0xfc, 0x1e, 0xbd, 0x10, 0x82, 0x2c, + 0x1b, 0xf2, 0xde, 0x1b, 0x37, 0x8c, 0x48, 0xb7, 0x57, 0x80, 0xe8, 0x1f, 0xa7, 0x02, 0x20, 0xb7, + 0x8f, 0x96, 0xb1, 0x7d, 0xb4, 0xdf, 0x03, 0x72, 0xe8, 0x9f, 0x06, 0xcf, 0x69, 0x1c, 0x7b, 0xa7, + 0x4a, 0xf4, 0x3b, 0x50, 0x1e, 0xc5, 0xa7, 0x42, 0x55, 0xb1, 0x3f, 0xed, 0xaf, 0xc3, 0x82, 0x91, + 0x4f, 0x14, 0x7c, 0x0b, 0xea, 0xb1, 0x7f, 0x1a, 0xa0, 0xa1, 0x25, 0x8a, 0x4e, 0x01, 0xfb, 0x29, + 0x2c, 0x7e, 0x8f, 0x46, 0xfe, 0xc9, 0xe5, 0x9b, 0x8a, 0x37, 0xcb, 0x29, 0x65, 0xcb, 0xd9, 0x82, + 0xeb, 0x99, 0x72, 0x44, 0xf5, 0x9c, 0x7d, 0xc5, 0x4c, 0xd6, 0x1c, 0x9e, 0xd0, 0x74, 0x5f, 0x49, + 0xd7, 0x7d, 0xf6, 0x0b, 0x20, 0x1b, 0x61, 0x10, 0xd0, 0x7e, 0x72, 0x40, 0x69, 0x94, 0x7a, 0xae, + 0x52, 0x5e, 0x6d, 0xac, 0x2e, 0x8b, 0x91, 0xcd, 0x2a, 0x54, 0xc1, 0xc4, 0x04, 0x2a, 0x63, 0x1a, + 0x8d, 0xb0, 0xe0, 0x9a, 0x83, 0x7f, 0xdb, 0xd7, 0x61, 0xc1, 0x28, 0x56, 0xec, 0xf5, 0x3f, 0x84, + 0xeb, 0x9b, 0x7e, 0xdc, 0xcf, 0x57, 0xd8, 0x85, 0xd9, 0xf1, 0xe4, 0xd8, 0x4d, 0x25, 0x51, 0x26, + 0xd9, 0xf6, 0x2f, 0xfb, 0x89, 0x28, 0xec, 0x6f, 0x58, 0x50, 0xd9, 0x3e, 0xda, 0xdd, 0x60, 0x6b, + 0x85, 0x1f, 0xf4, 0xc3, 0x11, 0xb3, 0xc2, 0x78, 0xa7, 0x55, 0x7a, 0xaa, 0x84, 0xdd, 0x82, 0x3a, + 0x1a, 0x6f, 0x6c, 0xc7, 0x2b, 0xec, 0xa0, 0x14, 0x60, 0xbb, 0x6d, 0xfa, 0x7a, 0xec, 0x47, 0xb8, + 0x9d, 0x96, 0x9b, 0xe4, 0x0a, 0x2e, 0x33, 0x79, 0x82, 0xfd, 0xef, 0x66, 0x61, 0x56, 0x2c, 0xbe, + 0x7c, 0x21, 0x4f, 0xfc, 0x73, 0x9a, 0x2e, 0xe4, 0x2c, 0xc5, 0x0c, 0xe3, 0x88, 0x8e, 0xc2, 0x44, + 0xd9, 0x6f, 0x7c, 0x1a, 0x4c, 0x10, 0xbd, 0x09, 0xc2, 0x88, 0xe0, 0xfe, 0x87, 0x32, 0xcf, 0x65, + 0x80, 0xe4, 0x16, 0xcc, 0x4a, 0x63, 0xa0, 0xa2, 0x36, 0x3a, 0x12, 0x62, 0xa3, 0xd1, 0xf7, 0xc6, + 0x5e, 0xdf, 0x4f, 0x2e, 0x85, 0x5a, 0x50, 0x69, 0x56, 0xfe, 0x30, 0xec, 0x7b, 0x43, 0xf7, 0xd8, + 0x1b, 0x7a, 0x41, 0x9f, 0x4a, 0x6f, 0x85, 0x01, 0xb2, 0x9d, 0xbb, 0x68, 0x96, 0xcc, 0xc6, 0x77, + 0xf7, 0x19, 0x94, 0xad, 0xe1, 0xfd, 0x70, 0x34, 0xf2, 0xd9, 0xee, 0x83, 0x9b, 0x66, 0x65, 0x47, + 0x43, 0xb8, 0x6f, 0x04, 0x53, 0x17, 0x7c, 0x04, 0xeb, 0xd2, 0x37, 0xa2, 0x81, 0xac, 0x94, 0x8c, + 0x85, 0x56, 0x76, 0x34, 0x84, 0xcd, 0xc5, 0x24, 0x88, 0x69, 0x92, 0x0c, 0xe9, 0x40, 0x35, 0xa8, + 0x81, 0xd9, 0xf2, 0x04, 0xf2, 0x08, 0x16, 0xb8, 0x0f, 0x22, 0xf6, 0x92, 0x30, 0x3e, 0xf3, 0x63, + 0x37, 0x66, 0xdb, 0x27, 0xbe, 0x17, 0x2e, 0x22, 0x91, 0xc7, 0xb0, 0x9c, 0x81, 0x23, 0xda, 0xa7, + 0xfe, 0x39, 0x1d, 0xa0, 0x09, 0x57, 0x76, 0xa6, 0x91, 0xc9, 0x5d, 0x68, 0x04, 0x93, 0x91, 0x3b, + 0x19, 0x0f, 0x3c, 0x66, 0xc4, 0xb4, 0xd1, 0xb8, 0xd4, 0x21, 0xf2, 0x21, 0x48, 0x3b, 0x4d, 0x58, + 0x8f, 0x73, 0x86, 0x86, 0x63, 0xdc, 0xeb, 0x98, 0x39, 0x18, 0x63, 0xa6, 0x26, 0x69, 0x47, 0xec, + 0x3b, 0x25, 0x80, 0x72, 0x12, 0xf9, 0xe7, 0x5e, 0x42, 0xbb, 0xf3, 0x5c, 0xa9, 0x8b, 0x24, 0xfb, + 0xce, 0x0f, 0xfc, 0xc4, 0xf7, 0x92, 0x30, 0xea, 0x12, 0xa4, 0xa5, 0x00, 0x1b, 0x44, 0xe4, 0x8f, + 0x38, 0xf1, 0x92, 0x49, 0x2c, 0x2c, 0xd4, 0x05, 0x64, 0xae, 0x3c, 0x81, 0x7c, 0x04, 0x4b, 0x9c, + 0x23, 0x90, 0x24, 0x6c, 0x6f, 0x34, 0x15, 0x16, 0x71, 0x44, 0xa6, 0x50, 0xd9, 0x50, 0x0a, 0x16, + 0xc9, 0x7d, 0x78, 0x9d, 0x0f, 0xe5, 0x14, 0x32, 0x6b, 0x1f, 0x6b, 0x81, 0xdf, 0x77, 0x45, 0x0e, + 0x26, 0x22, 0x4b, 0xd8, 0x8b, 0x3c, 0x81, 0xb1, 0xf8, 0xd0, 0x3f, 0xa1, 0x89, 0x3f, 0xa2, 0xdd, + 0x65, 0xce, 0xe2, 0x32, 0xcd, 0x04, 0x70, 0x32, 0x46, 0x4a, 0x97, 0x0b, 0x3c, 0x4f, 0x21, 0x33, + 0x0e, 0xc3, 0x98, 0x4a, 0xcf, 0x53, 0xf7, 0x86, 0x10, 0x2d, 0x1d, 0xb4, 0xff, 0xd0, 0xe2, 0x4b, + 0x94, 0x10, 0xe7, 0x58, 0xdb, 0x7c, 0x71, 0x41, 0x76, 0xc3, 0x60, 0x78, 0x29, 0x64, 0x1b, 0x38, + 0xb4, 0x1f, 0x0c, 0x2f, 0x99, 0xf9, 0xef, 0x07, 0x7a, 0x16, 0xae, 0x0d, 0x9b, 0x12, 0xc4, 0x4c, + 0xef, 0x40, 0x63, 0x3c, 0x39, 0x1e, 0xfa, 0x7d, 0x9e, 0xa5, 0xcc, 0x4b, 0xe1, 0x10, 0x66, 0x60, + 0xbb, 0x4f, 0x3e, 0x9f, 0x3c, 0x47, 0x05, 0x73, 0x34, 0x04, 0xc6, 0xb2, 0xd8, 0xeb, 0xb0, 0x68, + 0x36, 0x50, 0xa8, 0xfd, 0x07, 0x50, 0x13, 0x5a, 0x42, 0xba, 0x21, 0xda, 0x9a, 0x73, 0x98, 0x6d, + 0x96, 0x14, 0xdd, 0xfe, 0xd7, 0x15, 0x58, 0x10, 0xe8, 0x06, 0xeb, 0xfe, 0xe1, 0x64, 0x34, 0xf2, + 0xa2, 0x02, 0xf5, 0x63, 0xbd, 0x41, 0xfd, 0x94, 0xf2, 0xea, 0xe7, 0x8e, 0xb1, 0x0b, 0xe5, 0xfa, + 0x4b, 0x43, 0xc8, 0x7d, 0x98, 0x63, 0x43, 0xce, 0x37, 0x05, 0xba, 0x7f, 0x32, 0x0b, 0xe7, 0x55, + 0x66, 0xb5, 0x48, 0x65, 0xea, 0xea, 0x6e, 0x26, 0xa3, 0xee, 0x6c, 0x68, 0xf2, 0xe9, 0x15, 0x1a, + 0x7c, 0x56, 0x6c, 0xc9, 0x34, 0x8c, 0xb5, 0x27, 0xab, 0x5c, 0xb8, 0x26, 0x9b, 0x2b, 0x52, 0x2d, + 0xfe, 0x88, 0xe2, 0x0a, 0xa1, 0xe5, 0xae, 0x0b, 0xd5, 0x92, 0x27, 0x91, 0xa7, 0x00, 0xbc, 0x2e, + 0x34, 0x53, 0x00, 0xcd, 0x94, 0xf7, 0xcc, 0x59, 0xd1, 0xc7, 0x7f, 0x85, 0x25, 0x26, 0x11, 0x45, + 0xd3, 0x45, 0xfb, 0xd2, 0xfe, 0x5b, 0x16, 0x34, 0x34, 0x1a, 0xb9, 0x0e, 0xf3, 0x1b, 0xfb, 0xfb, + 0x07, 0x5b, 0xce, 0xda, 0xd1, 0xce, 0xf7, 0xb6, 0xdc, 0x8d, 0xdd, 0xfd, 0xc3, 0xad, 0xce, 0x35, + 0x06, 0xef, 0xee, 0x6f, 0xac, 0xed, 0xba, 0x4f, 0xf7, 0x9d, 0x0d, 0x09, 0x5b, 0x64, 0x09, 0x88, + 0xb3, 0xf5, 0x7c, 0xff, 0x68, 0xcb, 0xc0, 0x4b, 0xa4, 0x03, 0xcd, 0x75, 0x67, 0x6b, 0x6d, 0x63, + 0x5b, 0x20, 0x65, 0xb2, 0x08, 0x9d, 0xa7, 0x2f, 0xf6, 0x36, 0x77, 0xf6, 0x9e, 0xb9, 0x1b, 0x6b, + 0x7b, 0x1b, 0x5b, 0xbb, 0x5b, 0x9b, 0x9d, 0x0a, 0x69, 0x41, 0x7d, 0x6d, 0x7d, 0x6d, 0x6f, 0x73, + 0x7f, 0x6f, 0x6b, 0xb3, 0x53, 0xb5, 0xff, 0xbb, 0x05, 0xd7, 0xb1, 0xd5, 0x83, 0xac, 0x90, 0xdc, + 0x85, 0x46, 0x3f, 0x0c, 0xc7, 0x6c, 0x7b, 0x90, 0x2e, 0x80, 0x3a, 0xc4, 0x04, 0x80, 0xab, 0x8e, + 0x93, 0x30, 0xea, 0x53, 0x21, 0x23, 0x80, 0xd0, 0x53, 0x86, 0x30, 0x01, 0x10, 0xd3, 0xcb, 0x73, + 0x70, 0x11, 0x69, 0x70, 0x8c, 0x67, 0x59, 0x82, 0x99, 0xe3, 0x88, 0x7a, 0xfd, 0x33, 0x21, 0x1d, + 0x22, 0x45, 0xbe, 0x92, 0xee, 0x5f, 0xfb, 0x6c, 0xf4, 0x87, 0x74, 0x80, 0x1c, 0x53, 0x73, 0xe6, + 0x04, 0xbe, 0x21, 0x60, 0xa6, 0x2b, 0xbd, 0x63, 0x2f, 0x18, 0x84, 0x01, 0x1d, 0x08, 0xe3, 0x38, + 0x05, 0xec, 0x03, 0x58, 0xca, 0xf6, 0x4f, 0xc8, 0xd8, 0x47, 0x9a, 0x8c, 0x71, 0x5b, 0xb5, 0x37, + 0x7d, 0x36, 0x35, 0x79, 0xfb, 0xb3, 0x32, 0x54, 0x98, 0xe9, 0x32, 0xdd, 0xcc, 0xd1, 0xad, 0xd1, + 0x72, 0x2e, 0x98, 0x81, 0x5b, 0x62, 0xbe, 0x90, 0x09, 0x77, 0x4c, 0x8a, 0xa4, 0xf4, 0x88, 0xf6, + 0xcf, 0x85, 0x43, 0x46, 0x43, 0x98, 0x80, 0xb0, 0xad, 0x02, 0x7e, 0x2d, 0x04, 0x44, 0xa6, 0x25, + 0x0d, 0xbf, 0x9c, 0x4d, 0x69, 0xf8, 0x5d, 0x17, 0x66, 0xfd, 0xe0, 0x38, 0x9c, 0x04, 0x03, 0x14, + 0x88, 0x9a, 0x23, 0x93, 0x18, 0x3e, 0x41, 0x41, 0x65, 0x5a, 0x96, 0xb3, 0x7f, 0x0a, 0x90, 0x55, + 0xa8, 0xc7, 0x97, 0x41, 0x5f, 0xe7, 0xf9, 0x45, 0x31, 0x4a, 0x6c, 0x0c, 0x56, 0x0e, 0x2f, 0x83, + 0x3e, 0x72, 0x78, 0x9a, 0x8d, 0x7c, 0x13, 0x6a, 0xca, 0x81, 0xc9, 0x95, 0xd7, 0x0d, 0xfd, 0x13, + 0xe9, 0xb5, 0xe4, 0xfb, 0x42, 0x95, 0xb5, 0xf7, 0x09, 0xb4, 0x0c, 0x92, 0xbe, 0x99, 0x6b, 0xf1, + 0xcd, 0xdc, 0x3d, 0x7d, 0x33, 0x97, 0xea, 0x44, 0xf1, 0x99, 0xbe, 0xb9, 0xfb, 0x6d, 0xa8, 0xc9, + 0xa6, 0x31, 0xd1, 0x78, 0xb1, 0xf7, 0xc9, 0xde, 0xfe, 0xcb, 0x3d, 0xf7, 0xf0, 0xfb, 0x7b, 0x1b, + 0x9d, 0x6b, 0x64, 0x0e, 0x1a, 0x6b, 0x1b, 0x28, 0x6d, 0x08, 0x58, 0x2c, 0xcb, 0xc1, 0xda, 0xe1, + 0xa1, 0x42, 0x4a, 0x36, 0x81, 0x0e, 0xd3, 0xcc, 0xac, 0xc5, 0x2a, 0x44, 0xf1, 0x11, 0xcc, 0x6b, + 0x58, 0xba, 0xdf, 0x19, 0x33, 0x20, 0xb3, 0xdf, 0x41, 0xe3, 0x96, 0x53, 0xec, 0x65, 0xb8, 0xce, + 0x92, 0x5b, 0xe7, 0x34, 0x48, 0x0e, 0x27, 0xc7, 0x3c, 0x32, 0xe5, 0x87, 0x81, 0xfd, 0xd7, 0x2d, + 0xa8, 0x2b, 0xca, 0x15, 0xfc, 0x24, 0x83, 0x69, 0x25, 0x9c, 0x80, 0x9e, 0x56, 0x05, 0x7e, 0xb9, + 0x82, 0xff, 0x1a, 0x7b, 0xa4, 0xba, 0x82, 0x58, 0x67, 0x0f, 0xb6, 0xb6, 0x1c, 0x77, 0x7f, 0x6f, + 0x77, 0x67, 0x8f, 0x69, 0x16, 0xd6, 0x59, 0x04, 0x9e, 0x3e, 0x45, 0xc4, 0xb2, 0x3b, 0xd0, 0x7e, + 0x46, 0x93, 0x9d, 0xe0, 0x24, 0x94, 0x5d, 0xfd, 0x7f, 0x55, 0x98, 0x53, 0x50, 0xba, 0xc7, 0x3a, + 0xa7, 0x51, 0xec, 0x87, 0x01, 0x5a, 0x47, 0x75, 0x47, 0x26, 0x99, 0xda, 0xf5, 0x07, 0x34, 0x48, + 0xfc, 0xe4, 0xd2, 0x35, 0x9c, 0x32, 0x59, 0x98, 0xed, 0x67, 0xbc, 0xa1, 0xef, 0xc9, 0x20, 0x1f, + 0x4f, 0x30, 0xb4, 0x1f, 0x0e, 0xc3, 0x08, 0xcd, 0xa0, 0xba, 0xc3, 0x13, 0x64, 0x15, 0x16, 0x99, + 0xf9, 0xa5, 0xbb, 0xcc, 0x50, 0x58, 0xb9, 0x87, 0xa8, 0x90, 0xc6, 0xd4, 0x3a, 0xc3, 0xc5, 0xda, + 0xad, 0x3e, 0xe1, 0xd6, 0x7e, 0x11, 0x89, 0x7c, 0x03, 0xae, 0x33, 0x58, 0xad, 0xf7, 0xea, 0x9b, + 0x39, 0xfc, 0xa6, 0x98, 0xc8, 0xa4, 0x86, 0xd7, 0xcf, 0x66, 0xbe, 0xca, 0x0d, 0x3b, 0x05, 0xe4, + 0x22, 0x72, 0x33, 0x7c, 0xa9, 0xca, 0x46, 0xe4, 0xb4, 0xa8, 0x5e, 0x2d, 0x17, 0xd5, 0xfb, 0x06, + 0x5c, 0x3f, 0xa6, 0x71, 0xe2, 0x9e, 0x51, 0x6f, 0x40, 0x23, 0x94, 0x46, 0x1e, 0xbc, 0xe3, 0x76, + 0x6c, 0x31, 0x11, 0x17, 0xc0, 0xcb, 0xa0, 0x4f, 0x07, 0x6e, 0x12, 0xba, 0xb8, 0x50, 0xa3, 0x4c, + 0xd7, 0x9c, 0x2c, 0x6c, 0xe6, 0x3c, 0x8d, 0xbc, 0xf1, 0x99, 0x30, 0x34, 0xb3, 0x30, 0x33, 0x11, + 0x12, 0x1a, 0x27, 0x01, 0xe5, 0xa1, 0x93, 0x1a, 0xba, 0xc5, 0x25, 0x44, 0xee, 0xc1, 0x0c, 0x16, + 0x18, 0x77, 0x3b, 0x28, 0x00, 0xcd, 0x54, 0x89, 0xfa, 0x81, 0x23, 0x68, 0x6c, 0x5b, 0x39, 0x89, + 0xfc, 0xb8, 0xdb, 0xc4, 0xa8, 0x21, 0xfe, 0x4d, 0xbe, 0xad, 0xe9, 0x89, 0x05, 0xfc, 0xf6, 0x9e, + 0xf8, 0x36, 0xc3, 0x79, 0x5f, 0x88, 0xca, 0xf8, 0x4e, 0xa5, 0xd6, 0xe8, 0x34, 0xed, 0xdf, 0x80, + 0x2a, 0xb6, 0x1c, 0x79, 0x12, 0xc7, 0xcf, 0x12, 0x3c, 0x89, 0x68, 0x17, 0x66, 0x03, 0x9a, 0x5c, + 0x84, 0xd1, 0x2b, 0x19, 0xa6, 0x16, 0x49, 0xfb, 0x27, 0xb8, 0xf7, 0x56, 0x61, 0xdb, 0x17, 0xb8, + 0x69, 0x20, 0x37, 0xa1, 0xce, 0xe7, 0x34, 0x3e, 0xf3, 0x84, 0x3b, 0xa0, 0x86, 0xc0, 0xe1, 0x99, + 0xc7, 0xd6, 0x47, 0x83, 0x4d, 0xb8, 0x87, 0xa5, 0x81, 0xd8, 0x36, 0xe7, 0x92, 0x7b, 0xd0, 0x96, + 0x01, 0xe1, 0xd8, 0x1d, 0xd2, 0x93, 0x44, 0xfa, 0x47, 0x83, 0xc9, 0x08, 0xdd, 0x30, 0xbb, 0xf4, + 0x24, 0xb1, 0xf7, 0x60, 0x5e, 0xac, 0x59, 0xfb, 0x63, 0x2a, 0xab, 0xfe, 0xcd, 0x22, 0xfb, 0xaf, + 0xb1, 0xba, 0x60, 0x2e, 0x72, 0x3c, 0x04, 0x6e, 0xe6, 0xb4, 0x1d, 0x20, 0xfa, 0x1a, 0x28, 0x0a, + 0x14, 0x06, 0x98, 0xf4, 0x00, 0x8b, 0xee, 0x18, 0x18, 0x1b, 0x9f, 0x78, 0xd2, 0xef, 0xcb, 0x30, + 0x7e, 0xcd, 0x91, 0x49, 0xfb, 0x3f, 0x5b, 0xb0, 0x80, 0xa5, 0x49, 0x0b, 0x56, 0xd8, 0x19, 0x8f, + 0x3f, 0x47, 0x33, 0xa5, 0xff, 0x9d, 0x7b, 0x9d, 0x17, 0xa1, 0xaa, 0x5b, 0x1e, 0x3c, 0xf1, 0xf9, + 0xbd, 0x6d, 0x95, 0x9c, 0xb7, 0xed, 0x01, 0x74, 0x06, 0x74, 0xe8, 0xe3, 0x51, 0x0e, 0xb9, 0x8e, + 0x73, 0x73, 0x35, 0x87, 0xdb, 0x7f, 0xd7, 0x82, 0x79, 0x6e, 0x28, 0xe0, 0x9e, 0x4b, 0x0c, 0xd5, + 0x5f, 0x92, 0xfb, 0x13, 0xa1, 0xa0, 0x44, 0xa7, 0xd2, 0xa5, 0x13, 0x51, 0x9e, 0x79, 0xfb, 0x9a, + 0x63, 0x66, 0x26, 0x4f, 0xd0, 0xea, 0x0e, 0x5c, 0x44, 0x0b, 0x0e, 0x87, 0x98, 0xf3, 0xb2, 0x7d, + 0xcd, 0xd1, 0xb2, 0xaf, 0xd7, 0xd8, 0x96, 0x89, 0xe1, 0xf6, 0x33, 0x68, 0x19, 0x15, 0x19, 0x5e, + 0xc1, 0x26, 0xf7, 0x0a, 0xe6, 0xdc, 0xef, 0xa5, 0x02, 0xf7, 0xfb, 0xef, 0x57, 0x80, 0x30, 0xc6, + 0xca, 0xcc, 0xdc, 0x5d, 0x33, 0x86, 0x25, 0xcf, 0x89, 0xa4, 0x10, 0x59, 0x05, 0xa2, 0x25, 0x65, + 0x6c, 0xad, 0xac, 0x62, 0x6b, 0x05, 0x54, 0xa6, 0xf5, 0x85, 0x55, 0xa9, 0xe2, 0x56, 0xe8, 0xf1, + 0xe1, 0xd3, 0x54, 0x48, 0x63, 0x96, 0x0f, 0x06, 0xb1, 0xd8, 0xde, 0x54, 0x78, 0x49, 0x64, 0x3a, + 0xcb, 0x0f, 0x33, 0x6f, 0xe4, 0x87, 0xd9, 0x1c, 0x3f, 0x68, 0xfb, 0xf4, 0x9a, 0xb9, 0x4f, 0xbf, + 0x07, 0x2d, 0x19, 0xab, 0xe2, 0x61, 0x7a, 0xe1, 0x14, 0x31, 0x40, 0xc6, 0x4f, 0x72, 0xab, 0xac, + 0x9c, 0x01, 0x3c, 0x08, 0x9d, 0xc3, 0xd9, 0xc2, 0x92, 0xfa, 0x63, 0x1b, 0xd8, 0xd8, 0x14, 0xc0, + 0x9d, 0x35, 0xe3, 0x12, 0x77, 0x12, 0x88, 0x33, 0x22, 0x74, 0x80, 0xee, 0x10, 0xb6, 0xb3, 0xce, + 0x12, 0xf2, 0xbb, 0xe4, 0x56, 0xc1, 0x2e, 0x99, 0x7c, 0x94, 0x06, 0x76, 0xe2, 0x33, 0x7f, 0x84, + 0x6b, 0x7b, 0x7a, 0xc4, 0xe2, 0x29, 0x27, 0x1d, 0x9e, 0xf9, 0x23, 0xc7, 0xc8, 0x67, 0xff, 0xc2, + 0x82, 0x0e, 0xe3, 0x0a, 0x83, 0xf1, 0x3f, 0x06, 0x94, 0xd1, 0xb7, 0xe4, 0x7b, 0x23, 0x2f, 0x79, + 0x0c, 0x75, 0x4c, 0x87, 0x63, 0x1a, 0x08, 0xae, 0xef, 0x9a, 0x5c, 0x9f, 0x6a, 0xb7, 0xed, 0x6b, + 0x4e, 0x9a, 0x99, 0xad, 0x65, 0xd9, 0xc0, 0x1a, 0x8f, 0x12, 0x67, 0x61, 0x4d, 0x3a, 0xb6, 0x01, + 0x3e, 0xa1, 0x97, 0xbb, 0x61, 0x1f, 0x5d, 0x2a, 0xb7, 0x01, 0x18, 0x0f, 0x9e, 0x78, 0x23, 0x5f, + 0x78, 0x04, 0xaa, 0x4e, 0xfd, 0x15, 0xbd, 0x7c, 0x8a, 0x00, 0x53, 0xe3, 0x8c, 0x9c, 0x8a, 0x48, + 0xd5, 0xa9, 0xbd, 0xa2, 0x97, 0x3b, 0x28, 0x1e, 0x2e, 0xb4, 0x3e, 0xa1, 0x97, 0x9b, 0x94, 0xdb, + 0x75, 0x61, 0x44, 0x6c, 0x68, 0x45, 0xde, 0x05, 0xb3, 0xdc, 0x8c, 0x88, 0x58, 0x23, 0xf2, 0x2e, + 0x3e, 0xa1, 0x97, 0xeb, 0x18, 0x12, 0x7b, 0x00, 0xb3, 0x8c, 0x3e, 0x0c, 0xfb, 0x62, 0x65, 0x92, + 0x41, 0xfe, 0xb4, 0x51, 0xce, 0xcc, 0x2b, 0xfc, 0xdb, 0xfe, 0x8f, 0x16, 0xb4, 0xd8, 0x08, 0xa0, + 0xda, 0x63, 0x33, 0x21, 0xcf, 0x8a, 0x58, 0xe9, 0x59, 0x91, 0x55, 0xa1, 0x33, 0xb8, 0x0e, 0x2d, + 0x4d, 0xd7, 0xa1, 0x38, 0x6c, 0x5c, 0x81, 0x7e, 0x08, 0x75, 0x2e, 0x4e, 0x4c, 0x7c, 0xcb, 0xc6, + 0x4c, 0x19, 0x1d, 0x72, 0x6a, 0x98, 0xed, 0x13, 0x1e, 0x96, 0xd6, 0x7c, 0x3a, 0x7c, 0x90, 0xeb, + 0x1c, 0x61, 0xe4, 0x82, 0x08, 0x67, 0xb5, 0x28, 0xc2, 0xf9, 0x02, 0x1a, 0x1a, 0x63, 0x91, 0x6f, + 0xf1, 0xd8, 0x30, 0x6f, 0x3c, 0xe7, 0x42, 0x93, 0x71, 0x8c, 0xde, 0xa3, 0xc2, 0xd4, 0x81, 0xf5, + 0x19, 0xa8, 0x20, 0x4b, 0x3e, 0x81, 0x79, 0xad, 0x58, 0xbe, 0x43, 0x2c, 0x6a, 0x93, 0x55, 0xd4, + 0xa6, 0x3f, 0xb0, 0x60, 0x51, 0x7c, 0x8d, 0xe7, 0x8a, 0x7c, 0xb6, 0x8c, 0x3f, 0x8f, 0x4f, 0xd9, + 0x42, 0xca, 0x4a, 0x77, 0x23, 0x7a, 0xea, 0xc7, 0x09, 0x95, 0x8e, 0xf4, 0x02, 0x09, 0x61, 0x2c, + 0xcd, 0xb2, 0x3a, 0x22, 0x27, 0x79, 0x02, 0x0d, 0xfc, 0x94, 0xef, 0x61, 0xc5, 0xb4, 0x74, 0xf3, + 0x1f, 0xf2, 0xa6, 0x32, 0x4d, 0x1e, 0xab, 0xd4, 0x7a, 0x1d, 0x66, 0x93, 0xc8, 0x3f, 0x3d, 0xa5, + 0x91, 0xbd, 0xa4, 0x9a, 0xc6, 0xa4, 0x8d, 0x1e, 0x26, 0x74, 0xcc, 0x8c, 0x23, 0xc6, 0x19, 0x0d, + 0x21, 0x54, 0xbf, 0xb4, 0xf3, 0xbc, 0xa7, 0x9d, 0x90, 0xe3, 0xbb, 0xd5, 0xf4, 0x40, 0xdc, 0x7d, + 0x98, 0x1b, 0x31, 0x43, 0x89, 0x59, 0xf0, 0x86, 0xe3, 0x3c, 0x0b, 0x33, 0xc3, 0x1b, 0xed, 0x96, + 0xd8, 0x4d, 0xfc, 0xa1, 0x2b, 0xa9, 0xe2, 0x2c, 0x5a, 0x11, 0x89, 0x2d, 0xdf, 0x71, 0xe2, 0x9d, + 0x52, 0x61, 0x1d, 0xf3, 0x84, 0xdd, 0x85, 0xa5, 0x83, 0x74, 0x5a, 0x34, 0x87, 0x84, 0xfd, 0xcf, + 0x5a, 0xb0, 0x9c, 0x23, 0xa9, 0x93, 0xb3, 0xc2, 0x1b, 0x3c, 0xf4, 0x47, 0xc7, 0xa1, 0xf2, 0xe6, + 0x58, 0xba, 0xa3, 0xd8, 0x20, 0x91, 0x53, 0xb8, 0x2e, 0xb9, 0x82, 0xa9, 0x90, 0xd4, 0xec, 0x2f, + 0xa1, 0x25, 0xfa, 0xa1, 0xa9, 0xb1, 0xb2, 0x15, 0x4a, 0x5c, 0x5f, 0x15, 0x8b, 0xcb, 0x23, 0x67, + 0xd0, 0x55, 0xec, 0x27, 0x2c, 0x25, 0x6d, 0x27, 0xc3, 0xea, 0xfa, 0xe0, 0x0d, 0x75, 0x19, 0xfe, + 0x0b, 0x67, 0x6a, 0x69, 0xe4, 0x12, 0xee, 0x48, 0x1a, 0x9a, 0x42, 0xf9, 0xfa, 0x2a, 0x6f, 0xd5, + 0x37, 0xf4, 0xcc, 0x98, 0x95, 0xbe, 0xa1, 0x60, 0xf2, 0x63, 0x58, 0xba, 0xf0, 0xfc, 0x44, 0x36, + 0x4b, 0xdb, 0x45, 0x55, 0xb1, 0xca, 0xd5, 0x37, 0x54, 0xf9, 0x92, 0x7f, 0x6c, 0xd8, 0x87, 0x53, + 0x4a, 0xec, 0xfd, 0xa2, 0x04, 0x6d, 0xb3, 0x1c, 0xc6, 0xa6, 0x42, 0x2b, 0x49, 0x83, 0x42, 0xee, + 0x3f, 0x33, 0x70, 0xde, 0x29, 0x5a, 0x2a, 0x72, 0x8a, 0xea, 0x6e, 0xc8, 0xf2, 0x9b, 0xa2, 0x2e, + 0x95, 0xb7, 0x8b, 0xba, 0x54, 0x0b, 0xa3, 0x2e, 0xd3, 0x9d, 0xf3, 0x33, 0xbf, 0xac, 0x73, 0x7e, + 0xf6, 0x4a, 0xe7, 0x7c, 0xef, 0xff, 0x5a, 0x40, 0xf2, 0xdc, 0x4b, 0x9e, 0x71, 0x3f, 0x70, 0x40, + 0x87, 0x42, 0xbd, 0x7d, 0xed, 0xed, 0x24, 0x40, 0xce, 0x96, 0xfc, 0x9a, 0x89, 0xa2, 0x7e, 0x7c, + 0x55, 0xdf, 0xdb, 0xb4, 0x9c, 0x22, 0x52, 0x26, 0xf2, 0x54, 0x79, 0x73, 0xe4, 0xa9, 0xfa, 0xe6, + 0xc8, 0xd3, 0x4c, 0x36, 0xf2, 0xd4, 0xfb, 0x6b, 0x16, 0x2c, 0x14, 0xb0, 0xd9, 0xaf, 0xaf, 0xe3, + 0x8c, 0x31, 0x0c, 0xed, 0x53, 0x12, 0x8c, 0xa1, 0x83, 0xbd, 0xbf, 0x0c, 0x2d, 0x43, 0xb4, 0x7e, + 0x7d, 0xf5, 0x67, 0xb7, 0x67, 0x9c, 0xb3, 0x0d, 0xac, 0xf7, 0xbf, 0x4a, 0x40, 0xf2, 0xe2, 0xfd, + 0x85, 0xb6, 0x21, 0x3f, 0x4e, 0xe5, 0x82, 0x71, 0xfa, 0x0b, 0x5d, 0x79, 0x3e, 0x80, 0x79, 0x71, + 0x26, 0x5f, 0xf3, 0xfc, 0x73, 0x8e, 0xc9, 0x13, 0xd8, 0x06, 0xd5, 0x0c, 0xfb, 0xd5, 0x8c, 0x33, + 0xc8, 0xda, 0xf2, 0x9b, 0x89, 0xfe, 0xd9, 0x3d, 0xe8, 0x8a, 0x11, 0xca, 0xbb, 0xfe, 0xfe, 0x45, + 0x59, 0xed, 0xb1, 0x91, 0x28, 0xec, 0xe7, 0x6f, 0x40, 0x53, 0x5f, 0x3e, 0xc4, 0x74, 0x64, 0x82, + 0x3f, 0xcc, 0xcc, 0xd0, 0x73, 0x91, 0x4d, 0x68, 0xa3, 0x92, 0x1c, 0xa8, 0xef, 0xb8, 0xa5, 0x71, + 0x85, 0x43, 0x7b, 0xfb, 0x9a, 0x93, 0xf9, 0x86, 0xfc, 0x16, 0xb4, 0x4d, 0x37, 0x97, 0xb0, 0x09, + 0x8b, 0xcc, 0x48, 0xf6, 0xb9, 0x99, 0x99, 0xac, 0x41, 0x27, 0xeb, 0x27, 0x13, 0x07, 0x24, 0xa7, + 0x14, 0x90, 0xcb, 0x4e, 0x1e, 0x0b, 0x3f, 0x67, 0x15, 0xfd, 0x9c, 0xf7, 0xcc, 0xcf, 0xb4, 0x61, + 0x5a, 0xe1, 0xff, 0x69, 0x1e, 0xcf, 0xdf, 0x05, 0x48, 0x31, 0xd2, 0x81, 0xe6, 0xfe, 0xc1, 0xd6, + 0x9e, 0xbb, 0xb1, 0xbd, 0xb6, 0xb7, 0xb7, 0xb5, 0xdb, 0xb9, 0x46, 0x08, 0xb4, 0x31, 0x2e, 0xb2, + 0xa9, 0x30, 0x8b, 0x61, 0xc2, 0x0b, 0x2c, 0xb1, 0x12, 0x59, 0x84, 0xce, 0xce, 0x5e, 0x06, 0x2d, + 0x33, 0x4b, 0x4c, 0x34, 0x91, 0x59, 0x62, 0xfc, 0xce, 0xc5, 0x3a, 0x67, 0x0f, 0x69, 0x9d, 0xfc, + 0x03, 0x0b, 0xae, 0x67, 0x08, 0xe9, 0x29, 0x5a, 0x6e, 0x80, 0x98, 0x56, 0x89, 0x09, 0x62, 0x4c, + 0x57, 0x6e, 0xdc, 0x32, 0x1a, 0x24, 0x4f, 0x60, 0x3c, 0xaf, 0x6d, 0xf4, 0x32, 0x92, 0x54, 0x44, + 0xb2, 0x97, 0xd5, 0x61, 0xc5, 0x4c, 0xc3, 0x4f, 0xf8, 0x5d, 0x0e, 0x9d, 0x90, 0xfa, 0x7b, 0xcd, + 0x26, 0xcb, 0x24, 0xdb, 0xa3, 0x1b, 0xc6, 0x8e, 0xd9, 0xde, 0x42, 0x9a, 0xfd, 0xbf, 0x2b, 0x40, + 0xbe, 0x3b, 0xa1, 0xd1, 0x25, 0x1e, 0x93, 0x55, 0x61, 0xa6, 0xe5, 0xac, 0xd3, 0x7b, 0x66, 0x3c, + 0x39, 0x66, 0x5b, 0x09, 0xb1, 0xc5, 0x29, 0xbd, 0xd5, 0x71, 0xf8, 0xa2, 0xe3, 0xe8, 0x95, 0x37, + 0x1f, 0x47, 0xaf, 0xbe, 0xe9, 0x38, 0xfa, 0x97, 0xa0, 0xe5, 0x9f, 0x06, 0x21, 0x53, 0x07, 0xcc, + 0x84, 0x88, 0xbb, 0x33, 0x77, 0xcb, 0xf7, 0x9b, 0x4e, 0x53, 0x80, 0x7b, 0x0c, 0x23, 0x4f, 0xd2, + 0x4c, 0x74, 0x70, 0x8a, 0xd7, 0x27, 0x74, 0x05, 0xb1, 0x35, 0x38, 0xa5, 0x62, 0x47, 0x87, 0x4e, + 0x0f, 0xf9, 0x31, 0xc3, 0x63, 0x72, 0x0f, 0xda, 0x71, 0x38, 0x61, 0x46, 0x95, 0x1c, 0x06, 0xee, + 0x0a, 0x6e, 0x72, 0xf4, 0x80, 0x0f, 0xc6, 0x0a, 0x2c, 0x4c, 0x62, 0xea, 0x8e, 0xfc, 0x38, 0x66, + 0x0b, 0x67, 0x3f, 0x0c, 0x92, 0x28, 0x1c, 0x0a, 0xd7, 0xee, 0xfc, 0x24, 0xa6, 0xcf, 0x39, 0x65, + 0x83, 0x13, 0xc8, 0x37, 0xd2, 0x26, 0x8d, 0x3d, 0x3f, 0x8a, 0xbb, 0x80, 0x4d, 0x92, 0x3d, 0x65, + 0xed, 0x3e, 0xf0, 0xfc, 0x48, 0xb5, 0x85, 0x25, 0xe2, 0xcc, 0x31, 0xf9, 0x46, 0xf6, 0x98, 0xfc, + 0x8f, 0x8a, 0x8f, 0xc9, 0xb7, 0xb0, 0xe8, 0x47, 0xa2, 0xe8, 0xfc, 0x14, 0xbf, 0xfd, 0x69, 0xf9, + 0x5f, 0xcf, 0x39, 0x76, 0x71, 0xf4, 0x7a, 0x05, 0x6a, 0xb2, 0x9b, 0x84, 0x40, 0xe5, 0x24, 0x0a, + 0x47, 0xd2, 0xf1, 0xc5, 0xfe, 0x26, 0x6d, 0x28, 0x25, 0xa1, 0xf8, 0xb8, 0x94, 0x84, 0xf6, 0xef, + 0x41, 0x43, 0x9b, 0x29, 0xf2, 0x2e, 0xdf, 0x4f, 0x33, 0x9b, 0x50, 0x6c, 0x18, 0x79, 0x68, 0xbc, + 0x2e, 0xd0, 0x9d, 0x01, 0xf9, 0x2a, 0xcc, 0x0f, 0xfc, 0x88, 0xe2, 0x8d, 0x13, 0x37, 0xa2, 0xe7, + 0x34, 0x8a, 0xa5, 0x2f, 0xb2, 0xa3, 0x08, 0x0e, 0xc7, 0x6d, 0x17, 0x16, 0x8c, 0xa1, 0x51, 0xca, + 0x61, 0x06, 0xcf, 0x8b, 0xcb, 0xf0, 0x91, 0x79, 0x96, 0x5c, 0xd0, 0xd8, 0xb2, 0x2a, 0xdc, 0xa8, + 0xee, 0x38, 0x0a, 0x8f, 0xb1, 0x12, 0xcb, 0x31, 0x30, 0xfb, 0x7f, 0x96, 0xa1, 0xbc, 0x1d, 0x8e, + 0xf5, 0x80, 0xbe, 0x95, 0x0f, 0xe8, 0x0b, 0xfb, 0xd7, 0x55, 0xe6, 0xad, 0x30, 0x52, 0x0c, 0x90, + 0x3c, 0x80, 0x36, 0x93, 0xb4, 0x24, 0x64, 0xf6, 0xfe, 0x85, 0x17, 0xf1, 0xc3, 0xe5, 0x65, 0x64, + 0xdf, 0x0c, 0x85, 0x2c, 0x42, 0x59, 0x99, 0x6d, 0x98, 0x81, 0x25, 0xd9, 0x66, 0x13, 0x8f, 0x56, + 0x5d, 0x8a, 0xe0, 0x88, 0x48, 0x31, 0xc5, 0x65, 0x7e, 0xcf, 0xc5, 0x99, 0x2f, 0xbe, 0x45, 0x24, + 0x66, 0x8b, 0x33, 0x81, 0x1d, 0xa5, 0xa6, 0xad, 0x4a, 0xeb, 0x11, 0xb3, 0x9a, 0x19, 0x31, 0xbb, + 0x0b, 0x8d, 0x64, 0x78, 0xee, 0x8e, 0xbd, 0xcb, 0x61, 0xe8, 0x0d, 0x84, 0xa0, 0xe8, 0x10, 0x79, + 0x04, 0x30, 0x1a, 0x8f, 0x05, 0x17, 0xa3, 0x3b, 0xae, 0xb1, 0xda, 0x11, 0xa3, 0xff, 0xfc, 0xe0, + 0x80, 0x73, 0x9f, 0xa3, 0xe5, 0x21, 0x5b, 0xd0, 0x2e, 0xbc, 0x21, 0x72, 0x5b, 0x1e, 0x00, 0x0a, + 0xc7, 0x2b, 0x05, 0x7c, 0x9e, 0xf9, 0xa8, 0xf7, 0x6d, 0x20, 0xbf, 0xe2, 0x45, 0x8d, 0x97, 0x50, + 0x57, 0x2d, 0xd4, 0xaf, 0x47, 0xe0, 0x29, 0xbf, 0x86, 0x79, 0x3d, 0x02, 0x0f, 0xf5, 0xbd, 0x07, + 0x6d, 0xbe, 0xda, 0x28, 0xfd, 0xc9, 0x4f, 0x66, 0x65, 0x50, 0xfb, 0xcf, 0x2d, 0xa8, 0x22, 0xe7, + 0x31, 0xf3, 0x8b, 0xd3, 0xd4, 0x49, 0x08, 0x11, 0x54, 0xc9, 0xc2, 0xc4, 0x36, 0x6e, 0x8e, 0x95, + 0x14, 0x1b, 0xe8, 0xb7, 0xc7, 0xee, 0x42, 0x5d, 0xd5, 0xa4, 0xb1, 0x52, 0x0a, 0x92, 0x3b, 0x50, + 0x39, 0x0b, 0xc7, 0x72, 0x87, 0x0a, 0xe9, 0x88, 0x3a, 0x88, 0xa7, 0xed, 0x61, 0xe5, 0xf1, 0x2e, + 0xf0, 0x5d, 0x40, 0x16, 0x2e, 0xe8, 0xeb, 0x4c, 0x61, 0x5f, 0x5f, 0xc0, 0x1c, 0xd3, 0x0f, 0x5a, + 0xd0, 0x73, 0xfa, 0x5a, 0xf4, 0x15, 0x66, 0xda, 0xf4, 0x87, 0x93, 0x01, 0xd5, 0xfd, 0x04, 0x18, + 0x2c, 0x13, 0xb8, 0xb4, 0x90, 0xed, 0x7f, 0x6e, 0x71, 0xbd, 0xc3, 0xca, 0x25, 0xf7, 0xa1, 0xc2, + 0x96, 0x8d, 0x8c, 0x33, 0x4b, 0x9d, 0xbc, 0x64, 0xf9, 0x1c, 0xcc, 0xc1, 0x66, 0x11, 0xe3, 0x3c, + 0x7a, 0xe9, 0x3c, 0xca, 0x93, 0x6e, 0xb2, 0x55, 0xcf, 0x32, 0x7b, 0xd3, 0x0c, 0x4a, 0x56, 0xb4, + 0x83, 0x0d, 0x15, 0x63, 0x29, 0x92, 0x96, 0xd4, 0xe0, 0x94, 0x6a, 0x07, 0x1a, 0xfe, 0x65, 0x09, + 0x5a, 0x46, 0x9b, 0x98, 0xf4, 0xe0, 0xbd, 0x2a, 0xee, 0x2a, 0x15, 0x33, 0xaf, 0x43, 0xba, 0xe4, + 0x95, 0x4c, 0xc9, 0x53, 0x11, 0xde, 0xb2, 0x1e, 0xe1, 0x7d, 0x04, 0xf5, 0xf4, 0xea, 0xa0, 0xd9, + 0x28, 0x56, 0xa3, 0x3c, 0x83, 0x9a, 0x66, 0x4a, 0x63, 0xc2, 0x55, 0x3d, 0x26, 0xfc, 0x2d, 0x2d, + 0x66, 0x38, 0x83, 0xc5, 0xd8, 0x45, 0xa3, 0xfa, 0xc5, 0x1c, 0x32, 0x78, 0x02, 0x0d, 0xad, 0xf1, + 0x7a, 0x6c, 0xd0, 0x32, 0x62, 0x83, 0xea, 0xb4, 0x78, 0x29, 0x3d, 0x2d, 0x6e, 0xff, 0xac, 0x04, + 0x2d, 0x26, 0x6b, 0x7e, 0x70, 0x7a, 0x10, 0x0e, 0xfd, 0xfe, 0x25, 0xf2, 0xb8, 0x14, 0x2b, 0x61, + 0xc3, 0x48, 0x99, 0x33, 0x61, 0xa6, 0x13, 0xd5, 0x15, 0x19, 0xae, 0xc0, 0x55, 0x9a, 0x69, 0x78, + 0xa6, 0x1f, 0x8f, 0xbd, 0x98, 0x6a, 0x17, 0x1b, 0x1d, 0x13, 0x64, 0x7a, 0x98, 0x01, 0x78, 0xf6, + 0x7f, 0xe4, 0x0f, 0x87, 0x3e, 0xcf, 0xcb, 0x37, 0xdf, 0x45, 0x24, 0x56, 0xe7, 0xc0, 0x8f, 0xbd, + 0xe3, 0xf4, 0x24, 0x8e, 0x4a, 0x63, 0x18, 0xc4, 0x7b, 0xad, 0x85, 0x41, 0xf8, 0x65, 0x21, 0x13, + 0xcc, 0x72, 0xd5, 0x6c, 0x8e, 0xab, 0xec, 0x7f, 0x5b, 0x82, 0x86, 0xc6, 0xa3, 0x4c, 0xb7, 0x14, + 0x2e, 0xc2, 0x1a, 0x2a, 0x8e, 0xa8, 0x05, 0x86, 0x3b, 0x47, 0x43, 0xc8, 0x3d, 0xb3, 0x56, 0x0c, + 0x9f, 0xa2, 0xf6, 0x31, 0xf8, 0xf9, 0x16, 0xd4, 0x99, 0x1c, 0x7e, 0x88, 0xbe, 0x23, 0x71, 0x89, + 0x58, 0x01, 0x92, 0xba, 0x8a, 0xd4, 0x6a, 0x4a, 0x45, 0xe0, 0xca, 0x43, 0x6b, 0x8f, 0xa1, 0x29, + 0x8a, 0xc1, 0x39, 0xc6, 0x4e, 0xa7, 0x9a, 0xc0, 0x98, 0x7f, 0xc7, 0xc8, 0x29, 0xbf, 0x5c, 0x95, + 0x5f, 0xd6, 0xde, 0xf4, 0xa5, 0xcc, 0x69, 0x3f, 0x53, 0xe7, 0x01, 0x9f, 0x45, 0xde, 0xf8, 0x4c, + 0x6a, 0xb7, 0x47, 0xb0, 0x20, 0x95, 0xd8, 0x24, 0xf0, 0x82, 0x20, 0x9c, 0x04, 0x7d, 0x2a, 0x0f, + 0x96, 0x17, 0x91, 0xec, 0x81, 0xba, 0x86, 0x84, 0x05, 0x91, 0x07, 0x50, 0xe5, 0x56, 0x30, 0xb7, + 0x55, 0x8a, 0xf5, 0x19, 0xcf, 0x42, 0xee, 0x43, 0x95, 0x1b, 0xc3, 0xa5, 0xa9, 0x1a, 0x88, 0x67, + 0xb0, 0x57, 0x60, 0x0e, 0x3d, 0xf0, 0x9a, 0x22, 0xbe, 0x59, 0x64, 0xc3, 0xcc, 0xf4, 0xb9, 0x9f, + 0x7e, 0x11, 0xc8, 0x1e, 0x97, 0x2b, 0xfd, 0xc0, 0xca, 0x9f, 0x97, 0xa1, 0xa1, 0xc1, 0x4c, 0x59, + 0xe2, 0xe9, 0x05, 0x77, 0xe0, 0x7b, 0x23, 0x2a, 0xbd, 0xf6, 0x2d, 0x27, 0x83, 0xb2, 0x7c, 0xde, + 0xf9, 0xa9, 0x1b, 0x4e, 0x12, 0x77, 0x40, 0x4f, 0x23, 0x4a, 0x85, 0x71, 0x95, 0x41, 0x59, 0x3e, + 0xc6, 0xcd, 0x5a, 0x3e, 0x1e, 0x88, 0xcf, 0xa0, 0xf2, 0x60, 0x08, 0x1f, 0xa7, 0x4a, 0x7a, 0x30, + 0x84, 0x8f, 0x4a, 0x56, 0xcd, 0x57, 0x0b, 0xd4, 0xfc, 0x47, 0xb0, 0xc4, 0x15, 0xba, 0xd0, 0x1e, + 0x6e, 0x86, 0xb9, 0xa6, 0x50, 0xc9, 0x03, 0xe8, 0xb0, 0x36, 0x4b, 0xd1, 0x88, 0xfd, 0x9f, 0x70, + 0x19, 0xb3, 0x9c, 0x1c, 0xce, 0xf2, 0x62, 0x50, 0x51, 0xcf, 0xcb, 0x0f, 0x4a, 0xe6, 0x70, 0xcc, + 0xeb, 0xbd, 0x36, 0xf3, 0xd6, 0x45, 0xde, 0x0c, 0x4e, 0x1e, 0xc3, 0xf2, 0x88, 0x0e, 0x7c, 0xcf, + 0x2c, 0xc2, 0x4d, 0x2d, 0x8e, 0x69, 0x64, 0x56, 0x0b, 0x1b, 0x85, 0x9f, 0x84, 0xa3, 0x63, 0x9f, + 0xaf, 0xb2, 0x3c, 0xfc, 0x59, 0x71, 0x72, 0xb8, 0xdd, 0x82, 0xc6, 0x61, 0x12, 0x8e, 0xe5, 0xd4, + 0xb7, 0xa1, 0xc9, 0x93, 0xe2, 0x2a, 0xc1, 0x4d, 0xb8, 0x81, 0xfc, 0x7a, 0x14, 0x8e, 0xc3, 0x61, + 0x78, 0x7a, 0x69, 0xf8, 0x5d, 0xfe, 0xbd, 0x05, 0x0b, 0x06, 0x35, 0x75, 0xbc, 0xa0, 0x93, 0x58, + 0x9e, 0xff, 0xe6, 0x2c, 0x3e, 0xaf, 0xad, 0x51, 0x3c, 0x23, 0x0f, 0x70, 0xbf, 0x10, 0x47, 0xc2, + 0xd7, 0xd2, 0x4b, 0x8d, 0xf2, 0x43, 0xce, 0xef, 0xdd, 0x3c, 0xbf, 0x8b, 0xef, 0xe5, 0x75, 0x47, + 0x59, 0xc4, 0x6f, 0x89, 0x63, 0xad, 0x03, 0xd1, 0xe9, 0xb2, 0x79, 0x14, 0x51, 0xf7, 0xd3, 0xc9, + 0x16, 0xf4, 0x15, 0x18, 0xdb, 0x3f, 0xb7, 0x00, 0xd2, 0xd6, 0xe1, 0x61, 0x48, 0xb5, 0xce, 0xf2, + 0x77, 0x43, 0xb4, 0x35, 0xf5, 0x5d, 0x68, 0xaa, 0x03, 0x59, 0xe9, 0xd2, 0xdd, 0x90, 0x18, 0x33, + 0x75, 0xde, 0x87, 0xb9, 0xd3, 0x61, 0x78, 0x8c, 0x26, 0x95, 0x58, 0x67, 0xf9, 0x85, 0x8a, 0x36, + 0x87, 0xe5, 0xea, 0x99, 0xae, 0xf3, 0x95, 0xc2, 0x93, 0x5c, 0xfa, 0xaa, 0xcd, 0xd6, 0xba, 0xf9, + 0xdc, 0x48, 0x5c, 0x29, 0xe5, 0xbf, 0x54, 0x3c, 0xf3, 0x2a, 0xb7, 0xfd, 0x13, 0x68, 0x47, 0x5c, + 0x67, 0x4a, 0x85, 0x5a, 0xb9, 0x42, 0xa1, 0xb6, 0x22, 0x63, 0x65, 0xfe, 0x0a, 0x74, 0xbc, 0xc1, + 0x39, 0x8d, 0x12, 0x1f, 0xdd, 0x98, 0x68, 0xd3, 0xf1, 0x0e, 0xce, 0x69, 0x38, 0x9a, 0x4e, 0xef, + 0xc3, 0x9c, 0xb8, 0xde, 0xa2, 0x72, 0x8a, 0x1b, 0xf4, 0x29, 0xcc, 0x32, 0xda, 0xff, 0x58, 0x9e, + 0x87, 0x31, 0x67, 0xf7, 0xea, 0x51, 0xd1, 0x7b, 0x58, 0xca, 0xf4, 0xf0, 0x4b, 0x22, 0xda, 0x3f, + 0x90, 0xfe, 0xd2, 0xb2, 0x76, 0x40, 0x7a, 0x20, 0xce, 0x13, 0x99, 0xc3, 0x5a, 0x79, 0x9b, 0x61, + 0xb5, 0xff, 0x8b, 0x05, 0xb3, 0xdb, 0xe1, 0x78, 0xdb, 0xe7, 0x67, 0x14, 0x51, 0x4c, 0xd4, 0xdd, + 0x32, 0x99, 0x7c, 0xc3, 0x41, 0xf2, 0x42, 0xab, 0xa4, 0x95, 0xb5, 0x4a, 0xbe, 0x0d, 0x37, 0xd1, + 0x63, 0x1f, 0x85, 0xe3, 0x30, 0x62, 0xe2, 0xea, 0x0d, 0xb9, 0x09, 0x12, 0x06, 0xc9, 0x99, 0x54, + 0xa7, 0x57, 0x65, 0x41, 0x37, 0xda, 0x30, 0x39, 0x77, 0xf9, 0x76, 0x53, 0x58, 0x51, 0x5c, 0xcb, + 0xe6, 0x09, 0xf6, 0x6f, 0x42, 0x1d, 0xb7, 0x3b, 0xd8, 0xb5, 0x0f, 0xa0, 0x7e, 0x16, 0x8e, 0xdd, + 0x33, 0x3f, 0x48, 0xa4, 0xf8, 0xb7, 0xd3, 0x7d, 0xc8, 0x36, 0x0e, 0x8a, 0xca, 0x60, 0xff, 0x87, + 0x59, 0x98, 0xdd, 0x09, 0xce, 0x43, 0xbf, 0x8f, 0xe7, 0x6a, 0x46, 0x74, 0x14, 0xca, 0xdb, 0x76, + 0xec, 0x6f, 0x7c, 0x08, 0x23, 0xbd, 0x0f, 0xcf, 0x45, 0x48, 0x43, 0xd8, 0x06, 0x39, 0xd2, 0xef, + 0xb3, 0x8b, 0x54, 0xba, 0xeb, 0xab, 0x6a, 0xf7, 0x15, 0x59, 0x69, 0xfc, 0x9e, 0x35, 0x8e, 0x1d, + 0xbf, 0x25, 0xa1, 0x21, 0x6c, 0xf0, 0xc5, 0x01, 0x77, 0x7e, 0x02, 0x9a, 0x1f, 0xd1, 0x13, 0x10, + 0x6e, 0xfa, 0x23, 0xca, 0x63, 0x2e, 0xca, 0xf4, 0x62, 0x9b, 0x7e, 0x1d, 0x64, 0xe6, 0x19, 0xff, + 0x80, 0xe7, 0xe1, 0xcb, 0x81, 0x0e, 0xe1, 0x31, 0x8b, 0xcc, 0xeb, 0x10, 0xfc, 0x85, 0x8f, 0x2c, + 0xcc, 0x4f, 0x50, 0x29, 0xa5, 0xcb, 0xfb, 0x09, 0xfc, 0x4d, 0x80, 0x2c, 0xae, 0xb9, 0x0a, 0xf8, + 0x3d, 0x20, 0xe9, 0x2a, 0x60, 0x2c, 0xe3, 0x0d, 0x87, 0xc7, 0x5e, 0xff, 0x15, 0xdf, 0xd9, 0x36, + 0x79, 0xa8, 0xce, 0x00, 0xf1, 0x98, 0x7a, 0x3a, 0xaf, 0x78, 0xc2, 0xa5, 0xe2, 0xe8, 0x10, 0x59, + 0x85, 0x06, 0xba, 0x51, 0xc4, 0xcc, 0xb6, 0x71, 0x66, 0x3b, 0xba, 0x9f, 0x05, 0xe7, 0x56, 0xcf, + 0xa4, 0x9f, 0xf8, 0x99, 0xcb, 0xdd, 0xcc, 0xf1, 0x06, 0x03, 0x71, 0x12, 0xa4, 0xc3, 0xef, 0xc4, + 0x2b, 0x00, 0x1d, 0x35, 0x7c, 0xc0, 0x78, 0x86, 0x79, 0xcc, 0x60, 0x60, 0xe4, 0x0e, 0x77, 0x63, + 0x8e, 0x3d, 0x7f, 0x80, 0x27, 0x2e, 0xf9, 0x5e, 0x58, 0x61, 0xac, 0x0c, 0xf9, 0x37, 0x2e, 0x9c, + 0x0b, 0x38, 0x2a, 0x06, 0xc6, 0xc6, 0x46, 0xa5, 0x47, 0xe9, 0x55, 0x1e, 0x13, 0x24, 0x1f, 0x62, + 0x84, 0x3d, 0xa1, 0x78, 0x5f, 0xa7, 0xbd, 0x7a, 0x53, 0xf4, 0x59, 0xb0, 0xad, 0xfc, 0x1f, 0x4f, + 0x14, 0x38, 0x3c, 0x27, 0x33, 0xdb, 0x78, 0x90, 0x63, 0xc9, 0x30, 0xdb, 0x44, 0x56, 0x0c, 0x72, + 0xf0, 0x0c, 0xe4, 0xb1, 0xb6, 0x13, 0xeb, 0x62, 0xe6, 0x5b, 0x99, 0xf2, 0xbf, 0x90, 0x3d, 0xd8, + 0x1a, 0x34, 0xf5, 0x7e, 0x90, 0x1a, 0x54, 0xf6, 0x0f, 0xb6, 0xf6, 0x3a, 0xd7, 0x48, 0x03, 0x66, + 0x0f, 0xb7, 0x8e, 0x8e, 0x76, 0xb7, 0x36, 0x3b, 0x16, 0x69, 0x42, 0x4d, 0x5d, 0x82, 0x28, 0xb1, + 0xd4, 0xda, 0xc6, 0xc6, 0xd6, 0xc1, 0xd1, 0xd6, 0x66, 0xa7, 0xfc, 0x9d, 0x4a, 0xad, 0xd4, 0x29, + 0xa3, 0x01, 0xa9, 0x75, 0xf3, 0x0d, 0x7e, 0xb4, 0x3b, 0x00, 0xb8, 0xb1, 0x49, 0x4f, 0x04, 0x55, + 0x1c, 0x0d, 0x61, 0x8a, 0x5a, 0xf9, 0x1f, 0xca, 0xfc, 0x9d, 0x02, 0x99, 0xc6, 0xc9, 0xc3, 0x07, + 0x01, 0xf4, 0xc0, 0x56, 0xd5, 0x31, 0x41, 0xc6, 0xd8, 0x02, 0xc0, 0x93, 0xf9, 0x5c, 0x1d, 0xe8, + 0x10, 0x63, 0x94, 0x88, 0xc6, 0xe1, 0xf0, 0x9c, 0xf2, 0x2c, 0xdc, 0x3c, 0x34, 0x30, 0x56, 0x97, + 0xd0, 0x78, 0xda, 0xad, 0x99, 0xaa, 0x63, 0x82, 0xe4, 0x6b, 0x92, 0x51, 0x6a, 0xc8, 0x28, 0xcb, + 0xf9, 0x59, 0x37, 0x98, 0xe4, 0x79, 0xce, 0x11, 0x56, 0x47, 0x06, 0xf8, 0x72, 0xfe, 0xbb, 0xb7, + 0x70, 0x88, 0x91, 0x15, 0x20, 0xa3, 0xf1, 0xd8, 0x2d, 0xf0, 0x50, 0x55, 0x9c, 0x02, 0xca, 0xaf, + 0xc1, 0x81, 0x96, 0x00, 0x59, 0x1b, 0x0c, 0x44, 0x33, 0xf5, 0x67, 0x1b, 0x22, 0xfd, 0x9d, 0x10, + 0xa9, 0x92, 0x0b, 0xd4, 0x5e, 0xa9, 0x58, 0xed, 0x5d, 0xa9, 0x1c, 0xec, 0x1d, 0x68, 0x1c, 0x68, + 0x2f, 0x8f, 0xd8, 0x6c, 0x85, 0x90, 0x6f, 0x8e, 0xf0, 0xb5, 0x83, 0x3b, 0xce, 0x52, 0x54, 0x6b, + 0x52, 0x49, 0x6f, 0x92, 0xfd, 0x0f, 0x2d, 0x7e, 0x99, 0x5b, 0x75, 0x81, 0xd7, 0x6f, 0x43, 0x53, + 0xc5, 0x5e, 0xd2, 0x9b, 0x6d, 0x06, 0xc6, 0xf2, 0x60, 0x73, 0xdc, 0xf0, 0xe4, 0x24, 0xa6, 0xf2, + 0x0e, 0x8a, 0x81, 0x49, 0x63, 0x9c, 0x99, 0xf7, 0x3e, 0xaf, 0x21, 0x16, 0x77, 0x51, 0x72, 0x38, + 0xe3, 0x74, 0xe1, 0xfb, 0x96, 0xb7, 0x6f, 0x54, 0x5a, 0x5d, 0xc0, 0xcb, 0x8e, 0xf4, 0x03, 0xa8, + 0xa9, 0x72, 0xcd, 0x95, 0x56, 0xe6, 0x54, 0x74, 0xb6, 0xa2, 0xe3, 0x46, 0xdd, 0x68, 0x34, 0x17, + 0xb8, 0x3c, 0x81, 0xf1, 0xd2, 0x89, 0x1f, 0x65, 0xb3, 0x73, 0x09, 0x2c, 0xa0, 0xd8, 0x2f, 0x61, + 0x41, 0xaa, 0x0f, 0x6d, 0x97, 0x60, 0x4e, 0xa4, 0xf5, 0x26, 0x2d, 0x5f, 0xca, 0x6b, 0x79, 0xfb, + 0xdf, 0x54, 0x60, 0x56, 0x3e, 0xeb, 0x63, 0x17, 0x3c, 0x43, 0x53, 0x37, 0x5f, 0xb0, 0x21, 0x5d, + 0xe3, 0x9d, 0x02, 0x64, 0x04, 0xb1, 0xf6, 0xdf, 0xcf, 0xae, 0xde, 0xa9, 0x03, 0x35, 0xb3, 0x82, + 0x2f, 0x41, 0x65, 0xec, 0x25, 0x67, 0xe8, 0x5f, 0xe3, 0xbc, 0x84, 0x69, 0xe9, 0xa2, 0xaf, 0x9a, + 0x2e, 0xfa, 0xa2, 0x77, 0x7b, 0xb8, 0xa9, 0x9a, 0x7f, 0xb7, 0xe7, 0x16, 0xd4, 0xb9, 0xb5, 0x91, + 0x7a, 0xe1, 0x53, 0x20, 0x63, 0x9d, 0xd4, 0x72, 0xd6, 0xc9, 0xdb, 0xdb, 0x0d, 0xdf, 0x80, 0x19, + 0x7e, 0x77, 0x55, 0xdc, 0x35, 0x92, 0x4b, 0x8a, 0x18, 0x49, 0xf9, 0x3f, 0x3f, 0x72, 0xea, 0x88, + 0xbc, 0xfa, 0xeb, 0x17, 0x0d, 0xf3, 0xf5, 0x0b, 0x3d, 0x78, 0xd0, 0xcc, 0x04, 0x0f, 0x1e, 0x40, + 0x47, 0x0d, 0x1f, 0x3a, 0xd8, 0x82, 0x58, 0xdc, 0xad, 0xc8, 0xe1, 0xe9, 0xb2, 0xd8, 0x36, 0x96, + 0x45, 0xa6, 0xe1, 0xd6, 0x92, 0x84, 0x8e, 0xc6, 0x89, 0x58, 0x16, 0xed, 0xa7, 0xd0, 0x32, 0x1a, + 0xc9, 0x96, 0x21, 0x71, 0xfb, 0xa8, 0x73, 0x8d, 0xb4, 0xa0, 0xbe, 0xb3, 0xe7, 0x3e, 0xdd, 0xdd, + 0x79, 0xb6, 0x7d, 0xd4, 0xb1, 0x58, 0xf2, 0xf0, 0xc5, 0xc6, 0xc6, 0xd6, 0xd6, 0x26, 0x2e, 0x4b, + 0x00, 0x33, 0x4f, 0xd7, 0x76, 0xd8, 0x12, 0x55, 0xb6, 0xff, 0x8f, 0x05, 0x0d, 0xad, 0x78, 0xf2, + 0x4d, 0x35, 0x32, 0xfc, 0x81, 0x84, 0xdb, 0xf9, 0x26, 0xac, 0x48, 0x45, 0xad, 0x0d, 0x8d, 0x7a, + 0xaa, 0xa8, 0x34, 0xf5, 0xa9, 0x22, 0x36, 0x3d, 0x1e, 0x2f, 0x41, 0x8d, 0x03, 0xdf, 0x3d, 0x65, + 0x61, 0x7e, 0xce, 0x2a, 0x5d, 0x5d, 0x58, 0x4e, 0xee, 0x31, 0xcc, 0xc2, 0xf6, 0x47, 0x00, 0x69, + 0x6b, 0xcc, 0x6e, 0x5f, 0x33, 0xbb, 0x6d, 0x69, 0xdd, 0x2e, 0xd9, 0x9b, 0x5c, 0x61, 0x88, 0x21, + 0x54, 0x51, 0xe2, 0xaf, 0x01, 0x91, 0x0e, 0x2a, 0x3c, 0xcf, 0x38, 0x1e, 0xd2, 0x44, 0xde, 0x49, + 0x9c, 0x17, 0x94, 0x1d, 0x45, 0x90, 0xd7, 0x6a, 0xd3, 0x52, 0x52, 0xbd, 0x23, 0x38, 0x2e, 0xab, + 0x77, 0x44, 0x56, 0x47, 0xd1, 0xed, 0x1e, 0x74, 0x37, 0x29, 0x2b, 0x6d, 0x6d, 0x38, 0xcc, 0x34, + 0xc7, 0xbe, 0x09, 0x37, 0x0a, 0x68, 0xc2, 0xfd, 0xf0, 0x5d, 0xb8, 0xbe, 0xc6, 0xaf, 0x1f, 0xfe, + 0xba, 0x6e, 0x3a, 0xd8, 0x5d, 0x58, 0xca, 0x16, 0x29, 0x2a, 0x7b, 0x0a, 0xf3, 0x9b, 0xf4, 0x78, + 0x72, 0xba, 0x4b, 0xcf, 0xd3, 0x8a, 0x08, 0x54, 0xe2, 0xb3, 0xf0, 0x42, 0x8c, 0x0f, 0xfe, 0x4d, + 0x6e, 0x03, 0x0c, 0x59, 0x1e, 0x37, 0x1e, 0xd3, 0xbe, 0x7c, 0x80, 0x02, 0x91, 0xc3, 0x31, 0xed, + 0xdb, 0x1f, 0x01, 0xd1, 0xcb, 0x11, 0xe3, 0xc5, 0xb6, 0x04, 0x93, 0x63, 0x37, 0xbe, 0x8c, 0x13, + 0x3a, 0x92, 0x2f, 0x6b, 0xe8, 0x90, 0xfd, 0x3e, 0x34, 0x0f, 0xbc, 0x4b, 0x87, 0x7e, 0x2a, 0x9e, + 0xc6, 0x5a, 0x86, 0xd9, 0xb1, 0x77, 0xc9, 0xe4, 0x59, 0x85, 0x50, 0x90, 0x6c, 0xff, 0x71, 0x05, + 0x66, 0x78, 0x4e, 0x56, 0xea, 0x80, 0xc6, 0x89, 0x1f, 0xa0, 0x8c, 0xc9, 0x52, 0x35, 0x28, 0xa7, + 0x30, 0x4b, 0x05, 0x0a, 0x53, 0xb8, 0xd2, 0xe4, 0x45, 0x7e, 0xc1, 0xb2, 0x06, 0xc6, 0xd4, 0x56, + 0x7a, 0x6f, 0x8a, 0x73, 0x6a, 0x0a, 0x64, 0x62, 0x94, 0xe9, 0xc6, 0x83, 0xb7, 0x4f, 0xae, 0x05, + 0x42, 0x27, 0xea, 0x50, 0xe1, 0xf6, 0x66, 0x56, 0x5e, 0x10, 0xc9, 0x6c, 0x6f, 0x72, 0xdb, 0x98, + 0xda, 0x5b, 0x6c, 0x63, 0xb8, 0x7f, 0xed, 0xaa, 0x6d, 0x0c, 0xbc, 0xcd, 0x36, 0xe6, 0x6d, 0x62, + 0x83, 0x3d, 0xa8, 0xe1, 0x9a, 0xae, 0xa9, 0x48, 0x99, 0x26, 0xbf, 0xa1, 0xd9, 0xf8, 0x3c, 0xcc, + 0x7f, 0x33, 0x95, 0x17, 0x87, 0x7e, 0xfa, 0xc5, 0x98, 0xf8, 0x3f, 0x84, 0x59, 0x81, 0x32, 0xce, + 0x0e, 0xbc, 0x91, 0x7c, 0x40, 0x05, 0xff, 0x66, 0x43, 0x87, 0xef, 0x38, 0x7c, 0x3a, 0xf1, 0x23, + 0x3a, 0x90, 0x97, 0x8c, 0x35, 0x08, 0x4f, 0x45, 0xc7, 0xee, 0xab, 0x20, 0xbc, 0x08, 0xc4, 0x35, + 0x63, 0x95, 0xb6, 0x09, 0x74, 0xf0, 0x21, 0xa5, 0x71, 0x18, 0xc9, 0x37, 0x71, 0xec, 0x3f, 0xb0, + 0xa0, 0x23, 0x04, 0x4d, 0xd1, 0xe4, 0x81, 0x80, 0xab, 0xee, 0xd2, 0xdf, 0x83, 0x16, 0xfa, 0x32, + 0xd4, 0x92, 0x23, 0x82, 0xeb, 0x06, 0xc8, 0xda, 0x2b, 0x8f, 0x25, 0x8e, 0xfc, 0xa1, 0xe0, 0x5b, + 0x1d, 0x92, 0xab, 0x56, 0xe4, 0x89, 0xdb, 0x49, 0x96, 0xa3, 0xd2, 0xf6, 0x2f, 0x2c, 0x98, 0xd7, + 0x1a, 0x2c, 0x04, 0xf5, 0x09, 0x34, 0xd5, 0x7b, 0x65, 0x54, 0x19, 0x55, 0xcb, 0xa6, 0x66, 0x49, + 0x3f, 0x33, 0x32, 0x23, 0xbf, 0x7b, 0x97, 0xd8, 0xc0, 0x78, 0x32, 0x12, 0xd6, 0x8c, 0x0e, 0x31, + 0x3e, 0xba, 0xa0, 0xf4, 0x95, 0xca, 0xc2, 0xed, 0x29, 0x03, 0xc3, 0x18, 0x50, 0x18, 0x24, 0x67, + 0x2a, 0x53, 0x45, 0xc4, 0x80, 0x74, 0xd0, 0xfe, 0x6f, 0x25, 0x58, 0xe0, 0x4e, 0x35, 0xe1, 0xcc, + 0x54, 0x4f, 0xc6, 0xcc, 0x70, 0xff, 0x22, 0x57, 0x5a, 0xdb, 0xd7, 0x1c, 0x91, 0x26, 0xdf, 0x7c, + 0x4b, 0x47, 0xa0, 0xba, 0x06, 0x35, 0x65, 0x2e, 0xca, 0x45, 0x73, 0x71, 0xc5, 0x48, 0x17, 0x85, + 0xe3, 0xaa, 0xc5, 0xe1, 0xb8, 0xb7, 0x0b, 0x7f, 0xe5, 0xee, 0x0a, 0xcd, 0x8a, 0x5c, 0xc6, 0x5d, + 0xa1, 0x55, 0x58, 0x36, 0x00, 0xd4, 0xd7, 0xfe, 0x89, 0x4f, 0xe5, 0xc5, 0xed, 0xf9, 0x98, 0x26, + 0xae, 0x91, 0x65, 0x7d, 0x16, 0xaa, 0x71, 0x3f, 0x1c, 0x53, 0x7b, 0x09, 0x16, 0xcd, 0xc1, 0x15, + 0xab, 0xc4, 0xcf, 0x2d, 0xe8, 0x3e, 0xe5, 0x87, 0x2a, 0xfc, 0xe0, 0x74, 0xdb, 0x8f, 0x93, 0x30, + 0x52, 0x2f, 0x7b, 0xdd, 0x01, 0x88, 0x13, 0x2f, 0x12, 0xfb, 0x4c, 0x6e, 0xec, 0x6a, 0x08, 0x1b, + 0x23, 0x1a, 0x0c, 0x38, 0x95, 0xf3, 0x86, 0x4a, 0xe7, 0x36, 0x13, 0xc2, 0xe5, 0x68, 0x98, 0xe4, + 0xef, 0xf1, 0x2b, 0x8c, 0x6c, 0x30, 0xe8, 0x39, 0x2e, 0xbd, 0xdc, 0x8f, 0x97, 0x41, 0xed, 0x3f, + 0x2c, 0xc1, 0x5c, 0xda, 0x48, 0x7e, 0x25, 0xda, 0x50, 0xe0, 0xc2, 0x0e, 0x4f, 0x15, 0xb8, 0x08, + 0x0f, 0xba, 0x3e, 0x33, 0xcc, 0x35, 0xaf, 0xa3, 0x86, 0x92, 0x7b, 0xd0, 0x90, 0xa9, 0x70, 0x92, + 0x68, 0x4f, 0xec, 0xe8, 0x30, 0xbf, 0x1b, 0xc1, 0xb6, 0x06, 0x62, 0x9b, 0x23, 0x52, 0x78, 0x91, + 0x7f, 0x94, 0xe0, 0x97, 0x7c, 0x4e, 0x65, 0x92, 0x29, 0x34, 0x66, 0x53, 0xf3, 0x39, 0x44, 0x7b, + 0x5a, 0xb7, 0x35, 0x6b, 0xea, 0x69, 0x42, 0x25, 0xf3, 0xbc, 0xc4, 0xf4, 0x96, 0x58, 0xc5, 0xd1, + 0x21, 0xe9, 0xf5, 0x09, 0x27, 0xc6, 0xf6, 0xd7, 0xc0, 0xec, 0xbf, 0x6d, 0xc1, 0x8d, 0x82, 0x69, + 0x14, 0x3a, 0x60, 0x13, 0xe6, 0x4f, 0x14, 0x51, 0x0e, 0x35, 0x57, 0x04, 0x4b, 0x52, 0xb9, 0x9a, + 0xc3, 0xeb, 0xe4, 0x3f, 0x50, 0xdb, 0x2d, 0x3e, 0x79, 0xc6, 0xa5, 0xc0, 0x3c, 0xc1, 0x3e, 0x80, + 0xde, 0xd6, 0x6b, 0xa6, 0x52, 0x36, 0xf4, 0xf7, 0xa9, 0x25, 0x67, 0xad, 0xe6, 0x54, 0xe6, 0x9b, + 0x9d, 0xcd, 0x27, 0xfc, 0xaa, 0x93, 0x2a, 0x8b, 0x7c, 0xfd, 0x6d, 0x0b, 0xd1, 0xa5, 0xff, 0xae, + 0x98, 0x75, 0xfe, 0xc0, 0xb6, 0xbc, 0x9a, 0xa8, 0x41, 0xf6, 0x39, 0xcc, 0x3d, 0x9f, 0x0c, 0x13, + 0x3f, 0x7d, 0x6c, 0x9b, 0x7c, 0x53, 0x7c, 0x84, 0x45, 0xc8, 0xa1, 0x2b, 0xac, 0x4a, 0xcf, 0xc7, + 0x46, 0x6c, 0xc4, 0x4a, 0x72, 0xf3, 0x35, 0xe6, 0x09, 0xf6, 0x0d, 0x58, 0x4e, 0xab, 0xe4, 0x63, + 0x27, 0x97, 0x9d, 0x3f, 0xb2, 0xf8, 0x91, 0x60, 0xf3, 0xed, 0x6f, 0xf2, 0x0c, 0x16, 0x62, 0x3f, + 0x38, 0x1d, 0x52, 0xbd, 0x9c, 0x58, 0x8c, 0xc4, 0x75, 0xb3, 0x79, 0xe2, 0x7d, 0x70, 0xa7, 0xe8, + 0x0b, 0xc6, 0x20, 0xc5, 0x0d, 0x4d, 0x19, 0x24, 0x33, 0x24, 0x45, 0x1d, 0xf8, 0x0e, 0xb4, 0xcd, + 0xca, 0xc8, 0x63, 0x71, 0xe7, 0x2f, 0x6d, 0x59, 0x39, 0x73, 0x75, 0x2b, 0xe5, 0x0c, 0x23, 0xa7, + 0xfd, 0x33, 0x0b, 0xba, 0x0e, 0x65, 0x6c, 0x4c, 0xb5, 0x4a, 0x05, 0xf7, 0x3c, 0xc9, 0x15, 0x3b, + 0xbd, 0xc3, 0xea, 0x2e, 0xa1, 0xec, 0xeb, 0xca, 0xd4, 0x49, 0xd9, 0xbe, 0x56, 0xd0, 0xab, 0xf5, + 0x1a, 0xcc, 0x88, 0xfe, 0x2d, 0xc3, 0x75, 0xd1, 0x24, 0xd9, 0x9c, 0x34, 0xac, 0x68, 0x54, 0x6a, + 0x84, 0x15, 0x7b, 0xd0, 0xe5, 0x0f, 0xb8, 0xe9, 0xfd, 0x10, 0x1f, 0x6e, 0x02, 0x79, 0xee, 0xf5, + 0xbd, 0x28, 0x0c, 0x83, 0x03, 0x1a, 0x89, 0x33, 0x9c, 0x68, 0x7d, 0x62, 0xd4, 0x4d, 0x1a, 0xca, + 0x3c, 0x25, 0xdf, 0x1c, 0x0b, 0x03, 0xf9, 0xb6, 0x1b, 0x4f, 0xd9, 0x0e, 0x2c, 0xac, 0x7b, 0xaf, + 0xa8, 0x2c, 0x29, 0x1d, 0xa5, 0xc6, 0x58, 0x15, 0x2a, 0xc7, 0x5e, 0x5e, 0x16, 0xce, 0x57, 0xeb, + 0xe8, 0xb9, 0xed, 0x55, 0x58, 0x34, 0xcb, 0x14, 0xaa, 0xa4, 0x07, 0xb5, 0x91, 0xc0, 0x44, 0xeb, + 0x54, 0xfa, 0xc1, 0x67, 0xd0, 0xd0, 0x1e, 0xe5, 0x23, 0xcb, 0xb0, 0xf0, 0x72, 0xe7, 0x68, 0x6f, + 0xeb, 0xf0, 0xd0, 0x3d, 0x78, 0xb1, 0xfe, 0xc9, 0xd6, 0xf7, 0xdd, 0xed, 0xb5, 0xc3, 0xed, 0xce, + 0x35, 0xb2, 0x04, 0x64, 0x6f, 0xeb, 0xf0, 0x68, 0x6b, 0xd3, 0xc0, 0x2d, 0x72, 0x07, 0x7a, 0x2f, + 0xf6, 0x5e, 0x1c, 0x6e, 0x6d, 0xba, 0x45, 0xdf, 0x95, 0xc8, 0x6d, 0xb8, 0x21, 0xe8, 0x05, 0x9f, + 0x97, 0x1f, 0x3c, 0x81, 0x4e, 0xd6, 0x2d, 0x69, 0xb8, 0x73, 0xaf, 0xf2, 0xfb, 0x3e, 0xf8, 0x47, + 0x65, 0x80, 0xf4, 0x11, 0x65, 0xd2, 0x85, 0xc5, 0xcd, 0xb5, 0xa3, 0xb5, 0xdd, 0x7d, 0xd6, 0x08, + 0x67, 0xff, 0x68, 0x6b, 0xe3, 0xc8, 0x75, 0xb6, 0xbe, 0xdb, 0xb9, 0x56, 0x48, 0xd9, 0x3f, 0x60, + 0x5b, 0xf6, 0x65, 0x58, 0xd8, 0xd9, 0xdb, 0x39, 0xda, 0x59, 0xdb, 0x75, 0x9d, 0xfd, 0x17, 0x3b, + 0x7b, 0xcf, 0xf8, 0x83, 0x21, 0x65, 0xf2, 0x0e, 0xdc, 0x7c, 0x71, 0xf0, 0xd4, 0xd9, 0xdf, 0x3b, + 0x72, 0x0f, 0xb7, 0x5f, 0x1c, 0x6d, 0xe2, 0x73, 0x23, 0x1b, 0xce, 0xce, 0x01, 0x2f, 0xb3, 0x72, + 0x55, 0x06, 0x56, 0x74, 0x95, 0x8d, 0xd8, 0xb3, 0xfd, 0xc3, 0xc3, 0x9d, 0x03, 0xf7, 0xbb, 0x2f, + 0xb6, 0x9c, 0x9d, 0xad, 0x43, 0xfc, 0x70, 0xa6, 0x00, 0x67, 0xf9, 0x67, 0xc9, 0x3c, 0xb4, 0x8e, + 0x76, 0xbf, 0xe7, 0xee, 0xef, 0xed, 0xec, 0xef, 0x61, 0xd6, 0x9a, 0x09, 0xb1, 0x5c, 0x75, 0xd2, + 0x83, 0xa5, 0xad, 0xdf, 0x39, 0x72, 0x0b, 0x4a, 0x86, 0x29, 0x34, 0xf6, 0x5d, 0x83, 0xdc, 0x80, + 0xeb, 0x87, 0x47, 0x6b, 0x47, 0x3b, 0x1b, 0xae, 0x78, 0x6f, 0x88, 0x4d, 0x02, 0xfb, 0xac, 0x59, + 0x4c, 0x62, 0x5f, 0xb5, 0xc8, 0x22, 0x74, 0x0e, 0xd6, 0xbe, 0xff, 0x7c, 0x6b, 0xef, 0xc8, 0x5d, + 0xdb, 0xdc, 0x74, 0xf0, 0x83, 0x76, 0x0e, 0x65, 0x79, 0xe7, 0xd8, 0x44, 0x3d, 0x3f, 0x38, 0xc0, + 0x2c, 0x1d, 0x99, 0x60, 0x94, 0xf9, 0xd5, 0x9f, 0x95, 0xa1, 0xcd, 0x0f, 0xd3, 0xf3, 0x5f, 0x39, + 0xa0, 0x11, 0x79, 0x0e, 0xb3, 0xe2, 0xe7, 0x32, 0xc8, 0x75, 0xf5, 0x4a, 0x84, 0xfe, 0x03, 0x1d, + 0xbd, 0xa5, 0x2c, 0x2c, 0xc4, 0x6f, 0xe1, 0xaf, 0xfe, 0xa7, 0xff, 0xf1, 0xfb, 0xa5, 0x16, 0x69, + 0x3c, 0x3c, 0xff, 0xf0, 0xe1, 0x29, 0x0d, 0x62, 0x56, 0xc6, 0xef, 0x02, 0xa4, 0x3f, 0x02, 0x41, + 0xba, 0xca, 0xfb, 0x98, 0xf9, 0x85, 0x8c, 0xde, 0x8d, 0x02, 0x8a, 0x28, 0xf7, 0x06, 0x96, 0xbb, + 0x60, 0xb7, 0x59, 0xb9, 0x7e, 0xe0, 0x27, 0xfc, 0x07, 0x21, 0x3e, 0xb6, 0x1e, 0x90, 0x01, 0x34, + 0xf5, 0x9f, 0x67, 0x20, 0x32, 0x9a, 0x5f, 0xf0, 0x03, 0x13, 0xbd, 0x9b, 0x85, 0x34, 0xa9, 0x73, + 0xb0, 0x8e, 0xeb, 0x76, 0x87, 0xd5, 0x31, 0xc1, 0x1c, 0x69, 0x2d, 0x43, 0xae, 0x89, 0xd3, 0x5f, + 0x61, 0x20, 0xb7, 0x34, 0xe5, 0x98, 0xfb, 0x0d, 0x88, 0xde, 0xed, 0x29, 0x54, 0x51, 0xd7, 0x6d, + 0xac, 0x6b, 0xd9, 0x26, 0xac, 0xae, 0x3e, 0xe6, 0x91, 0xbf, 0x01, 0xf1, 0xb1, 0xf5, 0x60, 0xf5, + 0x4f, 0xef, 0x43, 0x5d, 0x9d, 0xf4, 0x21, 0x3f, 0x86, 0x96, 0x71, 0xdb, 0x81, 0xc8, 0x6e, 0x14, + 0x5d, 0x8e, 0xe8, 0xdd, 0x2a, 0x26, 0x8a, 0x8a, 0xef, 0x60, 0xc5, 0x5d, 0xb2, 0xc4, 0x2a, 0x16, + 0xd7, 0x05, 0x1e, 0xe2, 0xbd, 0x1d, 0xfe, 0xe6, 0xc6, 0x2b, 0x6d, 0xc5, 0xe1, 0x95, 0xdd, 0xca, + 0x2e, 0x02, 0x46, 0x6d, 0xb7, 0xa7, 0x50, 0x45, 0x75, 0xb7, 0xb0, 0xba, 0x25, 0xb2, 0xa8, 0x57, + 0xa7, 0x4e, 0xdf, 0x50, 0x7c, 0xf7, 0x46, 0xff, 0x81, 0x02, 0x72, 0x3b, 0x7d, 0x95, 0xa4, 0xe0, + 0x87, 0x0b, 0x14, 0x8b, 0xe4, 0x7f, 0xbd, 0xc0, 0xee, 0x62, 0x55, 0x84, 0xe0, 0xf4, 0xe9, 0xbf, + 0x4f, 0x40, 0x8e, 0xa1, 0xa1, 0xbd, 0xe3, 0x4b, 0x6e, 0x4c, 0x7d, 0x73, 0xb8, 0xd7, 0x2b, 0x22, + 0x15, 0x75, 0x45, 0x2f, 0xff, 0x21, 0x33, 0x48, 0x7f, 0x08, 0x75, 0xf5, 0x32, 0x2c, 0x59, 0xd6, + 0x5e, 0xea, 0xd5, 0x5f, 0xb2, 0xed, 0x75, 0xf3, 0x84, 0x22, 0xe6, 0xd3, 0x4b, 0x67, 0xcc, 0xf7, + 0x12, 0x1a, 0xda, 0xeb, 0xaf, 0xaa, 0x03, 0xf9, 0x17, 0x66, 0x55, 0x07, 0x0a, 0x1e, 0x8b, 0xb5, + 0xe7, 0xb1, 0x8a, 0x06, 0xa9, 0x23, 0x7f, 0x27, 0xaf, 0xc3, 0x98, 0xec, 0xc2, 0x75, 0xb1, 0xb2, + 0x1e, 0xd3, 0xcf, 0x33, 0x0d, 0x05, 0xbf, 0x09, 0xf1, 0xc8, 0x22, 0x4f, 0xa0, 0x26, 0x1f, 0xf9, + 0x25, 0x4b, 0xc5, 0x8f, 0x15, 0xf7, 0x96, 0x73, 0xb8, 0x58, 0x06, 0xbf, 0x0f, 0x90, 0x3e, 0x35, + 0xab, 0x94, 0x44, 0xee, 0xe9, 0x5a, 0xc5, 0x01, 0xf9, 0x77, 0x69, 0xed, 0x25, 0xec, 0x60, 0x87, + 0xa0, 0x92, 0x08, 0xe8, 0x85, 0x7c, 0x74, 0xe1, 0x47, 0xd0, 0xd0, 0x5e, 0x9b, 0x55, 0xc3, 0x97, + 0x7f, 0xa9, 0x56, 0x0d, 0x5f, 0xc1, 0xe3, 0xb4, 0x76, 0x0f, 0x4b, 0x5f, 0xb4, 0xe7, 0x58, 0xe9, + 0xb1, 0x7f, 0x1a, 0x8c, 0x78, 0x06, 0x36, 0x41, 0x67, 0xd0, 0x32, 0x9e, 0x94, 0x55, 0x12, 0x5a, + 0xf4, 0x60, 0xad, 0x92, 0xd0, 0xc2, 0x57, 0x68, 0x25, 0x9f, 0xd9, 0xf3, 0xac, 0x9e, 0x73, 0xcc, + 0xa2, 0xd5, 0xf4, 0x03, 0x68, 0x68, 0xcf, 0xc3, 0xaa, 0xbe, 0xe4, 0x5f, 0xa2, 0x55, 0x7d, 0x29, + 0x7a, 0x4d, 0x76, 0x11, 0xeb, 0x68, 0xdb, 0xc8, 0x0a, 0xf8, 0x8c, 0x12, 0x2b, 0xfb, 0xc7, 0xd0, + 0x36, 0x1f, 0x8c, 0x55, 0xb2, 0x5f, 0xf8, 0xf4, 0xac, 0x92, 0xfd, 0x29, 0xaf, 0xcc, 0x0a, 0x96, + 0x7e, 0xb0, 0xa0, 0x2a, 0x79, 0xf8, 0x53, 0x71, 0x70, 0xf9, 0x33, 0xf2, 0x5d, 0xa6, 0xe0, 0xc4, + 0xf3, 0x5e, 0x64, 0x59, 0xe3, 0x5a, 0xfd, 0x11, 0x30, 0x25, 0x2f, 0xb9, 0x97, 0xc0, 0x4c, 0x66, + 0xe6, 0x0f, 0x41, 0x3d, 0x83, 0x05, 0xc5, 0xcc, 0xea, 0xb9, 0xae, 0x58, 0xf5, 0xa1, 0xf0, 0x55, + 0xb0, 0x5e, 0x27, 0x4b, 0x7d, 0x64, 0xf1, 0xe5, 0x0f, 0x1f, 0x45, 0xd2, 0x96, 0x3f, 0xfd, 0xc5, + 0x2e, 0x6d, 0xf9, 0x33, 0xde, 0x4e, 0xca, 0x2e, 0x7f, 0x89, 0xcf, 0xca, 0x08, 0x60, 0x2e, 0x73, + 0xb5, 0x53, 0x89, 0x57, 0xf1, 0xed, 0xfb, 0xde, 0x9d, 0xab, 0x6f, 0x84, 0x9a, 0xaa, 0x48, 0x6a, + 0xd3, 0x87, 0xf2, 0x69, 0x8f, 0xdf, 0x83, 0xa6, 0xfe, 0xce, 0x25, 0xd1, 0x75, 0x42, 0xb6, 0xa6, + 0x9b, 0x85, 0x34, 0x93, 0x4b, 0x48, 0x53, 0xaf, 0x86, 0x7c, 0x0f, 0x96, 0xd4, 0x30, 0xeb, 0xb7, + 0x05, 0x63, 0xf2, 0x4e, 0xc1, 0x1d, 0x42, 0x63, 0xb0, 0x6f, 0x4c, 0xbd, 0x64, 0xf8, 0xc8, 0x62, + 0xdc, 0x67, 0x3e, 0x1e, 0x98, 0xae, 0x3c, 0x45, 0x6f, 0x26, 0xa6, 0x2b, 0x4f, 0xe1, 0x8b, 0x83, + 0x92, 0xfb, 0xc8, 0x82, 0x31, 0x46, 0xfc, 0x7c, 0x16, 0xf9, 0x01, 0xcc, 0x69, 0xf7, 0xb1, 0x0f, + 0x2f, 0x83, 0xbe, 0x92, 0xa4, 0xfc, 0xdb, 0x3b, 0xbd, 0xa2, 0x6d, 0xa9, 0xbd, 0x8c, 0xe5, 0xcf, + 0xdb, 0xc6, 0xe0, 0x30, 0x29, 0xda, 0x80, 0x86, 0x7e, 0xd7, 0xfb, 0x8a, 0x72, 0x97, 0x35, 0x92, + 0xfe, 0xb0, 0xcb, 0x23, 0x8b, 0xec, 0x42, 0x27, 0xfb, 0x06, 0x85, 0xd2, 0x29, 0x45, 0xef, 0x66, + 0xf4, 0x32, 0x44, 0xe3, 0xe5, 0x0a, 0x72, 0xc0, 0x4f, 0xfd, 0xaa, 0x1f, 0x4f, 0x08, 0xa3, 0xec, + 0xaa, 0x6e, 0xfe, 0xa8, 0x82, 0x2a, 0xad, 0xe8, 0xe7, 0x34, 0xee, 0x5b, 0x8f, 0x2c, 0xf2, 0xf7, + 0x2c, 0x68, 0x1a, 0x37, 0xbb, 0x8d, 0x33, 0x94, 0x99, 0x7e, 0x76, 0x75, 0x9a, 0xde, 0x51, 0xdb, + 0xc1, 0x41, 0xdc, 0x7d, 0xf0, 0x1d, 0x63, 0x92, 0x7e, 0x6a, 0x78, 0x7a, 0x57, 0xb2, 0xbf, 0xa0, + 0xf0, 0x59, 0x36, 0x83, 0xfe, 0x7e, 0xd2, 0x67, 0x8f, 0x2c, 0xf2, 0x4f, 0x2c, 0x68, 0x9b, 0x21, + 0x1c, 0xd5, 0xdd, 0xc2, 0x60, 0x91, 0x62, 0xa5, 0x29, 0x71, 0x9f, 0x1f, 0x60, 0x2b, 0x8f, 0x1e, + 0x38, 0x46, 0x2b, 0xc5, 0xb3, 0x97, 0xbf, 0x5a, 0x6b, 0xc9, 0xc7, 0xfc, 0x07, 0x8d, 0x64, 0xf4, + 0x9a, 0xe4, 0x7f, 0x00, 0x47, 0xb1, 0x9f, 0xfe, 0x73, 0x31, 0x38, 0x09, 0x3f, 0xe2, 0xbf, 0x1c, + 0x20, 0x43, 0xa0, 0x8c, 0x8b, 0xdf, 0xf6, 0x7b, 0xfb, 0x1e, 0xf6, 0xe9, 0x8e, 0x7d, 0xc3, 0xe8, + 0x53, 0xd6, 0xf0, 0x58, 0xe3, 0xad, 0x13, 0xbf, 0xf4, 0x92, 0xae, 0x9c, 0xb9, 0x5f, 0x7f, 0x99, + 0xde, 0xc8, 0x11, 0x6f, 0xa4, 0xc8, 0x6e, 0x88, 0xda, 0x5b, 0x16, 0x63, 0x3f, 0xc0, 0xb6, 0xde, + 0xb3, 0xdf, 0x99, 0xda, 0xd6, 0x87, 0x18, 0x88, 0x61, 0x2d, 0x3e, 0x00, 0x48, 0x4f, 0x9b, 0x90, + 0xcc, 0x49, 0x07, 0xa5, 0x80, 0xf2, 0x07, 0x52, 0x4c, 0x79, 0x96, 0x07, 0x22, 0x58, 0x89, 0x3f, + 0xe4, 0xea, 0x74, 0x47, 0x9e, 0x91, 0xd0, 0xad, 0x2f, 0xf3, 0x48, 0x88, 0x61, 0x7d, 0x65, 0xcb, + 0x37, 0x94, 0xa9, 0x3a, 0x70, 0xf1, 0x02, 0x5a, 0xbb, 0x61, 0xf8, 0x6a, 0x32, 0x56, 0xc7, 0x1b, + 0xcd, 0x18, 0xe9, 0xb6, 0x17, 0x9f, 0xf5, 0x32, 0xbd, 0xb0, 0xef, 0x62, 0x51, 0x3d, 0xd2, 0xd5, + 0x8a, 0x7a, 0xf8, 0xd3, 0xf4, 0x24, 0xcb, 0x67, 0xc4, 0x83, 0x79, 0xa5, 0xa3, 0x55, 0xc3, 0x7b, + 0x66, 0x31, 0x86, 0x66, 0xce, 0x56, 0x61, 0x6c, 0x13, 0x64, 0x6b, 0x1f, 0xc6, 0xb2, 0xcc, 0x47, + 0x16, 0x39, 0x80, 0xe6, 0x26, 0xed, 0xe3, 0xa5, 0x4f, 0x0c, 0x34, 0x2e, 0x18, 0xc1, 0x2a, 0x1e, + 0xa1, 0xec, 0xb5, 0x0c, 0xd0, 0x5c, 0xb7, 0xc6, 0xde, 0x65, 0x44, 0x3f, 0x7d, 0xf8, 0x53, 0x11, + 0xc2, 0xfc, 0x4c, 0xae, 0x5b, 0x32, 0xc6, 0x6b, 0xac, 0x5b, 0x99, 0xa0, 0xb0, 0xb1, 0x6e, 0xe5, + 0x82, 0xc2, 0xc6, 0x50, 0xcb, 0x18, 0x33, 0x19, 0xc2, 0x7c, 0x2e, 0x8e, 0xac, 0x96, 0xac, 0x69, + 0xd1, 0xe7, 0xde, 0xdd, 0xe9, 0x19, 0xcc, 0xda, 0x1e, 0x98, 0xb5, 0x1d, 0x42, 0x8b, 0xbf, 0xe9, + 0x74, 0x4c, 0xf9, 0x7d, 0x8e, 0xcc, 0xf3, 0x00, 0xfa, 0x6d, 0x91, 0xec, 0x02, 0x83, 0x34, 0xd3, + 0xc2, 0xe1, 0x8f, 0x43, 0xfe, 0x10, 0x1a, 0xcf, 0x68, 0x22, 0x2f, 0x70, 0x28, 0x1b, 0x3b, 0x73, + 0xa3, 0xa3, 0x57, 0x70, 0xff, 0xc3, 0xe4, 0x19, 0x2c, 0xed, 0x21, 0x1d, 0x9c, 0x52, 0xae, 0x9c, + 0x5c, 0x7f, 0xf0, 0x19, 0xf9, 0x1d, 0x2c, 0x5c, 0x5d, 0xa7, 0x5b, 0xd2, 0x4e, 0xe3, 0xeb, 0x85, + 0xcf, 0x65, 0xf0, 0xa2, 0x92, 0x83, 0x70, 0x40, 0x35, 0x5b, 0x2f, 0x80, 0x86, 0x76, 0x1d, 0x57, + 0x09, 0x50, 0xfe, 0xf6, 0xb2, 0x12, 0xa0, 0x82, 0xdb, 0xbb, 0xf6, 0x7d, 0xac, 0xc7, 0x26, 0x77, + 0xd3, 0x7a, 0xf8, 0x8d, 0xdd, 0xb4, 0xa6, 0x87, 0x3f, 0xf5, 0x46, 0xc9, 0x67, 0xe4, 0x25, 0xbe, + 0xb0, 0xaa, 0x5f, 0x50, 0x49, 0x37, 0x0d, 0xd9, 0xbb, 0x2c, 0x6a, 0xb0, 0x34, 0x92, 0xb9, 0x91, + 0xe0, 0x55, 0xa1, 0x25, 0xf7, 0x4d, 0x80, 0xc3, 0x24, 0x1c, 0x6f, 0x7a, 0x74, 0x14, 0x06, 0xa9, + 0xae, 0x4d, 0xaf, 0x47, 0xa4, 0xfa, 0x4b, 0xbb, 0x23, 0x41, 0x5e, 0x6a, 0xbb, 0x2c, 0xe3, 0x8e, + 0x8f, 0x64, 0xae, 0xa9, 0x37, 0x28, 0xd4, 0x80, 0x14, 0xdc, 0xa2, 0x78, 0x64, 0x91, 0x35, 0x80, + 0xf4, 0x20, 0x81, 0xda, 0x33, 0xe5, 0xce, 0x28, 0x28, 0xb5, 0x57, 0x70, 0xea, 0xe0, 0x00, 0xea, + 0x69, 0xd8, 0x75, 0x39, 0xbd, 0x9c, 0x6f, 0x04, 0x69, 0xd5, 0x0a, 0x9e, 0x0b, 0x86, 0xda, 0x1d, + 0x1c, 0x2a, 0x20, 0x35, 0x36, 0x54, 0x18, 0xe1, 0xf4, 0x61, 0x81, 0x37, 0x50, 0x99, 0x4b, 0x78, + 0xac, 0x5f, 0x3d, 0xa4, 0x9b, 0x0f, 0x48, 0x2a, 0x69, 0x2e, 0x8c, 0xa7, 0x19, 0xae, 0x1f, 0xc6, + 0xad, 0xfc, 0x4a, 0x01, 0x53, 0xcd, 0x23, 0x98, 0xcf, 0x85, 0x68, 0x94, 0x48, 0x4f, 0x8b, 0xc1, + 0x29, 0x91, 0x9e, 0x1a, 0xdd, 0xb1, 0xaf, 0x63, 0x95, 0x73, 0x36, 0xe0, 0x56, 0xef, 0xc2, 0x4f, + 0xfa, 0x67, 0xac, 0xba, 0x3f, 0xb2, 0x60, 0xa1, 0x20, 0x02, 0x43, 0xde, 0x95, 0x5e, 0x83, 0xa9, + 0xd1, 0x99, 0x5e, 0xa1, 0x83, 0xde, 0x3e, 0xc4, 0x7a, 0x9e, 0x93, 0x4f, 0x8c, 0x85, 0x8d, 0xfb, + 0xc6, 0x85, 0x64, 0x5e, 0x69, 0x54, 0x14, 0x5a, 0x14, 0x9f, 0xc2, 0x32, 0x6f, 0xc8, 0xda, 0x70, + 0x98, 0x09, 0x1e, 0xdc, 0xc9, 0xfd, 0xe8, 0xa9, 0x11, 0x14, 0xe9, 0x4d, 0xff, 0x51, 0xd4, 0x29, + 0xe6, 0x34, 0x6f, 0x2a, 0x99, 0x40, 0x27, 0xeb, 0x90, 0x27, 0xd3, 0xcb, 0xea, 0xbd, 0x63, 0xec, + 0x7f, 0x0b, 0x9c, 0xf8, 0x5f, 0xc6, 0xca, 0xde, 0xb1, 0x7b, 0x45, 0xe3, 0xc2, 0xb7, 0xc4, 0x6c, + 0x3e, 0xfe, 0x8a, 0x8a, 0x1e, 0x64, 0xfa, 0x29, 0x2b, 0x98, 0x16, 0xee, 0x50, 0x3b, 0xf0, 0xe2, + 0xe0, 0xc3, 0x7b, 0x58, 0xfd, 0x5d, 0xfb, 0x66, 0x51, 0xf5, 0x11, 0xff, 0x84, 0xef, 0xc5, 0x97, + 0xb3, 0x72, 0x2d, 0x5b, 0x70, 0xb7, 0x68, 0xbe, 0xa7, 0xee, 0x85, 0x32, 0x63, 0x7d, 0x0d, 0x6d, + 0xbb, 0xa6, 0x1e, 0x2d, 0x50, 0xe2, 0x53, 0x10, 0x96, 0x50, 0xe2, 0x53, 0x14, 0x5e, 0x30, 0xed, + 0x1a, 0x19, 0x58, 0xf8, 0xd8, 0x7a, 0xb0, 0xfe, 0xfe, 0x0f, 0xbe, 0x7c, 0xea, 0x27, 0x67, 0x93, + 0xe3, 0x95, 0x7e, 0x38, 0x7a, 0x38, 0x94, 0xde, 0x46, 0x71, 0xd5, 0xed, 0xe1, 0x30, 0x18, 0x3c, + 0xc4, 0x62, 0x8f, 0x67, 0xf0, 0x57, 0x9a, 0xbf, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x83, + 0x91, 0xdc, 0xd2, 0xd7, 0x79, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -11000,9 +11450,22 @@ type LightningClient interface { //request to a remote peer. Users are able to specify a target number of //blocks that the funding transaction should be confirmed in, or a manual fee //rate to us for the funding transaction. If neither are specified, then a - //lax block confirmation target is used. + //lax block confirmation target is used. Each OpenStatusUpdate will return + //the pending channel ID of the in-progress channel. Depending on the + //arguments specified in the OpenChannelRequest, this pending channel ID can + //then be used to manually progress the channel funding flow. OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) //* + //FundingStateStep is an advanced funding related call that allows the caller + //to either execute some preparatory steps for a funding workflow, or + //manually progress a funding workflow. The primary way a funding flow is + //identified is via its pending channel ID. As an example, this method can be + //used to specify that we're expecting a funding flow for a particular + //pending channel ID, for which we need to use specific parameters. + //Alternatively, this can be used to interactively drive PSBT signing for + //funding for partially complete funding transactions. + FundingStateStep(ctx context.Context, in *FundingTransitionMsg, opts ...grpc.CallOption) (*FundingStateStepResp, error) + //* //ChannelAcceptor dispatches a bi-directional streaming RPC in which //OpenChannel requests are sent to the client and the client responds with //a boolean that tells LND whether or not to accept the channel. This allows @@ -11494,6 +11957,15 @@ func (x *lightningOpenChannelClient) Recv() (*OpenStatusUpdate, error) { return m, nil } +func (c *lightningClient) FundingStateStep(ctx context.Context, in *FundingTransitionMsg, opts ...grpc.CallOption) (*FundingStateStepResp, error) { + out := new(FundingStateStepResp) + err := c.cc.Invoke(ctx, "/lnrpc.Lightning/FundingStateStep", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *lightningClient) ChannelAcceptor(ctx context.Context, opts ...grpc.CallOption) (Lightning_ChannelAcceptorClient, error) { stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[4], "/lnrpc.Lightning/ChannelAcceptor", opts...) if err != nil { @@ -12040,9 +12512,22 @@ type LightningServer interface { //request to a remote peer. Users are able to specify a target number of //blocks that the funding transaction should be confirmed in, or a manual fee //rate to us for the funding transaction. If neither are specified, then a - //lax block confirmation target is used. + //lax block confirmation target is used. Each OpenStatusUpdate will return + //the pending channel ID of the in-progress channel. Depending on the + //arguments specified in the OpenChannelRequest, this pending channel ID can + //then be used to manually progress the channel funding flow. OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error //* + //FundingStateStep is an advanced funding related call that allows the caller + //to either execute some preparatory steps for a funding workflow, or + //manually progress a funding workflow. The primary way a funding flow is + //identified is via its pending channel ID. As an example, this method can be + //used to specify that we're expecting a funding flow for a particular + //pending channel ID, for which we need to use specific parameters. + //Alternatively, this can be used to interactively drive PSBT signing for + //funding for partially complete funding transactions. + FundingStateStep(context.Context, *FundingTransitionMsg) (*FundingStateStepResp, error) + //* //ChannelAcceptor dispatches a bi-directional streaming RPC in which //OpenChannel requests are sent to the client and the client responds with //a boolean that tells LND whether or not to accept the channel. This allows @@ -12648,6 +13133,24 @@ func (x *lightningOpenChannelServer) Send(m *OpenStatusUpdate) error { return x.ServerStream.SendMsg(m) } +func _Lightning_FundingStateStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FundingTransitionMsg) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LightningServer).FundingStateStep(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lnrpc.Lightning/FundingStateStep", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LightningServer).FundingStateStep(ctx, req.(*FundingTransitionMsg)) + } + return interceptor(ctx, in, info, handler) +} + func _Lightning_ChannelAcceptor_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(LightningServer).ChannelAcceptor(&lightningChannelAcceptorServer{stream}) } @@ -13318,6 +13821,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ MethodName: "OpenChannelSync", Handler: _Lightning_OpenChannelSync_Handler, }, + { + MethodName: "FundingStateStep", + Handler: _Lightning_FundingStateStep_Handler, + }, { MethodName: "AbandonChannel", Handler: _Lightning_AbandonChannel_Handler, diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index 07419ef4..0b68a993 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -437,10 +437,25 @@ service Lightning { request to a remote peer. Users are able to specify a target number of blocks that the funding transaction should be confirmed in, or a manual fee rate to us for the funding transaction. If neither are specified, then a - lax block confirmation target is used. + lax block confirmation target is used. Each OpenStatusUpdate will return + the pending channel ID of the in-progress channel. Depending on the + arguments specified in the OpenChannelRequest, this pending channel ID can + then be used to manually progress the channel funding flow. */ rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate); + /** + FundingStateStep is an advanced funding related call that allows the caller + to either execute some preparatory steps for a funding workflow, or + manually progress a funding workflow. The primary way a funding flow is + identified is via its pending channel ID. As an example, this method can be + used to specify that we're expecting a funding flow for a particular + pending channel ID, for which we need to use specific parameters. + Alternatively, this can be used to interactively drive PSBT signing for + funding for partially complete funding transactions. + */ + rpc FundingStateStep(FundingTransitionMsg) returns (FundingStateStepResp); + /** ChannelAcceptor dispatches a bi-directional streaming RPC in which OpenChannel requests are sent to the client and the client responds with @@ -1678,15 +1693,103 @@ message OpenChannelRequest { Note: If this value is set on channel creation, you will *not* be able to cooperatively close out to a different address. */ - string close_address = 13[json_name = "close_address"]; + string close_address = 13 [json_name = "close_address"]; + + /** + Funding shims are an optional argument that allow the caller to intercept + certain funding functionality. For example, a shim can be provided to use a + particular key for the commitment key (ideally cold) rather than use one + that is generated by the wallet as normal, or signal that signing will be + carried out in an interactive manner (PSBT based). + */ + FundingShim funding_shim = 14 [json_name = "funding_shim"]; } message OpenStatusUpdate { oneof update { PendingUpdate chan_pending = 1 [json_name = "chan_pending"]; ChannelOpenUpdate chan_open = 3 [json_name = "chan_open"]; + } + + /** + The pending channel ID of the created channel. This value may be used to + further the funding flow manually via the FundingStateStep method. + */ + bytes pending_chan_id = 4 [json_name = "pending_chan_id"]; +} + +message KeyLocator { + /// The family of key being identified. + int32 key_family = 1; + + /// The precise index of the key being identified. + int32 key_index = 2; +} + +message KeyDescriptor { + /** + The raw bytes of the key being identified. + */ + bytes raw_key_bytes = 1; + + /** + The key locator that identifies which key to use for signing. + */ + KeyLocator key_loc = 2; +} + +message ChanPointShim { + /** + The size of the pre-crafted output to be used as the channel point for this + channel funding. + */ + int64 amt = 1; + + /// The target channel point to refrence in created commitment transactions. + ChannelPoint chan_point = 2; + + /// Our local key to use when creating the multi-sig output. + KeyDescriptor local_key = 3; + + /// The key of the remote party to use when creating the multi-sig output. + bytes remote_key = 4; + + /** + If non-zero, then this will be used as the pending channel ID on the wire + protocol to initate the funding request. This is an optional field, and + should only be set if the responder is already expecting a specific pending + channel ID. + */ + bytes pending_chan_id = 5; +} + +message FundingShim { + oneof shim { + ChanPointShim chan_point_shim = 1; } } +message FundingShimCancel { + /// The pending channel ID of the channel to cancel the funding shim for. + bytes pending_chan_id = 1; +} + +message FundingTransitionMsg { + oneof trigger { + /** + The funding shim to regsiter. This should be used before any + channel funding has began by the remote party, as it is intended as a + prepatory step for the full channel funding. + */ + FundingShim shim_register = 1; + + /// Used to cancel an existing registered funding shim. + FundingShimCancel shim_cancel = 2; + } +} + +message FundingStateStepResp { +} + message PendingHTLC { /// The direction within the channel that the htlc was sent diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 9da3257c..a7cbe285 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -1680,6 +1680,34 @@ } } }, + "lnrpcChanPointShim": { + "type": "object", + "properties": { + "amt": { + "type": "string", + "format": "int64", + "description": "*\nThe size of the pre-crafted output to be used as the channel point for this\nchannel funding." + }, + "chan_point": { + "$ref": "#/definitions/lnrpcChannelPoint", + "description": "/ The target channel point to refrence in created commitment transactions." + }, + "local_key": { + "$ref": "#/definitions/lnrpcKeyDescriptor", + "description": "/ Our local key to use when creating the multi-sig output." + }, + "remote_key": { + "type": "string", + "format": "byte", + "description": "/ The key of the remote party to use when creating the multi-sig output." + }, + "pending_chan_id": { + "type": "string", + "format": "byte", + "description": "*\nIf non-zero, then this will be used as the pending channel ID on the wire\nprotocol to initate the funding request. This is an optional field, and\nshould only be set if the responder is already expecting a specific pending\nchannel ID." + } + } + }, "lnrpcChangePasswordRequest": { "type": "object", "properties": { @@ -2433,6 +2461,27 @@ } } }, + "lnrpcFundingShim": { + "type": "object", + "properties": { + "chan_point_shim": { + "$ref": "#/definitions/lnrpcChanPointShim" + } + } + }, + "lnrpcFundingShimCancel": { + "type": "object", + "properties": { + "pending_chan_id": { + "type": "string", + "format": "byte", + "description": "/ The pending channel ID of the channel to cancel the funding shim for." + } + } + }, + "lnrpcFundingStateStepResp": { + "type": "object" + }, "lnrpcGenSeedResponse": { "type": "object", "properties": { @@ -2917,6 +2966,35 @@ ], "default": "ACCEPTED" }, + "lnrpcKeyDescriptor": { + "type": "object", + "properties": { + "raw_key_bytes": { + "type": "string", + "format": "byte", + "description": "*\nThe raw bytes of the key being identified." + }, + "key_loc": { + "$ref": "#/definitions/lnrpcKeyLocator", + "description": "* \nThe key locator that identifies which key to use for signing." + } + } + }, + "lnrpcKeyLocator": { + "type": "object", + "properties": { + "key_family": { + "type": "integer", + "format": "int32", + "description": "/ The family of key being identified." + }, + "key_index": { + "type": "integer", + "format": "int32", + "description": "/ The precise index of the key being identified." + } + } + }, "lnrpcLightningAddress": { "type": "object", "properties": { @@ -3271,6 +3349,10 @@ "close_address": { "type": "string", "description": "Close address is an optional address which specifies the address to which\nfunds should be paid out to upon cooperative close. This field may only be\nset if the peer supports the option upfront feature bit (call listpeers\nto check). The remote peer will only accept cooperative closes to this\naddress if it is set.\n\nNote: If this value is set on channel creation, you will *not* be able to\ncooperatively close out to a different address." + }, + "funding_shim": { + "$ref": "#/definitions/lnrpcFundingShim", + "description": "*\nFunding shims are an optional argument that allow the caller to intercept\ncertain funding functionality. For example, a shim can be provided to use a\nparticular key for the commitment key (ideally cold) rather than use one\nthat is generated by the wallet as normal, or signal that signing will be\ncarried out in an interactive manner (PSBT based)." } } }, @@ -3282,6 +3364,11 @@ }, "chan_open": { "$ref": "#/definitions/lnrpcChannelOpenUpdate" + }, + "pending_chan_id": { + "type": "string", + "format": "byte", + "description": "*\nThe pending channel ID of the created channel. This value may be used to\nfurther the funding flow manually via the FundingStateStep method." } } }, diff --git a/rpcserver.go b/rpcserver.go index 1ae6f2ad..b7b564f9 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -440,6 +440,13 @@ func mainRPCServerPermissions() map[string][]bakery.Op { Entity: "peers", Action: "read", }}, + "/lnrpc.Lightning/FundingStateStep": {{ + Entity: "onchain", + Action: "write", + }, { + Entity: "offchain", + Action: "write", + }}, } } @@ -5692,3 +5699,17 @@ func (r *rpcServer) BakeMacaroon(ctx context.Context, return resp, nil } + +// FundingStateStep is an advanced funding related call that allows the caller +// to either execute some preparatory steps for a funding workflow, or manually +// progress a funding workflow. The primary way a funding flow is identified is +// via its pending channel ID. As an example, this method can be used to +// specify that we're expecting a funding flow for a particular pending channel +// ID, for which we need to use specific parameters. Alternatively, this can +// be used to interactively drive PSBT signing for funding for partially +// complete funding transactions. +func (r *rpcServer) FundingStateStep(context.Context, + *lnrpc.FundingTransitionMsg) (*lnrpc.FundingStateStepResp, error) { + + return nil, fmt.Errorf("not implemented") +} From 91bd56dbd11851f4e233f52a58e3f35cf5758ac3 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 13 Nov 2019 20:58:54 -0800 Subject: [PATCH 2/5] funding+rpc: expand specified chan point shim into a canned assembler In this commit, we update the `OpenChannel` method to observe the new `funding_shim` field in the main open channel request. If this is specified, and is a channel point shim, then we'll create a custom `chanfunding.Assembler` for the wallet to use in place of the regular funding workflow. With this commit, the "initiator" of an external funding flow can now delegate the remainder of the channel funding workflow to lnd. --- fundingmanager.go | 33 ++++++++++++--- rpcserver.go | 106 ++++++++++++++++++++++++++++++++++++++++++++++ server.go | 12 ++++++ 3 files changed, 145 insertions(+), 6 deletions(-) diff --git a/fundingmanager.go b/fundingmanager.go index b11bf938..09d5807b 100644 --- a/fundingmanager.go +++ b/fundingmanager.go @@ -99,6 +99,8 @@ var ( // script is set for a peer that does not support the feature bit. errUpfrontShutdownScriptNotSupported = errors.New("peer does not support" + "option upfront shutdown script") + + zeroID [32]byte ) // reservationWithCtx encapsulates a pending channel reservation. This wrapper @@ -840,8 +842,8 @@ func (f *fundingManager) advanceFundingState(channel *channeldb.OpenChannel, // are still steps left of the setup procedure. We continue the // procedure where we left off. err = f.stateStep( - channel, lnChannel, shortChanID, channelState, - updateChan, + channel, lnChannel, shortChanID, pendingChanID, + channelState, updateChan, ) if err != nil { fndgLog.Errorf("Unable to advance state(%v): %v", @@ -857,7 +859,8 @@ func (f *fundingManager) advanceFundingState(channel *channeldb.OpenChannel, // updateChan can be set non-nil to get OpenStatusUpdates. func (f *fundingManager) stateStep(channel *channeldb.OpenChannel, lnChannel *lnwallet.LightningChannel, - shortChanID *lnwire.ShortChannelID, channelState channelOpeningState, + shortChanID *lnwire.ShortChannelID, pendingChanID [32]byte, + channelState channelOpeningState, updateChan chan<- *lnrpc.OpenStatusUpdate) error { chanID := lnwire.NewChanIDFromOutPoint(&channel.FundingOutpoint) @@ -936,6 +939,7 @@ func (f *fundingManager) stateStep(channel *channeldb.OpenChannel, ChannelPoint: cp, }, }, + PendingChanId: pendingChanID[:], } select { @@ -1816,6 +1820,7 @@ func (f *fundingManager) handleFundingSigned(fmsg *fundingSignedMsg) { // Send an update to the upstream client that the negotiation process // is over. + // // TODO(roasbeef): add abstraction over updates to accommodate // long-polling, or SSE, etc. upd := &lnrpc.OpenStatusUpdate{ @@ -1825,6 +1830,7 @@ func (f *fundingManager) handleFundingSigned(fmsg *fundingSignedMsg) { OutputIndex: fundingPoint.Index, }, }, + PendingChanId: pendingChanID[:], } select { @@ -2853,9 +2859,23 @@ func (f *fundingManager) handleInitFundingMsg(msg *initFundingMsg) { channelFlags = lnwire.FFAnnounceChannel } - // Obtain a new pending channel ID which is used to track this - // reservation throughout its lifetime. - chanID := f.nextPendingChanID() + // If the caller specified their own channel ID, then we'll use that. + // Otherwise we'll generate a fresh one as normal. This will be used + // to track this reservation throughout its lifetime. + var chanID [32]byte + if msg.pendingChanID == zeroID { + chanID = f.nextPendingChanID() + } else { + // If the user specified their own pending channel ID, then + // we'll ensure it doesn't collide with any existing pending + // channel ID. + chanID = msg.pendingChanID + if _, err := f.getReservationCtx(peerKey, chanID); err == nil { + msg.err <- fmt.Errorf("pendingChannelID(%x) "+ + "already present", chanID[:]) + return + } + } // Initialize a funding reservation with the local wallet. If the // wallet doesn't have enough funds to commit to this channel, then the @@ -2886,6 +2906,7 @@ func (f *fundingManager) handleInitFundingMsg(msg *initFundingMsg) { Flags: channelFlags, MinConfs: msg.minConfs, Tweakless: tweaklessCommitment, + ChanFunder: msg.chanFunder, } reservation, err := f.cfg.Wallet.InitChannelReservation(req) diff --git a/rpcserver.go b/rpcserver.go index b7b564f9..9dcec230 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -40,6 +40,7 @@ import ( "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/invoices" + "github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/lncfg" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" @@ -47,6 +48,7 @@ import ( "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" + "github.com/lightningnetwork/lnd/lnwallet/chanfunding" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/macaroons" "github.com/lightningnetwork/lnd/monitoring" @@ -1454,6 +1456,88 @@ func extractOpenChannelMinConfs(in *lnrpc.OpenChannelRequest) (int32, error) { } } +// newFundingShimAssembler returns a new fully populated +// chanfunding.CannedAssembler using a FundingShim obtained from an RPC caller. +func newFundingShimAssembler(chanPointShim *lnrpc.ChanPointShim, + initiator bool, keyRing keychain.KeyRing) (chanfunding.Assembler, error) { + + // Perform some basic sanity checks to ensure that all the expected + // fields are populated. + switch { + case chanPointShim.RemoteKey == nil: + return nil, fmt.Errorf("remote key not set") + + case chanPointShim.LocalKey == nil: + return nil, fmt.Errorf("local key desc not set") + + case chanPointShim.LocalKey.RawKeyBytes == nil: + return nil, fmt.Errorf("local raw key bytes not set") + + case chanPointShim.LocalKey.KeyLoc == nil: + return nil, fmt.Errorf("local key loc not set") + + case chanPointShim.ChanPoint == nil: + return nil, fmt.Errorf("chan point not set") + + case len(chanPointShim.PendingChanId) != 32: + return nil, fmt.Errorf("pending chan ID not set") + } + + // First, we'll map the RPC's channel point to one we can actually use. + index := chanPointShim.ChanPoint.OutputIndex + txid, err := GetChanPointFundingTxid(chanPointShim.ChanPoint) + if err != nil { + return nil, err + } + chanPoint := wire.NewOutPoint(txid, index) + + // Next we'll parse out the remote party's funding key, as well as our + // full key descriptor. + remoteKey, err := btcec.ParsePubKey( + chanPointShim.RemoteKey, btcec.S256(), + ) + if err != nil { + return nil, err + } + + shimKeyDesc := chanPointShim.LocalKey + localKey, err := btcec.ParsePubKey( + shimKeyDesc.RawKeyBytes, btcec.S256(), + ) + if err != nil { + return nil, err + } + localKeyDesc := keychain.KeyDescriptor{ + PubKey: localKey, + KeyLocator: keychain.KeyLocator{ + Family: keychain.KeyFamily( + shimKeyDesc.KeyLoc.KeyFamily, + ), + Index: uint32(shimKeyDesc.KeyLoc.KeyIndex), + }, + } + + // Verify that if we re-derive this key according to the passed + // KeyLocator, that we get the exact same key back. Otherwise, we may + // end up in a situation where we aren't able to actually sign for this + // newly created channel. + derivedKey, err := keyRing.DeriveKey(localKeyDesc.KeyLocator) + if err != nil { + return nil, err + } + if !derivedKey.PubKey.IsEqual(localKey) { + return nil, fmt.Errorf("KeyLocator does not match attached " + + "raw pubkey") + } + + // With all the parts assembled, we can now make the canned assembler + // to pass into the wallet. + return chanfunding.NewCannedAssembler( + *chanPoint, btcutil.Amount(chanPointShim.Amt), + &localKeyDesc, remoteKey, initiator, + ), nil +} + // OpenChannel attempts to open a singly funded channel specified in the // request to a remote peer. func (r *rpcServer) OpenChannel(in *lnrpc.OpenChannelRequest, @@ -1570,6 +1654,28 @@ func (r *rpcServer) OpenChannel(in *lnrpc.OpenChannelRequest, shutdownScript: script, } + // If the user has provided a shim, then we'll now augment the based + // open channel request with this additional logic. + if in.FundingShim != nil { + // If we have a chan point shim, then this means the funding + // transaction was crafted externally. In this case we only + // need to hand a channel point down into the wallet. + if in.FundingShim.GetChanPointShim() != nil { + chanPointShim := in.FundingShim.GetChanPointShim() + + // Map the channel point shim into a new + // chanfunding.CannedAssembler that the wallet will use + // to obtain the channel point details. + copy(req.pendingChanID[:], chanPointShim.PendingChanId) + req.chanFunder, err = newFundingShimAssembler( + chanPointShim, true, r.server.cc.keyRing, + ) + if err != nil { + return err + } + } + } + updateChan, errChan := r.server.OpenChannel(req) var outpoint wire.OutPoint diff --git a/server.go b/server.go index dd97b2be..076e4d7b 100644 --- a/server.go +++ b/server.go @@ -47,6 +47,7 @@ import ( "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" + "github.com/lightningnetwork/lnd/lnwallet/chanfunding" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/nat" "github.com/lightningnetwork/lnd/netann" @@ -3108,6 +3109,17 @@ type openChanReq struct { // TODO(roasbeef): add ability to specify channel constraints as well + // chanFunder is an optional channel funder that allows the caller to + // control exactly how the channel funding is carried out. If not + // specified, then the default chanfunding.WalletAssembler will be + // used. + chanFunder chanfunding.Assembler + + // pendingChanID is not all zeroes (the default value), then this will + // be the pending channel ID used for the funding flow within the wire + // protocol. + pendingChanID [32]byte + updates chan *lnrpc.OpenStatusUpdate err chan error } From bc176b5aa3d16ccf444680feb870c67ae67d4787 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 13 Nov 2019 21:00:30 -0800 Subject: [PATCH 3/5] rpc+lnwallet: implement new FundingStateStep RPC method In this commit, we implement the currently defined transition methods for the new `FundingStateStep` method. At this point, we're now able to serve the "responder" of the externally initiated channel funding flow by being able to register and cancel a funding flow according to its expected pending channel ID. --- lnwallet/chanfunding/canned_assembler.go | 16 +++--- lnwallet/wallet.go | 24 ++++++++- rpcserver.go | 66 ++++++++++++++++++++++-- 3 files changed, 95 insertions(+), 11 deletions(-) diff --git a/lnwallet/chanfunding/canned_assembler.go b/lnwallet/chanfunding/canned_assembler.go index 10fe811b..36ebba15 100644 --- a/lnwallet/chanfunding/canned_assembler.go +++ b/lnwallet/chanfunding/canned_assembler.go @@ -154,15 +154,9 @@ func NewCannedAssembler(chanPoint wire.OutPoint, fundingAmt btcutil.Amount, // // NOTE: This method satisfies the chanfunding.Assembler interface. func (c *CannedAssembler) ProvisionChannel(req *Request) (Intent, error) { - switch { - // A simple sanity check to ensure the provision request matches the - // re-made shim intent. - case req.LocalAmt != c.fundingAmt: - return nil, fmt.Errorf("intent doesn't match canned assembler") - // We'll exit out if this field is set as the funding transaction has // already been assembled, so we don't influence coin selection.. - case req.SubtractFees: + if req.SubtractFees { return nil, fmt.Errorf("SubtractFees ignored, funding " + "transaction is frozen") } @@ -179,6 +173,14 @@ func (c *CannedAssembler) ProvisionChannel(req *Request) (Intent, error) { intent.remoteFundingAmt = c.fundingAmt } + // A simple sanity check to ensure the provisioned request matches the + // re-made shim intent. + if req.LocalAmt+req.RemoteAmt != c.fundingAmt { + return nil, fmt.Errorf("intent doesn't match canned "+ + "assembler: local_amt=%v, remote_amt=%v, funding_amt=%v", + req.LocalAmt, req.RemoteAmt, c.fundingAmt) + } + return intent, nil } diff --git a/lnwallet/wallet.go b/lnwallet/wallet.go index 855260a5..a6b9b875 100644 --- a/lnwallet/wallet.go +++ b/lnwallet/wallet.go @@ -450,8 +450,30 @@ func (l *LightningWallet) RegisterFundingIntent(expectedID [32]byte, shimIntent chanfunding.Intent) error { l.intentMtx.Lock() + defer l.intentMtx.Unlock() + + if _, ok := l.fundingIntents[expectedID]; ok { + return fmt.Errorf("pendingChanID(%x) already has intent "+ + "registered", expectedID[:]) + } + l.fundingIntents[expectedID] = shimIntent - l.intentMtx.Unlock() + + return nil +} + +// CancelFundingIntent allows a caller to cancel a previously registered +// funding intent. If no intent was found, then an error will be returned. +func (l *LightningWallet) CancelFundingIntent(pid [32]byte) error { + l.intentMtx.Lock() + defer l.intentMtx.Unlock() + + if _, ok := l.fundingIntents[pid]; !ok { + return fmt.Errorf("no funding intent found for "+ + "pendingChannelID(%x)", pid[:]) + } + + delete(l.fundingIntents, pid) return nil } diff --git a/rpcserver.go b/rpcserver.go index 9dcec230..d16ad790 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -5814,8 +5814,68 @@ func (r *rpcServer) BakeMacaroon(ctx context.Context, // ID, for which we need to use specific parameters. Alternatively, this can // be used to interactively drive PSBT signing for funding for partially // complete funding transactions. -func (r *rpcServer) FundingStateStep(context.Context, - *lnrpc.FundingTransitionMsg) (*lnrpc.FundingStateStepResp, error) { +func (r *rpcServer) FundingStateStep(ctx context.Context, + in *lnrpc.FundingTransitionMsg) (*lnrpc.FundingStateStepResp, error) { - return nil, fmt.Errorf("not implemented") + switch { + + // If this is a message to register a new shim that is an external + // channel point, then we'll contact the wallet to register this new + // shim. A user will use this method to register a new channel funding + // workflow which has already been partially negotiated outside of the + // core protocol. + case in.GetShimRegister() != nil && + in.GetShimRegister().GetChanPointShim() != nil: + + rpcShimIntent := in.GetShimRegister().GetChanPointShim() + + // Using the rpc shim as a template, we'll construct a new + // chanfunding.Assembler that is able to express proper + // formulation of this expected channel. + shimAssembler, err := newFundingShimAssembler( + rpcShimIntent, false, r.server.cc.keyRing, + ) + if err != nil { + return nil, err + } + req := &chanfunding.Request{ + RemoteAmt: btcutil.Amount(rpcShimIntent.Amt), + } + shimIntent, err := shimAssembler.ProvisionChannel(req) + if err != nil { + return nil, err + } + + // Once we have the intent, we'll register it with the wallet. + // Once we receive an incoming funding request that uses this + // pending channel ID, then this shim will be dispatched in + // place of our regular funding workflow. + var pendingChanID [32]byte + copy(pendingChanID[:], rpcShimIntent.PendingChanId) + err = r.server.cc.wallet.RegisterFundingIntent( + pendingChanID, shimIntent, + ) + if err != nil { + return nil, err + } + + // If this is a transition to cancel an existing shim, then we'll pass + // this message along to the wallet. + case in.GetShimCancel() != nil: + pid := in.GetShimCancel().PendingChanId + + var pendingChanID [32]byte + copy(pendingChanID[:], pid) + + err := r.server.cc.wallet.CancelFundingIntent(pendingChanID) + if err != nil { + return nil, err + } + } + + // TODO(roasbeef): extend PendingChannels to also show shims + + // TODO(roasbeef): return resulting state? also add a method to query + // current state? + return &lnrpc.FundingStateStepResp{}, nil } From be4db0ebcaee422a825ebc5b8a38cda1d4aa03d5 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 10 Dec 2019 20:00:09 -0800 Subject: [PATCH 4/5] lntest: add optional FundingShim field to OpenChannelParams --- lntest/harness.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lntest/harness.go b/lntest/harness.go index 52417750..50376eb7 100644 --- a/lntest/harness.go +++ b/lntest/harness.go @@ -844,6 +844,10 @@ type OpenChannelParams struct { // MinHtlc is the htlc_minimum_msat value set when opening the channel. MinHtlc lnwire.MilliSatoshi + + // FundingShim is an optional funding shim that the caller can specify + // in order to modify the channel funding workflow. + FundingShim *lnrpc.FundingShim } // OpenChannel attempts to open a channel between srcNode and destNode with the @@ -879,6 +883,7 @@ func (n *NetworkHarness) OpenChannel(ctx context.Context, MinConfs: minConfs, SpendUnconfirmed: p.SpendUnconfirmed, MinHtlcMsat: int64(p.MinHtlc), + FundingShim: p.FundingShim, } respStream, err := srcNode.OpenChannel(ctx, openReq) From 3de3ec8008ae0fcd44266ef37a146a5194f53d8d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 10 Dec 2019 20:02:49 -0800 Subject: [PATCH 5/5] lntest/itest: add new test for external chan point funding --- lntest/itest/lnd_test.go | 192 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 187 insertions(+), 5 deletions(-) diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index 5b6b228b..f8e22543 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -33,9 +33,11 @@ import ( "github.com/lightningnetwork/lnd" "github.com/lightningnetwork/lnd/chanbackup" "github.com/lightningnetwork/lnd/channeldb" + "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" + "github.com/lightningnetwork/lnd/lnrpc/signrpc" "github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc" "github.com/lightningnetwork/lnd/lnrpc/wtclientrpc" "github.com/lightningnetwork/lnd/lntest" @@ -955,8 +957,8 @@ func testOnchainFundRecovery(net *lntest.NetworkHarness, t *harnessTest) { // then return a function closure that should be called to assert proper // channel closure. func basicChannelFundingTest(t *harnessTest, net *lntest.NetworkHarness, - alice *lntest.HarnessNode, - bob *lntest.HarnessNode) (*lnrpc.Channel, *lnrpc.Channel, func(), error) { + alice *lntest.HarnessNode, bob *lntest.HarnessNode, + fundingShim *lnrpc.FundingShim) (*lnrpc.Channel, *lnrpc.Channel, func(), error) { chanAmt := lnd.MaxBtcFundingAmount pushAmt := btcutil.Amount(100000) @@ -972,8 +974,9 @@ func basicChannelFundingTest(t *harnessTest, net *lntest.NetworkHarness, chanPoint := openChannelAndAssert( ctxt, t, net, alice, bob, lntest.OpenChannelParams{ - Amt: chanAmt, - PushAmt: pushAmt, + Amt: chanAmt, + PushAmt: pushAmt, + FundingShim: fundingShim, }, ) @@ -1095,7 +1098,7 @@ test: ht := t success := t.t.Run(testName, func(t *testing.T) { carolChannel, daveChannel, closeChan, err := basicChannelFundingTest( - ht, net, carol, dave, + ht, net, carol, dave, nil, ) if err != nil { t.Fatalf("failed funding flow: %v", err) @@ -14907,6 +14910,181 @@ func testHoldInvoicePersistence(net *lntest.NetworkHarness, t *harnessTest) { } } +// testExternalFundingChanPoint tests that we're able to carry out a normal +// channel funding workflow given a channel point that was constructed outside +// the main daemon. +func testExternalFundingChanPoint(net *lntest.NetworkHarness, t *harnessTest) { + ctxb := context.Background() + + // First, we'll create two new nodes that we'll use to open channel + // between for this test. + carol, err := net.NewNode("carol", nil) + if err != nil { + t.Fatalf("unable to start new node: %v", err) + } + defer shutdownAndAssert(net, t, carol) + + dave, err := net.NewNode("dave", nil) + if err != nil { + t.Fatalf("unable to start new node: %v", err) + } + defer shutdownAndAssert(net, t, dave) + + // Carol will be funding the channel, so we'll send some coins over to + // her and ensure they have enough confirmations before we proceed. + ctxt, _ := context.WithTimeout(ctxb, defaultTimeout) + err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, carol) + if err != nil { + t.Fatalf("unable to send coins to carol: %v", err) + } + + // Before we start the test, we'll ensure both sides are connected to + // the funding flow can properly be executed. + ctxt, _ = context.WithTimeout(ctxb, defaultTimeout) + err = net.EnsureConnected(ctxt, carol, dave) + if err != nil { + t.Fatalf("unable to connect peers: %v", err) + } + + // At this point, we're ready to simulate our external channle funding + // flow. To start with, we'll get to new keys from both sides which + // will be used to create the multi-sig output for the external funding + // transaction. + keyLoc := &signrpc.KeyLocator{ + KeyFamily: 9999, + KeyIndex: 1, + } + carolFundingKey, err := carol.WalletKitClient.DeriveKey(ctxb, keyLoc) + if err != nil { + t.Fatalf("unable to get carol funding key: %v", err) + } + daveFundingKey, err := dave.WalletKitClient.DeriveKey(ctxb, keyLoc) + if err != nil { + t.Fatalf("unable to get dave funding key: %v", err) + } + + // Now that we have the multi-sig keys for each party, we can manually + // construct the funding transaction. We'll instruct the backend to + // immediately create and broadcast a transaction paying out an exact + // amount. Normally this would reside in the mempool, but we just + // confirm it now for simplicity. + const chanSize = lnd.MaxBtcFundingAmount + _, fundingOutput, err := input.GenFundingPkScript( + carolFundingKey.RawKeyBytes, daveFundingKey.RawKeyBytes, + int64(chanSize), + ) + if err != nil { + t.Fatalf("unable to create funding script: %v", err) + } + txid, err := net.Miner.SendOutputsWithoutChange( + []*wire.TxOut{fundingOutput}, 5, + ) + if err != nil { + t.Fatalf("unable to create funding output: %v", err) + } + + // At this point, we can being our external channel funding workflow. + // We'll start by generating a pending channel ID externally that will + // be used to track this new funding type. + var pendingChanID [32]byte + if _, err := rand.Read(pendingChanID[:]); err != nil { + t.Fatalf("unable to gen pending chan ID: %v", err) + } + + // Now that we have the pending channel ID, Dave (our responder) will + // register the intent to receive a new channel funding workflow using + // the pending channel ID. + chanPointShim := &lnrpc.ChanPointShim{ + Amt: int64(chanSize), + ChanPoint: &lnrpc.ChannelPoint{ + FundingTxid: &lnrpc.ChannelPoint_FundingTxidBytes{ + FundingTxidBytes: txid[:], + }, + }, + LocalKey: &lnrpc.KeyDescriptor{ + RawKeyBytes: daveFundingKey.RawKeyBytes, + KeyLoc: &lnrpc.KeyLocator{ + KeyFamily: daveFundingKey.KeyLoc.KeyFamily, + KeyIndex: daveFundingKey.KeyLoc.KeyIndex, + }, + }, + RemoteKey: carolFundingKey.RawKeyBytes, + PendingChanId: pendingChanID[:], + } + fundingShim := &lnrpc.FundingShim{ + Shim: &lnrpc.FundingShim_ChanPointShim{ + ChanPointShim: chanPointShim, + }, + } + _, err = dave.FundingStateStep(ctxb, &lnrpc.FundingTransitionMsg{ + Trigger: &lnrpc.FundingTransitionMsg_ShimRegister{ + ShimRegister: fundingShim, + }, + }) + if err != nil { + t.Fatalf("unable to walk funding state forward: %v", err) + } + + // If we attempt to register the same shim (has the same pending chan + // ID), then we should get an error. + _, err = dave.FundingStateStep(ctxb, &lnrpc.FundingTransitionMsg{ + Trigger: &lnrpc.FundingTransitionMsg_ShimRegister{ + ShimRegister: fundingShim, + }, + }) + if err == nil { + t.Fatalf("duplicate pending channel ID funding shim " + + "registration should trigger an error") + } + + // We'll take the chan point shim we just registered for Dave (the + // responder), and swap the local/remote keys before we feed it in as + // Carol's funding shim as the initiator. + fundingShim.GetChanPointShim().LocalKey = &lnrpc.KeyDescriptor{ + RawKeyBytes: carolFundingKey.RawKeyBytes, + KeyLoc: &lnrpc.KeyLocator{ + KeyFamily: carolFundingKey.KeyLoc.KeyFamily, + KeyIndex: carolFundingKey.KeyLoc.KeyIndex, + }, + } + fundingShim.GetChanPointShim().RemoteKey = daveFundingKey.RawKeyBytes + + // At this point, we'll now carry out the normal basic channel funding + // test as everything should now proceed as normal (a regular channel + // funding flow). + _, _, closeChans, err := basicChannelFundingTest( + t, net, carol, dave, fundingShim, + ) + if err != nil { + t.Fatalf("unable to open channels: %v", err) + } + + // Next, to make sure the channel functions as normal, we'll make some + // payments within the channel. + payAmt := btcutil.Amount(100000) + invoice := &lnrpc.Invoice{ + Memo: "new chans", + Value: int64(payAmt), + } + ctxt, _ = context.WithTimeout(ctxb, defaultTimeout) + resp, err := dave.AddInvoice(ctxt, invoice) + if err != nil { + t.Fatalf("unable to add invoice: %v", err) + } + ctxt, _ = context.WithTimeout(ctxb, defaultTimeout) + err = completePaymentRequests( + ctxt, carol, []string{resp.PaymentRequest}, true, + ) + if err != nil { + t.Fatalf("unable to make payments between Carol and Dave") + } + + // To conclude, we'll close the newly created channel between Carol and + // Dave. + closeChans() + +} + type testCase struct { name string test func(net *lntest.NetworkHarness, t *harnessTest) @@ -15170,6 +15348,10 @@ var testsCases = []*testCase{ name: "immediate payment after channel opened", test: testPaymentFollowingChannelOpen, }, + { + name: "external channel funding", + test: testExternalFundingChanPoint, + }, } // TestLightningNetworkDaemon performs a series of integration tests amongst a