lnrpc: add synchronous versions of SendPayment and OpenChannel

This commit adds synchronous version of the RPC’s to send payments over
channels and open new channels. The previous async versions of these
RPC calls have been removed from the REST interface.

Additionally for these two RPC calls any field which accepted byte
slices now also accept a variant of the field which is a hex-encoded
string.

The OpenChannelSync RPC is intended to be used along with either the
ListChannels or PendingChannels RPC to poll for a channels existence or
non-existence as a signal that the channel is finally open.
This commit is contained in:
Olaoluwa Osuntokun 2016-11-10 17:33:24 -08:00
parent ae84b6197b
commit 64396a69c3
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
4 changed files with 279 additions and 253 deletions

@ -171,10 +171,12 @@ func (m *TransactionDetails) GetTransactions() []*Transaction {
} }
type SendRequest struct { type SendRequest struct {
Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"`
Amt int64 `protobuf:"varint,2,opt,name=amt" json:"amt,omitempty"` DestString string `protobuf:"bytes,2,opt,name=dest_string" json:"dest_string,omitempty"`
PaymentHash []byte `protobuf:"bytes,3,opt,name=payment_hash,proto3" json:"payment_hash,omitempty"` Amt int64 `protobuf:"varint,3,opt,name=amt" json:"amt,omitempty"`
FastSend bool `protobuf:"varint,4,opt,name=fast_send" json:"fast_send,omitempty"` PaymentHash []byte `protobuf:"bytes,4,opt,name=payment_hash,proto3" json:"payment_hash,omitempty"`
PaymentHashString string `protobuf:"bytes,5,opt,name=payment_hash_string" json:"payment_hash_string,omitempty"`
FastSend bool `protobuf:"varint,6,opt,name=fast_send" json:"fast_send,omitempty"`
} }
func (m *SendRequest) Reset() { *m = SendRequest{} } func (m *SendRequest) Reset() { *m = SendRequest{} }
@ -646,10 +648,11 @@ func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []i
type OpenChannelRequest struct { type OpenChannelRequest struct {
TargetPeerId int32 `protobuf:"varint,1,opt,name=target_peer_id" json:"target_peer_id,omitempty"` TargetPeerId int32 `protobuf:"varint,1,opt,name=target_peer_id" json:"target_peer_id,omitempty"`
NodePubkey []byte `protobuf:"bytes,2,opt,name=node_pubkey,proto3" json:"node_pubkey,omitempty"` NodePubkey []byte `protobuf:"bytes,2,opt,name=node_pubkey,proto3" json:"node_pubkey,omitempty"`
LocalFundingAmount int64 `protobuf:"varint,3,opt,name=local_funding_amount" json:"local_funding_amount,omitempty"` NodePubkeyString string `protobuf:"bytes,3,opt,name=node_pubkey_string" json:"node_pubkey_string,omitempty"`
RemoteFundingAmount int64 `protobuf:"varint,4,opt,name=remote_funding_amount" json:"remote_funding_amount,omitempty"` LocalFundingAmount int64 `protobuf:"varint,4,opt,name=local_funding_amount" json:"local_funding_amount,omitempty"`
CommissionSize int64 `protobuf:"varint,5,opt,name=commission_size" json:"commission_size,omitempty"` RemoteFundingAmount int64 `protobuf:"varint,5,opt,name=remote_funding_amount" json:"remote_funding_amount,omitempty"`
NumConfs uint32 `protobuf:"varint,6,opt,name=num_confs" json:"num_confs,omitempty"` CommissionSize int64 `protobuf:"varint,6,opt,name=commission_size" json:"commission_size,omitempty"`
NumConfs uint32 `protobuf:"varint,7,opt,name=num_confs" json:"num_confs,omitempty"`
} }
func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} } func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
@ -1069,9 +1072,11 @@ type LightningClient interface {
// TODO(roasbeef): merge with below with bool? // TODO(roasbeef): merge with below with bool?
PendingChannels(ctx context.Context, in *PendingChannelRequest, opts ...grpc.CallOption) (*PendingChannelResponse, error) PendingChannels(ctx context.Context, in *PendingChannelRequest, opts ...grpc.CallOption) (*PendingChannelResponse, error)
ListChannels(ctx context.Context, in *ListChannelsRequest, opts ...grpc.CallOption) (*ListChannelsResponse, error) ListChannels(ctx context.Context, in *ListChannelsRequest, opts ...grpc.CallOption) (*ListChannelsResponse, error)
OpenChannelSync(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (*ChannelPoint, error)
OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error)
CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error) CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error)
SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error)
SendPaymentSync(ctx context.Context, in *SendRequest, opts ...grpc.CallOption) (*SendResponse, error)
AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error) AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error)
ListInvoices(ctx context.Context, in *ListInvoiceRequest, opts ...grpc.CallOption) (*ListInvoiceResponse, error) ListInvoices(ctx context.Context, in *ListInvoiceRequest, opts ...grpc.CallOption) (*ListInvoiceResponse, error)
LookupInvoice(ctx context.Context, in *PaymentHash, opts ...grpc.CallOption) (*Invoice, error) LookupInvoice(ctx context.Context, in *PaymentHash, opts ...grpc.CallOption) (*Invoice, error)
@ -1227,6 +1232,15 @@ func (c *lightningClient) ListChannels(ctx context.Context, in *ListChannelsRequ
return out, nil return out, nil
} }
func (c *lightningClient) OpenChannelSync(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (*ChannelPoint, error) {
out := new(ChannelPoint)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/OpenChannelSync", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) { func (c *lightningClient) OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[1], c.cc, "/lnrpc.Lightning/OpenChannel", opts...) stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[1], c.cc, "/lnrpc.Lightning/OpenChannel", opts...)
if err != nil { if err != nil {
@ -1322,6 +1336,15 @@ func (x *lightningSendPaymentClient) Recv() (*SendResponse, error) {
return m, nil return m, nil
} }
func (c *lightningClient) SendPaymentSync(ctx context.Context, in *SendRequest, opts ...grpc.CallOption) (*SendResponse, error) {
out := new(SendResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/SendPaymentSync", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error) { func (c *lightningClient) AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error) {
out := new(AddInvoiceResponse) out := new(AddInvoiceResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/AddInvoice", in, out, c.cc, opts...) err := grpc.Invoke(ctx, "/lnrpc.Lightning/AddInvoice", in, out, c.cc, opts...)
@ -1407,9 +1430,11 @@ type LightningServer interface {
// TODO(roasbeef): merge with below with bool? // TODO(roasbeef): merge with below with bool?
PendingChannels(context.Context, *PendingChannelRequest) (*PendingChannelResponse, error) PendingChannels(context.Context, *PendingChannelRequest) (*PendingChannelResponse, error)
ListChannels(context.Context, *ListChannelsRequest) (*ListChannelsResponse, error) ListChannels(context.Context, *ListChannelsRequest) (*ListChannelsResponse, error)
OpenChannelSync(context.Context, *OpenChannelRequest) (*ChannelPoint, error)
OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error
CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error
SendPayment(Lightning_SendPaymentServer) error SendPayment(Lightning_SendPaymentServer) error
SendPaymentSync(context.Context, *SendRequest) (*SendResponse, error)
AddInvoice(context.Context, *Invoice) (*AddInvoiceResponse, error) AddInvoice(context.Context, *Invoice) (*AddInvoiceResponse, error)
ListInvoices(context.Context, *ListInvoiceRequest) (*ListInvoiceResponse, error) ListInvoices(context.Context, *ListInvoiceRequest) (*ListInvoiceResponse, error)
LookupInvoice(context.Context, *PaymentHash) (*Invoice, error) LookupInvoice(context.Context, *PaymentHash) (*Invoice, error)
@ -1658,6 +1683,24 @@ func _Lightning_ListChannels_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Lightning_OpenChannelSync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(OpenChannelRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).OpenChannelSync(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/OpenChannelSync",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).OpenChannelSync(ctx, req.(*OpenChannelRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_OpenChannel_Handler(srv interface{}, stream grpc.ServerStream) error { func _Lightning_OpenChannel_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(OpenChannelRequest) m := new(OpenChannelRequest)
if err := stream.RecvMsg(m); err != nil { if err := stream.RecvMsg(m); err != nil {
@ -1726,6 +1769,24 @@ func (x *lightningSendPaymentServer) Recv() (*SendRequest, error) {
return m, nil return m, nil
} }
func _Lightning_SendPaymentSync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SendRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).SendPaymentSync(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/SendPaymentSync",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).SendPaymentSync(ctx, req.(*SendRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_AddInvoice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Lightning_AddInvoice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Invoice) in := new(Invoice)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -1871,6 +1932,14 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "ListChannels", MethodName: "ListChannels",
Handler: _Lightning_ListChannels_Handler, Handler: _Lightning_ListChannels_Handler,
}, },
{
MethodName: "OpenChannelSync",
Handler: _Lightning_OpenChannelSync_Handler,
},
{
MethodName: "SendPaymentSync",
Handler: _Lightning_SendPaymentSync_Handler,
},
{ {
MethodName: "AddInvoice", MethodName: "AddInvoice",
Handler: _Lightning_AddInvoice_Handler, Handler: _Lightning_AddInvoice_Handler,
@ -1922,143 +1991,146 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 2204 bytes of a gzipped FileDescriptorProto // 2254 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x49, 0x6f, 0x1c, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0xcd, 0x6e, 0xdc, 0xd6,
0x15, 0x56, 0x73, 0xb8, 0xcc, 0xbc, 0x59, 0x34, 0x53, 0xdc, 0x86, 0x4d, 0x4a, 0x96, 0x2b, 0xb2, 0x15, 0x36, 0x35, 0x1a, 0x49, 0x73, 0xe6, 0x47, 0x33, 0x57, 0x7f, 0x23, 0x4a, 0x76, 0x9c, 0x5b,
0x41, 0x13, 0x32, 0x69, 0xd1, 0x87, 0x04, 0x36, 0xe2, 0x80, 0xa2, 0x19, 0x53, 0x08, 0x4d, 0xd1, 0x27, 0x50, 0x04, 0x47, 0x8a, 0x95, 0x45, 0x0b, 0x07, 0x4d, 0x21, 0x2b, 0x6a, 0x64, 0x54, 0x91,
0x26, 0x65, 0x21, 0x1b, 0xda, 0x3d, 0x33, 0x45, 0xb2, 0xcd, 0x9e, 0xee, 0xce, 0x74, 0x0f, 0x29, 0xd5, 0x8c, 0x1c, 0xa3, 0x2d, 0x8a, 0x09, 0xc5, 0xb9, 0x92, 0x18, 0x71, 0x48, 0x76, 0xc8, 0x91,
0xc6, 0xd0, 0x25, 0x87, 0x1c, 0x73, 0x09, 0x10, 0x04, 0x08, 0x90, 0x1f, 0x10, 0x04, 0x41, 0xfe, 0x3c, 0x0d, 0xbc, 0x69, 0x81, 0x2e, 0xbb, 0x29, 0x50, 0x14, 0x28, 0xd0, 0x27, 0x28, 0x8a, 0x3e,
0x47, 0x6e, 0xc9, 0x29, 0xf7, 0xfc, 0x90, 0xbc, 0xda, 0xba, 0xab, 0x17, 0x09, 0xf0, 0xc1, 0x27, 0x45, 0x37, 0xdd, 0xb5, 0x9b, 0x3e, 0x40, 0x1f, 0xa4, 0xe7, 0xfe, 0x91, 0x97, 0x1c, 0xda, 0xa8,
0xb2, 0x5f, 0x55, 0xbd, 0xe5, 0x7b, 0xfb, 0x40, 0x63, 0x12, 0x0d, 0xb7, 0xa3, 0x49, 0x98, 0x84, 0x17, 0x59, 0x49, 0x3c, 0xf7, 0xde, 0xf3, 0x7f, 0xbe, 0x73, 0xce, 0x40, 0x6d, 0x14, 0xb9, 0x3b,
0x64, 0xce, 0x0f, 0xf0, 0xc3, 0xde, 0xb8, 0x08, 0xc3, 0x0b, 0x9f, 0xed, 0xb8, 0x91, 0xb7, 0xe3, 0xd1, 0x28, 0x4c, 0x42, 0x52, 0xf5, 0x03, 0xfc, 0xb0, 0x37, 0x2f, 0xc3, 0xf0, 0xd2, 0x67, 0xbb,
0x06, 0x41, 0x98, 0xb8, 0x89, 0x17, 0x06, 0xb1, 0xbc, 0x44, 0xff, 0x62, 0x41, 0xf3, 0x6c, 0xe2, 0x4e, 0xe4, 0xed, 0x3a, 0x41, 0x10, 0x26, 0x4e, 0xe2, 0x85, 0x41, 0x2c, 0x2f, 0xd1, 0x3f, 0x5b,
0x06, 0xb1, 0x3b, 0xe4, 0x64, 0x72, 0x17, 0x16, 0x92, 0x97, 0xce, 0xa5, 0x1b, 0x5f, 0xf6, 0xad, 0x50, 0x3f, 0x1b, 0x39, 0x41, 0xec, 0xb8, 0x9c, 0x4c, 0x16, 0x61, 0x3e, 0x79, 0xd9, 0xbf, 0x72,
0x07, 0xd6, 0x66, 0x83, 0x74, 0x60, 0xde, 0x1d, 0x87, 0xd3, 0x20, 0xe9, 0xcf, 0xe0, 0xb7, 0x45, 0xe2, 0xab, 0xae, 0x75, 0xdf, 0xda, 0xaa, 0x91, 0x16, 0xcc, 0x39, 0xc3, 0x70, 0x1c, 0x24, 0xdd,
0xd6, 0xa0, 0x17, 0x4c, 0xc7, 0xce, 0x30, 0x0c, 0xce, 0xbd, 0xc9, 0x58, 0xf2, 0xea, 0xd7, 0xf0, 0x19, 0xfc, 0xb6, 0xc8, 0x3a, 0x74, 0x82, 0xf1, 0xb0, 0xef, 0x86, 0xc1, 0x85, 0x37, 0x1a, 0x4a,
0x68, 0x8e, 0x10, 0x80, 0x81, 0x1f, 0x0e, 0xaf, 0xe4, 0xf3, 0x59, 0xf1, 0x7c, 0x09, 0x5a, 0x8a, 0x5e, 0xdd, 0x0a, 0x1e, 0x55, 0x09, 0x01, 0x38, 0xf7, 0x43, 0xf7, 0x5a, 0x3e, 0x9f, 0x15, 0xcf,
0xc6, 0xbc, 0x8b, 0xcb, 0xa4, 0x3f, 0xa7, 0x6f, 0x26, 0xde, 0x98, 0x39, 0x71, 0xe2, 0x8e, 0xa3, 0x97, 0xa1, 0xa1, 0x68, 0xcc, 0xbb, 0xbc, 0x4a, 0xba, 0x55, 0x7d, 0x33, 0xf1, 0x86, 0xac, 0x1f,
0xfe, 0x3c, 0xd2, 0x6a, 0x82, 0x86, 0xca, 0xf9, 0xce, 0x39, 0x63, 0x71, 0x7f, 0x81, 0xd3, 0x68, 0x27, 0xce, 0x30, 0xea, 0xce, 0x21, 0xad, 0x22, 0x68, 0xa8, 0x9c, 0xdf, 0xbf, 0x60, 0x2c, 0xee,
0x1f, 0x56, 0x3e, 0x63, 0x89, 0xa1, 0x5f, 0xfc, 0x25, 0xfb, 0xcd, 0x94, 0xc5, 0x09, 0xfd, 0x04, 0xce, 0x73, 0x1a, 0xed, 0xc2, 0xea, 0xe7, 0x2c, 0x31, 0xf4, 0x8b, 0xbf, 0x64, 0xbf, 0x1a, 0xb3,
0x88, 0x41, 0xfe, 0x94, 0x25, 0xae, 0xe7, 0xc7, 0x64, 0x13, 0x5a, 0x89, 0x71, 0x19, 0x4d, 0xa8, 0x38, 0xa1, 0x9f, 0x02, 0x31, 0xc8, 0x9f, 0xb1, 0xc4, 0xf1, 0xfc, 0x98, 0x6c, 0x41, 0x23, 0x31,
0x6d, 0x36, 0x77, 0xc9, 0xb6, 0x40, 0x62, 0xdb, 0x78, 0x40, 0xbf, 0x80, 0xe6, 0x29, 0x0b, 0x46, 0x2e, 0xa3, 0x09, 0x95, 0xad, 0xfa, 0x1e, 0xd9, 0x11, 0x9e, 0xd8, 0x31, 0x1e, 0xd0, 0xdf, 0xa2,
0x8a, 0x1d, 0x69, 0xc1, 0xec, 0x08, 0xff, 0x0a, 0x9b, 0x5b, 0xa4, 0x09, 0x35, 0x77, 0x2c, 0x0d, 0xdd, 0x3d, 0x16, 0x0c, 0x14, 0x3f, 0xd2, 0x80, 0xd9, 0x01, 0xfe, 0x15, 0x46, 0x37, 0xc8, 0x12,
0xae, 0x71, 0x0b, 0x22, 0xf7, 0x76, 0xcc, 0x82, 0x44, 0xda, 0x55, 0x13, 0x57, 0x7a, 0xd0, 0x38, 0xd4, 0xf9, 0x17, 0xea, 0x37, 0xf2, 0x82, 0x4b, 0x61, 0x79, 0x8d, 0xd4, 0xa1, 0xe2, 0x0c, 0x13,
0x77, 0xe3, 0xc4, 0x89, 0x91, 0x89, 0x30, 0xb5, 0x4e, 0x3b, 0xd0, 0x92, 0x2c, 0xe3, 0x08, 0x65, 0x61, 0x6b, 0x85, 0xdb, 0x15, 0x39, 0x93, 0x21, 0x0b, 0x92, 0xcc, 0xda, 0x06, 0xd9, 0x80, 0x25,
0x33, 0x7a, 0x06, 0xad, 0xfd, 0x4b, 0x44, 0x9c, 0xf9, 0x27, 0xa1, 0x17, 0x24, 0x9c, 0xd1, 0xf9, 0x93, 0xaa, 0xdf, 0x57, 0xc5, 0xfb, 0x0e, 0xd4, 0x2e, 0x1c, 0xce, 0x14, 0xc5, 0x0a, 0x9b, 0x17,
0x34, 0x18, 0x79, 0xc1, 0x85, 0x93, 0xbc, 0xf4, 0x46, 0x4a, 0x56, 0x1f, 0xba, 0x26, 0x15, 0x21, 0x68, 0x0b, 0x1a, 0x52, 0x89, 0x38, 0x42, 0x75, 0x19, 0x3d, 0x83, 0xc6, 0xc1, 0x15, 0x06, 0x89,
0x99, 0x08, 0xc1, 0x02, 0xba, 0x70, 0x9a, 0x44, 0xd3, 0xc4, 0xf1, 0x82, 0x11, 0x7b, 0x29, 0x04, 0xf9, 0xa7, 0xa1, 0x17, 0x24, 0x5c, 0xca, 0xc5, 0x38, 0x18, 0x20, 0x8f, 0x7e, 0xf2, 0xd2, 0x1b,
0xb7, 0xe9, 0x07, 0xd0, 0x3d, 0xe2, 0x48, 0x06, 0xf8, 0x62, 0x6f, 0x34, 0x9a, 0xb0, 0x38, 0xe6, 0x28, 0xed, 0xba, 0xd0, 0x36, 0xa9, 0x5c, 0x8a, 0x52, 0x11, 0xef, 0x87, 0xe3, 0x24, 0x1a, 0x27,
0x3e, 0x8a, 0xa6, 0x83, 0x2b, 0x76, 0xab, 0x7c, 0x86, 0xd6, 0x5c, 0x86, 0xb1, 0x34, 0xa0, 0x41, 0x7d, 0x2f, 0x18, 0xb0, 0x97, 0x42, 0xd7, 0x26, 0xfd, 0x08, 0xda, 0xc7, 0xdc, 0xf9, 0x01, 0xbe,
0x7f, 0x6f, 0xc1, 0x5d, 0xae, 0xd8, 0xe7, 0x6e, 0x70, 0xab, 0xed, 0xfd, 0x04, 0x5a, 0xfc, 0xf1, 0xd8, 0x1f, 0x0c, 0x46, 0x2c, 0x8e, 0x79, 0x58, 0xa3, 0xf1, 0xf9, 0x35, 0x9b, 0xa8, 0x30, 0xa3,
0x59, 0xb8, 0x27, 0x7d, 0x2b, 0x81, 0xda, 0x54, 0x40, 0x15, 0x6e, 0x6f, 0x9b, 0x57, 0x0f, 0x82, 0xfd, 0x57, 0x61, 0x2c, 0x83, 0x5c, 0xa3, 0xbf, 0xb3, 0x60, 0x91, 0x2b, 0xf6, 0x85, 0x13, 0x4c,
0x64, 0x72, 0x6b, 0x7f, 0x08, 0xbd, 0x12, 0x91, 0xc3, 0x96, 0xe9, 0xd0, 0x86, 0xb9, 0x6b, 0xd7, 0xb4, 0x87, 0x3e, 0x85, 0x06, 0x7f, 0x7c, 0x16, 0xee, 0xcb, 0x74, 0x90, 0xbe, 0xdd, 0x52, 0xbe,
0x9f, 0x32, 0x89, 0xe2, 0x47, 0x33, 0x3f, 0xb2, 0xe8, 0x03, 0xe8, 0x66, 0x9c, 0x25, 0x48, 0x5c, 0x2d, 0xdc, 0xde, 0x31, 0xaf, 0x1e, 0x06, 0xc9, 0x68, 0x62, 0x7f, 0x0c, 0x9d, 0x29, 0x22, 0xf7,
0xd5, 0x14, 0x8c, 0x06, 0x37, 0x8e, 0xdf, 0xd8, 0x47, 0xbc, 0x62, 0xc3, 0x35, 0x2e, 0x8a, 0xaa, 0x69, 0xa6, 0x43, 0x13, 0xaa, 0x37, 0x8e, 0x3f, 0x66, 0x42, 0x89, 0xca, 0xe3, 0x99, 0x1f, 0x58,
0x0c, 0xc7, 0x1a, 0x7d, 0x1b, 0x7a, 0xc6, 0x8b, 0x4a, 0xa6, 0x7f, 0xb6, 0xa0, 0x77, 0xcc, 0x6e, 0xf4, 0x3e, 0xb4, 0x33, 0xce, 0xd2, 0x49, 0x5c, 0xd5, 0xd4, 0x19, 0x35, 0x6e, 0x1c, 0xbf, 0x71,
0x14, 0x58, 0x9a, 0xed, 0x2e, 0xde, 0xb9, 0x8d, 0x98, 0xb8, 0xd3, 0xd9, 0x7d, 0xa8, 0x2c, 0x2f, 0x80, 0xfe, 0x8a, 0x8d, 0x60, 0x3a, 0x28, 0xaa, 0x34, 0x83, 0x2b, 0xf4, 0x5d, 0xe8, 0x18, 0x2f,
0xdd, 0xdb, 0x56, 0x9f, 0x67, 0x78, 0x97, 0x3e, 0x83, 0xa6, 0xf1, 0x49, 0x56, 0x61, 0xf1, 0xc5, 0x4a, 0x99, 0xfe, 0xc9, 0x82, 0xce, 0x09, 0xbb, 0x55, 0xce, 0xd2, 0x6c, 0xf7, 0xf0, 0xce, 0x24,
0xd3, 0xb3, 0xe3, 0x83, 0xd3, 0x53, 0xe7, 0xe4, 0xf9, 0x93, 0x9f, 0x1d, 0xfc, 0xdc, 0x39, 0xdc, 0x62, 0xe2, 0x4e, 0x6b, 0xef, 0x81, 0xb2, 0x7c, 0xea, 0xde, 0x8e, 0xfa, 0x3c, 0xc3, 0xbb, 0xf4,
0x3b, 0x3d, 0xec, 0xde, 0x21, 0x2b, 0x40, 0x90, 0x7a, 0x76, 0xf0, 0x69, 0x8e, 0x6e, 0x61, 0x72, 0x19, 0xd4, 0x8d, 0x4f, 0xb2, 0x06, 0x4b, 0x2f, 0x9e, 0x9e, 0x9d, 0x1c, 0xf6, 0x7a, 0xfd, 0xd3,
0x35, 0x4d, 0xc2, 0x0c, 0xb5, 0xa1, 0x8f, 0x12, 0x5f, 0x78, 0x49, 0x80, 0x3c, 0xf3, 0x82, 0xe9, 0xe7, 0x4f, 0x7e, 0x72, 0xf8, 0xb3, 0xfe, 0xd1, 0x7e, 0xef, 0xa8, 0x7d, 0x87, 0xac, 0x02, 0x41,
0x3b, 0xc8, 0xc4, 0xd0, 0x46, 0x99, 0x86, 0xf9, 0xe9, 0x4a, 0x92, 0xb2, 0xee, 0x63, 0x20, 0xfb, 0xea, 0xd9, 0xe1, 0x67, 0x39, 0xba, 0x85, 0xf5, 0x58, 0x37, 0x09, 0x33, 0xd4, 0x86, 0x2e, 0x4a,
0x21, 0x06, 0xd9, 0x30, 0x39, 0x61, 0x6c, 0xa2, 0xad, 0x7b, 0xc7, 0x00, 0xad, 0xb9, 0xbb, 0xaa, 0x7c, 0xe1, 0x25, 0x01, 0xf2, 0xcc, 0x0b, 0xa6, 0xef, 0x21, 0x13, 0x43, 0x1b, 0x65, 0x1a, 0x96,
0xac, 0x2b, 0x06, 0x0e, 0x7d, 0x17, 0x16, 0x73, 0x8f, 0x33, 0x21, 0x11, 0x7e, 0x3b, 0x0a, 0xc2, 0xb4, 0x23, 0x49, 0xca, 0xba, 0x4f, 0x80, 0x1c, 0x84, 0x98, 0x64, 0x6e, 0x72, 0xca, 0xd8, 0x48,
0x39, 0x1a, 0xc1, 0xec, 0xe1, 0xd9, 0xd1, 0x3e, 0xe9, 0x42, 0xdd, 0x0b, 0x86, 0xe1, 0x18, 0x59, 0x5b, 0xf7, 0x9e, 0xe1, 0xb4, 0xfa, 0xde, 0x9a, 0xb2, 0xae, 0x98, 0x38, 0xf4, 0x7d, 0x58, 0xca,
0x88, 0x93, 0x7a, 0xd1, 0x1f, 0x3c, 0x2f, 0x78, 0x96, 0x38, 0x3c, 0xe7, 0x55, 0xaa, 0x60, 0xc5, 0x3d, 0xce, 0x84, 0x44, 0xf8, 0xdd, 0x57, 0x2e, 0xac, 0xd2, 0x08, 0x66, 0x8f, 0xce, 0x8e, 0x0f,
0x60, 0x2f, 0x23, 0x6f, 0x22, 0x6a, 0x85, 0xae, 0x03, 0x3c, 0x65, 0xda, 0x3c, 0xf8, 0x27, 0xec, 0x48, 0x1b, 0x16, 0xbc, 0xc0, 0x0d, 0x87, 0xbc, 0x0e, 0xf8, 0xc9, 0x42, 0x31, 0x1e, 0xbc, 0x2e,
0x3a, 0x1c, 0xca, 0xa3, 0x11, 0xf3, 0xdd, 0x5b, 0x51, 0x21, 0xda, 0xf4, 0xdf, 0x16, 0xb4, 0xf7, 0x44, 0xb1, 0x70, 0x98, 0x10, 0x19, 0xdb, 0xe0, 0x20, 0xc3, 0x5e, 0x46, 0xde, 0x48, 0xc0, 0x8b,
0x30, 0x55, 0xaf, 0x99, 0xca, 0x21, 0xb2, 0x0c, 0xed, 0x09, 0x1b, 0x87, 0x09, 0x73, 0x72, 0xb1, 0x86, 0x0e, 0x5e, 0x62, 0x4d, 0x9e, 0xfc, 0x23, 0x76, 0x13, 0xba, 0xf2, 0x68, 0xc0, 0x7c, 0x67,
0x8e, 0xe4, 0xa1, 0xbc, 0xe1, 0x44, 0x3c, 0xcd, 0x54, 0xf2, 0xa0, 0xa6, 0x43, 0x37, 0x72, 0x87, 0x22, 0xea, 0xab, 0x49, 0xff, 0x65, 0x41, 0x73, 0x1f, 0xab, 0xfb, 0x86, 0xa9, 0x1a, 0x22, 0x2b,
0x5e, 0x72, 0x2b, 0xd4, 0xa8, 0xf1, 0x8b, 0xa8, 0x14, 0xd6, 0x97, 0x81, 0xeb, 0xbb, 0xc1, 0x90, 0xd0, 0x1c, 0xb1, 0x61, 0x98, 0xb0, 0x7e, 0x2e, 0xd7, 0x91, 0xec, 0xca, 0x1b, 0xfd, 0x88, 0x97,
0x09, 0x15, 0x6a, 0xe8, 0xab, 0x8e, 0x62, 0xab, 0xe9, 0x73, 0x82, 0x8e, 0x5a, 0x4f, 0x11, 0x8b, 0x99, 0x2a, 0x1e, 0xd4, 0xd4, 0x75, 0x22, 0xc7, 0xf5, 0x92, 0x89, 0x2a, 0x72, 0xbc, 0x88, 0x4a,
0x24, 0xf1, 0xd9, 0x28, 0x3d, 0x92, 0x95, 0x8a, 0x42, 0x3b, 0x62, 0x32, 0x65, 0x2f, 0x13, 0x7f, 0x21, 0x24, 0x9d, 0x3b, 0xbe, 0x13, 0xb8, 0x4c, 0xa8, 0x50, 0xc1, 0x58, 0xb5, 0x14, 0x5b, 0x4d,
0xc8, 0x8b, 0x15, 0xcf, 0x9e, 0xa6, 0x42, 0x59, 0x20, 0xb5, 0x08, 0x4d, 0x5e, 0x26, 0xa7, 0xd1, 0xaf, 0x0a, 0x3a, 0x6a, 0x3d, 0x46, 0x5f, 0x24, 0x89, 0xcf, 0x06, 0xe9, 0x91, 0x04, 0x37, 0x0a,
0xc8, 0x4d, 0xb0, 0x9c, 0xd5, 0xf1, 0xe1, 0x2c, 0x5d, 0x86, 0xc5, 0x23, 0x2f, 0x4e, 0x94, 0x45, 0xcd, 0x88, 0xc9, 0x92, 0xbd, 0x4a, 0x7c, 0x97, 0xe3, 0x1b, 0xaf, 0x9e, 0xba, 0xf2, 0xb2, 0xf0,
0x46, 0x2d, 0x5b, 0xca, 0x93, 0x95, 0x1b, 0xde, 0x45, 0x1b, 0x14, 0xad, 0xdf, 0x10, 0x22, 0x96, 0x14, 0x82, 0x0e, 0x47, 0xd6, 0x71, 0x34, 0x70, 0x12, 0x44, 0xc0, 0x05, 0x7c, 0x38, 0x4b, 0x57,
0x94, 0x88, 0x1c, 0x32, 0xf4, 0x4f, 0x16, 0xcc, 0x72, 0xff, 0x09, 0xbf, 0x4d, 0x07, 0x4e, 0x06, 0x60, 0xe9, 0xd8, 0x8b, 0x13, 0x65, 0x91, 0x01, 0x7f, 0xcb, 0x79, 0xb2, 0x0a, 0xc3, 0xfb, 0x68,
0x8e, 0xe1, 0xc8, 0x19, 0x51, 0x78, 0x8d, 0xf0, 0xa9, 0x89, 0x1b, 0xbc, 0x66, 0xdf, 0xa2, 0x86, 0x83, 0xa2, 0x75, 0x6b, 0x42, 0xc4, 0xb2, 0x12, 0x91, 0xf3, 0x0c, 0xfd, 0xa3, 0x05, 0xb3, 0x3c,
0xbc, 0x90, 0x49, 0xaf, 0xcc, 0x66, 0xb4, 0x09, 0x1b, 0x5e, 0x0b, 0x38, 0x66, 0x39, 0x9e, 0xb1, 0x7e, 0x22, 0x6e, 0xe3, 0xf3, 0x7e, 0xe6, 0x1c, 0x23, 0x90, 0x33, 0x02, 0xab, 0x8d, 0xf4, 0xa9,
0x9b, 0xc8, 0x5b, 0x12, 0x05, 0x45, 0x11, 0x77, 0x44, 0xb5, 0xe6, 0xcc, 0xbd, 0x60, 0x80, 0xc1, 0x88, 0x1b, 0x1c, 0xe6, 0x27, 0xa8, 0x21, 0x07, 0x32, 0x19, 0x95, 0xd9, 0x8c, 0x36, 0x62, 0xee,
0x30, 0x12, 0xf6, 0xd6, 0x29, 0xe1, 0xb5, 0x2a, 0x16, 0xb1, 0x95, 0x1a, 0xbb, 0x03, 0x3d, 0x83, 0x8d, 0x70, 0xc7, 0x2c, 0xf7, 0x67, 0xec, 0x24, 0xf2, 0x96, 0xf4, 0x82, 0xa2, 0x88, 0x3b, 0x02,
0xa6, 0x2c, 0xb5, 0x61, 0x8e, 0xeb, 0xa9, 0x0b, 0xb6, 0x46, 0x92, 0x5f, 0xa2, 0x5d, 0xe8, 0x60, 0xe0, 0x39, 0x73, 0x2f, 0x38, 0xc7, 0x64, 0x18, 0x08, 0x7b, 0x17, 0x28, 0xe1, 0x58, 0x15, 0x8b,
0x0f, 0x78, 0x1a, 0x9c, 0x87, 0x9a, 0xc5, 0x1f, 0xb0, 0xa0, 0xa5, 0x24, 0xc5, 0x01, 0x8b, 0xa5, 0xdc, 0x4a, 0x8d, 0xdd, 0x85, 0x8e, 0x41, 0x53, 0x96, 0xda, 0x50, 0xe5, 0x7a, 0x6a, 0x8c, 0xd7,
0xaf, 0xa3, 0x5b, 0xc7, 0x6d, 0x03, 0x33, 0xf4, 0xae, 0x37, 0x42, 0x95, 0x31, 0x0a, 0x74, 0xd4, 0x9e, 0xe4, 0x97, 0x68, 0x1b, 0x5a, 0xd8, 0x36, 0x9e, 0x06, 0x17, 0xa1, 0x66, 0xf1, 0x7b, 0x04,
0x48, 0xb3, 0x37, 0x60, 0x89, 0xbb, 0x47, 0xbb, 0x31, 0x85, 0x59, 0x86, 0xe5, 0x3a, 0x2c, 0xf2, 0xb4, 0x94, 0xa4, 0x38, 0x20, 0x58, 0xfa, 0x3a, 0xbb, 0x75, 0xde, 0xd6, 0xb0, 0x42, 0x17, 0xbd,
0x53, 0x57, 0xa0, 0x9c, 0x1d, 0x8a, 0xc8, 0xe4, 0x11, 0x2e, 0x9f, 0x72, 0x7d, 0xe7, 0x45, 0xb0, 0x01, 0xaa, 0x8c, 0x59, 0xa0, 0xb3, 0x46, 0x9a, 0xbd, 0x09, 0xcb, 0x3c, 0x3c, 0x3a, 0x8c, 0xa9,
0x3e, 0x17, 0x39, 0x98, 0xf6, 0xc3, 0xe7, 0xc2, 0xe9, 0xfc, 0xa2, 0x6c, 0x7d, 0xf1, 0xa5, 0xab, 0x9b, 0x65, 0x5a, 0x22, 0xf2, 0xf3, 0x53, 0x47, 0x78, 0x39, 0x3b, 0x14, 0x99, 0xc9, 0x33, 0x5c,
0x8a, 0x7d, 0xb1, 0x1b, 0x4a, 0xa7, 0x60, 0x08, 0xea, 0x96, 0x1a, 0x3b, 0x3e, 0x3b, 0x4f, 0x54, 0x3e, 0xe5, 0xfa, 0xce, 0x89, 0x64, 0x7d, 0x2e, 0x6a, 0x30, 0x6d, 0xa1, 0xcf, 0x45, 0xd0, 0xf9,
0xa9, 0xff, 0x09, 0xf4, 0x94, 0x8b, 0x9f, 0xa1, 0xa2, 0x8a, 0xeb, 0x56, 0x31, 0xde, 0x65, 0x8a, 0x45, 0xd9, 0x2d, 0xe3, 0x2b, 0x47, 0x81, 0x7d, 0xb1, 0x81, 0xca, 0xa0, 0x60, 0x0a, 0xea, 0x2e,
0x2f, 0x2a, 0xc8, 0xcc, 0x8e, 0x23, 0x6a, 0x83, 0xfc, 0xde, 0xf7, 0xc3, 0x98, 0x29, 0x0e, 0xa8, 0x1c, 0xf7, 0x7d, 0x76, 0x91, 0x28, 0xa8, 0xff, 0x11, 0x74, 0x54, 0x88, 0x9f, 0xa1, 0xa2, 0x8a,
0xc4, 0x10, 0x3f, 0x0b, 0x7d, 0x08, 0x9d, 0x17, 0x4f, 0x87, 0x43, 0x1e, 0x19, 0x33, 0xc2, 0x79, 0xeb, 0x76, 0x31, 0xdf, 0x65, 0x89, 0x2f, 0x29, 0x97, 0x99, 0x1d, 0x47, 0x60, 0x83, 0xfc, 0x3e,
0x23, 0xac, 0x0d, 0xfc, 0x95, 0xe2, 0xa0, 0x2b, 0xcb, 0x77, 0x90, 0x9f, 0xb6, 0x79, 0xdf, 0x1b, 0xf0, 0xc3, 0x98, 0x29, 0x0e, 0xa8, 0x84, 0x8b, 0x9f, 0x85, 0x3e, 0x84, 0xc1, 0x8b, 0xc7, 0xae,
0x7b, 0xba, 0x40, 0x60, 0x5f, 0x38, 0x0f, 0x27, 0x98, 0x4b, 0x35, 0x21, 0xe5, 0x9f, 0x58, 0x9c, 0xcb, 0x33, 0x63, 0x46, 0x04, 0x6f, 0x80, 0xd8, 0xc0, 0x5f, 0x29, 0x0e, 0x1a, 0x59, 0xde, 0x42,
0x85, 0x98, 0x53, 0x9c, 0x4b, 0xa6, 0xb1, 0x52, 0xf1, 0x7d, 0x14, 0xc2, 0x89, 0xda, 0x41, 0x4a, 0x7e, 0x3a, 0x19, 0xf8, 0xde, 0xd0, 0xd3, 0x00, 0x81, 0x7d, 0xe1, 0x22, 0x1c, 0x61, 0x2d, 0x55,
0xc8, 0x52, 0x1a, 0x17, 0x82, 0x2a, 0x2f, 0x1f, 0xde, 0x21, 0x8f, 0xd1, 0x22, 0x03, 0x7f, 0x21, 0x84, 0x94, 0xbf, 0x23, 0x38, 0x0b, 0x31, 0x3d, 0x1c, 0x65, 0xc6, 0xb1, 0x52, 0xf1, 0x43, 0x14,
0xa9, 0xb9, 0xbb, 0xa6, 0x55, 0x2a, 0xb9, 0x06, 0x9f, 0xec, 0x00, 0x70, 0x33, 0x1c, 0x21, 0x46, 0xc2, 0x89, 0x3a, 0x40, 0x4a, 0xc8, 0x72, 0x9a, 0x17, 0x82, 0x2a, 0x2f, 0x1f, 0xdd, 0x21, 0x8f,
0xe8, 0x62, 0x3c, 0x28, 0x61, 0x76, 0x78, 0xe7, 0x49, 0x1d, 0xe6, 0x65, 0x32, 0xd3, 0x7b, 0xd0, 0xd0, 0x22, 0xc3, 0xff, 0x42, 0x52, 0x7d, 0x6f, 0x5d, 0xab, 0x34, 0x15, 0x1a, 0x7c, 0xb2, 0x0b,
0xce, 0x29, 0x90, 0x6b, 0x37, 0x2d, 0xfa, 0x37, 0x0b, 0x08, 0xf7, 0x57, 0x01, 0x37, 0x74, 0x72, 0xc0, 0xcd, 0xe8, 0x0b, 0x31, 0x42, 0x17, 0xe3, 0xc1, 0x94, 0xcf, 0x8e, 0xee, 0x3c, 0x59, 0x80,
0xe2, 0x4e, 0x2e, 0x58, 0xe2, 0xe4, 0x4a, 0xab, 0x28, 0x14, 0xe1, 0x28, 0x2d, 0x6a, 0x33, 0xc2, 0x39, 0x59, 0xcc, 0xf4, 0x2e, 0x34, 0x73, 0x0a, 0xe4, 0xda, 0x4d, 0x83, 0xfe, 0xc3, 0x02, 0xc2,
0x19, 0x18, 0x9e, 0xb2, 0x56, 0xe9, 0xd1, 0x40, 0xd5, 0x58, 0x59, 0xc9, 0xee, 0xc1, 0xb2, 0x2a, 0xe3, 0x55, 0xf0, 0x1b, 0x06, 0x39, 0x71, 0x46, 0x97, 0x2c, 0xe9, 0xe7, 0xa0, 0x55, 0x00, 0x45,
0x59, 0x85, 0x63, 0x59, 0xd1, 0x30, 0xe8, 0xb1, 0x44, 0x8f, 0xbd, 0x38, 0xe6, 0x45, 0x35, 0xf6, 0x38, 0x48, 0x41, 0x6d, 0x46, 0x04, 0xc3, 0x06, 0x62, 0x10, 0xf5, 0xe4, 0x91, 0xa6, 0xae, 0xc4,
0x7e, 0xab, 0x4b, 0x9a, 0x8a, 0x5c, 0x11, 0x67, 0x2a, 0x72, 0xff, 0x6e, 0x41, 0x97, 0x2b, 0x9b, 0x31, 0x3d, 0x36, 0x28, 0xfc, 0x95, 0x70, 0x76, 0x17, 0x56, 0x14, 0x9c, 0x15, 0x8e, 0x25, 0xaa,
0x43, 0xff, 0x11, 0xc2, 0xc9, 0xb1, 0xf9, 0xde, 0xc0, 0x7f, 0x1f, 0x1a, 0x42, 0x40, 0x88, 0x12, 0x61, 0x41, 0x20, 0x7c, 0x0f, 0xbd, 0x38, 0xe6, 0x80, 0x1b, 0x7b, 0xbf, 0xd6, 0x98, 0xa6, 0xb2,
0x14, 0xf6, 0xfd, 0x3c, 0xf6, 0x59, 0xc0, 0xe7, 0xa0, 0xff, 0x31, 0x2c, 0x2b, 0xf1, 0x05, 0x74, 0x5a, 0xe4, 0xa0, 0x28, 0xe7, 0x26, 0xfd, 0xab, 0x05, 0x6d, 0x6e, 0x48, 0x2e, 0x32, 0x0f, 0xd1,
0x1f, 0xc2, 0x7c, 0x2c, 0x4c, 0x50, 0xfd, 0x7c, 0x29, 0xcf, 0x4e, 0x9a, 0x47, 0xff, 0x31, 0x03, 0xd5, 0xdc, 0x6f, 0xdf, 0x59, 0x60, 0x3e, 0x84, 0x9a, 0x10, 0x10, 0xa2, 0x04, 0x15, 0x97, 0x6e,
0x2b, 0xc5, 0xf7, 0xaa, 0x7e, 0xfc, 0x14, 0xba, 0xa5, 0x62, 0x20, 0x8b, 0xd1, 0xa3, 0xbc, 0xdd, 0x3e, 0x2e, 0x59, 0x31, 0xe4, 0xc2, 0xf2, 0x43, 0x58, 0x51, 0xe2, 0x0b, 0x9e, 0x7f, 0x00, 0x73,
0x85, 0x87, 0x05, 0xb2, 0xfd, 0x2f, 0x0b, 0x3a, 0x79, 0x52, 0xa9, 0x9b, 0xf2, 0x04, 0x4c, 0xab, 0xb1, 0x30, 0x41, 0xf5, 0xfa, 0xe5, 0x3c, 0x3b, 0x69, 0x1e, 0xfd, 0xdb, 0x0c, 0xac, 0x16, 0xdf,
0x92, 0xf6, 0x79, 0x45, 0x23, 0xab, 0x95, 0x1a, 0xd9, 0x6c, 0x75, 0x23, 0x9b, 0x7b, 0x4d, 0x23, 0x2b, 0x6c, 0xf9, 0x31, 0xb4, 0xa7, 0x80, 0x42, 0x02, 0xd5, 0xc3, 0xbc, 0xdd, 0x85, 0x87, 0x05,
0x9b, 0xd7, 0xf3, 0x6b, 0x2e, 0xdd, 0x17, 0x04, 0xdb, 0x0c, 0xb0, 0xfa, 0x1b, 0x00, 0x7b, 0x04, 0xb2, 0xfd, 0x4f, 0x0b, 0x5a, 0x79, 0xd2, 0x54, 0xa7, 0xe5, 0xc5, 0x99, 0x22, 0x96, 0xce, 0x87,
0x4b, 0x2f, 0x5c, 0xdf, 0x67, 0xc9, 0x13, 0xc9, 0x52, 0xc3, 0x8d, 0x3c, 0x6f, 0xe4, 0xd0, 0xe2, 0x92, 0x26, 0x57, 0x99, 0x6a, 0x72, 0xb3, 0xe5, 0x4d, 0xae, 0xfa, 0x9a, 0x26, 0x37, 0xa7, 0x07,
0x84, 0x81, 0x2f, 0xbb, 0x4d, 0x9d, 0x6e, 0xc2, 0x72, 0xe1, 0x76, 0x36, 0x4f, 0x68, 0x9d, 0xf8, 0xdf, 0x1c, 0x14, 0xcc, 0x0b, 0xb6, 0x99, 0xc3, 0x16, 0xde, 0xe0, 0xb0, 0x87, 0xb0, 0xfc, 0xc2,
0x4d, 0x8b, 0xae, 0xc2, 0xb2, 0x12, 0x94, 0x67, 0x4c, 0xdf, 0x83, 0x95, 0xe2, 0x41, 0x35, 0x8f, 0xf1, 0x7d, 0x96, 0x3c, 0x91, 0x2c, 0xb5, 0xbb, 0x91, 0xe7, 0xad, 0x1c, 0x68, 0xfa, 0x61, 0xe0,
0x1a, 0xfd, 0x1a, 0xba, 0x5f, 0xe2, 0x7c, 0x8c, 0x76, 0x9d, 0xb9, 0x03, 0x9f, 0x1d, 0x79, 0xc1, 0xcb, 0x4e, 0xb4, 0x40, 0xb7, 0x60, 0xa5, 0x70, 0x3b, 0x9b, 0x35, 0xb4, 0x4e, 0xfc, 0xa6, 0x45,
0x15, 0x9f, 0x40, 0xbd, 0xd1, 0x63, 0x55, 0xfc, 0xc5, 0xc7, 0x6e, 0x36, 0x0f, 0xf0, 0x61, 0xfa, 0xd7, 0x60, 0x45, 0x09, 0xca, 0x33, 0xa6, 0x1f, 0xc0, 0x6a, 0xf1, 0xa0, 0x9c, 0x47, 0x85, 0x7e,
0x8d, 0xc0, 0xe2, 0x2c, 0x73, 0x93, 0x6d, 0x29, 0x16, 0x5d, 0x83, 0xd5, 0xd3, 0xcb, 0xf0, 0xc6, 0x0d, 0xed, 0x2f, 0x71, 0x76, 0x46, 0xbb, 0xce, 0x9c, 0x73, 0x9f, 0x1d, 0x7b, 0xc1, 0x35, 0x9f,
0x94, 0xa2, 0xf5, 0x3c, 0x80, 0x7e, 0xf9, 0x48, 0x69, 0xfa, 0x9e, 0xd1, 0xb6, 0x65, 0x08, 0xe9, 0x4e, 0xbd, 0xc1, 0x23, 0xd5, 0x18, 0xc4, 0xc7, 0x5e, 0x36, 0x2b, 0xf0, 0x41, 0xfb, 0x8d, 0x8e,
0xf9, 0xab, 0xa8, 0x2f, 0xf5, 0x61, 0xe1, 0x69, 0x70, 0x1d, 0x7a, 0x43, 0x51, 0x44, 0xc6, 0xe8, 0xc5, 0x39, 0xe7, 0x36, 0x5b, 0x7a, 0x2c, 0xba, 0x0e, 0x6b, 0xbd, 0xab, 0xf0, 0xd6, 0x94, 0xa2,
0xbe, 0xac, 0x71, 0x63, 0x63, 0x65, 0x5e, 0x94, 0xa8, 0x8a, 0x80, 0xa5, 0x74, 0xe2, 0x44, 0x13, 0xf5, 0x3c, 0x84, 0xee, 0xf4, 0x91, 0xd2, 0xf4, 0x03, 0xa3, 0xa5, 0xcb, 0x14, 0xd2, 0xb3, 0x59,
0xe6, 0x8d, 0xdd, 0x0b, 0xa6, 0x06, 0x2b, 0xd4, 0x77, 0x92, 0xed, 0x5a, 0xad, 0x6c, 0xe4, 0x9e, 0x51, 0x5f, 0xea, 0xc3, 0xfc, 0xd3, 0xe0, 0x26, 0xf4, 0x5c, 0x01, 0x30, 0x43, 0x0c, 0x5f, 0xd6,
0xd3, 0xed, 0x58, 0xcd, 0x2f, 0x22, 0x12, 0xea, 0xf4, 0x21, 0x10, 0x1c, 0xfc, 0x94, 0xc0, 0x54, 0xd4, 0xb1, 0xe9, 0x32, 0x2f, 0x4a, 0x14, 0x5a, 0x20, 0xcc, 0x8e, 0xfa, 0xd1, 0x88, 0x79, 0x43,
0xdd, 0x8c, 0x8b, 0xac, 0x5f, 0x8f, 0x71, 0x48, 0x95, 0xfb, 0xce, 0x21, 0x12, 0xa5, 0x60, 0x31, 0xe7, 0x92, 0xa9, 0xa1, 0x0b, 0xf5, 0x1d, 0x99, 0xcb, 0x4c, 0x3a, 0x8e, 0x57, 0x75, 0xab, 0x56,
0xd2, 0xf1, 0xcd, 0x24, 0x1d, 0xc2, 0xd5, 0x13, 0xa1, 0x1c, 0xdd, 0x02, 0xc2, 0x7b, 0x7a, 0xca, 0xb3, 0x8d, 0x5a, 0x5e, 0x1e, 0x00, 0xc1, 0xa1, 0x50, 0x09, 0x4c, 0xd5, 0xcd, 0xb8, 0x48, 0x6c,
0x39, 0x0d, 0x12, 0x9d, 0x52, 0x46, 0x90, 0xfc, 0x50, 0xce, 0x40, 0x45, 0x2d, 0x1e, 0xf0, 0xc9, 0x7b, 0x84, 0x03, 0xac, 0x5c, 0x89, 0x8e, 0x90, 0x28, 0x05, 0xeb, 0xdd, 0x28, 0x1b, 0xd0, 0xd5,
0x52, 0x90, 0x34, 0x68, 0x1d, 0x05, 0x9a, 0xba, 0xc9, 0x87, 0x27, 0xf5, 0xef, 0xe9, 0x74, 0x10, 0x13, 0xa1, 0x1c, 0xdd, 0x06, 0xc2, 0xfb, 0x7d, 0xca, 0x39, 0x4d, 0x12, 0x5d, 0x52, 0x46, 0x92,
0x0f, 0x27, 0x88, 0x0d, 0xd6, 0x94, 0xad, 0x5d, 0x68, 0xe7, 0x62, 0x96, 0x2c, 0x40, 0x6d, 0xef, 0x7c, 0x5f, 0xce, 0x47, 0x45, 0x2d, 0xee, 0xf3, 0xa9, 0x53, 0x90, 0xb4, 0xd3, 0x5a, 0xca, 0x69,
0xe8, 0x08, 0xa7, 0xf0, 0x26, 0x2c, 0x3c, 0x3b, 0x39, 0x38, 0x7e, 0x7a, 0xfc, 0x19, 0x8e, 0xde, 0xea, 0x26, 0x1f, 0xac, 0xd4, 0xbf, 0xbd, 0xf1, 0x79, 0xec, 0x8e, 0xd0, 0x37, 0x88, 0x29, 0xdb,
0xf8, 0xb1, 0x7f, 0xf4, 0xec, 0x94, 0x7f, 0xcc, 0xec, 0xfe, 0xf7, 0x2e, 0x34, 0xd2, 0x59, 0x98, 0x7b, 0xd0, 0xcc, 0xe5, 0x2c, 0x99, 0x87, 0xca, 0xfe, 0xf1, 0x31, 0x4e, 0xe8, 0x75, 0x98, 0x7f,
0x7c, 0x03, 0xed, 0x5c, 0xd8, 0x92, 0x75, 0x25, 0xb9, 0x2a, 0xf4, 0xed, 0x8d, 0xea, 0x43, 0xb5, 0x76, 0x7a, 0x78, 0xf2, 0xf4, 0xe4, 0x73, 0x1c, 0xcb, 0xf1, 0xe3, 0xe0, 0xf8, 0x59, 0x8f, 0x7f,
0xf3, 0xdd, 0xff, 0xdd, 0x7f, 0xfe, 0xf7, 0xc7, 0x99, 0x3e, 0x59, 0xd9, 0xb9, 0x7e, 0xbc, 0xa3, 0xcc, 0xec, 0xfd, 0xa7, 0x0d, 0xb5, 0x74, 0x4e, 0x26, 0xdf, 0x40, 0x33, 0x97, 0xb6, 0x64, 0x43,
0xe2, 0x75, 0x47, 0xb4, 0x7c, 0x0c, 0x09, 0x2f, 0x20, 0x57, 0xd0, 0xc9, 0xc7, 0x37, 0xd9, 0xc8, 0x49, 0x2e, 0x4b, 0x7d, 0x7b, 0xb3, 0xfc, 0x50, 0xed, 0x83, 0xf7, 0x7e, 0xf3, 0xef, 0xff, 0xfe,
0x27, 0x5e, 0x41, 0xda, 0xbd, 0xd7, 0x9c, 0x2a, 0x71, 0x1b, 0x42, 0xdc, 0x0a, 0x59, 0x32, 0xc5, 0x61, 0xa6, 0x4b, 0x56, 0x77, 0x6f, 0x1e, 0xed, 0xaa, 0x7c, 0xdd, 0x15, 0xe3, 0x00, 0xa6, 0x84,
0xe9, 0xe0, 0x23, 0x4c, 0x8c, 0x49, 0xe6, 0xf6, 0x4c, 0x34, 0xbf, 0xea, 0xad, 0xda, 0x5e, 0x2b, 0x17, 0x90, 0x6b, 0x68, 0xe5, 0xf3, 0x9b, 0x6c, 0xe6, 0x0b, 0xaf, 0x20, 0xed, 0xee, 0x6b, 0x4e,
0x6f, 0xca, 0x6a, 0xb5, 0xa6, 0x7d, 0x21, 0x8a, 0x90, 0x2e, 0x17, 0x65, 0x2e, 0xd9, 0xe4, 0x97, 0x95, 0xb8, 0x4d, 0x21, 0x6e, 0x95, 0x2c, 0x9b, 0xe2, 0x74, 0xf2, 0x11, 0x26, 0x46, 0x28, 0x73,
0xd0, 0x48, 0x57, 0x30, 0xb2, 0x6a, 0xac, 0x90, 0xe6, 0x1a, 0x67, 0xf7, 0xcb, 0x07, 0xca, 0x88, 0x19, 0x27, 0x9a, 0x5f, 0xf9, 0x92, 0x6e, 0xaf, 0x4f, 0x2f, 0xde, 0x6a, 0x53, 0xa7, 0x5d, 0x21,
0x75, 0xc1, 0x79, 0x99, 0x96, 0x38, 0x7f, 0x64, 0x6d, 0x91, 0x23, 0x58, 0x56, 0xee, 0x1e, 0xb0, 0x8a, 0x90, 0x36, 0x17, 0x65, 0xee, 0xec, 0xe4, 0x17, 0x50, 0x4b, 0xd7, 0x33, 0xb2, 0x66, 0xac,
0xef, 0x62, 0x49, 0xc5, 0xce, 0xff, 0x81, 0x45, 0x3e, 0x86, 0xba, 0xde, 0x40, 0xc9, 0x4a, 0xf5, 0x97, 0xe6, 0x8a, 0x67, 0x77, 0xa7, 0x0f, 0x94, 0x11, 0x1b, 0x82, 0xf3, 0x0a, 0x9d, 0xe2, 0xfc,
0xb2, 0x6b, 0xaf, 0x96, 0xe8, 0x2a, 0x44, 0xf7, 0x00, 0xb2, 0x85, 0x8c, 0xf4, 0x5f, 0xb7, 0x31, 0xd8, 0xda, 0x26, 0xc7, 0xb0, 0xa2, 0xc2, 0x7d, 0xce, 0xde, 0xc6, 0x92, 0x92, 0x9f, 0x10, 0x3e,
0xa6, 0x20, 0x56, 0x6c, 0x6f, 0x17, 0x62, 0x13, 0xcd, 0xef, 0x7b, 0xe4, 0xad, 0xec, 0x7e, 0xe5, 0xb2, 0xc8, 0x27, 0xb0, 0xa0, 0xb7, 0x53, 0xb2, 0x5a, 0xbe, 0x08, 0xdb, 0x6b, 0x53, 0x74, 0x95,
0x26, 0xf8, 0x06, 0x86, 0x74, 0x45, 0x60, 0xd7, 0x25, 0x1d, 0x8e, 0x5d, 0xc0, 0x6e, 0xd4, 0x70, 0xa2, 0xfb, 0x00, 0xd9, 0xb2, 0x46, 0xba, 0xaf, 0xdb, 0x26, 0x53, 0x27, 0x96, 0x6c, 0x76, 0x97,
0x4f, 0x7e, 0x01, 0x4d, 0x63, 0xb1, 0x23, 0x46, 0x37, 0x2e, 0x6c, 0x8a, 0xb6, 0x5d, 0x75, 0xa4, 0x62, 0x4b, 0xcd, 0xef, 0x82, 0xe4, 0x9d, 0xec, 0x7e, 0xe9, 0x96, 0xf8, 0x06, 0x86, 0x74, 0x55,
0xb8, 0x2f, 0x09, 0xee, 0x1d, 0xda, 0xe0, 0xdc, 0xc5, 0xc0, 0xcb, 0x5d, 0xf2, 0x05, 0x4f, 0x1e, 0xf8, 0xae, 0x4d, 0x5a, 0xdc, 0x77, 0x01, 0xbb, 0x55, 0x83, 0x3f, 0xf9, 0x39, 0xd4, 0x8d, 0xa5,
0x35, 0xc1, 0x93, 0x6c, 0xb5, 0xcc, 0xcf, 0xf9, 0xa9, 0xbf, 0x4b, 0xc3, 0x3e, 0xed, 0x09, 0xae, 0x8f, 0x18, 0xdd, 0xb8, 0xb0, 0x45, 0xda, 0x76, 0xd9, 0x91, 0xe2, 0xbe, 0x2c, 0xb8, 0xb7, 0x68,
0x4d, 0x92, 0x71, 0x25, 0x9f, 0xc3, 0x82, 0x1a, 0xe8, 0xc9, 0x72, 0xe6, 0x57, 0x63, 0xe6, 0xb7, 0x8d, 0x73, 0x17, 0xc3, 0x30, 0x0f, 0xc9, 0x4f, 0x79, 0xf1, 0xa8, 0xe9, 0x9e, 0x64, 0x6b, 0x67,
0x57, 0x8a, 0x64, 0xc5, 0x6c, 0x51, 0x30, 0x6b, 0x93, 0x26, 0x67, 0x86, 0xd3, 0x95, 0xc7, 0x79, 0x7e, 0x07, 0x48, 0xe3, 0x3d, 0xb5, 0x08, 0xd0, 0x8e, 0xe0, 0x5a, 0x27, 0x19, 0x57, 0xf2, 0x05,
0xf8, 0x70, 0x37, 0xdf, 0x83, 0xe3, 0x34, 0xcd, 0x2a, 0xc7, 0x87, 0x34, 0xcd, 0xaa, 0x7b, 0x7c, 0xcc, 0xab, 0x61, 0x9f, 0xac, 0x64, 0x71, 0x35, 0xf6, 0x01, 0x7b, 0xb5, 0x48, 0x56, 0xcc, 0x96,
0x3e, 0xcd, 0x74, 0x7a, 0xed, 0xa8, 0xe2, 0x46, 0x7e, 0x0d, 0x2d, 0x73, 0x7d, 0x23, 0xb6, 0x61, 0x04, 0xb3, 0x26, 0xa9, 0x73, 0x66, 0x38, 0x79, 0x79, 0x9c, 0x87, 0x0f, 0x8b, 0xf9, 0x1e, 0x1c,
0x79, 0x61, 0xd5, 0xb3, 0xd7, 0x2b, 0xcf, 0xf2, 0x70, 0x93, 0x96, 0x29, 0x86, 0xfc, 0x0a, 0x9a, 0xa7, 0x65, 0x56, 0x3a, 0x3e, 0xa4, 0x65, 0x56, 0xde, 0xe3, 0xf3, 0x65, 0xa6, 0xcb, 0x6b, 0x57,
0xc6, 0x38, 0x99, 0xba, 0xb2, 0x3c, 0x62, 0xa6, 0x91, 0x5b, 0x1c, 0xe8, 0xe8, 0xaa, 0x60, 0xdc, 0x81, 0x1b, 0xf9, 0x25, 0x34, 0xcc, 0xd5, 0x8e, 0xd8, 0x86, 0xe5, 0x85, 0x35, 0xd0, 0xde, 0x28,
0xa3, 0x39, 0xc6, 0xe8, 0x4a, 0xcc, 0x88, 0xbf, 0x5a, 0xd0, 0x32, 0xc7, 0xfc, 0x54, 0xfb, 0x8a, 0x3d, 0xcb, 0xbb, 0x9b, 0x34, 0x4c, 0x31, 0x18, 0xca, 0x45, 0x63, 0xd4, 0xec, 0x4d, 0x02, 0x37,
0xd9, 0x3f, 0xf5, 0x69, 0x69, 0x60, 0xa7, 0x5f, 0x09, 0x09, 0x27, 0x5b, 0xc7, 0x39, 0x84, 0xbe, 0x0d, 0xe7, 0xf4, 0x08, 0x6a, 0x97, 0xee, 0x08, 0x6b, 0x82, 0x71, 0x87, 0xe6, 0x18, 0xf3, 0x50,
0xcd, 0x0d, 0x34, 0xdb, 0xe6, 0xef, 0x5c, 0xaf, 0x8a, 0x87, 0xe6, 0x4f, 0x5d, 0x78, 0x28, 0x76, 0x1e, 0x40, 0xdd, 0xe0, 0xf1, 0x26, 0xbe, 0x6b, 0xc6, 0x91, 0x39, 0x2c, 0x62, 0x51, 0xfd, 0xc5,
0x84, 0x57, 0xa8, 0xe0, 0xd7, 0xf2, 0x87, 0x3a, 0xd5, 0x92, 0x08, 0x31, 0xb2, 0x53, 0xab, 0xb5, 0x82, 0x86, 0xb9, 0x45, 0xa4, 0x0e, 0x28, 0x59, 0x2d, 0xd2, 0xb4, 0x98, 0xda, 0x07, 0xe8, 0x57,
0x98, 0xa3, 0x29, 0x30, 0x1f, 0x0a, 0x8d, 0xee, 0xd3, 0xb5, 0x9c, 0x46, 0x85, 0xf2, 0xb2, 0x69, 0x42, 0xc9, 0xd3, 0xed, 0x93, 0x9c, 0x93, 0xbf, 0xcd, 0xcd, 0x44, 0x3b, 0xe6, 0xcf, 0x68, 0xaf,
0xa1, 0x84, 0x13, 0x80, 0xac, 0x2d, 0x92, 0x42, 0xdb, 0x49, 0x93, 0xaf, 0xdc, 0x39, 0xf3, 0xb0, 0x8a, 0x87, 0xe6, 0x2f, 0x69, 0x78, 0x28, 0x56, 0x90, 0x57, 0xa8, 0xe0, 0x63, 0xf9, 0xcb, 0xa1,
0xea, 0xee, 0xc5, 0x33, 0xe4, 0x1b, 0x19, 0x11, 0xea, 0x7e, 0x9c, 0xfa, 0xac, 0xdc, 0x24, 0x6d, 0xea, 0x6a, 0x84, 0x18, 0x05, 0x5e, 0x74, 0x9b, 0xf9, 0xe3, 0xde, 0x96, 0x85, 0x6f, 0xbf, 0x96,
0xbb, 0xea, 0x48, 0xf1, 0xff, 0x81, 0xe0, 0x7f, 0x8f, 0xac, 0x9b, 0xfc, 0x77, 0xbe, 0x35, 0x9b, 0xbf, 0xab, 0xa9, 0xb7, 0xc2, 0xfb, 0xff, 0xef, 0x7b, 0xfa, 0x40, 0x58, 0x74, 0x8f, 0xae, 0xe7,
0xea, 0x2b, 0xf2, 0x15, 0xb4, 0x8f, 0xc2, 0xf0, 0x6a, 0x1a, 0x69, 0x03, 0x34, 0x42, 0x46, 0x13, 0x2c, 0x2a, 0x22, 0xdc, 0x29, 0x40, 0xd6, 0x95, 0x49, 0xa1, 0xeb, 0xa5, 0xb5, 0x3f, 0xdd, 0xb8,
0xb7, 0x8b, 0xbd, 0xf4, 0x6d, 0xc1, 0x79, 0x9d, 0xac, 0xe5, 0x39, 0x67, 0x8d, 0xfe, 0x15, 0x71, 0xf3, 0x51, 0xd5, 0xcd, 0x93, 0x73, 0xfc, 0x46, 0x26, 0xa4, 0xba, 0x1f, 0xa7, 0x61, 0x9d, 0xee,
0xa1, 0x97, 0x16, 0xde, 0xd4, 0x10, 0x3b, 0xcf, 0xc7, 0x6c, 0xc4, 0x25, 0x19, 0xb9, 0x56, 0x98, 0xd1, 0xb6, 0x5d, 0x76, 0xa4, 0xf8, 0x7f, 0x4f, 0xf0, 0xbf, 0x4b, 0x36, 0x4c, 0xfe, 0xbb, 0xdf,
0xca, 0x88, 0x35, 0x4f, 0x04, 0xfe, 0x14, 0xba, 0xc5, 0x21, 0x8a, 0xdc, 0xd7, 0xbe, 0xac, 0x1e, 0x9a, 0x3d, 0xfd, 0x15, 0xf9, 0x0a, 0x9a, 0xc7, 0x61, 0x78, 0x3d, 0x8e, 0xb4, 0x01, 0xda, 0x3b,
0xbc, 0xec, 0xb7, 0x5e, 0x7b, 0x2e, 0x41, 0x1b, 0xcc, 0x8b, 0xdf, 0xb5, 0x3f, 0xfc, 0x7f, 0x00, 0xc6, 0x0c, 0x61, 0x17, 0x5b, 0xf9, 0xbb, 0x82, 0xf3, 0x06, 0x59, 0xcf, 0x73, 0xce, 0xe6, 0x8c,
0x00, 0x00, 0xff, 0xff, 0x37, 0x77, 0x59, 0xa8, 0x09, 0x17, 0x00, 0x00, 0x57, 0xc4, 0x81, 0x4e, 0x8a, 0xfb, 0xa9, 0x21, 0x76, 0x9e, 0x8f, 0x39, 0x07, 0x4c, 0xc9, 0xc8,
0x75, 0xe2, 0x54, 0x46, 0xac, 0x79, 0x62, 0x68, 0x7b, 0xd0, 0x2e, 0xce, 0x70, 0xe4, 0x9e, 0x8e,
0x63, 0xf9, 0xdc, 0x67, 0xbf, 0xf3, 0xda, 0x73, 0xe9, 0xb4, 0xf3, 0x39, 0xf1, 0x2b, 0xfd, 0xc7,
0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x62, 0x23, 0x23, 0x7b, 0xd7, 0x17, 0x00, 0x00,
} }

@ -141,7 +141,7 @@ func request_Lightning_ListChannels_0(ctx context.Context, marshaler runtime.Mar
} }
func request_Lightning_OpenChannel_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_OpenChannelClient, runtime.ServerMetadata, error) { func request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq OpenChannelRequest var protoReq OpenChannelRequest
var metadata runtime.ServerMetadata var metadata runtime.ServerMetadata
@ -149,16 +149,8 @@ func request_Lightning_OpenChannel_0(ctx context.Context, marshaler runtime.Mars
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
} }
stream, err := client.OpenChannel(ctx, &protoReq) msg, err := client.OpenChannelSync(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
if err != nil { return msg, metadata, err
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
} }
@ -227,56 +219,17 @@ func request_Lightning_CloseChannel_0(ctx context.Context, marshaler runtime.Mar
} }
func request_Lightning_SendPayment_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SendPaymentClient, runtime.ServerMetadata, error) { func request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendRequest
var metadata runtime.ServerMetadata var metadata runtime.ServerMetadata
stream, err := client.SendPayment(ctx)
if err != nil { if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
grpclog.Printf("Failed to start streaming: %v", err) return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, err
} }
dec := marshaler.NewDecoder(req.Body)
handleSend := func() error { msg, err := client.SendPaymentSync(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
var protoReq SendRequest return msg, metadata, err
err = dec.Decode(&protoReq)
if err == io.EOF {
return err
}
if err != nil {
grpclog.Printf("Failed to decode request: %v", err)
return err
}
if err = stream.Send(&protoReq); err != nil {
grpclog.Printf("Failed to send request: %v", err)
return err
}
return nil
}
if err := handleSend(); err != nil {
if cerr := stream.CloseSend(); cerr != nil {
grpclog.Printf("Failed to terminate client stream: %v", cerr)
}
if err == io.EOF {
return stream, metadata, nil
}
return nil, metadata, err
}
go func() {
for {
if err := handleSend(); err != nil {
break
}
}
if err := stream.CloseSend(); err != nil {
grpclog.Printf("Failed to terminate client stream: %v", err)
}
}()
header, err := stream.Header()
if err != nil {
grpclog.Printf("Failed to get header from client: %v", err)
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
} }
func request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { func request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
@ -681,7 +634,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_OpenChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
@ -698,14 +651,14 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
if err != nil { if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err) runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
} }
resp, md, err := request_Lightning_OpenChannel_0(rctx, inboundMarshaler, client, req, pathParams) resp, md, err := request_Lightning_OpenChannelSync_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md) ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil { if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err) runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
return return
} }
forward_Lightning_OpenChannel_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) forward_Lightning_OpenChannelSync_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
}) })
@ -737,7 +690,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_SendPayment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
@ -754,14 +707,14 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
if err != nil { if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err) runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
} }
resp, md, err := request_Lightning_SendPayment_0(rctx, inboundMarshaler, client, req, pathParams) resp, md, err := request_Lightning_SendPaymentSync_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md) ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil { if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err) runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
return return
} }
forward_Lightning_SendPayment_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) forward_Lightning_SendPaymentSync_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
}) })
@ -901,11 +854,11 @@ var (
pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "")) pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, ""))
pattern_Lightning_OpenChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "")) pattern_Lightning_OpenChannelSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, ""))
pattern_Lightning_CloseChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "channel_point.funding_txid", "channel_point.output_index", "force"}, "")) pattern_Lightning_CloseChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "channel_point.funding_txid", "channel_point.output_index", "force"}, ""))
pattern_Lightning_SendPayment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, "")) pattern_Lightning_SendPaymentSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, ""))
pattern_Lightning_AddInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, "")) pattern_Lightning_AddInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, ""))
@ -937,11 +890,11 @@ var (
forward_Lightning_ListChannels_0 = runtime.ForwardResponseMessage forward_Lightning_ListChannels_0 = runtime.ForwardResponseMessage
forward_Lightning_OpenChannel_0 = runtime.ForwardResponseStream forward_Lightning_OpenChannelSync_0 = runtime.ForwardResponseMessage
forward_Lightning_CloseChannel_0 = runtime.ForwardResponseStream forward_Lightning_CloseChannel_0 = runtime.ForwardResponseStream
forward_Lightning_SendPayment_0 = runtime.ForwardResponseStream forward_Lightning_SendPaymentSync_0 = runtime.ForwardResponseMessage
forward_Lightning_AddInvoice_0 = runtime.ForwardResponseMessage forward_Lightning_AddInvoice_0 = runtime.ForwardResponseMessage

@ -66,19 +66,24 @@ service Lightning {
get: "/v1/channels" get: "/v1/channels"
}; };
} }
rpc OpenChannel(OpenChannelRequest) returns (stream OpenStatusUpdate) { rpc OpenChannelSync(OpenChannelRequest) returns (ChannelPoint) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/channels" post: "/v1/channels"
body: "*" body: "*"
}; };
} }
rpc OpenChannel(OpenChannelRequest) returns (stream OpenStatusUpdate);
rpc CloseChannel(CloseChannelRequest) returns (stream CloseStatusUpdate) { rpc CloseChannel(CloseChannelRequest) returns (stream CloseStatusUpdate) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/channels/{channel_point.funding_txid}/{channel_point.output_index}/{force}" delete: "/v1/channels/{channel_point.funding_txid}/{channel_point.output_index}/{force}"
}; };
} }
rpc SendPayment(stream SendRequest) returns (stream SendResponse) { rpc SendPayment(stream SendRequest) returns (stream SendResponse);
rpc SendPaymentSync(SendRequest) returns (SendResponse) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/channels/transactions" post: "/v1/channels/transactions"
body: "*" body: "*"
@ -128,10 +133,14 @@ message TransactionDetails {
message SendRequest { message SendRequest {
bytes dest = 1; bytes dest = 1;
int64 amt = 2; string dest_string = 2;
bytes payment_hash = 3;
bool fast_send = 4; int64 amt = 3;
bytes payment_hash = 4;
string payment_hash_string = 5;
bool fast_send = 6;
} }
message SendResponse { message SendResponse {
// TODO(roasbeef): info about route? stats? // TODO(roasbeef): info about route? stats?
@ -277,14 +286,17 @@ message PendingUpdate {
message OpenChannelRequest { message OpenChannelRequest {
int32 target_peer_id = 1; int32 target_peer_id = 1;
bytes node_pubkey = 2; bytes node_pubkey = 2;
int64 local_funding_amount = 3; string node_pubkey_string = 3;
int64 remote_funding_amount = 4;
int64 commission_size = 5; int64 local_funding_amount = 4;
int64 remote_funding_amount = 5;
uint32 num_confs = 6; int64 commission_size = 6;
uint32 num_confs = 7;
} }
message OpenStatusUpdate { message OpenStatusUpdate {
oneof update { oneof update {

@ -63,12 +63,12 @@
] ]
}, },
"post": { "post": {
"operationId": "OpenChannel", "operationId": "OpenChannelSync",
"responses": { "responses": {
"200": { "200": {
"description": "(streaming responses)", "description": "",
"schema": { "schema": {
"$ref": "#/definitions/lnrpcOpenStatusUpdate" "$ref": "#/definitions/lnrpcChannelPoint"
} }
} }
}, },
@ -105,10 +105,10 @@
}, },
"/v1/channels/transactions": { "/v1/channels/transactions": {
"post": { "post": {
"operationId": "SendPayment", "operationId": "SendPaymentSync",
"responses": { "responses": {
"200": { "200": {
"description": "(streaming responses)", "description": "",
"schema": { "schema": {
"$ref": "#/definitions/lnrpcSendResponse" "$ref": "#/definitions/lnrpcSendResponse"
} }
@ -117,7 +117,6 @@
"parameters": [ "parameters": [
{ {
"name": "body", "name": "body",
"description": "(streaming inputs)",
"in": "body", "in": "body",
"required": true, "required": true,
"schema": { "schema": {
@ -485,14 +484,6 @@
} }
} }
}, },
"lnrpcChannelOpenUpdate": {
"type": "object",
"properties": {
"channel_point": {
"$ref": "#/definitions/lnrpcChannelPoint"
}
}
},
"lnrpcChannelPoint": { "lnrpcChannelPoint": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -759,6 +750,10 @@
"type": "string", "type": "string",
"format": "byte" "format": "byte"
}, },
"node_pubkey_string": {
"type": "string",
"format": "string"
},
"num_confs": { "num_confs": {
"type": "integer", "type": "integer",
"format": "int64" "format": "int64"
@ -773,20 +768,6 @@
} }
} }
}, },
"lnrpcOpenStatusUpdate": {
"type": "object",
"properties": {
"chan_open": {
"$ref": "#/definitions/lnrpcChannelOpenUpdate"
},
"chan_pending": {
"$ref": "#/definitions/lnrpcPendingUpdate"
},
"confirmation": {
"$ref": "#/definitions/lnrpcConfirmationUpdate"
}
}
},
"lnrpcPaymentHash": { "lnrpcPaymentHash": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -898,6 +879,10 @@
"type": "string", "type": "string",
"format": "byte" "format": "byte"
}, },
"dest_string": {
"type": "string",
"format": "string"
},
"fast_send": { "fast_send": {
"type": "boolean", "type": "boolean",
"format": "boolean" "format": "boolean"
@ -905,6 +890,10 @@
"payment_hash": { "payment_hash": {
"type": "string", "type": "string",
"format": "byte" "format": "byte"
},
"payment_hash_string": {
"type": "string",
"format": "string"
} }
} }
}, },