lnrpc: add two new RPC's, UpdateFees and FeeReport

This commit adds to new RPC’s to the Lightning service: UpdateFees and
FeeReport. Additionally, we also update to the latest version of protc,
golang protobuf, and the gRPC gateway.
This commit is contained in:
Olaoluwa Osuntokun 2017-08-22 00:07:25 -07:00
parent e0bed8bc27
commit 129a0e10de
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
4 changed files with 1916 additions and 863 deletions

@ -1,6 +1,5 @@
// Code generated by protoc-gen-go.
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: rpc.proto
// DO NOT EDIT!
/*
Package lnrpc is a generated protocol buffer package.
@ -93,6 +92,11 @@ It has these top-level messages:
DebugLevelResponse
PayReqString
PayReq
FeeReportRequest
ChannelFeeReport
FeeReportResponse
FeeUpdateRequest
FeeUpdateResponse
*/
package lnrpc
@ -144,13 +148,20 @@ func (NewAddressRequest_AddressType) EnumDescriptor() ([]byte, []int) {
}
type Transaction struct {
TxHash string `protobuf:"bytes,1,opt,name=tx_hash" json:"tx_hash,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"`
NumConfirmations int32 `protobuf:"varint,3,opt,name=num_confirmations" json:"num_confirmations,omitempty"`
BlockHash string `protobuf:"bytes,4,opt,name=block_hash" json:"block_hash,omitempty"`
BlockHeight int32 `protobuf:"varint,5,opt,name=block_height" json:"block_height,omitempty"`
TimeStamp int64 `protobuf:"varint,6,opt,name=time_stamp" json:"time_stamp,omitempty"`
TotalFees int64 `protobuf:"varint,7,opt,name=total_fees" json:"total_fees,omitempty"`
// / The transaction hash
TxHash string `protobuf:"bytes,1,opt,name=tx_hash" json:"tx_hash,omitempty"`
// / The transaction ammount, denominated in satoshis
Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"`
// / The number of confirmations
NumConfirmations int32 `protobuf:"varint,3,opt,name=num_confirmations" json:"num_confirmations,omitempty"`
// / The hash of the block this transaction was included in
BlockHash string `protobuf:"bytes,4,opt,name=block_hash" json:"block_hash,omitempty"`
// / The height of the block this transaction was included in
BlockHeight int32 `protobuf:"varint,5,opt,name=block_height" json:"block_height,omitempty"`
// / Timestamp of this transaction
TimeStamp int64 `protobuf:"varint,6,opt,name=time_stamp" json:"time_stamp,omitempty"`
// / Fees paid for this transaction
TotalFees int64 `protobuf:"varint,7,opt,name=total_fees" json:"total_fees,omitempty"`
}
func (m *Transaction) Reset() { *m = Transaction{} }
@ -216,6 +227,7 @@ func (*GetTransactionsRequest) ProtoMessage() {}
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
type TransactionDetails struct {
// / The list of transactions relevant to the wallet.
Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions" json:"transactions,omitempty"`
}
@ -232,12 +244,21 @@ func (m *TransactionDetails) GetTransactions() []*Transaction {
}
type SendRequest struct {
Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"`
DestString string `protobuf:"bytes,2,opt,name=dest_string,json=destString" json:"dest_string,omitempty"`
Amt int64 `protobuf:"varint,3,opt,name=amt" json:"amt,omitempty"`
PaymentHash []byte `protobuf:"bytes,4,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"`
// / The identity pubkey of the payment recipient
Dest []byte `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"`
// / The hex-encoded identity pubkey of the payment recipient
DestString string `protobuf:"bytes,2,opt,name=dest_string,json=destString" json:"dest_string,omitempty"`
// / Number of satoshis to send.
Amt int64 `protobuf:"varint,3,opt,name=amt" json:"amt,omitempty"`
// / The hash to use within the payment's HTLC
PaymentHash []byte `protobuf:"bytes,4,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"`
// / The hex-encoded hash to use within the payment's HTLC
PaymentHashString string `protobuf:"bytes,5,opt,name=payment_hash_string,json=paymentHashString" json:"payment_hash_string,omitempty"`
PaymentRequest string `protobuf:"bytes,6,opt,name=payment_request,json=paymentRequest" json:"payment_request,omitempty"`
// *
// A bare-bones invoice for a payment within the Lightning Network. With the
// details of the invoice, the sender has all the data necessary to send a
// payment to the recipient.
PaymentRequest string `protobuf:"bytes,6,opt,name=payment_request,json=paymentRequest" json:"payment_request,omitempty"`
}
func (m *SendRequest) Reset() { *m = SendRequest{} }
@ -320,10 +341,12 @@ func (m *SendResponse) GetPaymentRoute() *Route {
}
type ChannelPoint struct {
// TODO(roasbeef): make str vs bytes into a oneof
FundingTxid []byte `protobuf:"bytes,1,opt,name=funding_txid,proto3" json:"funding_txid,omitempty"`
// / Txid of the funding transaction
FundingTxid []byte `protobuf:"bytes,1,opt,name=funding_txid,proto3" json:"funding_txid,omitempty"`
// / Hex-encoded string representing the funding transaction
FundingTxidStr string `protobuf:"bytes,2,opt,name=funding_txid_str" json:"funding_txid_str,omitempty"`
OutputIndex uint32 `protobuf:"varint,3,opt,name=output_index" json:"output_index,omitempty"`
// / The index of the output of the funding transaction
OutputIndex uint32 `protobuf:"varint,3,opt,name=output_index" json:"output_index,omitempty"`
}
func (m *ChannelPoint) Reset() { *m = ChannelPoint{} }
@ -353,8 +376,10 @@ func (m *ChannelPoint) GetOutputIndex() uint32 {
}
type LightningAddress struct {
// / The identity pubkey of the Lightning node
Pubkey string `protobuf:"bytes,1,opt,name=pubkey" json:"pubkey,omitempty"`
Host string `protobuf:"bytes,2,opt,name=host" json:"host,omitempty"`
// / The network location of the lightning node, e.g. `69.69.69.69:1337` or `localhost:10011`
Host string `protobuf:"bytes,2,opt,name=host" json:"host,omitempty"`
}
func (m *LightningAddress) Reset() { *m = LightningAddress{} }
@ -377,6 +402,7 @@ func (m *LightningAddress) GetHost() string {
}
type SendManyRequest struct {
// / The map from addresses to amounts
AddrToAmount map[string]int64 `protobuf:"bytes,1,rep,name=AddrToAmount" json:"AddrToAmount,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
}
@ -393,6 +419,7 @@ func (m *SendManyRequest) GetAddrToAmount() map[string]int64 {
}
type SendManyResponse struct {
// / The id of the transaction
Txid string `protobuf:"bytes,1,opt,name=txid" json:"txid,omitempty"`
}
@ -409,8 +436,10 @@ func (m *SendManyResponse) GetTxid() string {
}
type SendCoinsRequest struct {
Addr string `protobuf:"bytes,1,opt,name=addr" json:"addr,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"`
// / The address to send coins to
Addr string `protobuf:"bytes,1,opt,name=addr" json:"addr,omitempty"`
// / The amount in satoshis to send
Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"`
}
func (m *SendCoinsRequest) Reset() { *m = SendCoinsRequest{} }
@ -433,6 +462,7 @@ func (m *SendCoinsRequest) GetAmount() int64 {
}
type SendCoinsResponse struct {
// / The transaction ID of the transaction
Txid string `protobuf:"bytes,1,opt,name=txid" json:"txid,omitempty"`
}
@ -448,7 +478,14 @@ func (m *SendCoinsResponse) GetTxid() string {
return ""
}
// *
// `AddressType` has to be one of:
//
// - `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)
// - `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)
// - `p2pkh`: Pay to public key hash (`PUBKEY_HASH` = 2)
type NewAddressRequest struct {
// / The address type
Type NewAddressRequest_AddressType `protobuf:"varint,1,opt,name=type,enum=lnrpc.NewAddressRequest_AddressType" json:"type,omitempty"`
}
@ -473,6 +510,7 @@ func (*NewWitnessAddressRequest) ProtoMessage() {}
func (*NewWitnessAddressRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
type NewAddressResponse struct {
// / The newly generated wallet address
Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"`
}
@ -489,6 +527,7 @@ func (m *NewAddressResponse) GetAddress() string {
}
type SignMessageRequest struct {
// / The message to be signed
Msg []byte `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
}
@ -505,6 +544,7 @@ func (m *SignMessageRequest) GetMsg() []byte {
}
type SignMessageResponse struct {
// / The signature for the given message
Signature string `protobuf:"bytes,1,opt,name=signature" json:"signature,omitempty"`
}
@ -521,7 +561,9 @@ func (m *SignMessageResponse) GetSignature() string {
}
type VerifyMessageRequest struct {
Msg []byte `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
// / The message over which the signature is to be verified
Msg []byte `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
// / The signature to be verifed over the given message
Signature string `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"`
}
@ -545,7 +587,9 @@ func (m *VerifyMessageRequest) GetSignature() string {
}
type VerifyMessageResponse struct {
Valid bool `protobuf:"varint,1,opt,name=valid" json:"valid,omitempty"`
// / Whether the signature was valid over the given message
Valid bool `protobuf:"varint,1,opt,name=valid" json:"valid,omitempty"`
// / The pubkey recovered from the signature
Pubkey string `protobuf:"bytes,2,opt,name=pubkey" json:"pubkey,omitempty"`
}
@ -569,8 +613,11 @@ func (m *VerifyMessageResponse) GetPubkey() string {
}
type ConnectPeerRequest struct {
// / Lightning address of the peer, in the format `<pubkey>@host`
Addr *LightningAddress `protobuf:"bytes,1,opt,name=addr" json:"addr,omitempty"`
Perm bool `protobuf:"varint,2,opt,name=perm" json:"perm,omitempty"`
// * If set, the daemon will attempt to persistently connect to the target
// peer. Otherwise, the call will be synchronous.
Perm bool `protobuf:"varint,2,opt,name=perm" json:"perm,omitempty"`
}
func (m *ConnectPeerRequest) Reset() { *m = ConnectPeerRequest{} }
@ -593,6 +640,7 @@ func (m *ConnectPeerRequest) GetPerm() bool {
}
type ConnectPeerResponse struct {
// / The id of the newly connected peer
PeerId int32 `protobuf:"varint,1,opt,name=peer_id" json:"peer_id,omitempty"`
}
@ -609,6 +657,7 @@ func (m *ConnectPeerResponse) GetPeerId() int32 {
}
type DisconnectPeerRequest struct {
// / The pubkey of the node to disconnect from
PubKey string `protobuf:"bytes,1,opt,name=pub_key" json:"pub_key,omitempty"`
}
@ -681,21 +730,53 @@ func (m *HTLC) GetRevocationDelay() uint32 {
}
type ActiveChannel struct {
Active bool `protobuf:"varint,1,opt,name=active" json:"active,omitempty"`
RemotePubkey string `protobuf:"bytes,2,opt,name=remote_pubkey" json:"remote_pubkey,omitempty"`
ChannelPoint string `protobuf:"bytes,3,opt,name=channel_point" json:"channel_point,omitempty"`
ChanId uint64 `protobuf:"varint,4,opt,name=chan_id" json:"chan_id,omitempty"`
Capacity int64 `protobuf:"varint,5,opt,name=capacity" json:"capacity,omitempty"`
LocalBalance int64 `protobuf:"varint,6,opt,name=local_balance" json:"local_balance,omitempty"`
RemoteBalance int64 `protobuf:"varint,7,opt,name=remote_balance" json:"remote_balance,omitempty"`
CommitFee int64 `protobuf:"varint,8,opt,name=commit_fee" json:"commit_fee,omitempty"`
CommitWeight int64 `protobuf:"varint,9,opt,name=commit_weight" json:"commit_weight,omitempty"`
FeePerKw int64 `protobuf:"varint,10,opt,name=fee_per_kw" json:"fee_per_kw,omitempty"`
UnsettledBalance int64 `protobuf:"varint,11,opt,name=unsettled_balance" json:"unsettled_balance,omitempty"`
TotalSatoshisSent int64 `protobuf:"varint,12,opt,name=total_satoshis_sent" json:"total_satoshis_sent,omitempty"`
TotalSatoshisReceived int64 `protobuf:"varint,13,opt,name=total_satoshis_received" json:"total_satoshis_received,omitempty"`
NumUpdates uint64 `protobuf:"varint,14,opt,name=num_updates" json:"num_updates,omitempty"`
PendingHtlcs []*HTLC `protobuf:"bytes,15,rep,name=pending_htlcs" json:"pending_htlcs,omitempty"`
// / Whether this channel is active or not
Active bool `protobuf:"varint,1,opt,name=active" json:"active,omitempty"`
// / The identity pubkey of the remote node
RemotePubkey string `protobuf:"bytes,2,opt,name=remote_pubkey" json:"remote_pubkey,omitempty"`
// *
// The outpoint (txid:index) of the funding transaction. With this value, Bob
// will be able to generate a signature for Alice's version of the commitment
// transaction.
ChannelPoint string `protobuf:"bytes,3,opt,name=channel_point" json:"channel_point,omitempty"`
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChanId uint64 `protobuf:"varint,4,opt,name=chan_id" json:"chan_id,omitempty"`
// / The total amount of funds held in this channel
Capacity int64 `protobuf:"varint,5,opt,name=capacity" json:"capacity,omitempty"`
// / This node's current balance in this channel
LocalBalance int64 `protobuf:"varint,6,opt,name=local_balance" json:"local_balance,omitempty"`
// / The counterparty's current balance in this channel
RemoteBalance int64 `protobuf:"varint,7,opt,name=remote_balance" json:"remote_balance,omitempty"`
// *
// The amount calculated to be paid in fees for the current set of commitment
// transactions. The fee amount is persisted with the channel in order to
// allow the fee amount to be removed and recalculated with each channel state
// update, including updates that happen after a system restart.
CommitFee int64 `protobuf:"varint,8,opt,name=commit_fee" json:"commit_fee,omitempty"`
// / The weight of the commitment transaction
CommitWeight int64 `protobuf:"varint,9,opt,name=commit_weight" json:"commit_weight,omitempty"`
// *
// The required number of satoshis per kilo-weight that the requester will pay
// at all times, for both the funding transaction and commitment transaction.
// This value can later be updated once the channel is open.
FeePerKw int64 `protobuf:"varint,10,opt,name=fee_per_kw" json:"fee_per_kw,omitempty"`
// / The unsettled balance in this channel
UnsettledBalance int64 `protobuf:"varint,11,opt,name=unsettled_balance" json:"unsettled_balance,omitempty"`
// *
// The total number of satoshis we've sent within this channel.
TotalSatoshisSent int64 `protobuf:"varint,12,opt,name=total_satoshis_sent" json:"total_satoshis_sent,omitempty"`
// *
// The total number of satoshis we've received within this channel.
TotalSatoshisReceived int64 `protobuf:"varint,13,opt,name=total_satoshis_received" json:"total_satoshis_received,omitempty"`
// *
// The total number of updates conducted within this channel.
NumUpdates uint64 `protobuf:"varint,14,opt,name=num_updates" json:"num_updates,omitempty"`
// *
// The list of active, uncleared HTLCs currently pending within the channel.
PendingHtlcs []*HTLC `protobuf:"bytes,15,rep,name=pending_htlcs" json:"pending_htlcs,omitempty"`
}
func (m *ActiveChannel) Reset() { *m = ActiveChannel{} }
@ -817,6 +898,7 @@ func (*ListChannelsRequest) ProtoMessage() {}
func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
type ListChannelsResponse struct {
// / The list of active channels
Channels []*ActiveChannel `protobuf:"bytes,11,rep,name=channels" json:"channels,omitempty"`
}
@ -833,15 +915,24 @@ func (m *ListChannelsResponse) GetChannels() []*ActiveChannel {
}
type Peer struct {
PubKey string `protobuf:"bytes,1,opt,name=pub_key" json:"pub_key,omitempty"`
PeerId int32 `protobuf:"varint,2,opt,name=peer_id" json:"peer_id,omitempty"`
Address string `protobuf:"bytes,3,opt,name=address" json:"address,omitempty"`
// / The identity pubkey of the peer
PubKey string `protobuf:"bytes,1,opt,name=pub_key" json:"pub_key,omitempty"`
// / The peer's id from the local point of view
PeerId int32 `protobuf:"varint,2,opt,name=peer_id" json:"peer_id,omitempty"`
// / Network address of the peer; eg `127.0.0.1:10011`
Address string `protobuf:"bytes,3,opt,name=address" json:"address,omitempty"`
// / Bytes of data transmitted to this peer
BytesSent uint64 `protobuf:"varint,4,opt,name=bytes_sent" json:"bytes_sent,omitempty"`
// / Bytes of data transmitted from this peer
BytesRecv uint64 `protobuf:"varint,5,opt,name=bytes_recv" json:"bytes_recv,omitempty"`
SatSent int64 `protobuf:"varint,6,opt,name=sat_sent" json:"sat_sent,omitempty"`
SatRecv int64 `protobuf:"varint,7,opt,name=sat_recv" json:"sat_recv,omitempty"`
Inbound bool `protobuf:"varint,8,opt,name=inbound" json:"inbound,omitempty"`
PingTime int64 `protobuf:"varint,9,opt,name=ping_time" json:"ping_time,omitempty"`
// / Satoshis sent to this peer
SatSent int64 `protobuf:"varint,6,opt,name=sat_sent" json:"sat_sent,omitempty"`
// / Satoshis received from this peer
SatRecv int64 `protobuf:"varint,7,opt,name=sat_recv" json:"sat_recv,omitempty"`
// / A channel is inbound if the counterparty initiated the channel
Inbound bool `protobuf:"varint,8,opt,name=inbound" json:"inbound,omitempty"`
// / Ping time to this peer
PingTime int64 `protobuf:"varint,9,opt,name=ping_time" json:"ping_time,omitempty"`
}
func (m *Peer) Reset() { *m = Peer{} }
@ -921,6 +1012,7 @@ func (*ListPeersRequest) ProtoMessage() {}
func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
type ListPeersResponse struct {
// / The list of currently connected peers
Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"`
}
@ -945,16 +1037,26 @@ func (*GetInfoRequest) ProtoMessage() {}
func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
type GetInfoResponse struct {
IdentityPubkey string `protobuf:"bytes,1,opt,name=identity_pubkey" json:"identity_pubkey,omitempty"`
Alias string `protobuf:"bytes,2,opt,name=alias" json:"alias,omitempty"`
NumPendingChannels uint32 `protobuf:"varint,3,opt,name=num_pending_channels" json:"num_pending_channels,omitempty"`
NumActiveChannels uint32 `protobuf:"varint,4,opt,name=num_active_channels" json:"num_active_channels,omitempty"`
NumPeers uint32 `protobuf:"varint,5,opt,name=num_peers" json:"num_peers,omitempty"`
BlockHeight uint32 `protobuf:"varint,6,opt,name=block_height" json:"block_height,omitempty"`
BlockHash string `protobuf:"bytes,8,opt,name=block_hash" json:"block_hash,omitempty"`
SyncedToChain bool `protobuf:"varint,9,opt,name=synced_to_chain" json:"synced_to_chain,omitempty"`
Testnet bool `protobuf:"varint,10,opt,name=testnet" json:"testnet,omitempty"`
Chains []string `protobuf:"bytes,11,rep,name=chains" json:"chains,omitempty"`
// / The identity pubkey of the current node.
IdentityPubkey string `protobuf:"bytes,1,opt,name=identity_pubkey" json:"identity_pubkey,omitempty"`
// / If applicable, the alias of the current node, e.g. "bob"
Alias string `protobuf:"bytes,2,opt,name=alias" json:"alias,omitempty"`
// / Number of pending channels
NumPendingChannels uint32 `protobuf:"varint,3,opt,name=num_pending_channels" json:"num_pending_channels,omitempty"`
// / Number of active channels
NumActiveChannels uint32 `protobuf:"varint,4,opt,name=num_active_channels" json:"num_active_channels,omitempty"`
// / Number of peers
NumPeers uint32 `protobuf:"varint,5,opt,name=num_peers" json:"num_peers,omitempty"`
// / The node's current view of the height of the best block
BlockHeight uint32 `protobuf:"varint,6,opt,name=block_height" json:"block_height,omitempty"`
// / The node's current view of the hash of the best block
BlockHash string `protobuf:"bytes,8,opt,name=block_hash" json:"block_hash,omitempty"`
// / Whether the wallet's view is synced to the main chain
SyncedToChain bool `protobuf:"varint,9,opt,name=synced_to_chain" json:"synced_to_chain,omitempty"`
// / Whether the current node is connected to testnet
Testnet bool `protobuf:"varint,10,opt,name=testnet" json:"testnet,omitempty"`
// / A list of active chains the node is connected to
Chains []string `protobuf:"bytes,11,rep,name=chains" json:"chains,omitempty"`
}
func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} }
@ -1105,9 +1207,13 @@ func (m *ChannelCloseUpdate) GetSuccess() bool {
}
type CloseChannelRequest struct {
// *
// The outpoint (txid:index) of the funding transaction. With this value, Bob
// will be able to generate a signature for Alice's version of the commitment
// transaction.
ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point,json=channelPoint" json:"channel_point,omitempty"`
TimeLimit int64 `protobuf:"varint,2,opt,name=time_limit,json=timeLimit" json:"time_limit,omitempty"`
Force bool `protobuf:"varint,3,opt,name=force" json:"force,omitempty"`
// / If true, then the channel will be closed forcibly. This means the current commitment transaction will be signed and broadcast.
Force bool `protobuf:"varint,2,opt,name=force" json:"force,omitempty"`
}
func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
@ -1122,13 +1228,6 @@ func (m *CloseChannelRequest) GetChannelPoint() *ChannelPoint {
return nil
}
func (m *CloseChannelRequest) GetTimeLimit() int64 {
if m != nil {
return m.TimeLimit
}
return 0
}
func (m *CloseChannelRequest) GetForce() bool {
if m != nil {
return m.Force
@ -1313,11 +1412,16 @@ func (m *PendingUpdate) GetOutputIndex() uint32 {
}
type OpenChannelRequest struct {
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"`
NodePubkeyString string `protobuf:"bytes,3,opt,name=node_pubkey_string" json:"node_pubkey_string,omitempty"`
LocalFundingAmount int64 `protobuf:"varint,4,opt,name=local_funding_amount" json:"local_funding_amount,omitempty"`
PushSat int64 `protobuf:"varint,5,opt,name=push_sat" json:"push_sat,omitempty"`
// / The peer_id of the node to open a channel with
TargetPeerId int32 `protobuf:"varint,1,opt,name=target_peer_id" json:"target_peer_id,omitempty"`
// / The pubkey of the node to open a channel with
NodePubkey []byte `protobuf:"bytes,2,opt,name=node_pubkey,proto3" json:"node_pubkey,omitempty"`
// / The hex encorded pubkey of the node to open a channel with
NodePubkeyString string `protobuf:"bytes,3,opt,name=node_pubkey_string" json:"node_pubkey_string,omitempty"`
// / The number of satoshis the wallet should commit to the channel
LocalFundingAmount int64 `protobuf:"varint,4,opt,name=local_funding_amount" json:"local_funding_amount,omitempty"`
// / The number of satoshis to push to the remote side as part of the initial commitment state
PushSat int64 `protobuf:"varint,5,opt,name=push_sat" json:"push_sat,omitempty"`
}
func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
@ -1521,9 +1625,13 @@ func (*PendingChannelRequest) ProtoMessage() {}
func (*PendingChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
type PendingChannelResponse struct {
TotalLimboBalance int64 `protobuf:"varint,1,opt,name=total_limbo_balance" json:"total_limbo_balance,omitempty"`
PendingOpenChannels []*PendingChannelResponse_PendingOpenChannel `protobuf:"bytes,2,rep,name=pending_open_channels" json:"pending_open_channels,omitempty"`
PendingClosingChannels []*PendingChannelResponse_ClosedChannel `protobuf:"bytes,3,rep,name=pending_closing_channels" json:"pending_closing_channels,omitempty"`
// / The balance in satoshis encumbered in pending channels
TotalLimboBalance int64 `protobuf:"varint,1,opt,name=total_limbo_balance" json:"total_limbo_balance,omitempty"`
// / Channels pending opening
PendingOpenChannels []*PendingChannelResponse_PendingOpenChannel `protobuf:"bytes,2,rep,name=pending_open_channels" json:"pending_open_channels,omitempty"`
// / Channels pending closing
PendingClosingChannels []*PendingChannelResponse_ClosedChannel `protobuf:"bytes,3,rep,name=pending_closing_channels" json:"pending_closing_channels,omitempty"`
// / Channels pending force closing
PendingForceClosingChannels []*PendingChannelResponse_ForceClosedChannel `protobuf:"bytes,4,rep,name=pending_force_closing_channels" json:"pending_force_closing_channels,omitempty"`
}
@ -1611,12 +1719,26 @@ func (m *PendingChannelResponse_PendingChannel) GetRemoteBalance() int64 {
}
type PendingChannelResponse_PendingOpenChannel struct {
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
ConfirmationHeight uint32 `protobuf:"varint,2,opt,name=confirmation_height" json:"confirmation_height,omitempty"`
BlocksTillOpen uint32 `protobuf:"varint,3,opt,name=blocks_till_open" json:"blocks_till_open,omitempty"`
CommitFee int64 `protobuf:"varint,4,opt,name=commit_fee" json:"commit_fee,omitempty"`
CommitWeight int64 `protobuf:"varint,5,opt,name=commit_weight" json:"commit_weight,omitempty"`
FeePerKw int64 `protobuf:"varint,6,opt,name=fee_per_kw" json:"fee_per_kw,omitempty"`
// / The pending channel
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
// / The height at which this channel will be confirmed
ConfirmationHeight uint32 `protobuf:"varint,2,opt,name=confirmation_height" json:"confirmation_height,omitempty"`
// / The number of blocks until this channel is open
BlocksTillOpen uint32 `protobuf:"varint,3,opt,name=blocks_till_open" json:"blocks_till_open,omitempty"`
// *
// The amount calculated to be paid in fees for the current set of
// commitment transactions. The fee amount is persisted with the channel
// in order to allow the fee amount to be removed and recalculated with
// each channel state update, including updates that happen after a system
// restart.
CommitFee int64 `protobuf:"varint,4,opt,name=commit_fee" json:"commit_fee,omitempty"`
// / The weight of the commitment transaction
CommitWeight int64 `protobuf:"varint,5,opt,name=commit_weight" json:"commit_weight,omitempty"`
// *
// The required number of satoshis per kilo-weight that the requester will
// pay at all times, for both the funding transaction and commitment
// transaction. This value can later be updated once the channel is open.
FeePerKw int64 `protobuf:"varint,6,opt,name=fee_per_kw" json:"fee_per_kw,omitempty"`
}
func (m *PendingChannelResponse_PendingOpenChannel) Reset() {
@ -1671,8 +1793,10 @@ func (m *PendingChannelResponse_PendingOpenChannel) GetFeePerKw() int64 {
}
type PendingChannelResponse_ClosedChannel struct {
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
ClosingTxid string `protobuf:"bytes,2,opt,name=closing_txid" json:"closing_txid,omitempty"`
// / The pending channel to be closed
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
// / The transaction id of the closing transaction
ClosingTxid string `protobuf:"bytes,2,opt,name=closing_txid" json:"closing_txid,omitempty"`
}
func (m *PendingChannelResponse_ClosedChannel) Reset() { *m = PendingChannelResponse_ClosedChannel{} }
@ -1697,11 +1821,16 @@ func (m *PendingChannelResponse_ClosedChannel) GetClosingTxid() string {
}
type PendingChannelResponse_ForceClosedChannel struct {
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
ClosingTxid string `protobuf:"bytes,2,opt,name=closing_txid" json:"closing_txid,omitempty"`
LimboBalance int64 `protobuf:"varint,3,opt,name=limbo_balance" json:"limbo_balance,omitempty"`
MaturityHeight uint32 `protobuf:"varint,4,opt,name=maturity_height" json:"maturity_height,omitempty"`
BlocksTilMaturity uint32 `protobuf:"varint,5,opt,name=blocks_til_maturity" json:"blocks_til_maturity,omitempty"`
// / The pending channel to be force closed
Channel *PendingChannelResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel" json:"channel,omitempty"`
// / The transaction id of the closing transaction
ClosingTxid string `protobuf:"bytes,2,opt,name=closing_txid" json:"closing_txid,omitempty"`
// / The balance in satoshis encumbered in this pending channel
LimboBalance int64 `protobuf:"varint,3,opt,name=limbo_balance" json:"limbo_balance,omitempty"`
// / The height at which funds can be sweeped into the wallet
MaturityHeight uint32 `protobuf:"varint,4,opt,name=maturity_height" json:"maturity_height,omitempty"`
// / Remaining # of blocks until funds can be sweeped into the wallet
BlocksTilMaturity uint32 `protobuf:"varint,5,opt,name=blocks_til_maturity" json:"blocks_til_maturity,omitempty"`
}
func (m *PendingChannelResponse_ForceClosedChannel) Reset() {
@ -1749,6 +1878,7 @@ func (m *PendingChannelResponse_ForceClosedChannel) GetBlocksTilMaturity() uint3
}
type WalletBalanceRequest struct {
// / If only witness outputs should be considered when calculating the wallet's balance
WitnessOnly bool `protobuf:"varint,1,opt,name=witness_only,json=witnessOnly" json:"witness_only,omitempty"`
}
@ -1765,6 +1895,7 @@ func (m *WalletBalanceRequest) GetWitnessOnly() bool {
}
type WalletBalanceResponse struct {
// / The balance of the wallet
Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"`
}
@ -1789,6 +1920,7 @@ func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
type ChannelBalanceResponse struct {
// / Sum of channels balances denominated in satoshis
Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"`
}
@ -1805,8 +1937,10 @@ func (m *ChannelBalanceResponse) GetBalance() int64 {
}
type QueryRoutesRequest struct {
// / The 33-byte hex-encoded public key for the payment destination
PubKey string `protobuf:"bytes,1,opt,name=pub_key,json=pubKey" json:"pub_key,omitempty"`
Amt int64 `protobuf:"varint,2,opt,name=amt" json:"amt,omitempty"`
// / The amount to send expressed in satoshis
Amt int64 `protobuf:"varint,2,opt,name=amt" json:"amt,omitempty"`
}
func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
@ -1845,6 +1979,10 @@ func (m *QueryRoutesResponse) GetRoutes() []*Route {
}
type Hop struct {
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChanId uint64 `protobuf:"varint,1,opt,name=chan_id" json:"chan_id,omitempty"`
ChanCapacity int64 `protobuf:"varint,2,opt,name=chan_capacity" json:"chan_capacity,omitempty"`
AmtToForward int64 `protobuf:"varint,3,opt,name=amt_to_forward" json:"amt_to_forward,omitempty"`
@ -1892,11 +2030,34 @@ func (m *Hop) GetExpiry() uint32 {
return 0
}
// *
// A path through the channel graph which runs over one or more channels in
// succession. This struct carries all the information required to craft the
// Sphinx onion packet, and send the payment along the first hop in the path. A
// route is only selected as valid if all the channels have sufficient capacity to
// carry the initial payment amount after fees are accounted for.
type Route struct {
// *
// The cumulative (final) time lock across the entire route. This is the CLTV
// value that should be extended to the first hop in the route. All other hops
// will decrement the time-lock as advertised, leaving enough time for all
// hops to wait for or present the payment preimage to complete the payment.
TotalTimeLock uint32 `protobuf:"varint,1,opt,name=total_time_lock" json:"total_time_lock,omitempty"`
TotalFees int64 `protobuf:"varint,2,opt,name=total_fees" json:"total_fees,omitempty"`
TotalAmt int64 `protobuf:"varint,3,opt,name=total_amt" json:"total_amt,omitempty"`
Hops []*Hop `protobuf:"bytes,4,rep,name=hops" json:"hops,omitempty"`
// *
// The sum of the fees paid at each hop within the final route. In the case
// of a one-hop payment, this value will be zero as we don't need to pay a fee
// it ourself.
TotalFees int64 `protobuf:"varint,2,opt,name=total_fees" json:"total_fees,omitempty"`
// *
// The total amount of funds required to complete a payment over this route.
// This value includes the cumulative fees at each hop. As a result, the HTLC
// extended to the first-hop in the route will need to have at least this many
// satoshis, otherwise the route will fail at an intermediate node due to an
// insufficient amount of fees.
TotalAmt int64 `protobuf:"varint,3,opt,name=total_amt" json:"total_amt,omitempty"`
// *
// Contains details concerning the specific forwarding details at each hop.
Hops []*Hop `protobuf:"bytes,4,rep,name=hops" json:"hops,omitempty"`
}
func (m *Route) Reset() { *m = Route{} }
@ -1933,6 +2094,7 @@ func (m *Route) GetHops() []*Hop {
}
type NodeInfoRequest struct {
// / The 33-byte hex-encoded compressed public of the target node
PubKey string `protobuf:"bytes,1,opt,name=pub_key,json=pubKey" json:"pub_key,omitempty"`
}
@ -1949,6 +2111,11 @@ func (m *NodeInfoRequest) GetPubKey() string {
}
type NodeInfo struct {
// *
// An individual vertex/node within the channel graph. A node is
// connected to other nodes by one or more channel edges emanating from it. As
// the graph is directed, a node will also have an incoming edge attached to
// it for each outgoing edge.
Node *LightningNode `protobuf:"bytes,1,opt,name=node" json:"node,omitempty"`
NumChannels uint32 `protobuf:"varint,2,opt,name=num_channels" json:"num_channels,omitempty"`
TotalCapacity int64 `protobuf:"varint,3,opt,name=total_capacity" json:"total_capacity,omitempty"`
@ -1980,6 +2147,11 @@ func (m *NodeInfo) GetTotalCapacity() int64 {
return 0
}
// *
// An individual vertex/node within the channel graph. A node is
// connected to other nodes by one or more channel edges emanating from it. As the
// graph is directed, a node will also have an incoming edge attached to it for
// each outgoing edge.
type LightningNode struct {
LastUpdate uint32 `protobuf:"varint,1,opt,name=last_update" json:"last_update,omitempty"`
PubKey string `protobuf:"bytes,2,opt,name=pub_key" json:"pub_key,omitempty"`
@ -2084,7 +2256,17 @@ func (m *RoutingPolicy) GetFeeRateMilliMsat() int64 {
return 0
}
// *
// A fully authenticated channel along with all its unique attributes.
// Once an authenticated channel announcement has been processed on the network,
// then a instance of ChannelEdgeInfo encapsulating the channels attributes is
// stored. The other portions relevant to routing policy of a channel are stored
// within a ChannelEdgePolicy for each direction of the channel.
type ChannelEdge struct {
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChannelId uint64 `protobuf:"varint,1,opt,name=channel_id" json:"channel_id,omitempty"`
ChanPoint string `protobuf:"bytes,2,opt,name=chan_point" json:"chan_point,omitempty"`
LastUpdate uint32 `protobuf:"varint,3,opt,name=last_update" json:"last_update,omitempty"`
@ -2164,9 +2346,12 @@ func (m *ChannelGraphRequest) String() string { return proto.CompactT
func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }
// / Returns a new instance of the directed channel graph.
type ChannelGraph struct {
// / The list of `LightningNode`s in this channel graph
Nodes []*LightningNode `protobuf:"bytes,1,rep,name=nodes" json:"nodes,omitempty"`
Edges []*ChannelEdge `protobuf:"bytes,2,rep,name=edges" json:"edges,omitempty"`
// / The list of `ChannelEdge`s in this channel graph
Edges []*ChannelEdge `protobuf:"bytes,2,rep,name=edges" json:"edges,omitempty"`
}
func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
@ -2189,6 +2374,10 @@ func (m *ChannelGraph) GetEdges() []*ChannelEdge {
}
type ChanInfoRequest struct {
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChanId uint64 `protobuf:"varint,1,opt,name=chan_id,json=chanId" json:"chan_id,omitempty"`
}
@ -2389,6 +2578,10 @@ func (m *NodeUpdate) GetAlias() string {
}
type ChannelEdgeUpdate struct {
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChanId uint64 `protobuf:"varint,1,opt,name=chan_id,json=chanId" json:"chan_id,omitempty"`
ChanPoint *ChannelPoint `protobuf:"bytes,2,opt,name=chan_point,json=chanPoint" json:"chan_point,omitempty"`
Capacity int64 `protobuf:"varint,3,opt,name=capacity" json:"capacity,omitempty"`
@ -2445,6 +2638,10 @@ func (m *ChannelEdgeUpdate) GetConnectingNode() string {
}
type ClosedChannelUpdate struct {
// *
// The unique channel ID for the channel. The first 3 bytes are the block
// height, the next 3 the index within the block, and the last 2 bytes are the
// output index for the channel.
ChanId uint64 `protobuf:"varint,1,opt,name=chan_id,json=chanId" json:"chan_id,omitempty"`
Capacity int64 `protobuf:"varint,2,opt,name=capacity" json:"capacity,omitempty"`
ClosedHeight uint32 `protobuf:"varint,3,opt,name=closed_height,json=closedHeight" json:"closed_height,omitempty"`
@ -2509,14 +2706,28 @@ func (*SetAliasResponse) ProtoMessage() {}
func (*SetAliasResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
type Invoice struct {
Memo string `protobuf:"bytes,1,opt,name=memo" json:"memo,omitempty"`
Receipt []byte `protobuf:"bytes,2,opt,name=receipt,proto3" json:"receipt,omitempty"`
RPreimage []byte `protobuf:"bytes,3,opt,name=r_preimage,proto3" json:"r_preimage,omitempty"`
RHash []byte `protobuf:"bytes,4,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
Value int64 `protobuf:"varint,5,opt,name=value" json:"value,omitempty"`
Settled bool `protobuf:"varint,6,opt,name=settled" json:"settled,omitempty"`
CreationDate int64 `protobuf:"varint,7,opt,name=creation_date" json:"creation_date,omitempty"`
SettleDate int64 `protobuf:"varint,8,opt,name=settle_date" json:"settle_date,omitempty"`
// / An optional memo to attach along with the invoice
Memo string `protobuf:"bytes,1,opt,name=memo" json:"memo,omitempty"`
// / An optional cryptographic receipt of payment
Receipt []byte `protobuf:"bytes,2,opt,name=receipt,proto3" json:"receipt,omitempty"`
// *
// The hex-encoded preimage (32 byte) which will allow settling an incoming
// HTLC payable to this preimage
RPreimage []byte `protobuf:"bytes,3,opt,name=r_preimage,proto3" json:"r_preimage,omitempty"`
// / The hash of the preimage
RHash []byte `protobuf:"bytes,4,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
// / The value of this invoice in satoshis
Value int64 `protobuf:"varint,5,opt,name=value" json:"value,omitempty"`
// / Whether this invoice has been fulfilled
Settled bool `protobuf:"varint,6,opt,name=settled" json:"settled,omitempty"`
// / When this invoice was created
CreationDate int64 `protobuf:"varint,7,opt,name=creation_date" json:"creation_date,omitempty"`
// / When this invoice was settled
SettleDate int64 `protobuf:"varint,8,opt,name=settle_date" json:"settle_date,omitempty"`
// *
// A bare-bones invoice for a payment within the Lightning Network. With the
// details of the invoice, the sender has all the data necessary to send a
// payment to the recipient.
PaymentRequest string `protobuf:"bytes,9,opt,name=payment_request" json:"payment_request,omitempty"`
}
@ -2589,7 +2800,11 @@ func (m *Invoice) GetPaymentRequest() string {
}
type AddInvoiceResponse struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
// *
// A bare-bones invoice for a payment within the Lightning Network. With the
// details of the invoice, the sender has all the data necessary to send a
// payment to the recipient.
PaymentRequest string `protobuf:"bytes,2,opt,name=payment_request" json:"payment_request,omitempty"`
}
@ -2613,8 +2828,12 @@ func (m *AddInvoiceResponse) GetPaymentRequest() string {
}
type PaymentHash struct {
// *
// The hex-encoded payment hash of the invoice to be looked up. The passed
// payment hash must be exactly 32 bytes, otherwise an error is returned.
RHashStr string `protobuf:"bytes,1,opt,name=r_hash_str" json:"r_hash_str,omitempty"`
RHash []byte `protobuf:"bytes,2,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
// / The payment hash of the invoice to be looked up.
RHash []byte `protobuf:"bytes,2,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
}
func (m *PaymentHash) Reset() { *m = PaymentHash{} }
@ -2637,6 +2856,7 @@ func (m *PaymentHash) GetRHash() []byte {
}
type ListInvoiceRequest struct {
// / Toggles if all invoices should be returned, or only those that are currently unsettled.
PendingOnly bool `protobuf:"varint,1,opt,name=pending_only,json=pendingOnly" json:"pending_only,omitempty"`
}
@ -2677,11 +2897,16 @@ func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
type Payment struct {
PaymentHash string `protobuf:"bytes,1,opt,name=payment_hash" json:"payment_hash,omitempty"`
Value int64 `protobuf:"varint,2,opt,name=value" json:"value,omitempty"`
CreationDate int64 `protobuf:"varint,3,opt,name=creation_date" json:"creation_date,omitempty"`
Path []string `protobuf:"bytes,4,rep,name=path" json:"path,omitempty"`
Fee int64 `protobuf:"varint,5,opt,name=fee" json:"fee,omitempty"`
// / The payment hash
PaymentHash string `protobuf:"bytes,1,opt,name=payment_hash" json:"payment_hash,omitempty"`
// / The value of the payment in satoshis
Value int64 `protobuf:"varint,2,opt,name=value" json:"value,omitempty"`
// / The date of this payment
CreationDate int64 `protobuf:"varint,3,opt,name=creation_date" json:"creation_date,omitempty"`
// / The path this payment took
Path []string `protobuf:"bytes,4,rep,name=path" json:"path,omitempty"`
// / The fee paid for this payment in satoshis
Fee int64 `protobuf:"varint,5,opt,name=fee" json:"fee,omitempty"`
}
func (m *Payment) Reset() { *m = Payment{} }
@ -2733,6 +2958,7 @@ func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
type ListPaymentsResponse struct {
// / The list of payments
Payments []*Payment `protobuf:"bytes,1,rep,name=payments" json:"payments,omitempty"`
}
@ -2805,6 +3031,7 @@ func (m *DebugLevelResponse) GetSubSystems() string {
}
type PayReqString struct {
// / The payment request string to be decoded
PayReq string `protobuf:"bytes,1,opt,name=pay_req,json=payReq" json:"pay_req,omitempty"`
}
@ -2852,6 +3079,221 @@ func (m *PayReq) GetNumSatoshis() int64 {
return 0
}
type FeeReportRequest struct {
}
func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
type ChannelFeeReport struct {
// / The channel that this fee report belongs to.
ChanPoint string `protobuf:"bytes,1,opt,name=chan_point,json=channel_point" json:"chan_point,omitempty"`
// / The base fee charged regardless of the number of milli-satoshis sent.
BaseFeeMsat int64 `protobuf:"varint,2,opt,name=base_fee_msat" json:"base_fee_msat,omitempty"`
// / The amount charged per milli-satoshis transferred expressed in millionths of a satoshi.
FeePerMil int64 `protobuf:"varint,3,opt,name=fee_per_mil" json:"fee_per_mil,omitempty"`
// / The effective fee rate in milli-satoshis. Computed by dividing the fee_per_mil value by 1 million.
FeeRate float64 `protobuf:"fixed64,4,opt,name=fee_rate" json:"fee_rate,omitempty"`
}
func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
func (m *ChannelFeeReport) GetChanPoint() string {
if m != nil {
return m.ChanPoint
}
return ""
}
func (m *ChannelFeeReport) GetBaseFeeMsat() int64 {
if m != nil {
return m.BaseFeeMsat
}
return 0
}
func (m *ChannelFeeReport) GetFeePerMil() int64 {
if m != nil {
return m.FeePerMil
}
return 0
}
func (m *ChannelFeeReport) GetFeeRate() float64 {
if m != nil {
return m.FeeRate
}
return 0
}
type FeeReportResponse struct {
// / An array of channel fee reports which describes the current fee schedule for each channel.
ChannelFees []*ChannelFeeReport `protobuf:"bytes,1,rep,name=channel_fees" json:"channel_fees,omitempty"`
}
func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
func (m *FeeReportResponse) GetChannelFees() []*ChannelFeeReport {
if m != nil {
return m.ChannelFees
}
return nil
}
type FeeUpdateRequest struct {
// Types that are valid to be assigned to Scope:
// *FeeUpdateRequest_Global
// *FeeUpdateRequest_ChanPoint
Scope isFeeUpdateRequest_Scope `protobuf_oneof:"scope"`
// / The base fee charged regardless of the number of milli-satoshis sent.
BaseFeeMsat int64 `protobuf:"varint,3,opt,name=base_fee_msat" json:"base_fee_msat,omitempty"`
// / The effective fee rate in milli-satoshis. The precision of this value goes up to 6 decimal places, so 1e-6.
FeeRate float64 `protobuf:"fixed64,4,opt,name=fee_rate" json:"fee_rate,omitempty"`
}
func (m *FeeUpdateRequest) Reset() { *m = FeeUpdateRequest{} }
func (m *FeeUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*FeeUpdateRequest) ProtoMessage() {}
func (*FeeUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
type isFeeUpdateRequest_Scope interface {
isFeeUpdateRequest_Scope()
}
type FeeUpdateRequest_Global struct {
Global bool `protobuf:"varint,1,opt,name=global,oneof"`
}
type FeeUpdateRequest_ChanPoint struct {
ChanPoint *ChannelPoint `protobuf:"bytes,2,opt,name=chan_point,oneof"`
}
func (*FeeUpdateRequest_Global) isFeeUpdateRequest_Scope() {}
func (*FeeUpdateRequest_ChanPoint) isFeeUpdateRequest_Scope() {}
func (m *FeeUpdateRequest) GetScope() isFeeUpdateRequest_Scope {
if m != nil {
return m.Scope
}
return nil
}
func (m *FeeUpdateRequest) GetGlobal() bool {
if x, ok := m.GetScope().(*FeeUpdateRequest_Global); ok {
return x.Global
}
return false
}
func (m *FeeUpdateRequest) GetChanPoint() *ChannelPoint {
if x, ok := m.GetScope().(*FeeUpdateRequest_ChanPoint); ok {
return x.ChanPoint
}
return nil
}
func (m *FeeUpdateRequest) GetBaseFeeMsat() int64 {
if m != nil {
return m.BaseFeeMsat
}
return 0
}
func (m *FeeUpdateRequest) GetFeeRate() float64 {
if m != nil {
return m.FeeRate
}
return 0
}
// XXX_OneofFuncs is for the internal use of the proto package.
func (*FeeUpdateRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _FeeUpdateRequest_OneofMarshaler, _FeeUpdateRequest_OneofUnmarshaler, _FeeUpdateRequest_OneofSizer, []interface{}{
(*FeeUpdateRequest_Global)(nil),
(*FeeUpdateRequest_ChanPoint)(nil),
}
}
func _FeeUpdateRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
m := msg.(*FeeUpdateRequest)
// scope
switch x := m.Scope.(type) {
case *FeeUpdateRequest_Global:
t := uint64(0)
if x.Global {
t = 1
}
b.EncodeVarint(1<<3 | proto.WireVarint)
b.EncodeVarint(t)
case *FeeUpdateRequest_ChanPoint:
b.EncodeVarint(2<<3 | proto.WireBytes)
if err := b.EncodeMessage(x.ChanPoint); err != nil {
return err
}
case nil:
default:
return fmt.Errorf("FeeUpdateRequest.Scope has unexpected type %T", x)
}
return nil
}
func _FeeUpdateRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
m := msg.(*FeeUpdateRequest)
switch tag {
case 1: // scope.global
if wire != proto.WireVarint {
return true, proto.ErrInternalBadWireType
}
x, err := b.DecodeVarint()
m.Scope = &FeeUpdateRequest_Global{x != 0}
return true, err
case 2: // scope.chan_point
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(ChannelPoint)
err := b.DecodeMessage(msg)
m.Scope = &FeeUpdateRequest_ChanPoint{msg}
return true, err
default:
return false, nil
}
}
func _FeeUpdateRequest_OneofSizer(msg proto.Message) (n int) {
m := msg.(*FeeUpdateRequest)
// scope
switch x := m.Scope.(type) {
case *FeeUpdateRequest_Global:
n += proto.SizeVarint(1<<3 | proto.WireVarint)
n += 1
case *FeeUpdateRequest_ChanPoint:
s := proto.Size(x.ChanPoint)
n += proto.SizeVarint(2<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
}
return n
}
type FeeUpdateResponse struct {
}
func (m *FeeUpdateResponse) Reset() { *m = FeeUpdateResponse{} }
func (m *FeeUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*FeeUpdateResponse) ProtoMessage() {}
func (*FeeUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
func init() {
proto.RegisterType((*Transaction)(nil), "lnrpc.Transaction")
proto.RegisterType((*GetTransactionsRequest)(nil), "lnrpc.GetTransactionsRequest")
@ -2941,6 +3383,11 @@ func init() {
proto.RegisterType((*DebugLevelResponse)(nil), "lnrpc.DebugLevelResponse")
proto.RegisterType((*PayReqString)(nil), "lnrpc.PayReqString")
proto.RegisterType((*PayReq)(nil), "lnrpc.PayReq")
proto.RegisterType((*FeeReportRequest)(nil), "lnrpc.FeeReportRequest")
proto.RegisterType((*ChannelFeeReport)(nil), "lnrpc.ChannelFeeReport")
proto.RegisterType((*FeeReportResponse)(nil), "lnrpc.FeeReportResponse")
proto.RegisterType((*FeeUpdateRequest)(nil), "lnrpc.FeeUpdateRequest")
proto.RegisterType((*FeeUpdateResponse)(nil), "lnrpc.FeeUpdateResponse")
proto.RegisterEnum("lnrpc.NewAddressRequest_AddressType", NewAddressRequest_AddressType_name, NewAddressRequest_AddressType_value)
}
@ -2955,44 +3402,192 @@ const _ = grpc.SupportPackageIsVersion4
// Client API for Lightning service
type LightningClient interface {
// * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum.
WalletBalance(ctx context.Context, in *WalletBalanceRequest, opts ...grpc.CallOption) (*WalletBalanceResponse, error)
// * lncli: `channelbalance`
// ChannelBalance returns the total funds available across all open channels
// in satoshis.
ChannelBalance(ctx context.Context, in *ChannelBalanceRequest, opts ...grpc.CallOption) (*ChannelBalanceResponse, error)
// * lncli: `listchaintxns`
// GetTransactions returns a list describing all the known transactions
// relevant to the wallet.
GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*TransactionDetails, error)
// * lncli: `sendcoins`
// SendCoins executes a request to send coins to a particular address. Unlike
// SendMany, this RPC call only allows creating a single output at a time.
SendCoins(ctx context.Context, in *SendCoinsRequest, opts ...grpc.CallOption) (*SendCoinsResponse, error)
// *
// SubscribeTransactions creates a uni-directional stream from the server to
// the client in which any newly discovered transactions relevant to the
// wallet are sent over.
SubscribeTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (Lightning_SubscribeTransactionsClient, error)
// * lncli: `sendmany`
// SendMany handles a request for a transaction that creates multiple specified
// outputs in parallel.
SendMany(ctx context.Context, in *SendManyRequest, opts ...grpc.CallOption) (*SendManyResponse, error)
// * lncli: `newaddress`
// NewAddress creates a new address under control of the local wallet.
NewAddress(ctx context.Context, in *NewAddressRequest, opts ...grpc.CallOption) (*NewAddressResponse, error)
// *
// NewWitnessAddress creates a new witness address under control of the local wallet.
NewWitnessAddress(ctx context.Context, in *NewWitnessAddressRequest, opts ...grpc.CallOption) (*NewAddressResponse, error)
// * lncli: `signmessage`
// SignMessage signs a message with this node's private key. The returned
// signature string is `zbase32` encoded and pubkey recoverable, meaning that
// only the message digest and signature are needed for verification.
SignMessage(ctx context.Context, in *SignMessageRequest, opts ...grpc.CallOption) (*SignMessageResponse, error)
// * lncli: `verifymessage`
// VerifyMessage verifies a signature over a msg. The signature must be
// zbase32 encoded and signed by an active node in the resident node's
// channel database. In addition to returning the validity of the signature,
// VerifyMessage also returns the recovered pubkey from the signature.
VerifyMessage(ctx context.Context, in *VerifyMessageRequest, opts ...grpc.CallOption) (*VerifyMessageResponse, error)
// * lncli: `connect`
// ConnectPeer attempts to establish a connection to a remote peer. This is at
// the networking level, and is used for communication between nodes. This is
// distinct from establishing a channel with a peer.
ConnectPeer(ctx context.Context, in *ConnectPeerRequest, opts ...grpc.CallOption) (*ConnectPeerResponse, error)
// * lncli: `disconnect`
// DisconnectPeer attempts to disconnect one peer from another identified by a
// given pubKey. In the case that we currently have a pending or active channel
// with the target peer, then this action will be not be allowed.
DisconnectPeer(ctx context.Context, in *DisconnectPeerRequest, opts ...grpc.CallOption) (*DisconnectPeerResponse, error)
// * lncli: `listpeers`
// ListPeers returns a verbose listing of all currently active peers.
ListPeers(ctx context.Context, in *ListPeersRequest, opts ...grpc.CallOption) (*ListPeersResponse, error)
// * lncli: `getinfo`
// GetInfo returns general information concerning the lightning node including
// it's identity pubkey, alias, the chains it is connected to, and information
// concerning the number of open+pending channels.
GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error)
// TODO(roasbeef): merge with below with bool?
// * lncli: `pendingchannels`
// PendingChannels returns a list of all the channels that are currently
// considered "pending". A channel is pending if it has finished the funding
// workflow and is waiting for confirmations for the funding txn, or is in the
// process of closure, either initiated cooperatively or non-cooperatively.
PendingChannels(ctx context.Context, in *PendingChannelRequest, opts ...grpc.CallOption) (*PendingChannelResponse, error)
// * lncli: `listchannels`
// ListChannels returns a description of all the open channels that this node
// is a participant in.
ListChannels(ctx context.Context, in *ListChannelsRequest, opts ...grpc.CallOption) (*ListChannelsResponse, error)
// *
// OpenChannelSync is a synchronous version of the OpenChannel RPC call. This
// call is meant to be consumed by clients to the REST proxy. As with all
// other sync calls, all byte slices are intended to be populated as hex
// encoded strings.
OpenChannelSync(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (*ChannelPoint, error)
// * lncli: `openchannel`
// OpenChannel attempts to open a singly funded channel specified in the
// request to a remote peer.
OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error)
// * lncli: `closechannel`
// CloseChannel attempts to close an active channel identified by its channel
// outpoint (ChannelPoint). The actions of this method can additionally be
// augmented to attempt a force close after a timeout period in the case of an
// inactive peer.
CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error)
// * lncli: `sendpayment`
// SendPayment dispatches a bi-directional streaming RPC for sending payments
// through the Lightning Network. A single RPC invocation creates a persistent
// bi-directional stream allowing clients to rapidly send payments through the
// Lightning Network with a single persistent connection.
SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error)
// *
// SendPaymentSync is the synchronous non-streaming version of SendPayment.
// This RPC is intended to be consumed by clients of the REST proxy.
// Additionally, this RPC expects the destination's public key and the payment
// hash (if any) to be encoded as hex strings.
SendPaymentSync(ctx context.Context, in *SendRequest, opts ...grpc.CallOption) (*SendResponse, error)
// * lncli: `addinvoice`
// AddInvoice attempts to add a new invoice to the invoice database. Any
// duplicated invoices are rejected, therefore all invoices *must* have a
// unique payment preimage.
AddInvoice(ctx context.Context, in *Invoice, opts ...grpc.CallOption) (*AddInvoiceResponse, error)
// * lncli: `listinvoices`
// ListInvoices returns a list of all the invoices currently stored within the
// database. Any active debug invoices are ignored.
ListInvoices(ctx context.Context, in *ListInvoiceRequest, opts ...grpc.CallOption) (*ListInvoiceResponse, error)
// * lncli: `lookupinvoice`
// LookupInvoice attemps to look up an invoice according to its payment hash.
// The passed payment hash *must* be exactly 32 bytes, if not, an error is
// returned.
LookupInvoice(ctx context.Context, in *PaymentHash, opts ...grpc.CallOption) (*Invoice, error)
// *
// SubscribeInvoices returns a uni-directional stream (sever -> client) for
// notifying the client of newly added/settled invoices.
SubscribeInvoices(ctx context.Context, in *InvoiceSubscription, opts ...grpc.CallOption) (Lightning_SubscribeInvoicesClient, error)
// * lncli: `decodepayreq`
// DecodePayReq takes an encoded payment request string and attempts to decode
// it, returning a full description of the conditions encoded within the
// payment request.
DecodePayReq(ctx context.Context, in *PayReqString, opts ...grpc.CallOption) (*PayReq, error)
// * lncli: `listpayments`
// ListPayments returns a list of all outgoing payments.
ListPayments(ctx context.Context, in *ListPaymentsRequest, opts ...grpc.CallOption) (*ListPaymentsResponse, error)
// *
// DeleteAllPayments deletes all outgoing payments from DB.
DeleteAllPayments(ctx context.Context, in *DeleteAllPaymentsRequest, opts ...grpc.CallOption) (*DeleteAllPaymentsResponse, error)
// * lncli: `describegraph`
// DescribeGraph returns a description of the latest graph state from the
// point of view of the node. The graph information is partitioned into two
// components: all the nodes/vertexes, and all the edges that connect the
// vertexes themselves. As this is a directed graph, the edges also contain
// the node directional specific routing policy which includes: the time lock
// delta, fee information, etc.
DescribeGraph(ctx context.Context, in *ChannelGraphRequest, opts ...grpc.CallOption) (*ChannelGraph, error)
// * lncli: `getchaninfo`
// GetChanInfo returns the latest authenticated network announcement for the
// given channel identified by its channel ID: an 8-byte integer which
// uniquely identifies the location of transaction's funding output within the
// blockchain.
GetChanInfo(ctx context.Context, in *ChanInfoRequest, opts ...grpc.CallOption) (*ChannelEdge, error)
// * lncli: `getnodeinfo`
// GetNodeInfo returns the latest advertised, aggregated, and authenticated
// channel information for the specified node identified by its public key.
GetNodeInfo(ctx context.Context, in *NodeInfoRequest, opts ...grpc.CallOption) (*NodeInfo, error)
// * lncli: `queryroutes`
// QueryRoutes attempts to query the daemon's Channel Router for a possible
// route to a target destination capable of carrying a specific amount of
// satoshis. The retuned route contains the full details required to craft and
// send an HTLC, also including the necessary information that should be
// present within the Sphinx packet encapsualted within the HTLC.
QueryRoutes(ctx context.Context, in *QueryRoutesRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error)
// * lncli: `getnetworkinfo`
// GetNetworkInfo returns some basic stats about the known channel graph from
// the point of view of the node.
GetNetworkInfo(ctx context.Context, in *NetworkInfoRequest, opts ...grpc.CallOption) (*NetworkInfo, error)
// * lncli: `stop`
// StopDaemon will send a shutdown request to the interrupt handler, triggering
// a graceful shutdown of the daemon.
StopDaemon(ctx context.Context, in *StopRequest, opts ...grpc.CallOption) (*StopResponse, error)
// *
// SubscribeChannelGraph launches a streaming RPC that allows the caller to
// receive notifications upon any changes to the channel graph topology from
// the point of view of the responding node. Events notified include: new
// nodes coming online, nodes updating their authenticated attributes, new
// channels being advertised, updates in the routing policy for a directional
// channel edge, and when channels are closed on-chain.
SubscribeChannelGraph(ctx context.Context, in *GraphTopologySubscription, opts ...grpc.CallOption) (Lightning_SubscribeChannelGraphClient, error)
// *
// SetAlias sets the alias for this node; e.g. "alice"
SetAlias(ctx context.Context, in *SetAliasRequest, opts ...grpc.CallOption) (*SetAliasResponse, error)
// * lncli: `debuglevel`
// DebugLevel allows a caller to programmatically set the logging verbosity of
// lnd. The logging can be targeted according to a coarse daemon-wide logging
// level, or in a granular fashion to specify the logging for a target
// sub-system.
DebugLevel(ctx context.Context, in *DebugLevelRequest, opts ...grpc.CallOption) (*DebugLevelResponse, error)
// * lncli: `feereport`
// FeeReport allows the caller to obtain a report detailing the current fee
// schedule enforced by the node globally for each channel.
FeeReport(ctx context.Context, in *FeeReportRequest, opts ...grpc.CallOption) (*FeeReportResponse, error)
// * lncli: `updatefees`
// UpdateFees allows the caller to update the fee schedule for all channels
// globally, or a particular channel.
UpdateFees(ctx context.Context, in *FeeUpdateRequest, opts ...grpc.CallOption) (*FeeUpdateResponse, error)
}
type lightningClient struct {
@ -3473,47 +4068,213 @@ func (c *lightningClient) DebugLevel(ctx context.Context, in *DebugLevelRequest,
return out, nil
}
func (c *lightningClient) FeeReport(ctx context.Context, in *FeeReportRequest, opts ...grpc.CallOption) (*FeeReportResponse, error) {
out := new(FeeReportResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/FeeReport", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) UpdateFees(ctx context.Context, in *FeeUpdateRequest, opts ...grpc.CallOption) (*FeeUpdateResponse, error) {
out := new(FeeUpdateResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/UpdateFees", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for Lightning service
type LightningServer interface {
// * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum.
WalletBalance(context.Context, *WalletBalanceRequest) (*WalletBalanceResponse, error)
// * lncli: `channelbalance`
// ChannelBalance returns the total funds available across all open channels
// in satoshis.
ChannelBalance(context.Context, *ChannelBalanceRequest) (*ChannelBalanceResponse, error)
// * lncli: `listchaintxns`
// GetTransactions returns a list describing all the known transactions
// relevant to the wallet.
GetTransactions(context.Context, *GetTransactionsRequest) (*TransactionDetails, error)
// * lncli: `sendcoins`
// SendCoins executes a request to send coins to a particular address. Unlike
// SendMany, this RPC call only allows creating a single output at a time.
SendCoins(context.Context, *SendCoinsRequest) (*SendCoinsResponse, error)
// *
// SubscribeTransactions creates a uni-directional stream from the server to
// the client in which any newly discovered transactions relevant to the
// wallet are sent over.
SubscribeTransactions(*GetTransactionsRequest, Lightning_SubscribeTransactionsServer) error
// * lncli: `sendmany`
// SendMany handles a request for a transaction that creates multiple specified
// outputs in parallel.
SendMany(context.Context, *SendManyRequest) (*SendManyResponse, error)
// * lncli: `newaddress`
// NewAddress creates a new address under control of the local wallet.
NewAddress(context.Context, *NewAddressRequest) (*NewAddressResponse, error)
// *
// NewWitnessAddress creates a new witness address under control of the local wallet.
NewWitnessAddress(context.Context, *NewWitnessAddressRequest) (*NewAddressResponse, error)
// * lncli: `signmessage`
// SignMessage signs a message with this node's private key. The returned
// signature string is `zbase32` encoded and pubkey recoverable, meaning that
// only the message digest and signature are needed for verification.
SignMessage(context.Context, *SignMessageRequest) (*SignMessageResponse, error)
// * lncli: `verifymessage`
// VerifyMessage verifies a signature over a msg. The signature must be
// zbase32 encoded and signed by an active node in the resident node's
// channel database. In addition to returning the validity of the signature,
// VerifyMessage also returns the recovered pubkey from the signature.
VerifyMessage(context.Context, *VerifyMessageRequest) (*VerifyMessageResponse, error)
// * lncli: `connect`
// ConnectPeer attempts to establish a connection to a remote peer. This is at
// the networking level, and is used for communication between nodes. This is
// distinct from establishing a channel with a peer.
ConnectPeer(context.Context, *ConnectPeerRequest) (*ConnectPeerResponse, error)
// * lncli: `disconnect`
// DisconnectPeer attempts to disconnect one peer from another identified by a
// given pubKey. In the case that we currently have a pending or active channel
// with the target peer, then this action will be not be allowed.
DisconnectPeer(context.Context, *DisconnectPeerRequest) (*DisconnectPeerResponse, error)
// * lncli: `listpeers`
// ListPeers returns a verbose listing of all currently active peers.
ListPeers(context.Context, *ListPeersRequest) (*ListPeersResponse, error)
// * lncli: `getinfo`
// GetInfo returns general information concerning the lightning node including
// it's identity pubkey, alias, the chains it is connected to, and information
// concerning the number of open+pending channels.
GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error)
// TODO(roasbeef): merge with below with bool?
// * lncli: `pendingchannels`
// PendingChannels returns a list of all the channels that are currently
// considered "pending". A channel is pending if it has finished the funding
// workflow and is waiting for confirmations for the funding txn, or is in the
// process of closure, either initiated cooperatively or non-cooperatively.
PendingChannels(context.Context, *PendingChannelRequest) (*PendingChannelResponse, error)
// * lncli: `listchannels`
// ListChannels returns a description of all the open channels that this node
// is a participant in.
ListChannels(context.Context, *ListChannelsRequest) (*ListChannelsResponse, error)
// *
// OpenChannelSync is a synchronous version of the OpenChannel RPC call. This
// call is meant to be consumed by clients to the REST proxy. As with all
// other sync calls, all byte slices are intended to be populated as hex
// encoded strings.
OpenChannelSync(context.Context, *OpenChannelRequest) (*ChannelPoint, error)
// * lncli: `openchannel`
// OpenChannel attempts to open a singly funded channel specified in the
// request to a remote peer.
OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error
// * lncli: `closechannel`
// CloseChannel attempts to close an active channel identified by its channel
// outpoint (ChannelPoint). The actions of this method can additionally be
// augmented to attempt a force close after a timeout period in the case of an
// inactive peer.
CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error
// * lncli: `sendpayment`
// SendPayment dispatches a bi-directional streaming RPC for sending payments
// through the Lightning Network. A single RPC invocation creates a persistent
// bi-directional stream allowing clients to rapidly send payments through the
// Lightning Network with a single persistent connection.
SendPayment(Lightning_SendPaymentServer) error
// *
// SendPaymentSync is the synchronous non-streaming version of SendPayment.
// This RPC is intended to be consumed by clients of the REST proxy.
// Additionally, this RPC expects the destination's public key and the payment
// hash (if any) to be encoded as hex strings.
SendPaymentSync(context.Context, *SendRequest) (*SendResponse, error)
// * lncli: `addinvoice`
// AddInvoice attempts to add a new invoice to the invoice database. Any
// duplicated invoices are rejected, therefore all invoices *must* have a
// unique payment preimage.
AddInvoice(context.Context, *Invoice) (*AddInvoiceResponse, error)
// * lncli: `listinvoices`
// ListInvoices returns a list of all the invoices currently stored within the
// database. Any active debug invoices are ignored.
ListInvoices(context.Context, *ListInvoiceRequest) (*ListInvoiceResponse, error)
// * lncli: `lookupinvoice`
// LookupInvoice attemps to look up an invoice according to its payment hash.
// The passed payment hash *must* be exactly 32 bytes, if not, an error is
// returned.
LookupInvoice(context.Context, *PaymentHash) (*Invoice, error)
// *
// SubscribeInvoices returns a uni-directional stream (sever -> client) for
// notifying the client of newly added/settled invoices.
SubscribeInvoices(*InvoiceSubscription, Lightning_SubscribeInvoicesServer) error
// * lncli: `decodepayreq`
// DecodePayReq takes an encoded payment request string and attempts to decode
// it, returning a full description of the conditions encoded within the
// payment request.
DecodePayReq(context.Context, *PayReqString) (*PayReq, error)
// * lncli: `listpayments`
// ListPayments returns a list of all outgoing payments.
ListPayments(context.Context, *ListPaymentsRequest) (*ListPaymentsResponse, error)
// *
// DeleteAllPayments deletes all outgoing payments from DB.
DeleteAllPayments(context.Context, *DeleteAllPaymentsRequest) (*DeleteAllPaymentsResponse, error)
// * lncli: `describegraph`
// DescribeGraph returns a description of the latest graph state from the
// point of view of the node. The graph information is partitioned into two
// components: all the nodes/vertexes, and all the edges that connect the
// vertexes themselves. As this is a directed graph, the edges also contain
// the node directional specific routing policy which includes: the time lock
// delta, fee information, etc.
DescribeGraph(context.Context, *ChannelGraphRequest) (*ChannelGraph, error)
// * lncli: `getchaninfo`
// GetChanInfo returns the latest authenticated network announcement for the
// given channel identified by its channel ID: an 8-byte integer which
// uniquely identifies the location of transaction's funding output within the
// blockchain.
GetChanInfo(context.Context, *ChanInfoRequest) (*ChannelEdge, error)
// * lncli: `getnodeinfo`
// GetNodeInfo returns the latest advertised, aggregated, and authenticated
// channel information for the specified node identified by its public key.
GetNodeInfo(context.Context, *NodeInfoRequest) (*NodeInfo, error)
// * lncli: `queryroutes`
// QueryRoutes attempts to query the daemon's Channel Router for a possible
// route to a target destination capable of carrying a specific amount of
// satoshis. The retuned route contains the full details required to craft and
// send an HTLC, also including the necessary information that should be
// present within the Sphinx packet encapsualted within the HTLC.
QueryRoutes(context.Context, *QueryRoutesRequest) (*QueryRoutesResponse, error)
// * lncli: `getnetworkinfo`
// GetNetworkInfo returns some basic stats about the known channel graph from
// the point of view of the node.
GetNetworkInfo(context.Context, *NetworkInfoRequest) (*NetworkInfo, error)
// * lncli: `stop`
// StopDaemon will send a shutdown request to the interrupt handler, triggering
// a graceful shutdown of the daemon.
StopDaemon(context.Context, *StopRequest) (*StopResponse, error)
// *
// SubscribeChannelGraph launches a streaming RPC that allows the caller to
// receive notifications upon any changes to the channel graph topology from
// the point of view of the responding node. Events notified include: new
// nodes coming online, nodes updating their authenticated attributes, new
// channels being advertised, updates in the routing policy for a directional
// channel edge, and when channels are closed on-chain.
SubscribeChannelGraph(*GraphTopologySubscription, Lightning_SubscribeChannelGraphServer) error
// *
// SetAlias sets the alias for this node; e.g. "alice"
SetAlias(context.Context, *SetAliasRequest) (*SetAliasResponse, error)
// * lncli: `debuglevel`
// DebugLevel allows a caller to programmatically set the logging verbosity of
// lnd. The logging can be targeted according to a coarse daemon-wide logging
// level, or in a granular fashion to specify the logging for a target
// sub-system.
DebugLevel(context.Context, *DebugLevelRequest) (*DebugLevelResponse, error)
// * lncli: `feereport`
// FeeReport allows the caller to obtain a report detailing the current fee
// schedule enforced by the node globally for each channel.
FeeReport(context.Context, *FeeReportRequest) (*FeeReportResponse, error)
// * lncli: `updatefees`
// UpdateFees allows the caller to update the fee schedule for all channels
// globally, or a particular channel.
UpdateFees(context.Context, *FeeUpdateRequest) (*FeeUpdateResponse, error)
}
func RegisterLightningServer(s *grpc.Server, srv LightningServer) {
@ -4209,6 +4970,42 @@ func _Lightning_DebugLevel_Handler(srv interface{}, ctx context.Context, dec fun
return interceptor(ctx, in, info, handler)
}
func _Lightning_FeeReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FeeReportRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).FeeReport(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/FeeReport",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).FeeReport(ctx, req.(*FeeReportRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_UpdateFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FeeUpdateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).UpdateFees(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/UpdateFees",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).UpdateFees(ctx, req.(*FeeUpdateRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Lightning_serviceDesc = grpc.ServiceDesc{
ServiceName: "lnrpc.Lightning",
HandlerType: (*LightningServer)(nil),
@ -4337,6 +5134,14 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "DebugLevel",
Handler: _Lightning_DebugLevel_Handler,
},
{
MethodName: "FeeReport",
Handler: _Lightning_FeeReport_Handler,
},
{
MethodName: "UpdateFees",
Handler: _Lightning_UpdateFees_Handler,
},
},
Streams: []grpc.StreamDesc{
{
@ -4377,278 +5182,288 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 4354 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0xcd, 0x6f, 0x1c, 0xc9,
0x75, 0x57, 0x0f, 0x87, 0xd4, 0xcc, 0x9b, 0x19, 0x0e, 0x59, 0xfc, 0x1a, 0x8d, 0xb4, 0xb2, 0xb6,
0xbc, 0x58, 0x31, 0xb2, 0x41, 0x52, 0x74, 0xb2, 0x91, 0x57, 0x49, 0x16, 0x5c, 0x51, 0x12, 0x37,
0xe6, 0x6a, 0xe9, 0xa6, 0x76, 0x95, 0xd8, 0x08, 0x3a, 0xcd, 0xe9, 0xe2, 0xb0, 0xad, 0x9e, 0xee,
0xde, 0xee, 0x1a, 0x52, 0x63, 0x81, 0x40, 0xb0, 0x71, 0x90, 0x4b, 0x02, 0x23, 0x70, 0x80, 0xdc,
0x0c, 0x03, 0x39, 0xe7, 0x92, 0x6b, 0xfe, 0x83, 0x20, 0x01, 0x02, 0xf8, 0x94, 0x4b, 0x4e, 0xf9,
0x07, 0x72, 0xc8, 0x3d, 0xa8, 0xcf, 0xae, 0xea, 0x6e, 0x4a, 0x0a, 0x12, 0xf8, 0xc4, 0xa9, 0x5f,
0xbd, 0x7e, 0x55, 0xf5, 0xea, 0xd5, 0xfb, 0xaa, 0x22, 0xb4, 0xb3, 0x74, 0xb4, 0x95, 0x66, 0x09,
0x4d, 0xd0, 0x7c, 0x14, 0x67, 0xe9, 0x68, 0x78, 0x6b, 0x9c, 0x24, 0xe3, 0x88, 0x6c, 0xfb, 0x69,
0xb8, 0xed, 0xc7, 0x71, 0x42, 0x7d, 0x1a, 0x26, 0x71, 0x2e, 0x88, 0xf0, 0x7f, 0x39, 0xd0, 0x79,
0x9e, 0xf9, 0x71, 0xee, 0x8f, 0x18, 0x8c, 0x06, 0x70, 0x9d, 0xbe, 0xf2, 0xce, 0xfc, 0xfc, 0x6c,
0xe0, 0xdc, 0x71, 0x36, 0xdb, 0xae, 0x6a, 0xa2, 0x75, 0x58, 0xf0, 0x27, 0xc9, 0x34, 0xa6, 0x83,
0xc6, 0x1d, 0x67, 0x73, 0xce, 0x95, 0x2d, 0xf4, 0x5d, 0x58, 0x8e, 0xa7, 0x13, 0x6f, 0x94, 0xc4,
0xa7, 0x61, 0x36, 0x11, 0xcc, 0x07, 0x73, 0x77, 0x9c, 0xcd, 0x79, 0xb7, 0xda, 0x81, 0x6e, 0x03,
0x9c, 0x44, 0xc9, 0xe8, 0xa5, 0x18, 0xa2, 0xc9, 0x87, 0x30, 0x10, 0x84, 0xa1, 0x2b, 0x5b, 0x24,
0x1c, 0x9f, 0xd1, 0xc1, 0x3c, 0x67, 0x64, 0x61, 0x8c, 0x07, 0x0d, 0x27, 0xc4, 0xcb, 0xa9, 0x3f,
0x49, 0x07, 0x0b, 0x7c, 0x36, 0x06, 0xc2, 0xfb, 0x13, 0xea, 0x47, 0xde, 0x29, 0x21, 0xf9, 0xe0,
0xba, 0xec, 0xd7, 0x08, 0x1e, 0xc0, 0xfa, 0x53, 0x42, 0x8d, 0x55, 0xe7, 0x2e, 0xf9, 0x7a, 0x4a,
0x72, 0x8a, 0x0f, 0x01, 0x19, 0xf0, 0x3e, 0xa1, 0x7e, 0x18, 0xe5, 0xe8, 0x23, 0xe8, 0x52, 0x83,
0x78, 0xe0, 0xdc, 0x99, 0xdb, 0xec, 0xec, 0xa2, 0x2d, 0x2e, 0xdf, 0x2d, 0xe3, 0x03, 0xd7, 0xa2,
0xc3, 0xff, 0xe6, 0x40, 0xe7, 0x98, 0xc4, 0x81, 0xe4, 0x8e, 0x10, 0x34, 0x03, 0x92, 0x53, 0x2e,
0xd8, 0xae, 0xcb, 0x7f, 0xa3, 0x6f, 0x41, 0x87, 0xfd, 0xf5, 0x72, 0x9a, 0x85, 0xf1, 0x98, 0x8b,
0xb6, 0xed, 0x02, 0x83, 0x8e, 0x39, 0x82, 0x96, 0x60, 0xce, 0x9f, 0x50, 0x2e, 0xd0, 0x39, 0x97,
0xfd, 0x44, 0xef, 0x43, 0x37, 0xf5, 0x67, 0x13, 0x12, 0xd3, 0x42, 0x88, 0x5d, 0xb7, 0x23, 0xb1,
0x03, 0x26, 0xc5, 0x2d, 0x58, 0x31, 0x49, 0x14, 0xf7, 0x79, 0xce, 0x7d, 0xd9, 0xa0, 0x94, 0x83,
0xdc, 0x85, 0xbe, 0xa2, 0xcf, 0xc4, 0x64, 0xb9, 0x58, 0xdb, 0xee, 0xa2, 0x84, 0x95, 0x80, 0xfe,
0xd6, 0x81, 0xae, 0x58, 0x52, 0x9e, 0x26, 0x71, 0x4e, 0xd0, 0x07, 0xd0, 0x53, 0x5f, 0x92, 0x2c,
0x4b, 0x32, 0xa9, 0x35, 0x36, 0x88, 0xee, 0xc1, 0x92, 0x02, 0xd2, 0x8c, 0x84, 0x13, 0x7f, 0x4c,
0xf8, 0x52, 0xbb, 0x6e, 0x05, 0x47, 0xbb, 0x05, 0xc7, 0x2c, 0x99, 0x52, 0xc2, 0x97, 0xde, 0xd9,
0xed, 0x4a, 0x71, 0xbb, 0x0c, 0x73, 0x6d, 0x12, 0xfc, 0x8d, 0x03, 0xdd, 0x47, 0x67, 0x7e, 0x1c,
0x93, 0xe8, 0x28, 0x09, 0x63, 0xca, 0xd4, 0xe8, 0x74, 0x1a, 0x07, 0x61, 0x3c, 0xf6, 0xe8, 0xab,
0x30, 0x90, 0x22, 0xb7, 0x30, 0x36, 0x29, 0xb3, 0xcd, 0x84, 0x24, 0xe5, 0x5f, 0xc1, 0x19, 0xbf,
0x64, 0x4a, 0xd3, 0x29, 0xf5, 0xc2, 0x38, 0x20, 0xaf, 0xf8, 0x9c, 0x7a, 0xae, 0x85, 0xe1, 0x3f,
0x80, 0xa5, 0x43, 0xa6, 0x9f, 0x71, 0x18, 0x8f, 0xf7, 0x82, 0x20, 0x23, 0x79, 0xce, 0x0e, 0x4d,
0x3a, 0x3d, 0x79, 0x49, 0x66, 0x52, 0x2e, 0xb2, 0xc5, 0x54, 0xe1, 0x2c, 0xc9, 0xa9, 0x1c, 0x8f,
0xff, 0xc6, 0xbf, 0x72, 0xa0, 0xcf, 0x64, 0xfb, 0xb9, 0x1f, 0xcf, 0x94, 0xca, 0x1c, 0x42, 0x97,
0xb1, 0x7a, 0x9e, 0xec, 0x89, 0xa3, 0x27, 0x54, 0x6f, 0x53, 0xca, 0xa2, 0x44, 0xbd, 0x65, 0x92,
0x3e, 0x8e, 0x69, 0x36, 0x73, 0xad, 0xaf, 0x87, 0x9f, 0xc0, 0x72, 0x85, 0x84, 0x29, 0x58, 0x31,
0x3f, 0xf6, 0x13, 0xad, 0xc2, 0xfc, 0xb9, 0x1f, 0x4d, 0x89, 0x3c, 0xe8, 0xa2, 0xf1, 0x71, 0xe3,
0x81, 0x83, 0x3f, 0x84, 0xa5, 0x62, 0x4c, 0xa9, 0x01, 0x08, 0x9a, 0x5a, 0xc4, 0x6d, 0x97, 0xff,
0x66, 0xa2, 0x60, 0x74, 0x8f, 0x92, 0x50, 0x9f, 0x2d, 0x46, 0xe7, 0x07, 0x81, 0x52, 0x10, 0xfe,
0xfb, 0x2a, 0x9b, 0x82, 0xef, 0xc2, 0xb2, 0xf1, 0xfd, 0x1b, 0x06, 0xfa, 0xa5, 0x03, 0xcb, 0xcf,
0xc8, 0x85, 0x14, 0xb7, 0x1a, 0xea, 0x01, 0x34, 0xe9, 0x2c, 0x25, 0x9c, 0x72, 0x71, 0xf7, 0x03,
0x29, 0xad, 0x0a, 0xdd, 0x96, 0x6c, 0x3e, 0x9f, 0xa5, 0xc4, 0xe5, 0x5f, 0xe0, 0x2f, 0xa0, 0x63,
0x80, 0x68, 0x03, 0x56, 0x5e, 0x7c, 0xf6, 0xfc, 0xd9, 0xe3, 0xe3, 0x63, 0xef, 0xe8, 0xcb, 0x4f,
0x7f, 0xf0, 0xf8, 0x8f, 0xbd, 0x83, 0xbd, 0xe3, 0x83, 0xa5, 0x6b, 0x68, 0x1d, 0xd0, 0xb3, 0xc7,
0xc7, 0xcf, 0x1f, 0xef, 0x5b, 0xb8, 0x83, 0xfa, 0xd0, 0x31, 0x81, 0x06, 0x1e, 0xc2, 0xe0, 0x19,
0xb9, 0x78, 0x11, 0xd2, 0x98, 0xe4, 0xb9, 0x3d, 0x3c, 0xde, 0x02, 0x64, 0xce, 0x49, 0x2e, 0x73,
0x00, 0xd7, 0x7d, 0x01, 0x29, 0x0b, 0x2c, 0x9b, 0xf8, 0x43, 0x40, 0xc7, 0xe1, 0x38, 0xfe, 0x9c,
0xe4, 0xb9, 0x3f, 0x26, 0x6a, 0xb1, 0x4b, 0x30, 0x37, 0xc9, 0xc7, 0x52, 0xc3, 0xd9, 0x4f, 0xfc,
0x3d, 0x58, 0xb1, 0xe8, 0x24, 0xe3, 0x5b, 0xd0, 0xce, 0xc3, 0x71, 0xec, 0xd3, 0x69, 0x46, 0x24,
0xeb, 0x02, 0xc0, 0x4f, 0x60, 0xf5, 0x2b, 0x92, 0x85, 0xa7, 0xb3, 0xb7, 0xb1, 0xb7, 0xf9, 0x34,
0xca, 0x7c, 0x1e, 0xc3, 0x5a, 0x89, 0x8f, 0x1c, 0x5e, 0x68, 0x95, 0xdc, 0xbf, 0x96, 0x2b, 0x1a,
0xc6, 0x01, 0x69, 0x98, 0x07, 0x04, 0x7f, 0x09, 0xe8, 0x51, 0x12, 0xc7, 0x64, 0x44, 0x8f, 0x08,
0xc9, 0xd4, 0x64, 0xbe, 0x63, 0xe8, 0x50, 0x67, 0x77, 0x43, 0x6e, 0x6c, 0xf9, 0xd4, 0x49, 0xe5,
0x42, 0xd0, 0x4c, 0x49, 0x36, 0xe1, 0x8c, 0x5b, 0x2e, 0xff, 0x8d, 0xb7, 0x61, 0xc5, 0x62, 0x5b,
0xc8, 0x3c, 0x25, 0x24, 0xf3, 0xe4, 0xec, 0xe6, 0x5d, 0xd5, 0xc4, 0xf7, 0x61, 0x6d, 0x3f, 0xcc,
0x47, 0xd5, 0xa9, 0xb0, 0x4f, 0xa6, 0x27, 0x5e, 0x71, 0x74, 0x54, 0x93, 0xb9, 0x97, 0xf2, 0x27,
0x62, 0x18, 0xfc, 0x8f, 0x0e, 0x34, 0x0f, 0x9e, 0x1f, 0x3e, 0x42, 0x43, 0x68, 0x85, 0xf1, 0x28,
0x99, 0x30, 0xa3, 0x2c, 0xc4, 0xa1, 0xdb, 0x57, 0xfa, 0xd9, 0x5b, 0xd0, 0xe6, 0xb6, 0x9c, 0x79,
0x42, 0x6e, 0x7f, 0xba, 0x6e, 0x01, 0x30, 0x2f, 0x4c, 0x5e, 0xa5, 0x61, 0xc6, 0xdd, 0xac, 0x72,
0x9e, 0x4d, 0x6e, 0xa5, 0xaa, 0x1d, 0xcc, 0xf4, 0x65, 0xe4, 0x3c, 0x19, 0x09, 0x30, 0x20, 0x91,
0x3f, 0xe3, 0xce, 0xa1, 0xe7, 0x56, 0x70, 0xfc, 0x2f, 0x4d, 0xe8, 0xed, 0x8d, 0x68, 0x78, 0x4e,
0xa4, 0x85, 0xe5, 0x33, 0xe4, 0x80, 0x9c, 0xbb, 0x6c, 0x31, 0x5f, 0x90, 0x91, 0x49, 0x42, 0x89,
0x67, 0x6d, 0xa9, 0x0d, 0x32, 0xaa, 0x91, 0x60, 0xe4, 0xa5, 0xcc, 0x56, 0xf3, 0xb5, 0xb4, 0x5d,
0x1b, 0x64, 0xe2, 0x65, 0x00, 0xdb, 0x11, 0xb6, 0x8a, 0xa6, 0xab, 0x9a, 0x4c, 0x76, 0x23, 0x3f,
0xf5, 0x47, 0x21, 0x15, 0x73, 0x9e, 0x73, 0x75, 0x9b, 0xf1, 0x8e, 0x92, 0x91, 0x1f, 0x79, 0x27,
0x7e, 0xe4, 0xc7, 0x23, 0x22, 0x83, 0x03, 0x1b, 0x44, 0x1f, 0xc2, 0xa2, 0x9c, 0x92, 0x22, 0x13,
0x31, 0x42, 0x09, 0x65, 0x71, 0xc4, 0x28, 0x99, 0x4c, 0x42, 0xca, 0xc2, 0x86, 0x41, 0x4b, 0xc4,
0x11, 0x05, 0xc2, 0x57, 0x22, 0x5a, 0x17, 0x42, 0xde, 0x6d, 0x31, 0x9a, 0x05, 0x32, 0x2e, 0xa7,
0x84, 0x78, 0x29, 0xc9, 0xbc, 0x97, 0x17, 0x03, 0x10, 0x5c, 0x0a, 0x84, 0xed, 0xdc, 0x34, 0xce,
0x09, 0xa5, 0x11, 0x09, 0xf4, 0x84, 0x3a, 0x9c, 0xac, 0xda, 0x81, 0x76, 0x60, 0x45, 0x44, 0x32,
0xb9, 0x4f, 0x93, 0xfc, 0x2c, 0xcc, 0xbd, 0x9c, 0xc4, 0x74, 0xd0, 0xe5, 0xf4, 0x75, 0x5d, 0xe8,
0x01, 0x6c, 0x94, 0xe0, 0x8c, 0x8c, 0x48, 0x78, 0x4e, 0x82, 0x41, 0x8f, 0x7f, 0x75, 0x55, 0x37,
0xba, 0x03, 0x1d, 0x16, 0xc0, 0x4d, 0xd3, 0xc0, 0xa7, 0x24, 0x1f, 0x2c, 0xf2, 0x7d, 0x30, 0x21,
0x74, 0x1f, 0x7a, 0x29, 0x11, 0xae, 0xf2, 0x8c, 0x46, 0xa3, 0x7c, 0xd0, 0xe7, 0xfe, 0xa9, 0x23,
0x0f, 0x26, 0xd3, 0x75, 0xd7, 0xa6, 0xc0, 0x6b, 0xb0, 0x72, 0x18, 0xe6, 0x54, 0xea, 0x92, 0xb6,
0x85, 0x07, 0xb0, 0x6a, 0xc3, 0xf2, 0x64, 0xee, 0x40, 0x4b, 0x2a, 0x46, 0x3e, 0xe8, 0x70, 0xe6,
0xab, 0x92, 0xb9, 0xa5, 0x93, 0xae, 0xa6, 0xc2, 0x3f, 0x6b, 0x40, 0x93, 0x9d, 0xba, 0xab, 0x4f,
0xa8, 0x79, 0xdc, 0x1b, 0xd6, 0x71, 0x37, 0x8d, 0xef, 0x9c, 0x65, 0x7c, 0x79, 0xe0, 0x3a, 0xa3,
0x44, 0xca, 0x5b, 0xe8, 0xa4, 0x81, 0x14, 0xfd, 0x19, 0x19, 0x9d, 0x73, 0xc5, 0xd4, 0xfd, 0x0c,
0x61, 0x6a, 0x9b, 0xfb, 0x54, 0x7c, 0x2d, 0xb4, 0x52, 0xb7, 0x55, 0x1f, 0xff, 0xf2, 0x7a, 0xd1,
0xc7, 0xbf, 0x1b, 0xc0, 0xf5, 0x30, 0x3e, 0x49, 0xa6, 0x71, 0xc0, 0x35, 0xb0, 0xe5, 0xaa, 0x26,
0x33, 0x08, 0x29, 0x0f, 0x52, 0xc2, 0x09, 0x91, 0xaa, 0x57, 0x00, 0x18, 0xb1, 0x68, 0x24, 0xe7,
0xf6, 0x47, 0x0b, 0xf9, 0x23, 0x58, 0x36, 0x30, 0x29, 0xe1, 0xf7, 0x61, 0x9e, 0xad, 0x5e, 0x85,
0xb5, 0x6a, 0xef, 0xb8, 0xe1, 0x12, 0x3d, 0x78, 0x09, 0x16, 0x9f, 0x12, 0xfa, 0x59, 0x7c, 0x9a,
0x28, 0x4e, 0xff, 0xdd, 0x80, 0xbe, 0x86, 0x24, 0xa3, 0x4d, 0xe8, 0x87, 0x01, 0x89, 0x69, 0x48,
0x67, 0x9e, 0x15, 0xf4, 0x94, 0x61, 0xe6, 0x0a, 0xfc, 0x28, 0xf4, 0x73, 0x69, 0x20, 0x44, 0x03,
0xed, 0xc2, 0x2a, 0xd3, 0x2d, 0xa5, 0x2e, 0x7a, 0xdb, 0x45, 0xac, 0x55, 0xdb, 0xc7, 0x8e, 0x03,
0xc3, 0x85, 0x01, 0x2a, 0x3e, 0x11, 0x86, 0xaf, 0xae, 0x8b, 0x49, 0x4d, 0x70, 0x62, 0x4b, 0x16,
0x36, 0xaf, 0x00, 0x2a, 0xe9, 0xc7, 0x82, 0x88, 0xf3, 0xca, 0xe9, 0x87, 0x91, 0xc2, 0xb4, 0x2a,
0x29, 0xcc, 0x26, 0xf4, 0xf3, 0x59, 0x3c, 0x22, 0x81, 0x47, 0x13, 0x36, 0x6e, 0x18, 0xf3, 0xdd,
0x69, 0xb9, 0x65, 0x98, 0x27, 0x5b, 0x24, 0xa7, 0x31, 0xa1, 0xdc, 0x2e, 0xb4, 0x5c, 0xd5, 0x64,
0x26, 0x96, 0x93, 0x08, 0xa5, 0x6f, 0xbb, 0xb2, 0x85, 0x7f, 0xca, 0xdd, 0xa2, 0xce, 0xa7, 0xbe,
0xe4, 0xe7, 0x10, 0xdd, 0x84, 0xb6, 0x18, 0x3f, 0x3f, 0xf3, 0xa5, 0xa7, 0x6e, 0x71, 0xe0, 0xf8,
0xcc, 0x67, 0xe9, 0x82, 0xb5, 0x24, 0xa1, 0xf1, 0x1d, 0x8e, 0x1d, 0x88, 0x15, 0x7d, 0x00, 0x8b,
0x2a, 0x53, 0xcb, 0xbd, 0x88, 0x9c, 0x52, 0x15, 0xdf, 0xc6, 0xd3, 0x09, 0x1b, 0x2e, 0x3f, 0x24,
0xa7, 0x14, 0x3f, 0x83, 0x65, 0x79, 0xda, 0xbe, 0x48, 0x89, 0x1a, 0xfa, 0xfb, 0x65, 0x6b, 0x2e,
0x5c, 0xf3, 0x8a, 0xd4, 0x22, 0x33, 0x28, 0x2f, 0x99, 0x78, 0xec, 0x02, 0x92, 0xdd, 0x8f, 0xa2,
0x24, 0x27, 0x92, 0x21, 0x86, 0xee, 0x28, 0x4a, 0xf2, 0x72, 0xe4, 0x6e, 0x62, 0x4c, 0x6e, 0xf9,
0x74, 0x34, 0x62, 0xa7, 0x54, 0x38, 0x77, 0xd5, 0xc4, 0x3f, 0x73, 0x60, 0x85, 0x73, 0x53, 0x76,
0x41, 0x47, 0x84, 0xef, 0x3e, 0xcd, 0xee, 0xc8, 0xcc, 0x24, 0xde, 0x93, 0xc9, 0x66, 0x14, 0x4e,
0x42, 0xe5, 0x92, 0xdb, 0x0c, 0x39, 0x64, 0x00, 0x53, 0xe5, 0xd3, 0x24, 0x1b, 0x89, 0x2c, 0xa5,
0xe5, 0x8a, 0x06, 0xfe, 0x77, 0x07, 0x96, 0xf9, 0x34, 0x8e, 0xa9, 0x4f, 0xa7, 0xb9, 0x5c, 0xda,
0xef, 0x41, 0x8f, 0x2d, 0x83, 0x28, 0x35, 0x96, 0x93, 0x58, 0xd5, 0x27, 0x8e, 0xa3, 0x82, 0xf8,
0xe0, 0x9a, 0x6b, 0x13, 0xa3, 0x4f, 0xa0, 0x6b, 0xa6, 0xd2, 0x7c, 0x2a, 0x9d, 0xdd, 0x1b, 0x6a,
0x05, 0x15, 0xad, 0x38, 0xb8, 0xe6, 0x5a, 0x1f, 0xa0, 0x87, 0x00, 0xdc, 0x87, 0x72, 0xb6, 0x32,
0xab, 0xba, 0x61, 0x0b, 0xc0, 0xd8, 0x88, 0x83, 0x6b, 0xae, 0x41, 0xfe, 0x69, 0x0b, 0x16, 0x84,
0xd1, 0xc7, 0x4f, 0xa1, 0x67, 0xcd, 0xd4, 0x8a, 0xcb, 0xbb, 0x22, 0x2e, 0xaf, 0xe4, 0x4b, 0x8d,
0x9a, 0x7c, 0xe9, 0x3f, 0x1c, 0x40, 0x4c, 0x93, 0x4a, 0x5b, 0xf5, 0x21, 0x2c, 0x52, 0x3f, 0x1b,
0x13, 0xea, 0xd9, 0x21, 0x59, 0x09, 0xe5, 0xde, 0x29, 0x09, 0xac, 0x58, 0xa3, 0xeb, 0x9a, 0x10,
0xda, 0x02, 0x64, 0x34, 0x55, 0x12, 0x2c, 0xec, 0x7a, 0x4d, 0x0f, 0x33, 0x40, 0x22, 0x50, 0x50,
0xe9, 0x9f, 0x8c, 0xc3, 0x9a, 0x7c, 0xd3, 0x6b, 0xfb, 0x98, 0xe9, 0x4e, 0xa7, 0x2c, 0xc3, 0xf6,
0xa9, 0x8a, 0x46, 0x54, 0x1b, 0xff, 0xda, 0x81, 0x25, 0xb6, 0x40, 0x4b, 0x09, 0x3e, 0x06, 0xae,
0x5f, 0xef, 0xa8, 0x03, 0x16, 0xed, 0xff, 0x5d, 0x05, 0x1e, 0x40, 0x9b, 0x33, 0x4c, 0x52, 0x12,
0x4b, 0x0d, 0x18, 0xd8, 0x1a, 0x50, 0x1c, 0xed, 0x83, 0x6b, 0x6e, 0x41, 0x6c, 0xec, 0xff, 0x06,
0xac, 0xc9, 0x59, 0xda, 0x1b, 0x87, 0xff, 0x12, 0x60, 0xbd, 0xdc, 0xa3, 0xbd, 0xb8, 0x0c, 0x4d,
0xa2, 0x70, 0x72, 0x92, 0xe8, 0x28, 0xc7, 0x31, 0xa3, 0x16, 0xab, 0x0b, 0x9d, 0xc2, 0x9a, 0x32,
0xf6, 0x6c, 0xfc, 0xc2, 0xb4, 0x37, 0xb8, 0x97, 0xda, 0xb1, 0xe5, 0x55, 0x1a, 0x4f, 0xc1, 0xa6,
0x76, 0xd5, 0xb3, 0x43, 0x63, 0x18, 0x68, 0xa7, 0x22, 0x4d, 0x8c, 0xe1, 0x78, 0xd8, 0x50, 0xdf,
0x79, 0xf3, 0x50, 0xfc, 0xc8, 0x04, 0x0a, 0xbd, 0x92, 0x19, 0x7a, 0x05, 0xb7, 0x55, 0x1f, 0xb7,
0x11, 0xd5, 0xe1, 0x9a, 0xef, 0xb2, 0xb2, 0x27, 0xec, 0x5b, 0x7b, 0xcc, 0xb7, 0xf0, 0x1d, 0xfe,
0xb3, 0x03, 0x8b, 0x36, 0x37, 0xe6, 0xa2, 0x64, 0xac, 0xab, 0x8e, 0x81, 0x72, 0xd5, 0x25, 0xb8,
0x1a, 0xad, 0x37, 0xea, 0xa2, 0x75, 0x33, 0x26, 0x9f, 0x7b, 0x5b, 0x4c, 0xde, 0x7c, 0xb7, 0x98,
0x7c, 0xbe, 0x2e, 0x26, 0x1f, 0xfe, 0xaa, 0x01, 0xa8, 0xba, 0xbb, 0xe8, 0x89, 0x48, 0x17, 0x62,
0x12, 0xc9, 0x03, 0xf5, 0xdd, 0x77, 0x52, 0x10, 0x05, 0xab, 0x8f, 0x99, 0xa2, 0x9a, 0x07, 0xc6,
0xf4, 0x99, 0x3d, 0xb7, 0xae, 0x8b, 0xa5, 0x52, 0xdc, 0x95, 0xe6, 0x1e, 0x0d, 0xa3, 0xa8, 0x38,
0x59, 0x3d, 0xb7, 0x82, 0x97, 0x12, 0x8a, 0xe6, 0xdb, 0x13, 0x8a, 0xf9, 0xb7, 0x27, 0x14, 0x0b,
0xe5, 0x84, 0x62, 0xf8, 0x1a, 0x7a, 0x96, 0x82, 0xfc, 0xbf, 0x09, 0xa7, 0xec, 0x9a, 0x85, 0x2a,
0x58, 0xd8, 0xf0, 0x9b, 0x06, 0xa0, 0xaa, 0x8e, 0xfe, 0x26, 0xa7, 0xc0, 0x15, 0xce, 0x32, 0x33,
0x73, 0x52, 0xe1, 0x2c, 0x03, 0xb3, 0x09, 0xfd, 0x89, 0x4f, 0xa7, 0x19, 0x0b, 0x4b, 0xad, 0x74,
0xb9, 0x0c, 0x33, 0x9d, 0x28, 0x76, 0xd2, 0x53, 0xbd, 0x32, 0x76, 0xac, 0xeb, 0xc2, 0xdf, 0x87,
0xd5, 0x17, 0x7e, 0x14, 0x11, 0xfa, 0xa9, 0x18, 0x4c, 0xb9, 0xb6, 0xf7, 0xa1, 0x7b, 0x21, 0x2a,
0x41, 0x5e, 0x12, 0x47, 0x33, 0x99, 0x3e, 0x77, 0x24, 0xf6, 0x45, 0x1c, 0xcd, 0xf0, 0x7d, 0x58,
0x2b, 0x7d, 0x5a, 0x94, 0x28, 0x6c, 0xb3, 0xa9, 0x9a, 0xcc, 0x20, 0x4b, 0x39, 0xd9, 0xc3, 0xe1,
0x5d, 0x58, 0x2f, 0x77, 0xbc, 0x95, 0xd9, 0x27, 0x80, 0x7e, 0x38, 0x25, 0xd9, 0x8c, 0x97, 0x59,
0x75, 0x41, 0x6d, 0xa3, 0x9c, 0x4a, 0x2d, 0xa4, 0xd3, 0x93, 0x1f, 0x90, 0x99, 0xaa, 0x4e, 0x37,
0x74, 0x75, 0x1a, 0x3f, 0x84, 0x15, 0x8b, 0x81, 0xae, 0x13, 0x2f, 0xf0, 0x52, 0xad, 0x4a, 0x33,
0xec, 0x72, 0xae, 0xec, 0xc3, 0x7f, 0xe7, 0xc0, 0xdc, 0x41, 0x92, 0x9a, 0xd9, 0xbf, 0x63, 0x67,
0xff, 0xd2, 0x1e, 0x79, 0xda, 0xdc, 0x34, 0xe4, 0x11, 0x31, 0x41, 0x66, 0x4d, 0xfc, 0x09, 0x65,
0x81, 0xf6, 0x69, 0x92, 0x5d, 0xf8, 0x59, 0x20, 0x75, 0xa0, 0x84, 0xb2, 0xe9, 0x17, 0x27, 0x91,
0xfd, 0x64, 0x81, 0x37, 0x2f, 0x97, 0xa8, 0xfd, 0x95, 0x2d, 0xfc, 0x73, 0x07, 0xe6, 0xf9, 0x5c,
0x99, 0xe2, 0x08, 0x87, 0x25, 0xc2, 0xc2, 0x64, 0xf4, 0x92, 0xcf, 0xb1, 0xe7, 0x96, 0xe1, 0xd2,
0x3d, 0x44, 0xa3, 0x7c, 0x0f, 0xc1, 0x52, 0x11, 0xd1, 0x2a, 0x0a, 0xfc, 0x05, 0x80, 0x6e, 0x43,
0xf3, 0x2c, 0x49, 0x95, 0x5b, 0x00, 0x95, 0x52, 0x27, 0xa9, 0xcb, 0x71, 0x7c, 0x0f, 0xfa, 0xcf,
0x92, 0x80, 0x18, 0x59, 0xd9, 0x95, 0xdb, 0x84, 0xff, 0xcc, 0x81, 0x96, 0x22, 0x46, 0x9b, 0xd0,
0x64, 0xe6, 0xbd, 0x14, 0x79, 0xe8, 0x22, 0x1a, 0xa3, 0x73, 0x39, 0x05, 0x3b, 0x6d, 0x3c, 0x2f,
0x28, 0x7c, 0xaf, 0xca, 0x0a, 0x0a, 0xbf, 0xc6, 0xc2, 0x35, 0x3e, 0xe7, 0x92, 0x03, 0x28, 0xa1,
0xf8, 0x17, 0x0e, 0xf4, 0xac, 0x31, 0x58, 0x00, 0x17, 0xf9, 0x39, 0x95, 0xc5, 0x04, 0x29, 0x44,
0x13, 0x32, 0x33, 0xf8, 0x86, 0x9d, 0xc1, 0xeb, 0x0c, 0x72, 0xce, 0xcc, 0x20, 0x77, 0xa0, 0x2d,
0xd3, 0x75, 0xa2, 0xe4, 0xa6, 0x6e, 0x69, 0xd8, 0x88, 0xaa, 0x3c, 0x58, 0x10, 0xe1, 0x87, 0xd0,
0x31, 0x7a, 0xd8, 0x80, 0x31, 0xa1, 0x17, 0x49, 0xf6, 0x52, 0x95, 0x0c, 0x64, 0x53, 0x57, 0xaf,
0x1b, 0x45, 0xf5, 0x1a, 0xff, 0x83, 0x03, 0x3d, 0xa6, 0x13, 0x61, 0x3c, 0x3e, 0x4a, 0xa2, 0x70,
0x34, 0xe3, 0xba, 0xa1, 0xb6, 0xdf, 0x0b, 0x48, 0x44, 0x7d, 0xad, 0x1b, 0x36, 0xcc, 0x3c, 0xe6,
0x24, 0x8c, 0x79, 0x4d, 0x44, 0x6a, 0x86, 0x6e, 0x33, 0x1d, 0x67, 0xe6, 0xfc, 0xc4, 0xcf, 0x89,
0x37, 0x61, 0x81, 0xa5, 0x34, 0x60, 0x16, 0xc8, 0xcc, 0x12, 0x03, 0x32, 0x9f, 0x12, 0x6f, 0x12,
0x46, 0x51, 0x28, 0x68, 0x85, 0x2e, 0xd7, 0x75, 0xe1, 0x7f, 0x6a, 0x40, 0x47, 0x1a, 0x84, 0xc7,
0xc1, 0x58, 0xd4, 0xb7, 0xa4, 0x1b, 0xd7, 0x07, 0xcd, 0x40, 0x54, 0xbf, 0xe5, 0xf8, 0x0d, 0xa4,
0xbc, 0x81, 0x73, 0xd5, 0x0d, 0x64, 0xc9, 0x76, 0x12, 0x90, 0xfb, 0x3c, 0xc2, 0x10, 0x97, 0x7d,
0x05, 0xa0, 0x7a, 0x77, 0x79, 0xef, 0x7c, 0xd1, 0xcb, 0x01, 0x2b, 0xa6, 0x58, 0x28, 0xc5, 0x14,
0x0f, 0xa0, 0x2b, 0xd9, 0x70, 0xb9, 0xf3, 0xa2, 0x49, 0xa1, 0xca, 0xd6, 0x9e, 0xb8, 0x16, 0xa5,
0xfa, 0x72, 0x57, 0x7d, 0xd9, 0x7a, 0xdb, 0x97, 0x8a, 0x12, 0xaf, 0xc1, 0x8a, 0x14, 0xde, 0xd3,
0xcc, 0x4f, 0xcf, 0x94, 0x91, 0x0d, 0xf4, 0xcd, 0x13, 0x87, 0xd1, 0x3d, 0x98, 0x67, 0x9f, 0x29,
0x3b, 0x57, 0x7f, 0xbc, 0x04, 0x09, 0xda, 0x84, 0x79, 0x12, 0x8c, 0x89, 0x0a, 0x6a, 0x91, 0x1d,
0x8a, 0xb3, 0x3d, 0x72, 0x05, 0x01, 0x3b, 0xec, 0x0c, 0x2d, 0x1d, 0x76, 0xdb, 0x46, 0x2e, 0xb0,
0xe6, 0x67, 0x01, 0x5e, 0x05, 0xf4, 0x4c, 0x68, 0xad, 0x59, 0xb1, 0xf9, 0xf3, 0x39, 0xe8, 0x18,
0x30, 0x3b, 0xb7, 0x63, 0x36, 0x61, 0x2f, 0x08, 0xfd, 0x09, 0xa1, 0x24, 0x93, 0x9a, 0x5a, 0x42,
0xb9, 0x29, 0x3d, 0x1f, 0x7b, 0xc9, 0x94, 0x7a, 0x01, 0x19, 0x67, 0x44, 0x94, 0xfc, 0x1d, 0xb7,
0x84, 0x32, 0xba, 0x89, 0xff, 0xca, 0xa4, 0x13, 0xfa, 0x50, 0x42, 0x55, 0xfd, 0x45, 0xc8, 0xa8,
0x59, 0xd4, 0x5f, 0x84, 0x44, 0xca, 0x16, 0x67, 0xbe, 0xc6, 0xe2, 0x7c, 0x04, 0xeb, 0xc2, 0xb6,
0xc8, 0xb3, 0xe9, 0x95, 0xd4, 0xe4, 0x8a, 0x5e, 0x16, 0xa9, 0xb1, 0x39, 0x2b, 0x05, 0xcf, 0xc3,
0x9f, 0x8a, 0xc2, 0xaf, 0xe3, 0x56, 0x70, 0x46, 0xcb, 0x8e, 0xa3, 0x45, 0x2b, 0x0a, 0xc0, 0x15,
0x9c, 0xd3, 0xfa, 0xaf, 0x6c, 0xda, 0xb6, 0xa4, 0x2d, 0xe1, 0xb8, 0x07, 0x9d, 0x63, 0x9a, 0xa4,
0x6a, 0x53, 0x16, 0xa1, 0x2b, 0x9a, 0xf2, 0x82, 0xe0, 0x26, 0xdc, 0xe0, 0x5a, 0xf4, 0x3c, 0x49,
0x93, 0x28, 0x19, 0xcf, 0x8e, 0xa7, 0x27, 0xf9, 0x28, 0x0b, 0x53, 0x16, 0x70, 0xe2, 0x7f, 0x75,
0x60, 0xc5, 0xea, 0x95, 0x19, 0xe5, 0x6f, 0x0b, 0x95, 0xd6, 0x75, 0x5a, 0xa1, 0x78, 0xcb, 0x86,
0xe1, 0x13, 0x84, 0x22, 0x39, 0xfe, 0x52, 0x96, 0x6e, 0xf7, 0xa0, 0xaf, 0x66, 0xa6, 0x3e, 0x14,
0x5a, 0x38, 0xa8, 0x6a, 0xa1, 0xfc, 0x7e, 0x51, 0x7e, 0xa0, 0x58, 0xfc, 0xbe, 0x08, 0xc6, 0x48,
0xc0, 0xd7, 0xa8, 0xf2, 0xa5, 0xa1, 0xfa, 0xde, 0x0c, 0x00, 0xd5, 0x0c, 0x46, 0x1a, 0xcc, 0xf1,
0x5f, 0x39, 0x00, 0xc5, 0xec, 0x98, 0x62, 0x14, 0xc6, 0xdb, 0xe1, 0x55, 0xaf, 0x02, 0x60, 0xa1,
0x93, 0xae, 0x22, 0x16, 0xfe, 0xa0, 0xa3, 0x30, 0x16, 0x8b, 0xdc, 0x85, 0xfe, 0x38, 0x4a, 0x4e,
0xb8, 0x77, 0xe5, 0x77, 0x51, 0xb9, 0xbc, 0x26, 0x59, 0x14, 0xf0, 0x13, 0x89, 0x16, 0xce, 0xa3,
0x69, 0x38, 0x0f, 0xfc, 0xd7, 0x0d, 0x5d, 0xdf, 0x2a, 0xd6, 0x7c, 0xe5, 0x29, 0x43, 0xbb, 0x15,
0xe3, 0x78, 0x45, 0x39, 0x89, 0x27, 0xd1, 0x47, 0x6f, 0x4d, 0x93, 0x1e, 0xc2, 0x62, 0x26, 0xac,
0x8f, 0x32, 0x4d, 0xcd, 0x37, 0x98, 0xa6, 0x5e, 0x66, 0xf9, 0x9d, 0xdf, 0x82, 0x25, 0x3f, 0x38,
0x27, 0x19, 0x0d, 0x79, 0x18, 0xcc, 0xdd, 0xbb, 0x30, 0xa8, 0x7d, 0x03, 0xe7, 0x5e, 0xf7, 0x2e,
0xf4, 0xe5, 0xd5, 0x94, 0xa6, 0x94, 0x57, 0xfd, 0x05, 0xcc, 0x08, 0xf1, 0xdf, 0xab, 0x52, 0x9a,
0xbd, 0x87, 0x57, 0x4b, 0xc4, 0x5c, 0x5d, 0xa3, 0xb4, 0xba, 0x6f, 0xcb, 0xd2, 0x57, 0xa0, 0x62,
0x6d, 0x59, 0x60, 0x14, 0xa0, 0x2c, 0x43, 0xda, 0x22, 0x6d, 0xbe, 0x8b, 0x48, 0xf1, 0x16, 0xf4,
0x8f, 0x09, 0xdd, 0x63, 0x3b, 0xa8, 0x0c, 0xe3, 0x4d, 0x68, 0xc7, 0xe4, 0xc2, 0x13, 0x5b, 0x2c,
0xdc, 0x78, 0x2b, 0x26, 0x17, 0x9c, 0x06, 0x23, 0x58, 0x2a, 0xe8, 0xe5, 0xa9, 0xfb, 0x9b, 0x06,
0x5c, 0xff, 0x2c, 0x3e, 0x4f, 0xc2, 0x11, 0x2f, 0x66, 0x4d, 0xc8, 0x24, 0x51, 0x97, 0xcc, 0xec,
0x37, 0x8b, 0x0a, 0xf8, 0x9d, 0x48, 0x4a, 0x65, 0x95, 0x49, 0x35, 0x99, 0x87, 0xcc, 0x8a, 0x17,
0x0d, 0x42, 0xdb, 0x0c, 0x84, 0x45, 0x93, 0x99, 0xf9, 0x48, 0x43, 0xb6, 0x8a, 0x1b, 0xf6, 0x79,
0xe3, 0x86, 0x9d, 0x97, 0x35, 0xc5, 0x75, 0x0f, 0xdf, 0x92, 0x96, 0xab, 0x9a, 0x3c, 0xea, 0xcd,
0x88, 0xbc, 0x95, 0x63, 0xbe, 0xf6, 0xba, 0x8c, 0x7a, 0x4d, 0x90, 0xf9, 0x63, 0xf1, 0x81, 0xa0,
0x11, 0xf6, 0xca, 0x84, 0x58, 0x7c, 0x52, 0x7e, 0xe7, 0xd1, 0x16, 0x6a, 0x52, 0x82, 0xf1, 0x57,
0x80, 0xf6, 0x82, 0x40, 0x4a, 0x45, 0x47, 0xf1, 0xc5, 0x7a, 0x1c, 0x6b, 0x3d, 0x35, 0x7c, 0x1b,
0xf5, 0x7c, 0x1f, 0x43, 0xe7, 0xc8, 0x78, 0xa8, 0xc2, 0x05, 0xa8, 0x9e, 0xa8, 0x48, 0xa1, 0x1b,
0x88, 0x31, 0x60, 0xc3, 0x1c, 0x10, 0xff, 0x2e, 0xa0, 0xc3, 0x30, 0xa7, 0x7a, 0x7e, 0x3a, 0xbf,
0xd2, 0x55, 0x1e, 0x23, 0xbf, 0x92, 0x18, 0xcf, 0xaf, 0xf6, 0xc4, 0xf5, 0x53, 0x79, 0x61, 0xf7,
0xa0, 0x15, 0x0a, 0x48, 0xd9, 0xcf, 0x45, 0xa9, 0x78, 0x8a, 0x52, 0xf7, 0xb3, 0x40, 0x40, 0x82,
0x96, 0x79, 0xfe, 0xb9, 0x03, 0xd7, 0xe5, 0xd2, 0x98, 0x1b, 0xb3, 0x9e, 0xe8, 0x88, 0x85, 0x59,
0x58, 0xfd, 0x2b, 0x8b, 0xea, 0x4e, 0xcf, 0xd5, 0xed, 0x34, 0x82, 0x66, 0xea, 0xd3, 0x33, 0x1e,
0xe3, 0xb6, 0x5d, 0xfe, 0x5b, 0xe5, 0x32, 0xf3, 0x3a, 0x97, 0x51, 0x57, 0x6d, 0x72, 0x52, 0xfa,
0x16, 0xe8, 0x53, 0x71, 0xd5, 0x56, 0xc0, 0x85, 0x0c, 0xe4, 0x04, 0xcb, 0x32, 0x90, 0xa4, 0xae,
0xee, 0xc7, 0x43, 0x18, 0xec, 0x93, 0x88, 0x50, 0xb2, 0x17, 0x45, 0x65, 0xfe, 0x37, 0xe1, 0x46,
0x4d, 0x9f, 0x3c, 0x6b, 0x4f, 0x60, 0x79, 0x9f, 0x9c, 0x4c, 0xc7, 0x87, 0xe4, 0xbc, 0x28, 0xf9,
0x22, 0x68, 0xe6, 0x67, 0xc9, 0x85, 0xdc, 0x2f, 0xfe, 0x1b, 0xbd, 0x07, 0x10, 0x31, 0x1a, 0x2f,
0x4f, 0xc9, 0x48, 0x3d, 0x33, 0xe0, 0xc8, 0x71, 0x4a, 0x46, 0xf8, 0x23, 0x40, 0x26, 0x1f, 0xb9,
0x04, 0x76, 0x02, 0xa6, 0x27, 0x5e, 0x3e, 0xcb, 0x29, 0x99, 0xa8, 0xc3, 0x6f, 0x42, 0xf8, 0x2e,
0x74, 0x8f, 0xfc, 0x99, 0x4b, 0xbe, 0x96, 0x2f, 0x9f, 0x58, 0xca, 0xe4, 0xcf, 0x98, 0x7a, 0xea,
0x94, 0x89, 0x77, 0xe3, 0x0c, 0x16, 0x04, 0x21, 0x63, 0x1a, 0x90, 0x9c, 0x86, 0xb1, 0x28, 0xba,
0x4a, 0xa6, 0x06, 0x54, 0xd9, 0xee, 0x46, 0xcd, 0x76, 0xcb, 0xc8, 0x46, 0xdd, 0xb2, 0xca, 0x7d,
0xb5, 0xb0, 0xdd, 0xbf, 0x18, 0x42, 0x5b, 0x07, 0x8a, 0xe8, 0x27, 0xd0, 0xb3, 0x4a, 0x01, 0xe8,
0xa6, 0xdc, 0x8e, 0xba, 0xda, 0xc2, 0xf0, 0x56, 0x7d, 0xa7, 0x14, 0xfb, 0xed, 0x6f, 0x7e, 0xfd,
0x9f, 0xbf, 0x68, 0x0c, 0xd0, 0xfa, 0xf6, 0xf9, 0xfd, 0x6d, 0x99, 0xeb, 0x6f, 0xf3, 0xd2, 0x85,
0xb8, 0x89, 0x7a, 0x09, 0x8b, 0x76, 0xa9, 0x00, 0xdd, 0xb2, 0x0d, 0x6f, 0x69, 0xb4, 0xf7, 0xae,
0xe8, 0x95, 0xc3, 0xdd, 0xe2, 0xc3, 0xad, 0xa3, 0x55, 0x73, 0x38, 0x1d, 0xc0, 0x11, 0x7e, 0x77,
0x68, 0xbe, 0xbf, 0x43, 0x8a, 0x5f, 0xfd, 0xbb, 0xbc, 0xe1, 0x8d, 0xea, 0x5b, 0x3b, 0xf9, 0x38,
0x0f, 0x0f, 0xf8, 0x50, 0x08, 0x2d, 0xb1, 0xa1, 0xcc, 0xe7, 0x77, 0xe8, 0xc7, 0xd0, 0xd6, 0x8f,
0x88, 0xd0, 0x86, 0xf1, 0x64, 0xca, 0x7c, 0x96, 0x34, 0x1c, 0x54, 0x3b, 0x54, 0x30, 0xc6, 0x39,
0xaf, 0xe1, 0x0a, 0xe7, 0x8f, 0x9d, 0x7b, 0xe8, 0x10, 0xd6, 0xe4, 0xe9, 0x3f, 0x21, 0xff, 0x9b,
0x95, 0xd4, 0xbc, 0x1a, 0xdc, 0x71, 0xd0, 0x43, 0x68, 0xa9, 0x77, 0x55, 0x68, 0xbd, 0xfe, 0x71,
0xd7, 0x70, 0xa3, 0x82, 0x4b, 0xa5, 0xdf, 0x03, 0x28, 0x9e, 0x11, 0xa1, 0xc1, 0x55, 0xaf, 0x9d,
0xb4, 0x10, 0x6b, 0xde, 0x1c, 0x8d, 0xf9, 0x2b, 0x2a, 0xfb, 0x95, 0x12, 0xfa, 0x56, 0x41, 0x5f,
0xfb, 0x7e, 0xe9, 0x0d, 0x0c, 0xf1, 0x3a, 0x97, 0xdd, 0x12, 0x5a, 0x64, 0xb2, 0x8b, 0xc9, 0x85,
0xba, 0x45, 0xdf, 0x87, 0x8e, 0xf1, 0x34, 0x09, 0x29, 0x0e, 0xd5, 0x67, 0x4d, 0xc3, 0x61, 0x5d,
0x97, 0x9c, 0xee, 0x1f, 0x42, 0xcf, 0x7a, 0x63, 0xa4, 0x4f, 0x46, 0xdd, 0x0b, 0x26, 0x7d, 0x32,
0xea, 0x9f, 0x25, 0xfd, 0x08, 0x3a, 0xc6, 0x8b, 0x20, 0x64, 0x5c, 0xa6, 0x94, 0x5e, 0xfc, 0xe8,
0x19, 0xd5, 0x3c, 0x20, 0xc2, 0xab, 0x7c, 0xbd, 0x8b, 0xb8, 0xcd, 0xd6, 0xcb, 0xaf, 0x92, 0x99,
0x92, 0xfc, 0x04, 0x16, 0xed, 0x97, 0x40, 0xfa, 0x54, 0xd5, 0xbe, 0x29, 0xd2, 0xa7, 0xea, 0x8a,
0xe7, 0x43, 0x52, 0x21, 0xef, 0xad, 0xe8, 0x41, 0xb6, 0x5f, 0xcb, 0x82, 0xc8, 0x25, 0xfa, 0x21,
0x33, 0x1d, 0xf2, 0x6e, 0x1f, 0x15, 0x2f, 0xa3, 0xec, 0x17, 0x00, 0x5a, 0xdb, 0x2b, 0xcf, 0x00,
0xf0, 0x32, 0x67, 0xde, 0x41, 0xc5, 0x0a, 0xd0, 0xe7, 0x70, 0x5d, 0xde, 0xf1, 0xa3, 0xb5, 0x42,
0xab, 0x8d, 0xa4, 0x72, 0xb8, 0x5e, 0x86, 0x25, 0xb3, 0x15, 0xce, 0xac, 0x87, 0x3a, 0x8c, 0xd9,
0x98, 0xd0, 0x90, 0xf1, 0x88, 0xa0, 0x6f, 0x97, 0x75, 0x73, 0x2d, 0x8e, 0xda, 0x0b, 0x25, 0x2d,
0x8e, 0xfa, 0x1a, 0xb1, 0x6d, 0x64, 0x94, 0x71, 0xd9, 0x56, 0x77, 0x65, 0x7f, 0x02, 0x5d, 0xf3,
0x41, 0x09, 0x1a, 0x1a, 0x2b, 0x2f, 0x3d, 0x3e, 0x19, 0xde, 0xac, 0xed, 0xb3, 0xb7, 0x16, 0x75,
0xcd, 0x61, 0xd0, 0x8f, 0xa0, 0x6f, 0xdc, 0x3f, 0x1c, 0xcf, 0xe2, 0x91, 0x56, 0x9d, 0xea, 0x9d,
0xe6, 0xb0, 0x2e, 0x8a, 0xc5, 0x1b, 0x9c, 0xf1, 0x32, 0xb6, 0x18, 0x33, 0xb5, 0x79, 0x04, 0x1d,
0xf3, 0x6e, 0xe3, 0x0d, 0x7c, 0x37, 0x8c, 0x2e, 0xf3, 0x96, 0x71, 0xc7, 0x41, 0xbf, 0x74, 0xa0,
0x6b, 0xde, 0x84, 0x23, 0x2b, 0x2f, 0x2b, 0xf1, 0x19, 0x98, 0x7d, 0x26, 0x23, 0xfc, 0x15, 0x9f,
0xe4, 0xd1, 0xbd, 0x67, 0x96, 0x90, 0x5f, 0x5b, 0xd7, 0x3f, 0x5b, 0xe6, 0x73, 0xd9, 0xcb, 0x72,
0xa7, 0x79, 0xe7, 0x7b, 0xb9, 0xfd, 0x9a, 0x5f, 0x52, 0x5d, 0xee, 0x38, 0xe8, 0x63, 0xf1, 0x38,
0x5a, 0x85, 0x4c, 0xc8, 0x30, 0x6f, 0x65, 0xb1, 0x99, 0x2f, 0x8e, 0x37, 0x9d, 0x1d, 0x07, 0xfd,
0xa9, 0x78, 0x29, 0x2b, 0xbf, 0xe5, 0xd2, 0x7f, 0xd7, 0xef, 0xf1, 0x07, 0x7c, 0x45, 0xb7, 0xf1,
0x0d, 0x6b, 0x45, 0x65, 0xfb, 0x7e, 0x04, 0x50, 0xc4, 0xbf, 0xa8, 0x14, 0x0c, 0x6a, 0xcb, 0x57,
0x0d, 0x91, 0xed, 0x5d, 0x55, 0x31, 0xa3, 0x30, 0x06, 0x5d, 0x23, 0xf2, 0xcc, 0xf5, 0xb6, 0x56,
0xe3, 0xd8, 0xe1, 0xb0, 0xae, 0x4b, 0xf2, 0xff, 0x36, 0xe7, 0xff, 0x1e, 0xba, 0x69, 0xf2, 0xdf,
0x7e, 0x6d, 0xc6, 0xbd, 0x97, 0xe8, 0x2b, 0xe8, 0x1d, 0x26, 0xc9, 0xcb, 0x69, 0xaa, 0xd3, 0x1a,
0x3b, 0x92, 0x63, 0xb1, 0xf7, 0xb0, 0xb4, 0x28, 0xfc, 0x3e, 0xe7, 0x7c, 0x13, 0xdd, 0xb0, 0x39,
0x17, 0xd1, 0xf8, 0x25, 0xf2, 0x61, 0x59, 0x7b, 0x3d, 0xbd, 0x90, 0xa1, 0xcd, 0xc7, 0x0c, 0x8a,
0x2b, 0x63, 0x58, 0x71, 0x88, 0x1e, 0x23, 0x57, 0x3c, 0x77, 0x1c, 0x74, 0x04, 0xdd, 0x7d, 0x32,
0x4a, 0x02, 0x22, 0xa3, 0xaf, 0x95, 0x62, 0xe6, 0x3a, 0x6a, 0x1b, 0xf6, 0x2c, 0xd0, 0xb6, 0x04,
0xa9, 0x3f, 0xcb, 0xc8, 0xd7, 0xdb, 0xaf, 0x65, 0x58, 0x77, 0xa9, 0x2c, 0x81, 0x0a, 0x45, 0x2d,
0x4b, 0x50, 0x8a, 0x5d, 0x2d, 0x4b, 0x50, 0x89, 0x5d, 0x2d, 0x4b, 0xa0, 0x42, 0x61, 0x14, 0xb1,
0x88, 0xb6, 0x14, 0xee, 0x6a, 0xdf, 0x79, 0x55, 0x90, 0x3c, 0xbc, 0x73, 0x35, 0x81, 0x3d, 0xda,
0x3d, 0x7b, 0xb4, 0x63, 0xe8, 0xed, 0x13, 0x21, 0x2c, 0x51, 0x6f, 0x1c, 0xda, 0xa6, 0xc5, 0xac,
0x4d, 0x96, 0xcd, 0x0e, 0xef, 0xb3, 0x0d, 0x3d, 0x2f, 0xf6, 0xa1, 0x1f, 0x43, 0xe7, 0x29, 0xa1,
0xaa, 0xc0, 0xa8, 0x23, 0x90, 0x52, 0xc5, 0x71, 0x58, 0x53, 0x9f, 0xc4, 0x77, 0x38, 0xb7, 0x21,
0x1a, 0x68, 0x6e, 0xdb, 0x24, 0x18, 0x13, 0x61, 0x04, 0xbc, 0x30, 0xb8, 0x44, 0x7f, 0xc4, 0x99,
0xeb, 0xdb, 0x87, 0x75, 0xa3, 0x2e, 0x65, 0x32, 0xef, 0x97, 0xf0, 0x3a, 0xce, 0x71, 0x12, 0x10,
0xc3, 0xe5, 0xc5, 0xd0, 0x31, 0xae, 0x9a, 0xf4, 0x81, 0xaa, 0xde, 0x5f, 0xe9, 0x03, 0x55, 0x73,
0x33, 0x85, 0x37, 0xf9, 0x38, 0x18, 0xdd, 0x29, 0xc6, 0x11, 0xb7, 0x51, 0xc5, 0x48, 0xdb, 0xaf,
0xfd, 0x09, 0xbd, 0x44, 0x2f, 0xf8, 0x33, 0x38, 0xb3, 0x88, 0x5a, 0x44, 0x40, 0xe5, 0x7a, 0xab,
0x16, 0x96, 0xd1, 0x65, 0x47, 0x45, 0x62, 0x28, 0xee, 0x19, 0x7f, 0x07, 0xe0, 0x98, 0x26, 0xe9,
0xbe, 0x4f, 0x26, 0x49, 0x5c, 0x58, 0xb2, 0xa2, 0x50, 0x58, 0x58, 0x32, 0xa3, 0x5a, 0x88, 0x5e,
0x18, 0x31, 0xa8, 0x55, 0x83, 0x56, 0xca, 0x75, 0x65, 0x2d, 0x51, 0x0b, 0xa4, 0xa6, 0x9e, 0xa8,
0xc2, 0x51, 0x51, 0x24, 0x31, 0xc2, 0x51, 0xab, 0xca, 0x62, 0x84, 0xa3, 0x76, 0x35, 0x85, 0x85,
0xa3, 0x45, 0x66, 0xa6, 0xc3, 0xd1, 0x4a, 0xd2, 0xa7, 0x6d, 0x68, 0x35, 0x8d, 0x3b, 0x59, 0xe0,
0xff, 0x9b, 0xf4, 0xbd, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x89, 0xe1, 0xfa, 0xf6, 0xcd, 0x34,
0x00, 0x00,
// 4517 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7b, 0x5d, 0x6f, 0x1c, 0x4b,
0x5a, 0x7f, 0x7a, 0x3c, 0x63, 0xcf, 0x3c, 0x33, 0xe3, 0x97, 0xf2, 0xdb, 0x64, 0x92, 0x93, 0x4d,
0x6a, 0xa3, 0x13, 0xff, 0xb3, 0x2b, 0x3b, 0xf1, 0xfe, 0xf7, 0x90, 0x4d, 0x80, 0x23, 0xe7, 0xd5,
0x87, 0xf5, 0xc9, 0xf1, 0xb6, 0x73, 0x4e, 0x60, 0x57, 0xa8, 0x69, 0x4f, 0x97, 0xc7, 0xbd, 0xe9,
0xe9, 0xee, 0xd3, 0x5d, 0x63, 0x67, 0x36, 0x8a, 0x84, 0x0e, 0x48, 0xdc, 0x80, 0x56, 0x68, 0x11,
0x88, 0x1b, 0xb4, 0x12, 0xe2, 0x12, 0x2e, 0xb8, 0xe5, 0x1b, 0x20, 0x90, 0x90, 0xf6, 0x8a, 0x1b,
0xae, 0xf8, 0x02, 0x5c, 0x70, 0x8f, 0xea, 0xb5, 0xab, 0xba, 0xdb, 0x49, 0x10, 0x88, 0x2b, 0x4f,
0xfd, 0xea, 0xe9, 0xa7, 0xaa, 0x9e, 0x7a, 0xea, 0x79, 0xab, 0x32, 0x74, 0xb2, 0x74, 0xb4, 0x9d,
0x66, 0x09, 0x4d, 0x50, 0x2b, 0x8a, 0xb3, 0x74, 0x34, 0xbc, 0x3a, 0x4e, 0x92, 0x71, 0x44, 0x76,
0xfc, 0x34, 0xdc, 0xf1, 0xe3, 0x38, 0xa1, 0x3e, 0x0d, 0x93, 0x38, 0x17, 0x44, 0xf8, 0x3f, 0x1c,
0xe8, 0xbe, 0xc8, 0xfc, 0x38, 0xf7, 0x47, 0x0c, 0x46, 0x03, 0x58, 0xa0, 0xaf, 0xbd, 0x53, 0x3f,
0x3f, 0x1d, 0x38, 0xd7, 0x9d, 0xad, 0x8e, 0xab, 0x9a, 0x68, 0x03, 0xe6, 0xfd, 0x49, 0x32, 0x8d,
0xe9, 0xa0, 0x71, 0xdd, 0xd9, 0x9a, 0x73, 0x65, 0x0b, 0x7d, 0x17, 0x56, 0xe2, 0xe9, 0xc4, 0x1b,
0x25, 0xf1, 0x49, 0x98, 0x4d, 0x04, 0xf3, 0xc1, 0xdc, 0x75, 0x67, 0xab, 0xe5, 0x56, 0x3b, 0xd0,
0x35, 0x80, 0xe3, 0x28, 0x19, 0xbd, 0x12, 0x43, 0x34, 0xf9, 0x10, 0x06, 0x82, 0x30, 0xf4, 0x64,
0x8b, 0x84, 0xe3, 0x53, 0x3a, 0x68, 0x71, 0x46, 0x16, 0xc6, 0x78, 0xd0, 0x70, 0x42, 0xbc, 0x9c,
0xfa, 0x93, 0x74, 0x30, 0xcf, 0x67, 0x63, 0x20, 0xbc, 0x3f, 0xa1, 0x7e, 0xe4, 0x9d, 0x10, 0x92,
0x0f, 0x16, 0x64, 0xbf, 0x46, 0xf0, 0x00, 0x36, 0x9e, 0x11, 0x6a, 0xac, 0x3a, 0x77, 0xc9, 0xd7,
0x53, 0x92, 0x53, 0x7c, 0x00, 0xc8, 0x80, 0x1f, 0x13, 0xea, 0x87, 0x51, 0x8e, 0x3e, 0x81, 0x1e,
0x35, 0x88, 0x07, 0xce, 0xf5, 0xb9, 0xad, 0xee, 0x2e, 0xda, 0xe6, 0xf2, 0xdd, 0x36, 0x3e, 0x70,
0x2d, 0x3a, 0xfc, 0x2f, 0x0e, 0x74, 0x8f, 0x48, 0x1c, 0x48, 0xee, 0x08, 0x41, 0x33, 0x20, 0x39,
0xe5, 0x82, 0xed, 0xb9, 0xfc, 0x37, 0xfa, 0x16, 0x74, 0xd9, 0x5f, 0x2f, 0xa7, 0x59, 0x18, 0x8f,
0xb9, 0x68, 0x3b, 0x2e, 0x30, 0xe8, 0x88, 0x23, 0x68, 0x19, 0xe6, 0xfc, 0x09, 0xe5, 0x02, 0x9d,
0x73, 0xd9, 0x4f, 0x74, 0x03, 0x7a, 0xa9, 0x3f, 0x9b, 0x90, 0x98, 0x16, 0x42, 0xec, 0xb9, 0x5d,
0x89, 0xed, 0x33, 0x29, 0x6e, 0xc3, 0xaa, 0x49, 0xa2, 0xb8, 0xb7, 0x38, 0xf7, 0x15, 0x83, 0x52,
0x0e, 0x72, 0x0b, 0x96, 0x14, 0x7d, 0x26, 0x26, 0xcb, 0xc5, 0xda, 0x71, 0x17, 0x25, 0xac, 0x04,
0xf4, 0x67, 0x0e, 0xf4, 0xc4, 0x92, 0xf2, 0x34, 0x89, 0x73, 0x82, 0x6e, 0x42, 0x5f, 0x7d, 0x49,
0xb2, 0x2c, 0xc9, 0xa4, 0xd6, 0xd8, 0x20, 0xba, 0x0d, 0xcb, 0x0a, 0x48, 0x33, 0x12, 0x4e, 0xfc,
0x31, 0xe1, 0x4b, 0xed, 0xb9, 0x15, 0x1c, 0xed, 0x16, 0x1c, 0xb3, 0x64, 0x4a, 0x09, 0x5f, 0x7a,
0x77, 0xb7, 0x27, 0xc5, 0xed, 0x32, 0xcc, 0xb5, 0x49, 0xf0, 0x37, 0x0e, 0xf4, 0x1e, 0x9d, 0xfa,
0x71, 0x4c, 0xa2, 0xc3, 0x24, 0x8c, 0x29, 0x53, 0xa3, 0x93, 0x69, 0x1c, 0x84, 0xf1, 0xd8, 0xa3,
0xaf, 0xc3, 0x40, 0x8a, 0xdc, 0xc2, 0xd8, 0xa4, 0xcc, 0x36, 0x13, 0x92, 0x94, 0x7f, 0x05, 0x67,
0xfc, 0x92, 0x29, 0x4d, 0xa7, 0xd4, 0x0b, 0xe3, 0x80, 0xbc, 0xe6, 0x73, 0xea, 0xbb, 0x16, 0x86,
0x7f, 0x13, 0x96, 0x0f, 0x98, 0x7e, 0xc6, 0x61, 0x3c, 0xde, 0x0b, 0x82, 0x8c, 0xe4, 0x39, 0x3b,
0x34, 0xe9, 0xf4, 0xf8, 0x15, 0x99, 0x49, 0xb9, 0xc8, 0x16, 0x53, 0x85, 0xd3, 0x24, 0xa7, 0x72,
0x3c, 0xfe, 0x1b, 0xff, 0xd2, 0x81, 0x25, 0x26, 0xdb, 0xcf, 0xfd, 0x78, 0xa6, 0x54, 0xe6, 0x00,
0x7a, 0x8c, 0xd5, 0x8b, 0x64, 0x4f, 0x1c, 0x3d, 0xa1, 0x7a, 0x5b, 0x52, 0x16, 0x25, 0xea, 0x6d,
0x93, 0xf4, 0x49, 0x4c, 0xb3, 0x99, 0x6b, 0x7d, 0x3d, 0xfc, 0x14, 0x56, 0x2a, 0x24, 0x4c, 0xc1,
0x8a, 0xf9, 0xb1, 0x9f, 0x68, 0x0d, 0x5a, 0x67, 0x7e, 0x34, 0x25, 0xf2, 0xa0, 0x8b, 0xc6, 0xfd,
0xc6, 0x3d, 0x07, 0x7f, 0x0c, 0xcb, 0xc5, 0x98, 0x52, 0x03, 0x10, 0x34, 0xb5, 0x88, 0x3b, 0x2e,
0xff, 0xcd, 0x44, 0xc1, 0xe8, 0x1e, 0x25, 0xa1, 0x3e, 0x5b, 0x8c, 0xce, 0x0f, 0x02, 0xa5, 0x20,
0xfc, 0xf7, 0x45, 0x36, 0x05, 0xdf, 0x82, 0x15, 0xe3, 0xfb, 0x77, 0x0c, 0xf4, 0x57, 0x0e, 0xac,
0x3c, 0x27, 0xe7, 0x52, 0xdc, 0x6a, 0xa8, 0x7b, 0xd0, 0xa4, 0xb3, 0x94, 0x70, 0xca, 0xc5, 0xdd,
0x9b, 0x52, 0x5a, 0x15, 0xba, 0x6d, 0xd9, 0x7c, 0x31, 0x4b, 0x89, 0xcb, 0xbf, 0xc0, 0x5f, 0x40,
0xd7, 0x00, 0xd1, 0x26, 0xac, 0xbe, 0xfc, 0xec, 0xc5, 0xf3, 0x27, 0x47, 0x47, 0xde, 0xe1, 0x97,
0x0f, 0x7f, 0xf8, 0xe4, 0x77, 0xbc, 0xfd, 0xbd, 0xa3, 0xfd, 0xe5, 0x4b, 0x68, 0x03, 0xd0, 0xf3,
0x27, 0x47, 0x2f, 0x9e, 0x3c, 0xb6, 0x70, 0x07, 0x2d, 0x41, 0xd7, 0x04, 0x1a, 0x78, 0x08, 0x83,
0xe7, 0xe4, 0xfc, 0x65, 0x48, 0x63, 0x92, 0xe7, 0xf6, 0xf0, 0x78, 0x1b, 0x90, 0x39, 0x27, 0xb9,
0xcc, 0x01, 0x2c, 0xf8, 0x02, 0x52, 0x16, 0x58, 0x36, 0xf1, 0xc7, 0x80, 0x8e, 0xc2, 0x71, 0xfc,
0x39, 0xc9, 0x73, 0x7f, 0x4c, 0xd4, 0x62, 0x97, 0x61, 0x6e, 0x92, 0x8f, 0xa5, 0x86, 0xb3, 0x9f,
0xf8, 0x7b, 0xb0, 0x6a, 0xd1, 0x49, 0xc6, 0x57, 0xa1, 0x93, 0x87, 0xe3, 0xd8, 0xa7, 0xd3, 0x8c,
0x48, 0xd6, 0x05, 0x80, 0x9f, 0xc2, 0xda, 0x57, 0x24, 0x0b, 0x4f, 0x66, 0xef, 0x63, 0x6f, 0xf3,
0x69, 0x94, 0xf9, 0x3c, 0x81, 0xf5, 0x12, 0x1f, 0x39, 0xbc, 0xd0, 0x2a, 0xb9, 0x7f, 0x6d, 0x57,
0x34, 0x8c, 0x03, 0xd2, 0x30, 0x0f, 0x08, 0xfe, 0x12, 0xd0, 0xa3, 0x24, 0x8e, 0xc9, 0x88, 0x1e,
0x12, 0x92, 0xa9, 0xc9, 0x7c, 0xc7, 0xd0, 0xa1, 0xee, 0xee, 0xa6, 0xdc, 0xd8, 0xf2, 0xa9, 0x93,
0xca, 0x85, 0xa0, 0x99, 0x92, 0x6c, 0xc2, 0x19, 0xb7, 0x5d, 0xfe, 0x1b, 0xef, 0xc0, 0xaa, 0xc5,
0xb6, 0x90, 0x79, 0x4a, 0x48, 0xe6, 0xc9, 0xd9, 0xb5, 0x5c, 0xd5, 0xc4, 0x77, 0x61, 0xfd, 0x71,
0x98, 0x8f, 0xaa, 0x53, 0x61, 0x9f, 0x4c, 0x8f, 0xbd, 0xe2, 0xe8, 0xa8, 0x26, 0x73, 0x2f, 0xe5,
0x4f, 0xc4, 0x30, 0xf8, 0xef, 0x1d, 0x68, 0xee, 0xbf, 0x38, 0x78, 0x84, 0x86, 0xd0, 0x0e, 0xe3,
0x51, 0x32, 0x61, 0x46, 0x59, 0x88, 0x43, 0xb7, 0x2f, 0xf4, 0xb3, 0x57, 0xa1, 0xc3, 0x6d, 0x39,
0xf3, 0x84, 0xdc, 0xfe, 0xf4, 0xdc, 0x02, 0x60, 0x5e, 0x98, 0xbc, 0x4e, 0xc3, 0x8c, 0xbb, 0x59,
0xe5, 0x3c, 0x9b, 0xdc, 0x4a, 0x55, 0x3b, 0x98, 0xe9, 0xcb, 0xc8, 0x59, 0x32, 0x12, 0x60, 0x40,
0x22, 0x7f, 0xc6, 0x9d, 0x43, 0xdf, 0xad, 0xe0, 0xf8, 0x9f, 0x9a, 0xd0, 0xdf, 0x1b, 0xd1, 0xf0,
0x8c, 0x48, 0x0b, 0xcb, 0x67, 0xc8, 0x01, 0x39, 0x77, 0xd9, 0x62, 0xbe, 0x20, 0x23, 0x93, 0x84,
0x12, 0xcf, 0xda, 0x52, 0x1b, 0x64, 0x54, 0x23, 0xc1, 0xc8, 0x4b, 0x99, 0xad, 0xe6, 0x6b, 0xe9,
0xb8, 0x36, 0xc8, 0xc4, 0xcb, 0x00, 0xb6, 0x23, 0x6c, 0x15, 0x4d, 0x57, 0x35, 0x99, 0xec, 0x46,
0x7e, 0xea, 0x8f, 0x42, 0x2a, 0xe6, 0x3c, 0xe7, 0xea, 0x36, 0xe3, 0x1d, 0x25, 0x23, 0x3f, 0xf2,
0x8e, 0xfd, 0xc8, 0x8f, 0x47, 0x44, 0x06, 0x07, 0x36, 0x88, 0x3e, 0x86, 0x45, 0x39, 0x25, 0x45,
0x26, 0x62, 0x84, 0x12, 0xca, 0xe2, 0x88, 0x51, 0x32, 0x99, 0x84, 0x94, 0x85, 0x0d, 0x83, 0xb6,
0x88, 0x23, 0x0a, 0x84, 0xaf, 0x44, 0xb4, 0xce, 0x85, 0xbc, 0x3b, 0x62, 0x34, 0x0b, 0x64, 0x5c,
0x4e, 0x08, 0xf1, 0x52, 0x92, 0x79, 0xaf, 0xce, 0x07, 0x20, 0xb8, 0x14, 0x08, 0xdb, 0xb9, 0x69,
0x9c, 0x13, 0x4a, 0x23, 0x12, 0xe8, 0x09, 0x75, 0x39, 0x59, 0xb5, 0x03, 0xdd, 0x81, 0x55, 0x11,
0xc9, 0xe4, 0x3e, 0x4d, 0xf2, 0xd3, 0x30, 0xf7, 0x72, 0x12, 0xd3, 0x41, 0x8f, 0xd3, 0xd7, 0x75,
0xa1, 0x7b, 0xb0, 0x59, 0x82, 0x33, 0x32, 0x22, 0xe1, 0x19, 0x09, 0x06, 0x7d, 0xfe, 0xd5, 0x45,
0xdd, 0xe8, 0x3a, 0x74, 0x59, 0x00, 0x37, 0x4d, 0x03, 0x9f, 0x92, 0x7c, 0xb0, 0xc8, 0xf7, 0xc1,
0x84, 0xd0, 0x5d, 0xe8, 0xa7, 0x44, 0xb8, 0xca, 0x53, 0x1a, 0x8d, 0xf2, 0xc1, 0x12, 0xf7, 0x4f,
0x5d, 0x79, 0x30, 0x99, 0xae, 0xbb, 0x36, 0x05, 0x5e, 0x87, 0xd5, 0x83, 0x30, 0xa7, 0x52, 0x97,
0xb4, 0x2d, 0xdc, 0x87, 0x35, 0x1b, 0x96, 0x27, 0xf3, 0x0e, 0xb4, 0xa5, 0x62, 0xe4, 0x83, 0x2e,
0x67, 0xbe, 0x26, 0x99, 0x5b, 0x3a, 0xe9, 0x6a, 0x2a, 0xfc, 0x87, 0x0d, 0x68, 0xb2, 0x53, 0x77,
0xf1, 0x09, 0x35, 0x8f, 0x7b, 0xc3, 0x3a, 0xee, 0xa6, 0xf1, 0x9d, 0xb3, 0x8c, 0x2f, 0x0f, 0x5c,
0x67, 0x94, 0x48, 0x79, 0x0b, 0x9d, 0x34, 0x90, 0xa2, 0x3f, 0x23, 0xa3, 0x33, 0xae, 0x98, 0xba,
0x9f, 0x21, 0x4c, 0x6d, 0x73, 0x9f, 0x8a, 0xaf, 0x85, 0x56, 0xea, 0xb6, 0xea, 0xe3, 0x5f, 0x2e,
0x14, 0x7d, 0xfc, 0xbb, 0x01, 0x2c, 0x84, 0xf1, 0x71, 0x32, 0x8d, 0x03, 0xae, 0x81, 0x6d, 0x57,
0x35, 0x99, 0x41, 0x48, 0x79, 0x90, 0x12, 0x4e, 0x88, 0x54, 0xbd, 0x02, 0xc0, 0x88, 0x45, 0x23,
0x39, 0xb7, 0x3f, 0x5a, 0xc8, 0x9f, 0xc0, 0x8a, 0x81, 0x49, 0x09, 0xdf, 0x80, 0x16, 0x5b, 0xbd,
0x0a, 0x6b, 0xd5, 0xde, 0x71, 0xc3, 0x25, 0x7a, 0xf0, 0x32, 0x2c, 0x3e, 0x23, 0xf4, 0xb3, 0xf8,
0x24, 0x51, 0x9c, 0xfe, 0xb3, 0x01, 0x4b, 0x1a, 0x92, 0x8c, 0xb6, 0x60, 0x29, 0x0c, 0x48, 0x4c,
0x43, 0x3a, 0xf3, 0xac, 0xa0, 0xa7, 0x0c, 0x33, 0x57, 0xe0, 0x47, 0xa1, 0x9f, 0x4b, 0x03, 0x21,
0x1a, 0x68, 0x17, 0xd6, 0x98, 0x6e, 0x29, 0x75, 0xd1, 0xdb, 0x2e, 0x62, 0xad, 0xda, 0x3e, 0x76,
0x1c, 0x18, 0x2e, 0x0c, 0x50, 0xf1, 0x89, 0x30, 0x7c, 0x75, 0x5d, 0x4c, 0x6a, 0x82, 0x13, 0x5b,
0xb2, 0xb0, 0x79, 0x05, 0x50, 0x49, 0x3f, 0xe6, 0x45, 0x9c, 0x57, 0x4e, 0x3f, 0x8c, 0x14, 0xa6,
0x5d, 0x49, 0x61, 0xb6, 0x60, 0x29, 0x9f, 0xc5, 0x23, 0x12, 0x78, 0x34, 0x61, 0xe3, 0x86, 0x31,
0xdf, 0x9d, 0xb6, 0x5b, 0x86, 0x79, 0xb2, 0x45, 0x72, 0x1a, 0x13, 0xca, 0xed, 0x42, 0xdb, 0x55,
0x4d, 0x66, 0x62, 0x39, 0x89, 0x50, 0xfa, 0x8e, 0x2b, 0x5b, 0xf8, 0x67, 0xdc, 0x2d, 0xea, 0x7c,
0xea, 0x4b, 0x7e, 0x0e, 0xd1, 0x15, 0xe8, 0x88, 0xf1, 0xf3, 0x53, 0x5f, 0x7a, 0xea, 0x36, 0x07,
0x8e, 0x4e, 0x7d, 0x96, 0x2e, 0x58, 0x4b, 0x12, 0x1a, 0xdf, 0xe5, 0xd8, 0xbe, 0x58, 0xd1, 0x4d,
0x58, 0x54, 0x99, 0x5a, 0xee, 0x45, 0xe4, 0x84, 0xaa, 0xf8, 0x36, 0x9e, 0x4e, 0xd8, 0x70, 0xf9,
0x01, 0x39, 0xa1, 0xf8, 0x39, 0xac, 0xc8, 0xd3, 0xf6, 0x45, 0x4a, 0xd4, 0xd0, 0x3f, 0x28, 0x5b,
0x73, 0xe1, 0x9a, 0x57, 0xa5, 0x16, 0x99, 0x41, 0x79, 0xc9, 0xc4, 0x63, 0x17, 0x90, 0xec, 0x7e,
0x14, 0x25, 0x39, 0x91, 0x0c, 0x31, 0xf4, 0x46, 0x51, 0x92, 0x97, 0x23, 0x77, 0x13, 0x63, 0x72,
0xcb, 0xa7, 0xa3, 0x11, 0x3b, 0xa5, 0xc2, 0xb9, 0xab, 0x26, 0x26, 0xb0, 0xca, 0x99, 0x29, 0xb3,
0xa0, 0x03, 0xc2, 0x0f, 0x9f, 0x65, 0x6f, 0x64, 0x26, 0x12, 0x6b, 0xd0, 0x3a, 0x49, 0xb2, 0x11,
0x91, 0x03, 0x89, 0x06, 0xfe, 0x57, 0x07, 0x56, 0xf8, 0x38, 0x47, 0xd4, 0xa7, 0xd3, 0x5c, 0x4e,
0xfd, 0xd7, 0xa1, 0xcf, 0xa6, 0x49, 0x94, 0x9a, 0xca, 0x51, 0xd6, 0xf4, 0x89, 0xe2, 0xa8, 0x20,
0xde, 0xbf, 0xe4, 0xda, 0xc4, 0xe8, 0x53, 0xe8, 0x99, 0xa9, 0x32, 0x1f, 0xb0, 0xbb, 0x7b, 0x59,
0x4d, 0xb1, 0xb2, 0xeb, 0xfb, 0x97, 0x5c, 0xeb, 0x03, 0xf4, 0x00, 0x80, 0xfb, 0x48, 0xce, 0x56,
0x66, 0x4d, 0x97, 0xed, 0x15, 0x1a, 0x82, 0xde, 0xbf, 0xe4, 0x1a, 0xe4, 0x0f, 0xdb, 0x30, 0x2f,
0x8c, 0x3a, 0x7e, 0x06, 0x7d, 0x6b, 0xa6, 0x56, 0xdc, 0xdd, 0x13, 0x71, 0x77, 0x25, 0x1f, 0x6a,
0xd4, 0xe4, 0x43, 0xff, 0xe6, 0x00, 0x62, 0x9a, 0x52, 0xda, 0x8b, 0x8f, 0x61, 0x91, 0xfa, 0xd9,
0x98, 0x50, 0xcf, 0x0e, 0xb9, 0x4a, 0x28, 0xf7, 0x3e, 0x49, 0x60, 0xc5, 0x12, 0x3d, 0xd7, 0x84,
0xd0, 0x36, 0x20, 0xa3, 0xa9, 0x92, 0x5c, 0x61, 0xb7, 0x6b, 0x7a, 0x98, 0x81, 0x11, 0x81, 0x80,
0x4a, 0xef, 0x64, 0x9c, 0xd5, 0xe4, 0xb6, 0xb3, 0xb6, 0x8f, 0x99, 0xe6, 0x74, 0xca, 0x32, 0x68,
0x9f, 0xaa, 0x68, 0x43, 0xb5, 0xf1, 0xaf, 0x1c, 0x58, 0x66, 0x0b, 0xb4, 0x94, 0xe0, 0x3e, 0x70,
0x05, 0xfa, 0x40, 0x1d, 0xb0, 0x68, 0xff, 0xe7, 0x2a, 0x70, 0x0f, 0x3a, 0x9c, 0x61, 0x92, 0x92,
0x58, 0x6a, 0xc0, 0xc0, 0xd6, 0x80, 0xe2, 0xe8, 0xee, 0x5f, 0x72, 0x0b, 0x62, 0x63, 0xff, 0x37,
0x61, 0x5d, 0xce, 0xd2, 0xde, 0x38, 0xfc, 0x47, 0x00, 0x1b, 0xe5, 0x1e, 0xed, 0xa5, 0x65, 0xe8,
0x11, 0x85, 0x93, 0xe3, 0x44, 0x47, 0x31, 0x8e, 0x19, 0x95, 0x58, 0x5d, 0xe8, 0x04, 0xd6, 0x95,
0x31, 0x67, 0xe3, 0x17, 0xa6, 0xbb, 0xc1, 0xbd, 0xd0, 0x1d, 0x5b, 0x5e, 0xa5, 0xf1, 0x14, 0x6c,
0x6a, 0x57, 0x3d, 0x3b, 0x34, 0x86, 0x81, 0x76, 0x1a, 0xd2, 0x84, 0x18, 0x8e, 0x85, 0x0d, 0xf5,
0x9d, 0x77, 0x0f, 0xc5, 0x8f, 0x4c, 0xa0, 0xd0, 0x0b, 0x99, 0xa1, 0xd7, 0x70, 0x4d, 0xf5, 0x71,
0x1b, 0x51, 0x1d, 0xae, 0xf9, 0x21, 0x2b, 0x7b, 0xca, 0xbe, 0xb5, 0xc7, 0x7c, 0x0f, 0xdf, 0xe1,
0x3f, 0x3a, 0xb0, 0x68, 0x73, 0x63, 0x2e, 0x48, 0xc6, 0xb2, 0xea, 0x18, 0x28, 0x57, 0x5c, 0x82,
0xab, 0xd1, 0x78, 0xa3, 0x2e, 0x1a, 0x37, 0x63, 0xee, 0xb9, 0xf7, 0xc5, 0xdc, 0xcd, 0x0f, 0x8b,
0xb9, 0x5b, 0x75, 0x31, 0xf7, 0xf0, 0x97, 0x0d, 0x40, 0xd5, 0xdd, 0x45, 0x4f, 0x45, 0x3a, 0x10,
0x93, 0x48, 0x1e, 0xa8, 0xef, 0x7e, 0x90, 0x82, 0x28, 0x58, 0x7d, 0xcc, 0x14, 0xd5, 0x3c, 0x30,
0xa6, 0x4f, 0xec, 0xbb, 0x75, 0x5d, 0x2c, 0x55, 0xe2, 0xae, 0x32, 0xf7, 0x68, 0x18, 0x45, 0xc5,
0xc9, 0xea, 0xbb, 0x15, 0xbc, 0x94, 0x30, 0x34, 0xdf, 0x9f, 0x30, 0xb4, 0xde, 0x9f, 0x30, 0xcc,
0x97, 0x13, 0x86, 0xe1, 0x1b, 0xe8, 0x5b, 0x0a, 0xf2, 0xbf, 0x26, 0x9c, 0xb2, 0xeb, 0x15, 0xaa,
0x60, 0x61, 0xc3, 0x6f, 0x1a, 0x80, 0xaa, 0x3a, 0xfa, 0x7f, 0x39, 0x05, 0xae, 0x70, 0x96, 0x99,
0x99, 0x93, 0x0a, 0x67, 0x19, 0x98, 0x2d, 0x58, 0x9a, 0xf8, 0x74, 0x9a, 0xb1, 0xb0, 0xd3, 0x4a,
0x87, 0xcb, 0x30, 0xd3, 0x89, 0x62, 0x27, 0x3d, 0xd5, 0x2b, 0x63, 0xc3, 0xba, 0x2e, 0xfc, 0x03,
0x58, 0x7b, 0xe9, 0x47, 0x11, 0xa1, 0x0f, 0xc5, 0x60, 0xca, 0xb5, 0xdd, 0x80, 0xde, 0xb9, 0xa8,
0xf4, 0x78, 0x49, 0x1c, 0xcd, 0x64, 0x7a, 0xdc, 0x95, 0xd8, 0x17, 0x71, 0x34, 0xc3, 0x77, 0x61,
0xbd, 0xf4, 0x69, 0x51, 0x82, 0xb0, 0xcd, 0xa6, 0x6a, 0x32, 0x83, 0x2c, 0xe5, 0x64, 0x0f, 0x87,
0x77, 0x61, 0xa3, 0xdc, 0xf1, 0x5e, 0x66, 0x9f, 0x02, 0xfa, 0xd1, 0x94, 0x64, 0x33, 0x5e, 0x46,
0xd5, 0x05, 0xb3, 0xcd, 0x72, 0xaa, 0x34, 0x9f, 0x4e, 0x8f, 0x7f, 0x48, 0x66, 0xaa, 0xfa, 0xdc,
0xd0, 0xd5, 0x67, 0xfc, 0x00, 0x56, 0x2d, 0x06, 0xba, 0x0e, 0x3c, 0xcf, 0x4b, 0xb1, 0x2a, 0x8d,
0xb0, 0xcb, 0xb5, 0xb2, 0x0f, 0xff, 0x85, 0x03, 0x73, 0xfb, 0x49, 0x6a, 0x66, 0xf7, 0x8e, 0x9d,
0xdd, 0x4b, 0x7b, 0xe4, 0x69, 0x73, 0xd3, 0x90, 0x47, 0xc4, 0x04, 0x99, 0x35, 0xf1, 0x27, 0x94,
0x05, 0xd2, 0x27, 0x49, 0x76, 0xee, 0x67, 0x81, 0xd4, 0x81, 0x12, 0xca, 0xa6, 0x5f, 0x9c, 0x44,
0xf6, 0x93, 0x05, 0xd6, 0xbc, 0x1c, 0xa2, 0xf6, 0x57, 0xb6, 0xf0, 0xcf, 0x1d, 0x68, 0xf1, 0xb9,
0x32, 0xc5, 0x11, 0x0e, 0x8b, 0xdf, 0x28, 0xf0, 0x6a, 0x8b, 0x23, 0x14, 0xa7, 0x04, 0x97, 0xee,
0x19, 0x1a, 0xe5, 0x7b, 0x06, 0x96, 0x6a, 0x88, 0x56, 0x51, 0xc0, 0x2f, 0x00, 0x74, 0x0d, 0x9a,
0xa7, 0x49, 0xaa, 0xdc, 0x02, 0xa8, 0x94, 0x39, 0x49, 0x5d, 0x8e, 0xe3, 0xdb, 0xb0, 0xf4, 0x3c,
0x09, 0x88, 0x91, 0x75, 0x5d, 0xb8, 0x4d, 0xf8, 0xf7, 0x1d, 0x68, 0x2b, 0x62, 0xb4, 0x05, 0x4d,
0x66, 0xde, 0x4b, 0x91, 0x87, 0x2e, 0x92, 0x31, 0x3a, 0x97, 0x53, 0xb0, 0xd3, 0xc6, 0xe3, 0xfe,
0xc2, 0xf7, 0xaa, 0xa8, 0xbf, 0xf0, 0x6b, 0x2c, 0x5c, 0xe3, 0x73, 0x2e, 0x39, 0x80, 0x12, 0x8a,
0x7f, 0xe1, 0x40, 0xdf, 0x1a, 0x83, 0x05, 0x70, 0x91, 0x9f, 0x53, 0x59, 0x2c, 0x90, 0x42, 0x34,
0x21, 0x33, 0x43, 0x6f, 0xd8, 0x19, 0xba, 0xce, 0x10, 0xe7, 0xcc, 0x0c, 0xf1, 0x0e, 0x74, 0x64,
0x3a, 0x4e, 0x94, 0xdc, 0xd4, 0x2d, 0x0c, 0x1b, 0x51, 0x95, 0xff, 0x0a, 0x22, 0xfc, 0x00, 0xba,
0x46, 0x0f, 0x1b, 0x30, 0x26, 0xf4, 0x3c, 0xc9, 0x5e, 0xa9, 0x92, 0x80, 0x6c, 0xea, 0xea, 0x74,
0xa3, 0xa8, 0x4e, 0xe3, 0xbf, 0x75, 0xa0, 0xcf, 0x74, 0x22, 0x8c, 0xc7, 0x87, 0x49, 0x14, 0x8e,
0x66, 0x5c, 0x37, 0xd4, 0xf6, 0x7b, 0x01, 0x89, 0xa8, 0xaf, 0x75, 0xc3, 0x86, 0x99, 0xc7, 0x9c,
0x84, 0x31, 0xaf, 0x79, 0x48, 0xcd, 0xd0, 0x6d, 0xa6, 0xe3, 0xcc, 0x9c, 0x1f, 0xfb, 0x39, 0xf1,
0x26, 0x2c, 0xb0, 0x94, 0x06, 0xcc, 0x02, 0x99, 0x59, 0x62, 0x40, 0xe6, 0x53, 0xe2, 0x4d, 0xc2,
0x28, 0x0a, 0x05, 0xad, 0xd0, 0xe5, 0xba, 0x2e, 0xfc, 0x0f, 0x0d, 0xe8, 0x4a, 0x83, 0xf0, 0x24,
0x18, 0x8b, 0xfa, 0x95, 0x74, 0xe3, 0xfa, 0xa0, 0x19, 0x88, 0xea, 0xb7, 0x1c, 0xbf, 0x81, 0x94,
0x37, 0x70, 0xae, 0xba, 0x81, 0x2c, 0x99, 0x4e, 0x02, 0x72, 0x97, 0x47, 0x18, 0xe2, 0x32, 0xaf,
0x00, 0x54, 0xef, 0x2e, 0xef, 0x6d, 0x15, 0xbd, 0x1c, 0xb0, 0x62, 0x8a, 0xf9, 0x52, 0x4c, 0x71,
0x0f, 0x7a, 0x92, 0x0d, 0x97, 0x3b, 0x2f, 0x8a, 0x14, 0xaa, 0x6c, 0xed, 0x89, 0x6b, 0x51, 0xaa,
0x2f, 0x77, 0xd5, 0x97, 0xed, 0xf7, 0x7d, 0xa9, 0x28, 0xf1, 0x3a, 0xac, 0x4a, 0xe1, 0x3d, 0xcb,
0xfc, 0xf4, 0x54, 0x19, 0xd9, 0x40, 0xdf, 0x2c, 0x71, 0x18, 0xdd, 0x86, 0x16, 0xfb, 0x4c, 0xd9,
0xb9, 0xfa, 0xe3, 0x25, 0x48, 0xd0, 0x16, 0xb4, 0x48, 0x30, 0x26, 0x2a, 0xa8, 0x45, 0x76, 0x28,
0xce, 0xf6, 0xc8, 0x15, 0x04, 0xec, 0xb0, 0x33, 0xb4, 0x74, 0xd8, 0x6d, 0x1b, 0x39, 0xcf, 0x9a,
0x9f, 0x05, 0x78, 0x0d, 0xd0, 0x73, 0xa1, 0xb5, 0x66, 0x45, 0xe6, 0x0f, 0xe6, 0xa0, 0x6b, 0xc0,
0xec, 0xdc, 0x8e, 0xd9, 0x84, 0xbd, 0x20, 0xf4, 0x27, 0x84, 0x92, 0x4c, 0x6a, 0x6a, 0x09, 0xe5,
0xa6, 0xf4, 0x6c, 0xec, 0x25, 0x53, 0xea, 0x05, 0x64, 0x9c, 0x11, 0x91, 0xe9, 0x3a, 0x6e, 0x09,
0x65, 0x74, 0x13, 0xff, 0xb5, 0x49, 0x27, 0xf4, 0xa1, 0x84, 0xaa, 0xfa, 0x8a, 0x90, 0x51, 0xb3,
0xa8, 0xaf, 0x08, 0x89, 0x94, 0x2d, 0x4e, 0xab, 0xc6, 0xe2, 0x7c, 0x02, 0x1b, 0xc2, 0xb6, 0xc8,
0xb3, 0xe9, 0x95, 0xd4, 0xe4, 0x82, 0x5e, 0x16, 0xa9, 0xb1, 0x39, 0x2b, 0x05, 0xcf, 0xc3, 0x9f,
0x89, 0xc2, 0xae, 0xe3, 0x56, 0x70, 0x46, 0xcb, 0x8e, 0xa3, 0x45, 0x2b, 0x0a, 0xbc, 0x15, 0x9c,
0xd3, 0xfa, 0xaf, 0x6d, 0xda, 0x8e, 0xa4, 0x2d, 0xe1, 0xb8, 0x0f, 0xdd, 0x23, 0x9a, 0xa4, 0x6a,
0x53, 0x16, 0xa1, 0x27, 0x9a, 0xf2, 0x02, 0xe0, 0x0a, 0x5c, 0xe6, 0x5a, 0xf4, 0x22, 0x49, 0x93,
0x28, 0x19, 0xcf, 0x8e, 0xa6, 0xc7, 0xf9, 0x28, 0x0b, 0x53, 0x16, 0x70, 0xe2, 0x7f, 0x76, 0x60,
0xd5, 0xea, 0x95, 0x19, 0xe5, 0xff, 0x17, 0x2a, 0xad, 0xeb, 0xb0, 0x42, 0xf1, 0x56, 0x0c, 0xc3,
0x27, 0x08, 0x45, 0x72, 0xfc, 0xa5, 0x2c, 0xcd, 0xee, 0xc1, 0x92, 0x9a, 0x99, 0xfa, 0x50, 0x68,
0xe1, 0xa0, 0xaa, 0x85, 0xf2, 0xfb, 0x45, 0xf9, 0x81, 0x62, 0xf1, 0x1b, 0x22, 0x18, 0x23, 0x01,
0x5f, 0xa3, 0xca, 0x97, 0x86, 0xea, 0x7b, 0x33, 0x00, 0x54, 0x33, 0x18, 0x69, 0x30, 0xc7, 0x7f,
0xec, 0x00, 0x14, 0xb3, 0x63, 0x8a, 0x51, 0x18, 0x6f, 0x87, 0x57, 0xb5, 0x0a, 0x80, 0x85, 0x4e,
0xba, 0x4a, 0x58, 0xf8, 0x83, 0xae, 0xc2, 0x58, 0x2c, 0x72, 0x0b, 0x96, 0xc6, 0x51, 0x72, 0xcc,
0xbd, 0x2b, 0xbf, 0x6b, 0xca, 0xe5, 0x35, 0xc8, 0xa2, 0x80, 0x9f, 0x4a, 0xb4, 0x70, 0x1e, 0x4d,
0xc3, 0x79, 0xe0, 0x3f, 0x69, 0xe8, 0xfa, 0x55, 0xb1, 0xe6, 0x0b, 0x4f, 0x19, 0xda, 0xad, 0x18,
0xc7, 0x0b, 0xea, 0x45, 0x3c, 0x89, 0x3e, 0x7c, 0x6f, 0x9a, 0xf4, 0x00, 0x16, 0x33, 0x61, 0x7d,
0x94, 0x69, 0x6a, 0xbe, 0xc3, 0x34, 0xf5, 0x33, 0xcb, 0xef, 0xfc, 0x3f, 0x58, 0xf6, 0x83, 0x33,
0x92, 0xd1, 0x90, 0x87, 0xc1, 0xdc, 0xbd, 0x0b, 0x83, 0xba, 0x64, 0xe0, 0xdc, 0xeb, 0xde, 0x82,
0x25, 0x79, 0xf5, 0xa4, 0x29, 0xe5, 0x55, 0x7e, 0x01, 0x33, 0x42, 0xfc, 0xd7, 0x8e, 0xac, 0x95,
0xd9, 0x7b, 0x78, 0xb1, 0x44, 0xcc, 0xd5, 0x35, 0x4a, 0xab, 0xfb, 0xb6, 0x2c, 0x7d, 0x05, 0x2a,
0xd6, 0x96, 0x05, 0x44, 0x01, 0xca, 0x32, 0xa3, 0x2d, 0xd2, 0xe6, 0x87, 0x88, 0x14, 0x6f, 0xc3,
0xd2, 0x11, 0xa1, 0x7b, 0x6c, 0x07, 0x95, 0x61, 0xbc, 0x02, 0x9d, 0x98, 0x9c, 0x7b, 0x62, 0x8b,
0x85, 0x1b, 0x6f, 0xc7, 0xe4, 0x9c, 0xd3, 0x60, 0x04, 0xcb, 0x05, 0xbd, 0x3c, 0x75, 0x7f, 0xda,
0x80, 0x85, 0xcf, 0xe2, 0xb3, 0x24, 0x1c, 0xf1, 0x62, 0xd6, 0x84, 0x4c, 0x12, 0x75, 0x89, 0xcc,
0x7e, 0xb3, 0xa8, 0x80, 0xdf, 0x79, 0xa4, 0x54, 0x56, 0x99, 0x54, 0x93, 0x79, 0xc8, 0xac, 0x78,
0xb1, 0x20, 0xb4, 0xcd, 0x40, 0x58, 0x34, 0x99, 0x99, 0x8f, 0x30, 0x64, 0xab, 0xb8, 0x41, 0x6f,
0x19, 0x37, 0xe8, 0xbc, 0x6c, 0x29, 0xae, 0x73, 0xf8, 0x96, 0xb4, 0x5d, 0xd5, 0xe4, 0x51, 0x6f,
0x46, 0xe4, 0xad, 0x1b, 0xf3, 0xb5, 0x0b, 0x32, 0xea, 0x35, 0x41, 0xe6, 0x8f, 0xc5, 0x07, 0x82,
0x46, 0xd8, 0x2b, 0x13, 0x62, 0xf1, 0x49, 0xf9, 0x1d, 0x47, 0x47, 0xa8, 0x49, 0x09, 0xc6, 0x5f,
0x01, 0xda, 0x0b, 0x02, 0x29, 0x15, 0x1d, 0xc5, 0x17, 0xeb, 0x71, 0xac, 0xf5, 0xd4, 0xf0, 0x6d,
0xd4, 0xf3, 0x7d, 0x02, 0xdd, 0x43, 0xe3, 0x21, 0x0a, 0x17, 0xa0, 0x7a, 0x82, 0x22, 0x85, 0x6e,
0x20, 0xc6, 0x80, 0x0d, 0x73, 0x40, 0xfc, 0x6b, 0x80, 0x0e, 0xc2, 0x9c, 0xea, 0xf9, 0xe9, 0xfc,
0x4a, 0x57, 0x79, 0x8c, 0xfc, 0x4a, 0x62, 0x3c, 0xbf, 0xda, 0x13, 0xd7, 0x4b, 0xe5, 0x85, 0xdd,
0x86, 0x76, 0x28, 0x20, 0x65, 0x3f, 0x17, 0xa5, 0xe2, 0x29, 0x4a, 0xdd, 0xcf, 0x02, 0x01, 0x09,
0x5a, 0xe6, 0xf9, 0xe7, 0x0e, 0x2c, 0xc8, 0xa5, 0x31, 0x37, 0x66, 0x3d, 0xc1, 0x11, 0x0b, 0xb3,
0xb0, 0xfa, 0x57, 0x14, 0xd5, 0x9d, 0x9e, 0xab, 0xdb, 0x69, 0x04, 0xcd, 0xd4, 0xa7, 0xa7, 0x3c,
0xc6, 0xed, 0xb8, 0xfc, 0xb7, 0xca, 0x65, 0x5a, 0x3a, 0x97, 0x51, 0x57, 0x69, 0x72, 0x52, 0xfa,
0x96, 0xe7, 0xa1, 0xb8, 0x4a, 0x2b, 0xe0, 0x42, 0x06, 0x72, 0x82, 0x65, 0x19, 0x48, 0x52, 0x57,
0xf7, 0xe3, 0x21, 0x0c, 0x1e, 0x93, 0x88, 0x50, 0xb2, 0x17, 0x45, 0x65, 0xfe, 0x57, 0xe0, 0x72,
0x4d, 0x9f, 0x3c, 0x6b, 0x4f, 0x61, 0xe5, 0x31, 0x39, 0x9e, 0x8e, 0x0f, 0xc8, 0x59, 0x51, 0xf2,
0x45, 0xd0, 0xcc, 0x4f, 0x93, 0x73, 0xb9, 0x5f, 0xfc, 0x37, 0xfa, 0x08, 0x20, 0x62, 0x34, 0x5e,
0x9e, 0x92, 0x91, 0x7a, 0x46, 0xc0, 0x91, 0xa3, 0x94, 0x8c, 0xf0, 0x27, 0x80, 0x4c, 0x3e, 0x72,
0x09, 0xec, 0x04, 0x4c, 0x8f, 0xbd, 0x7c, 0x96, 0x53, 0x32, 0x51, 0x87, 0xdf, 0x84, 0xf0, 0x2d,
0xe8, 0x1d, 0xfa, 0x33, 0x97, 0x7c, 0x2d, 0x5f, 0x36, 0xb1, 0x94, 0xc9, 0x9f, 0x31, 0xf5, 0xd4,
0x29, 0x13, 0xef, 0xc6, 0x19, 0xcc, 0x0b, 0x42, 0xc6, 0x34, 0x20, 0x39, 0x0d, 0x63, 0x51, 0x74,
0x95, 0x4c, 0x0d, 0xa8, 0xb2, 0xdd, 0x8d, 0x9a, 0xed, 0x96, 0x91, 0x8d, 0xba, 0x45, 0x95, 0xfb,
0x6a, 0x61, 0xcc, 0x38, 0x3d, 0x25, 0xc4, 0x25, 0x69, 0x92, 0xe9, 0x17, 0x55, 0x7f, 0xe9, 0xc0,
0xb2, 0x34, 0x7e, 0xba, 0x0f, 0xdd, 0xb0, 0x2c, 0xa5, 0x53, 0x57, 0x92, 0xbb, 0x09, 0x7d, 0x9e,
0x2b, 0xb0, 0x44, 0x80, 0x27, 0x06, 0x32, 0x51, 0xb6, 0x40, 0xb6, 0x36, 0x55, 0x39, 0x9a, 0x84,
0x91, 0x9c, 0x94, 0x09, 0x31, 0xab, 0xae, 0x72, 0x09, 0x6e, 0xc4, 0x1c, 0x57, 0xb7, 0xf1, 0x21,
0xac, 0x18, 0xf3, 0x95, 0x7b, 0xf0, 0x00, 0xd4, 0x0d, 0x89, 0xc8, 0x7b, 0x85, 0x2a, 0x6d, 0xda,
0x76, 0xbc, 0xf8, 0xcc, 0x22, 0xc6, 0x7f, 0xe7, 0x70, 0x11, 0xc8, 0x70, 0x41, 0x3f, 0xa5, 0x98,
0x17, 0x1e, 0x5c, 0x28, 0xc8, 0xfe, 0x25, 0x57, 0xb6, 0xd1, 0xf7, 0x3f, 0xd0, 0x09, 0xeb, 0xcb,
0x8c, 0x0b, 0x64, 0x33, 0x57, 0x27, 0x9b, 0x77, 0xac, 0xfc, 0xe1, 0x02, 0xb4, 0xf2, 0x51, 0x92,
0x12, 0xbc, 0xca, 0x45, 0xa0, 0xe6, 0x2b, 0x44, 0xb0, 0xfb, 0x37, 0x57, 0xa0, 0xa3, 0x03, 0x7e,
0xf4, 0x53, 0xe8, 0x5b, 0x25, 0x1d, 0x74, 0x45, 0xce, 0xb0, 0xae, 0x46, 0x34, 0xbc, 0x5a, 0xdf,
0x29, 0x8f, 0xcf, 0xb5, 0x6f, 0x7e, 0xf5, 0xef, 0xbf, 0x68, 0x0c, 0xd0, 0xc6, 0xce, 0xd9, 0xdd,
0x1d, 0x59, 0xb3, 0xd9, 0xe1, 0x25, 0x28, 0x71, 0x63, 0xf8, 0x0a, 0x16, 0xed, 0x92, 0x0f, 0xba,
0x6a, 0x8b, 0xa3, 0x34, 0xda, 0x47, 0x17, 0xf4, 0xca, 0xe1, 0xae, 0xf2, 0xe1, 0x36, 0xd0, 0x9a,
0x39, 0x9c, 0x0e, 0xc4, 0x09, 0xbf, 0xe3, 0x35, 0xdf, 0x49, 0x22, 0xc5, 0xaf, 0xfe, 0xfd, 0xe4,
0xf0, 0x72, 0xf5, 0x4d, 0xa4, 0x7c, 0x44, 0x89, 0x07, 0x7c, 0x28, 0x84, 0x96, 0xd9, 0x50, 0xe6,
0x33, 0x49, 0xf4, 0x13, 0xe8, 0xe8, 0xc7, 0x5e, 0x68, 0xd3, 0x78, 0xda, 0x66, 0x3e, 0x1f, 0x1b,
0x0e, 0xaa, 0x1d, 0x2a, 0xa8, 0xe6, 0x9c, 0xd7, 0x71, 0x85, 0xf3, 0x7d, 0xe7, 0x36, 0x3a, 0x80,
0x75, 0x69, 0xc5, 0x8f, 0xc9, 0x7f, 0x67, 0x25, 0x35, 0xaf, 0x3b, 0xef, 0x38, 0xe8, 0x01, 0xb4,
0xd5, 0xfb, 0x37, 0xb4, 0x51, 0xff, 0x08, 0x6f, 0xb8, 0x59, 0xc1, 0xe5, 0xc1, 0xd9, 0x03, 0x28,
0x9e, 0x7b, 0xa1, 0xc1, 0x45, 0xaf, 0xd2, 0xb4, 0x10, 0x6b, 0xde, 0x86, 0x8d, 0xf9, 0x6b, 0x37,
0xfb, 0x35, 0x19, 0xfa, 0x56, 0x41, 0x5f, 0xfb, 0xce, 0xec, 0x1d, 0x0c, 0xf1, 0x06, 0x97, 0xdd,
0x32, 0x5a, 0x64, 0xb2, 0x8b, 0xc9, 0xb9, 0x7a, 0xed, 0xf0, 0x18, 0xba, 0xc6, 0x13, 0x32, 0xa4,
0x38, 0x54, 0x9f, 0x9f, 0x0d, 0x87, 0x75, 0x5d, 0x72, 0xba, 0xbf, 0x05, 0x7d, 0xeb, 0x2d, 0x98,
0x3e, 0x19, 0x75, 0x2f, 0xcd, 0xf4, 0xc9, 0xa8, 0x7f, 0x3e, 0xf6, 0x63, 0xe8, 0x1a, 0x2f, 0xb7,
0x90, 0x71, 0x29, 0x56, 0x7a, 0x99, 0xa5, 0x67, 0x54, 0xf3, 0xd0, 0x0b, 0xaf, 0xf1, 0xf5, 0x2e,
0xe2, 0x0e, 0x5b, 0x2f, 0xbf, 0xf2, 0x67, 0x4a, 0xf2, 0x53, 0x58, 0xb4, 0x5f, 0x6c, 0xe9, 0x53,
0x55, 0xfb, 0xf6, 0x4b, 0x9f, 0xaa, 0x0b, 0x9e, 0x79, 0x49, 0x85, 0xbc, 0xbd, 0xaa, 0x07, 0xd9,
0x79, 0x23, 0x0b, 0x5b, 0x6f, 0xd1, 0x8f, 0x98, 0xe9, 0x90, 0x6f, 0x30, 0x50, 0xf1, 0x82, 0xcd,
0x7e, 0xa9, 0xa1, 0xb5, 0xbd, 0xf2, 0x5c, 0x03, 0xaf, 0x70, 0xe6, 0x5d, 0x54, 0xac, 0x00, 0x7d,
0x0e, 0x0b, 0xf2, 0x2d, 0x06, 0x5a, 0x2f, 0xb4, 0xda, 0x28, 0x0e, 0x0c, 0x37, 0xca, 0xb0, 0x64,
0xb6, 0xca, 0x99, 0xf5, 0x51, 0x97, 0x31, 0x1b, 0x13, 0x1a, 0x32, 0x1e, 0x11, 0x2c, 0xd9, 0xe5,
0xf9, 0x5c, 0x8b, 0xa3, 0xf6, 0x62, 0x50, 0x8b, 0xa3, 0xbe, 0xd6, 0x6f, 0x1b, 0x19, 0x65, 0x5c,
0x76, 0xd4, 0x9d, 0xe7, 0xef, 0x42, 0xcf, 0x7c, 0xf8, 0x83, 0x86, 0xc6, 0xca, 0x4b, 0x8f, 0x84,
0x86, 0x57, 0x6a, 0xfb, 0xec, 0xad, 0x45, 0x3d, 0x73, 0x18, 0xf4, 0x63, 0x58, 0x32, 0xee, 0x91,
0x8e, 0x66, 0xf1, 0x48, 0xab, 0x4e, 0xf5, 0x6e, 0x7a, 0x58, 0xe7, 0x5b, 0xf0, 0x26, 0x67, 0xbc,
0x82, 0x2d, 0xc6, 0x4c, 0x6d, 0x1e, 0x41, 0xd7, 0xbc, 0xa3, 0x7a, 0x07, 0xdf, 0x4d, 0xa3, 0xcb,
0xbc, 0x2d, 0xbe, 0xe3, 0xa0, 0x3f, 0x77, 0xa0, 0x67, 0x3e, 0x59, 0x40, 0x56, 0x7e, 0x5d, 0xe2,
0x33, 0x30, 0xfb, 0x4c, 0x46, 0xf8, 0x39, 0x9f, 0xe4, 0xfe, 0xed, 0xa7, 0x96, 0x90, 0xdf, 0x58,
0x31, 0xc3, 0xb6, 0xf9, 0xac, 0xf9, 0x6d, 0xb9, 0xd3, 0xbc, 0xbb, 0x7f, 0x7b, 0xc7, 0x41, 0xf7,
0xc5, 0xe3, 0x75, 0x15, 0xf2, 0x22, 0xc3, 0xac, 0x95, 0xc5, 0x65, 0xbe, 0x08, 0xdf, 0x72, 0xee,
0x38, 0xe8, 0xf7, 0xc4, 0x4b, 0x66, 0xf9, 0x2d, 0x97, 0xfa, 0x87, 0x7e, 0x8f, 0x6f, 0xf2, 0x95,
0x5c, 0xc3, 0x97, 0xad, 0x95, 0x94, 0xed, 0xfa, 0x21, 0x40, 0x91, 0xbf, 0xa0, 0x52, 0x30, 0xaf,
0x2d, 0x5e, 0x35, 0xc5, 0xb1, 0x77, 0x53, 0xc5, 0xfc, 0xc2, 0x08, 0xf4, 0x8c, 0xcc, 0x21, 0xd7,
0xdb, 0x59, 0xcd, 0x43, 0x86, 0xc3, 0xba, 0x2e, 0xc9, 0xff, 0xdb, 0x9c, 0xff, 0x47, 0xe8, 0x8a,
0xc9, 0x7f, 0xe7, 0x8d, 0x99, 0xb7, 0xbc, 0x45, 0x5f, 0x41, 0xff, 0x20, 0x49, 0x5e, 0x4d, 0x53,
0x9d, 0x96, 0xda, 0x91, 0x38, 0xcb, 0x9d, 0x86, 0xa5, 0x45, 0xe1, 0x1b, 0x9c, 0xf3, 0x15, 0x74,
0xd9, 0xe6, 0x5c, 0x64, 0x53, 0x6f, 0x91, 0x0f, 0x2b, 0xda, 0xdb, 0xe9, 0x85, 0x0c, 0x6d, 0x3e,
0x66, 0x52, 0x53, 0x19, 0xc3, 0x8a, 0x3f, 0xf4, 0x18, 0xb9, 0xe2, 0x79, 0xc7, 0x41, 0x87, 0xd0,
0x7b, 0x4c, 0x46, 0x49, 0x40, 0x64, 0xf4, 0xbc, 0x5a, 0xcc, 0x5c, 0x47, 0xdd, 0xc3, 0xbe, 0x05,
0xda, 0x16, 0x20, 0xf5, 0x67, 0x19, 0xf9, 0x7a, 0xe7, 0x8d, 0x0c, 0xcb, 0xdf, 0x2a, 0x0b, 0xa0,
0x52, 0x09, 0xcb, 0x02, 0x94, 0x72, 0x0f, 0xcb, 0x02, 0x54, 0x72, 0x0f, 0xcb, 0x02, 0xa8, 0x54,
0x06, 0x45, 0x2c, 0x23, 0x29, 0xa5, 0x2b, 0xda, 0x67, 0x5e, 0x94, 0xe4, 0x0c, 0xaf, 0x5f, 0x4c,
0x60, 0x8f, 0x76, 0xdb, 0x1e, 0xed, 0x08, 0xfa, 0x8f, 0x89, 0x10, 0x96, 0xa8, 0x17, 0x0f, 0x6d,
0x93, 0x62, 0xd6, 0x96, 0xcb, 0xe6, 0x86, 0xf7, 0xd9, 0x06, 0x9e, 0x17, 0x6b, 0xd1, 0x4f, 0xa0,
0xfb, 0x8c, 0x50, 0x55, 0x20, 0xd6, 0x91, 0x47, 0xa9, 0x62, 0x3c, 0xac, 0xa9, 0x2f, 0xe3, 0xeb,
0x9c, 0xdb, 0x10, 0x0d, 0x34, 0xb7, 0x1d, 0x12, 0x8c, 0x89, 0x38, 0xfc, 0x5e, 0x18, 0xbc, 0x45,
0xbf, 0xcd, 0x99, 0xeb, 0xdb, 0xa3, 0x0d, 0xa3, 0xae, 0x68, 0x32, 0x5f, 0x2a, 0xe1, 0x75, 0x9c,
0xe3, 0x24, 0x20, 0x86, 0xab, 0x8b, 0xa1, 0x6b, 0x5c, 0x15, 0xea, 0x03, 0x55, 0xbd, 0x7f, 0xd4,
0x07, 0xaa, 0xe6, 0x66, 0x11, 0x6f, 0xf1, 0x71, 0x30, 0xba, 0x5e, 0x8c, 0x23, 0x6e, 0x13, 0x8b,
0x91, 0x76, 0xde, 0xf8, 0x13, 0xfa, 0x16, 0xbd, 0xe4, 0xcf, 0x14, 0xcd, 0x22, 0x78, 0x11, 0xf9,
0x94, 0xeb, 0xe5, 0x5a, 0x58, 0x46, 0x97, 0x1d, 0x0d, 0x89, 0xa1, 0xb8, 0x47, 0xfc, 0x3e, 0xc0,
0x11, 0x4d, 0xd2, 0xc7, 0x3e, 0x99, 0x24, 0x71, 0x61, 0xc9, 0x8a, 0x42, 0x6f, 0x61, 0xc9, 0x8c,
0x6a, 0x2f, 0x7a, 0x69, 0xc4, 0x9e, 0xd6, 0x1d, 0x82, 0x52, 0xae, 0x0b, 0x6b, 0xc1, 0x5a, 0x20,
0x35, 0xf5, 0x60, 0x15, 0x86, 0x8a, 0x22, 0x97, 0x11, 0x86, 0x5a, 0x55, 0x32, 0x23, 0x0c, 0xb5,
0xab, 0x61, 0x2c, 0x0c, 0x2d, 0x32, 0x6b, 0x1d, 0x86, 0x56, 0x92, 0x76, 0x6d, 0x43, 0x6b, 0xd2,
0xf0, 0x43, 0xe8, 0x14, 0xb9, 0xaa, 0x1a, 0xa8, 0x9c, 0xd9, 0x6a, 0x67, 0x55, 0x49, 0x21, 0xf1,
0x32, 0x97, 0x33, 0xa0, 0x36, 0x93, 0x33, 0xbf, 0x2a, 0x7d, 0x01, 0x20, 0x56, 0xf7, 0x94, 0xb5,
0x0c, 0x96, 0x56, 0xa6, 0x68, 0xb2, 0xb4, 0x53, 0x32, 0x15, 0xc9, 0x60, 0xcd, 0xf2, 0xbe, 0x73,
0xfb, 0x78, 0x9e, 0xff, 0x8f, 0xdb, 0xf7, 0xfe, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x4b, 0xa3,
0x9d, 0x15, 0x37, 0x00, 0x00,
}

@ -1,6 +1,5 @@
// Code generated by protoc-gen-grpc-gateway
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: rpc.proto
// DO NOT EDIT!
/*
Package lnrpc is a reverse proxy.
@ -20,10 +19,12 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
@ -36,7 +37,7 @@ func request_Lightning_WalletBalance_0(ctx context.Context, marshaler runtime.Ma
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_WalletBalance_0); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.WalletBalance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -67,7 +68,7 @@ func request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marsha
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SendCoins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -89,7 +90,7 @@ func request_Lightning_ConnectPeer_0(ctx context.Context, marshaler runtime.Mars
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ConnectPeer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -110,13 +111,13 @@ func request_Lightning_DisconnectPeer_0(ctx context.Context, marshaler runtime.M
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
msg, err := client.DisconnectPeer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -165,7 +166,7 @@ func request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.OpenChannelSync(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -174,7 +175,7 @@ func request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.
}
var (
filter_Lightning_CloseChannel_0 = &utilities.DoubleArray{Encoding: map[string]int{"channel_point": 0, "funding_txid": 1, "output_index": 2, "force": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 1, 3, 4, 5}}
filter_Lightning_CloseChannel_0 = &utilities.DoubleArray{Encoding: map[string]int{"channel_point": 0, "funding_txid": 1, "output_index": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}}
)
func request_Lightning_CloseChannel_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_CloseChannelClient, runtime.ServerMetadata, error) {
@ -190,39 +191,28 @@ func request_Lightning_CloseChannel_0(ctx context.Context, marshaler runtime.Mar
val, ok = pathParams["channel_point.funding_txid"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.funding_txid")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.funding_txid")
}
err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.funding_txid", val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.funding_txid", err)
}
val, ok = pathParams["channel_point.output_index"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.output_index")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.output_index")
}
err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.output_index", val)
if err != nil {
return nil, metadata, err
}
val, ok = pathParams["force"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "force")
}
protoReq.Force, err = runtime.Bool(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.output_index", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_CloseChannel_0); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.CloseChannel(ctx, &protoReq)
@ -243,7 +233,7 @@ func request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SendPaymentSync(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -256,7 +246,7 @@ func request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marsh
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.AddInvoice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -277,13 +267,13 @@ func request_Lightning_ListInvoices_0(ctx context.Context, marshaler runtime.Mar
val, ok = pathParams["pending_only"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pending_only")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pending_only")
}
protoReq.PendingOnly, err = runtime.Bool(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pending_only", err)
}
msg, err := client.ListInvoices(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -308,17 +298,17 @@ func request_Lightning_LookupInvoice_0(ctx context.Context, marshaler runtime.Ma
val, ok = pathParams["r_hash_str"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "r_hash_str")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "r_hash_str")
}
protoReq.RHashStr, err = runtime.String(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "r_hash_str", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_LookupInvoice_0); err != nil {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.LookupInvoice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -356,13 +346,13 @@ func request_Lightning_DecodePayReq_0(ctx context.Context, marshaler runtime.Mar
val, ok = pathParams["pay_req"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pay_req")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pay_req")
}
protoReq.PayReq, err = runtime.String(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pay_req", err)
}
msg, err := client.DecodePayReq(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -410,13 +400,13 @@ func request_Lightning_GetChanInfo_0(ctx context.Context, marshaler runtime.Mars
val, ok = pathParams["chan_id"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_id")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_id")
}
protoReq.ChanId, err = runtime.Uint64(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_id", err)
}
msg, err := client.GetChanInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -437,13 +427,13 @@ func request_Lightning_GetNodeInfo_0(ctx context.Context, marshaler runtime.Mars
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
msg, err := client.GetNodeInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -464,24 +454,24 @@ func request_Lightning_QueryRoutes_0(ctx context.Context, marshaler runtime.Mars
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
val, ok = pathParams["amt"]
if !ok {
return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "amt")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "amt")
}
protoReq.Amt, err = runtime.Int64(val)
if err != nil {
return nil, metadata, err
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "amt", err)
}
msg, err := client.QueryRoutes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@ -498,6 +488,28 @@ func request_Lightning_GetNetworkInfo_0(ctx context.Context, marshaler runtime.M
}
func request_Lightning_FeeReport_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FeeReportRequest
var metadata runtime.ServerMetadata
msg, err := client.FeeReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func request_Lightning_UpdateFees_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FeeUpdateRequest
var metadata runtime.ServerMetadata
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.UpdateFees(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
// RegisterLightningHandlerFromEndpoint is same as RegisterLightningHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterLightningHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
@ -541,18 +553,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_WalletBalance_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_WalletBalance_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_WalletBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -569,18 +582,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ChannelBalance_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ChannelBalance_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ChannelBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -597,18 +611,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_GetTransactions_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetTransactions_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_GetTransactions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -625,18 +640,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SendCoins_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendCoins_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_SendCoins_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -653,18 +669,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_NewWitnessAddress_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_NewWitnessAddress_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_NewWitnessAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -681,18 +698,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ConnectPeer_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ConnectPeer_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ConnectPeer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -709,18 +727,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_DisconnectPeer_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DisconnectPeer_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_DisconnectPeer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -737,18 +756,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListPeers_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPeers_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ListPeers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -765,18 +785,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_GetInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetInfo_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_GetInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -793,18 +814,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_PendingChannels_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_PendingChannels_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_PendingChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -821,18 +843,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListChannels_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListChannels_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ListChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -849,18 +872,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_OpenChannelSync_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_OpenChannelSync_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_OpenChannelSync_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -877,18 +901,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_CloseChannel_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_CloseChannel_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
forward_Lightning_CloseChannel_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
@ -905,18 +930,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SendPaymentSync_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendPaymentSync_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_SendPaymentSync_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -933,18 +959,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_AddInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_AddInvoice_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_AddInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -961,18 +988,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListInvoices_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListInvoices_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ListInvoices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -989,18 +1017,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_LookupInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_LookupInvoice_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_LookupInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1017,18 +1046,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribeInvoices_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribeInvoices_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
forward_Lightning_SubscribeInvoices_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
@ -1045,18 +1075,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_DecodePayReq_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DecodePayReq_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_DecodePayReq_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1073,18 +1104,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListPayments_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPayments_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_ListPayments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1101,18 +1133,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_DeleteAllPayments_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DeleteAllPayments_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_DeleteAllPayments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1129,18 +1162,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_DescribeGraph_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DescribeGraph_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_DescribeGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1157,18 +1191,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_GetChanInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetChanInfo_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_GetChanInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1185,18 +1220,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_GetNodeInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetNodeInfo_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_GetNodeInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1213,18 +1249,19 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_QueryRoutes_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_QueryRoutes_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_QueryRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1241,18 +1278,77 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_GetNetworkInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, outboundMarshaler, w, req, err)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetNetworkInfo_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Lightning_GetNetworkInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) {
select {
case <-done:
case <-closed:
cancel()
}
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_FeeReport_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_FeeReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_UpdateFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) {
select {
case <-done:
case <-closed:
cancel()
}
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_UpdateFees_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_UpdateFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -1284,7 +1380,7 @@ var (
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}, []string{"v1", "channels", "channel_point.funding_txid", "channel_point.output_index"}, ""))
pattern_Lightning_SendPaymentSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, ""))
@ -1311,6 +1407,10 @@ var (
pattern_Lightning_QueryRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "graph", "routes", "pub_key", "amt"}, ""))
pattern_Lightning_GetNetworkInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "info"}, ""))
pattern_Lightning_FeeReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "fees"}, ""))
pattern_Lightning_UpdateFees_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "fees"}, ""))
)
var (
@ -1365,4 +1465,8 @@ var (
forward_Lightning_QueryRoutes_0 = runtime.ForwardResponseMessage
forward_Lightning_GetNetworkInfo_0 = runtime.ForwardResponseMessage
forward_Lightning_FeeReport_0 = runtime.ForwardResponseMessage
forward_Lightning_UpdateFees_0 = runtime.ForwardResponseMessage
)

@ -203,7 +203,7 @@ service Lightning {
*/
rpc CloseChannel (CloseChannelRequest) returns (stream CloseStatusUpdate) {
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}"
};
}
@ -387,21 +387,48 @@ service Lightning {
sub-system.
*/
rpc DebugLevel (DebugLevelRequest) returns (DebugLevelResponse);
/** lncli: `feereport`
FeeReport allows the caller to obtain a report detailing the current fee
schedule enforced by the node globally for each channel.
*/
rpc FeeReport(FeeReportRequest) returns (FeeReportResponse) {
option (google.api.http) = {
get: "/v1/fees"
};
}
/** lncli: `updatefees`
UpdateFees allows the caller to update the fee schedule for all channels
globally, or a particular channel.
*/
rpc UpdateFees(FeeUpdateRequest) returns (FeeUpdateResponse) {
option (google.api.http) = {
post: "/v1/fees"
body: "*"
};
}
}
message Transaction {
/// The transaction hash
string tx_hash = 1 [ json_name = "tx_hash" ];
/// The transaction ammount, denominated in satoshis
int64 amount = 2 [ json_name = "amount" ];
/// The number of confirmations
int32 num_confirmations = 3 [ json_name = "num_confirmations" ];
/// The hash of the block this transaction was included in
string block_hash = 4 [ json_name = "block_hash" ];
/// The height of the block this transaction was included in
int32 block_height = 5 [ json_name = "block_height" ];
/// Timestamp of this transaction
int64 time_stamp = 6 [ json_name = "time_stamp" ];
/// Fees paid for this transaction
int64 total_fees = 7 [ json_name = "total_fees" ];
}
@ -415,14 +442,16 @@ message TransactionDetails {
message SendRequest {
/// The identity pubkey of the payment recipient
bytes dest = 1;
/// The hex-encoded identity pubkey of the payment recipient
string dest_string = 2;
/// Number of satoshis to send
/// Number of satoshis to send.
int64 amt = 3;
/// The hash to use within the payment's HTLC
bytes payment_hash = 4;
/// The hex-encoded hash to use within the payment's HTLC
string payment_hash_string = 5;
@ -444,8 +473,10 @@ message ChannelPoint {
/// Txid of the funding transaction
bytes funding_txid = 1 [ json_name = "funding_txid" ];
/// Hex-encoded string representing the funding transaction
string funding_txid_str = 2 [ json_name = "funding_txid_str" ];
/// The index of the output of the funding transaction
uint32 output_index = 3 [ json_name = "output_index" ];
}
@ -453,6 +484,7 @@ message ChannelPoint {
message LightningAddress {
/// The identity pubkey of the Lightning node
string pubkey = 1 [json_name = "pubkey"];
/// The network location of the lightning node, e.g. `69.69.69.69:1337` or `localhost:10011`
string host = 2 [json_name = "host"];
}
@ -469,6 +501,7 @@ message SendManyResponse {
message SendCoinsRequest {
/// The address to send coins to
string addr = 1;
/// The amount in satoshis to send
int64 amount = 2;
}
@ -515,12 +548,14 @@ message SignMessageResponse {
message VerifyMessageRequest {
/// The message over which the signature is to be verified
bytes msg = 1 [ json_name = "msg" ];
/// The signature to be verifed over the given message
string signature = 2 [ json_name = "signature" ];
}
message VerifyMessageResponse {
/// Whether the signature was valid over the given message
bool valid = 1 [ json_name = "valid" ];
/// The pubkey recovered from the signature
string pubkey = 2 [ json_name = "pubkey" ];
}
@ -556,6 +591,7 @@ message HTLC {
message ActiveChannel {
/// Whether this channel is active or not
bool active = 1 [json_name = "active"];
/// The identity pubkey of the remote node
string remote_pubkey = 2 [json_name = "remote_pubkey"];
@ -589,8 +625,10 @@ message ActiveChannel {
update, including updates that happen after a system restart.
*/
int64 commit_fee = 8 [json_name = "commit_fee"];
/// The weight of the commitment transaction
int64 commit_weight = 9 [ json_name = "commit_weight" ];
/**
The required number of satoshis per kilo-weight that the requester will pay
at all times, for both the funding transaction and commitment transaction.
@ -632,18 +670,22 @@ message ListChannelsResponse {
message Peer {
/// The identity pubkey of the peer
string pub_key = 1 [json_name = "pub_key"];
/// The peer's id from the local point of view
int32 peer_id = 2 [json_name = "peer_id"];
/// Network address of the peer; eg `127.0.0.1:10011`
string address = 3 [json_name = "address"];
/// Bytes of data transmitted to this peer
uint64 bytes_sent = 4 [json_name = "bytes_sent"];
/// Bytes of data transmitted from this peer
uint64 bytes_recv = 5 [json_name = "bytes_recv"];
/// Satoshis sent to this peer
int64 sat_sent = 6 [json_name = "sat_sent"];
/// Satoshis received from this peer
int64 sat_recv = 7 [json_name = "sat_recv"];
@ -667,11 +709,13 @@ message GetInfoResponse {
/// The identity pubkey of the current node.
string identity_pubkey = 1 [json_name = "identity_pubkey"];
/// If applicable, the alias of the current node, e.g. "bob"
string alias = 2 [json_name = "alias"];
/// Number of pending channels
uint32 num_pending_channels = 3 [json_name = "num_pending_channels"];
/// Number of active channels
uint32 num_active_channels = 4 [json_name = "num_active_channels"];
@ -680,11 +724,13 @@ message GetInfoResponse {
/// The node's current view of the height of the best block
uint32 block_height = 6 [json_name = "block_height"];
/// The node's current view of the hash of the best block
string block_hash = 8 [json_name = "block_hash"];
/// Whether the wallet's view is synced to the main chain
bool synced_to_chain = 9 [ json_name = "synced_to_chain" ];
/// Whether the current node is connected to testnet
bool testnet = 10 [ json_name = "testnet" ];
@ -716,10 +762,9 @@ message CloseChannelRequest {
transaction.
*/
ChannelPoint channel_point = 1;
/// a relative deadline afterwhich the attempt should be abandoned
int64 time_limit = 2;
/// after the time limit has passed, attempt an uncooperative closure
bool force = 3;
/// If true, then the channel will be closed forcibly. This means the current commitment transaction will be signed and broadcast.
bool force = 2;
}
message CloseStatusUpdate {
oneof update {
@ -777,6 +822,7 @@ message PendingChannelResponse {
/// The height at which this channel will be confirmed
uint32 confirmation_height = 2 [ json_name = "confirmation_height" ];
/// The number of blocks until this channel is open
uint32 blocks_till_open = 3 [ json_name = "blocks_till_open" ];
@ -788,6 +834,7 @@ message PendingChannelResponse {
restart.
*/
int64 commit_fee = 4 [json_name = "commit_fee" ];
/// The weight of the commitment transaction
int64 commit_weight = 5 [ json_name = "commit_weight" ];
@ -818,18 +865,23 @@ message PendingChannelResponse {
/// The balance in satoshis encumbered in this pending channel
int64 limbo_balance = 3 [ json_name = "limbo_balance" ];
/// The height at which funds can be sweeped into the wallet
uint32 maturity_height = 4 [ json_name = "maturity_height" ];
/// Remaining # of blocks until funds can be sweeped into the wallet
uint32 blocks_til_maturity = 5 [ json_name = "blocks_til_maturity" ];
}
/// The balance in satoshis encumbered in pending channels
int64 total_limbo_balance = 1 [ json_name = "total_limbo_balance" ];
/// Channels pending opening
repeated PendingOpenChannel pending_open_channels = 2 [ json_name = "pending_open_channels" ];
/// Channels pending closing
repeated ClosedChannel pending_closing_channels = 3 [ json_name = "pending_closing_channels" ];
/// Channels pending force closing
repeated ForceClosedChannel pending_force_closing_channels = 4 [ json_name = "pending_force_closing_channels" ];
}
@ -992,6 +1044,7 @@ message ChannelGraphRequest {
message ChannelGraph {
/// The list of `LightningNode`s in this channel graph
repeated LightningNode nodes = 1 [json_name = "nodes"];
/// The list of `ChannelEdge`s in this channel graph
repeated ChannelEdge edges = 2 [json_name = "edges"];
}
@ -1078,6 +1131,7 @@ message SetAliasResponse {
message Invoice {
/// An optional memo to attach along with the invoice
string memo = 1 [json_name = "memo"];
/// An optional cryptographic receipt of payment
bytes receipt = 2 [json_name = "receipt"];
@ -1125,11 +1179,12 @@ message PaymentHash {
payment hash must be exactly 32 bytes, otherwise an error is returned.
*/
string r_hash_str = 1 [json_name = "r_hash_str"];
/// The payment hash of the invoice to be looked up.
bytes r_hash = 2 [json_name = "r_hash"];
}
message ListInvoiceRequest {
/// Toggles if all invoices should be returned, or only those that are currently unsettled
/// Toggles if all invoices should be returned, or only those that are currently unsettled.
bool pending_only = 1;
}
message ListInvoiceResponse {
@ -1187,3 +1242,40 @@ message PayReq {
string payment_hash = 2 [json_name = "payment_hash"];
int64 num_satoshis = 3 [json_name = "num_satoshis"];
}
message FeeReportRequest {}
message ChannelFeeReport {
/// The channel that this fee report belongs to.
string chan_point = 1 [json_name = "channel_point"];
/// The base fee charged regardless of the number of milli-satoshis sent.
int64 base_fee_msat = 2 [json_name = "base_fee_msat"];
/// The amount charged per milli-satoshis transferred expressed in millionths of a satoshi.
int64 fee_per_mil = 3 [json_name = "fee_per_mil"];
/// The effective fee rate in milli-satoshis. Computed by dividing the fee_per_mil value by 1 million.
double fee_rate = 4 [json_name = "fee_rate"];
}
message FeeReportResponse {
/// An array of channel fee reports which describes the current fee schedule for each channel.
repeated ChannelFeeReport channel_fees = 1 [json_name = "channel_fees"];
}
message FeeUpdateRequest {
oneof scope {
/// If set, then this fee update applies to all currently active channels.
bool global = 1 [json_name = "global"] ;
/// If set, this fee update will target a specific channel.
ChannelPoint chan_point = 2 [json_name = "chan_point"];
}
/// The base fee charged regardless of the number of milli-satoshis sent.
int64 base_fee_msat = 3 [json_name = "base_fee_msat"];
/// The effective fee rate in milli-satoshis. The precision of this value goes up to 6 decimal places, so 1e-6.
double fee_rate = 4 [json_name = "fee_rate"];
}
message FeeUpdateResponse {
}

@ -17,6 +17,7 @@
"paths": {
"/v1/balance/blockchain": {
"get": {
"summary": "* lncli: `walletbalance`\nWalletBalance returns the sum of all confirmed unspent outputs under control\nby the wallet. This method can be modified by having the request specify\nonly witness outputs should be factored into the final output sum.",
"operationId": "WalletBalance",
"responses": {
"200": {
@ -29,6 +30,7 @@
"parameters": [
{
"name": "witness_only",
"description": "/ If only witness outputs should be considered when calculating the wallet's balance.",
"in": "query",
"required": false,
"type": "boolean",
@ -42,6 +44,7 @@
},
"/v1/balance/channels": {
"get": {
"summary": "* lncli: `channelbalance`\nChannelBalance returns the total funds available across all open channels\nin satoshis.",
"operationId": "ChannelBalance",
"responses": {
"200": {
@ -58,6 +61,7 @@
},
"/v1/channels": {
"get": {
"summary": "* lncli: `listchannels`\nListChannels returns a description of all the open channels that this node\nis a participant in.",
"operationId": "ListChannels",
"responses": {
"200": {
@ -72,6 +76,7 @@
]
},
"post": {
"summary": "*\nOpenChannelSync is a synchronous version of the OpenChannel RPC call. This\ncall is meant to be consumed by clients to the REST proxy. As with all\nother sync calls, all byte slices are intended to be populated as hex\nencoded strings.",
"operationId": "OpenChannelSync",
"responses": {
"200": {
@ -98,7 +103,7 @@
},
"/v1/channels/pending": {
"get": {
"summary": "TODO(roasbeef): merge with below with bool?",
"summary": "* lncli: `pendingchannels`\nPendingChannels returns a list of all the channels that are currently\nconsidered \"pending\". A channel is pending if it has finished the funding\nworkflow and is waiting for confirmations for the funding txn, or is in the\nprocess of closure, either initiated cooperatively or non-cooperatively.",
"operationId": "PendingChannels",
"responses": {
"200": {
@ -115,6 +120,7 @@
},
"/v1/channels/transactions": {
"post": {
"summary": "*\nSendPaymentSync is the synchronous non-streaming version of SendPayment.\nThis RPC is intended to be consumed by clients of the REST proxy.\nAdditionally, this RPC expects the destination's public key and the payment\nhash (if any) to be encoded as hex strings.",
"operationId": "SendPaymentSync",
"responses": {
"200": {
@ -139,8 +145,9 @@
]
}
},
"/v1/channels/{channel_point.funding_txid}/{channel_point.output_index}/{force}": {
"/v1/channels/{channel_point.funding_txid}/{channel_point.output_index}": {
"delete": {
"summary": "* lncli: `closechannel`\nCloseChannel attempts to close an active channel identified by its channel\noutpoint (ChannelPoint). The actions of this method can additionally be\naugmented to attempt a force close after a timeout period in the case of an\ninactive peer.",
"operationId": "CloseChannel",
"responses": {
"200": {
@ -164,13 +171,48 @@
"required": true,
"type": "integer",
"format": "int64"
},
}
],
"tags": [
"Lightning"
]
}
},
"/v1/fees": {
"get": {
"summary": "* lncli: `feereport`\nFeeReport allows the caller to obtain a report detailing the current fee\nschedule enforced by the node globally for each channel.",
"operationId": "FeeReport",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/lnrpcFeeReportResponse"
}
}
},
"tags": [
"Lightning"
]
},
"post": {
"summary": "* lncli: `updatefees`\nUpdateFees allows the caller to update the fee schedule for all channels\nglobally, or a particular channel.",
"operationId": "UpdateFees",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/lnrpcFeeUpdateResponse"
}
}
},
"parameters": [
{
"name": "force",
"in": "path",
"name": "body",
"in": "body",
"required": true,
"type": "boolean",
"format": "boolean"
"schema": {
"$ref": "#/definitions/lnrpcFeeUpdateRequest"
}
}
],
"tags": [
@ -180,6 +222,7 @@
},
"/v1/getinfo": {
"get": {
"summary": "* lncli: `getinfo`\nGetInfo returns general information concerning the lightning node including\nit's identity pubkey, alias, the chains it is connected to, and information\nconcerning the number of open+pending channels.",
"operationId": "GetInfo",
"responses": {
"200": {
@ -196,6 +239,7 @@
},
"/v1/graph": {
"get": {
"summary": "* lncli: `describegraph`\nDescribeGraph returns a description of the latest graph state from the\npoint of view of the node. The graph information is partitioned into two\ncomponents: all the nodes/vertexes, and all the edges that connect the\nvertexes themselves. As this is a directed graph, the edges also contain\nthe node directional specific routing policy which includes: the time lock\ndelta, fee information, etc.",
"operationId": "DescribeGraph",
"responses": {
"200": {
@ -212,6 +256,7 @@
},
"/v1/graph/edge/{chan_id}": {
"get": {
"summary": "* lncli: `getchaninfo`\nGetChanInfo returns the latest authenticated network announcement for the\ngiven channel identified by its channel ID: an 8-byte integer which\nuniquely identifies the location of transaction's funding output within the\nblockchain.",
"operationId": "GetChanInfo",
"responses": {
"200": {
@ -237,6 +282,7 @@
},
"/v1/graph/info": {
"get": {
"summary": "* lncli: `getnetworkinfo`\nGetNetworkInfo returns some basic stats about the known channel graph from\nthe point of view of the node.",
"operationId": "GetNetworkInfo",
"responses": {
"200": {
@ -253,6 +299,7 @@
},
"/v1/graph/node/{pub_key}": {
"get": {
"summary": "* lncli: `getnodeinfo`\nGetNodeInfo returns the latest advertised, aggregated, and authenticated\nchannel information for the specified node identified by its public key.",
"operationId": "GetNodeInfo",
"responses": {
"200": {
@ -277,6 +324,7 @@
},
"/v1/graph/routes/{pub_key}/{amt}": {
"get": {
"summary": "* lncli: `queryroutes`\nQueryRoutes attempts to query the daemon's Channel Router for a possible\nroute to a target destination capable of carrying a specific amount of\nsatoshis. The retuned route contains the full details required to craft and\nsend an HTLC, also including the necessary information that should be\npresent within the Sphinx packet encapsualted within the HTLC.",
"operationId": "QueryRoutes",
"responses": {
"200": {
@ -308,6 +356,7 @@
},
"/v1/invoices": {
"post": {
"summary": "* lncli: `addinvoice`\nAddInvoice attempts to add a new invoice to the invoice database. Any\nduplicated invoices are rejected, therefore all invoices *must* have a\nunique payment preimage.",
"operationId": "AddInvoice",
"responses": {
"200": {
@ -334,6 +383,7 @@
},
"/v1/invoices/subscribe": {
"get": {
"summary": "*\nSubscribeInvoices returns a uni-directional stream (sever -\u003e client) for\nnotifying the client of newly added/settled invoices.",
"operationId": "SubscribeInvoices",
"responses": {
"200": {
@ -350,6 +400,7 @@
},
"/v1/invoices/{pending_only}": {
"get": {
"summary": "* lncli: `listinvoices`\nListInvoices returns a list of all the invoices currently stored within the\ndatabase. Any active debug invoices are ignored.",
"operationId": "ListInvoices",
"responses": {
"200": {
@ -375,6 +426,7 @@
},
"/v1/invoices/{r_hash_str}": {
"get": {
"summary": "* lncli: `lookupinvoice`\nLookupInvoice attemps to look up an invoice according to its payment hash.\nThe passed payment hash *must* be exactly 32 bytes, if not, an error is\nreturned.",
"operationId": "LookupInvoice",
"responses": {
"200": {
@ -393,6 +445,7 @@
},
{
"name": "r_hash",
"description": "/ The payment hash of the invoice to be looked up.",
"in": "query",
"required": false,
"type": "string",
@ -406,6 +459,7 @@
},
"/v1/newaddress": {
"get": {
"summary": "*\nNewWitnessAddress creates a new witness address under control of the local wallet.",
"operationId": "NewWitnessAddress",
"responses": {
"200": {
@ -422,6 +476,7 @@
},
"/v1/payments": {
"get": {
"summary": "* lncli: `listpayments`\nListPayments returns a list of all outgoing payments.",
"operationId": "ListPayments",
"responses": {
"200": {
@ -436,6 +491,7 @@
]
},
"delete": {
"summary": "*\nDeleteAllPayments deletes all outgoing payments from DB.",
"operationId": "DeleteAllPayments",
"responses": {
"200": {
@ -452,6 +508,7 @@
},
"/v1/payreq/{pay_req}": {
"get": {
"summary": "* lncli: `decodepayreq`\nDecodePayReq takes an encoded payment request string and attempts to decode\nit, returning a full description of the conditions encoded within the\npayment request.",
"operationId": "DecodePayReq",
"responses": {
"200": {
@ -476,6 +533,7 @@
},
"/v1/peers": {
"get": {
"summary": "* lncli: `listpeers`\nListPeers returns a verbose listing of all currently active peers.",
"operationId": "ListPeers",
"responses": {
"200": {
@ -490,6 +548,7 @@
]
},
"post": {
"summary": "* lncli: `connect`\nConnectPeer attempts to establish a connection to a remote peer. This is at\nthe networking level, and is used for communication between nodes. This is\ndistinct from establishing a channel with a peer.",
"operationId": "ConnectPeer",
"responses": {
"200": {
@ -516,6 +575,7 @@
},
"/v1/peers/{pub_key}": {
"delete": {
"summary": "* lncli: `disconnect`\nDisconnectPeer attempts to disconnect one peer from another identified by a\ngiven pubKey. In the case that we currently have a pending or active channel\nwith the target peer, then this action will be not be allowed.",
"operationId": "DisconnectPeer",
"responses": {
"200": {
@ -540,6 +600,7 @@
},
"/v1/transactions": {
"get": {
"summary": "* lncli: `listchaintxns`\nGetTransactions returns a list describing all the known transactions\nrelevant to the wallet.",
"operationId": "GetTransactions",
"responses": {
"200": {
@ -554,6 +615,7 @@
]
},
"post": {
"summary": "* lncli: `sendcoins`\nSendCoins executes a request to send coins to a particular address. Unlike\nSendMany, this RPC call only allows creating a single output at a time.",
"operationId": "SendCoins",
"responses": {
"200": {
@ -580,23 +642,16 @@
}
},
"definitions": {
"NewAddressRequestAddressType": {
"type": "string",
"enum": [
"WITNESS_PUBKEY_HASH",
"NESTED_PUBKEY_HASH",
"PUBKEY_HASH"
],
"default": "WITNESS_PUBKEY_HASH"
},
"PendingChannelResponseClosedChannel": {
"type": "object",
"properties": {
"channel": {
"$ref": "#/definitions/PendingChannelResponsePendingChannel"
"$ref": "#/definitions/PendingChannelResponsePendingChannel",
"title": "/ The pending channel to be closed"
},
"closing_txid": {
"type": "string"
"type": "string",
"title": "/ The transaction id of the closing transaction"
}
}
},
@ -604,22 +659,27 @@
"type": "object",
"properties": {
"channel": {
"$ref": "#/definitions/PendingChannelResponsePendingChannel"
"$ref": "#/definitions/PendingChannelResponsePendingChannel",
"title": "/ The pending channel to be force closed"
},
"closing_txid": {
"type": "string"
"type": "string",
"title": "/ The transaction id of the closing transaction"
},
"limbo_balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The balance in satoshis encumbered in this pending channel"
},
"maturity_height": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ The height at which funds can be sweeped into the wallet"
},
"blocks_til_maturity": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ Remaining # of blocks until funds can be sweeped into the wallet"
}
}
},
@ -650,27 +710,33 @@
"type": "object",
"properties": {
"channel": {
"$ref": "#/definitions/PendingChannelResponsePendingChannel"
"$ref": "#/definitions/PendingChannelResponsePendingChannel",
"title": "/ The pending channel"
},
"confirmation_height": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ The height at which this channel will be confirmed"
},
"blocks_till_open": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ The number of blocks until this channel is open"
},
"commit_fee": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe amount calculated to be paid in fees for the current set of\ncommitment transactions. The fee amount is persisted with the channel\nin order to allow the fee amount to be removed and recalculated with\neach channel state update, including updates that happen after a system\nrestart."
},
"commit_weight": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The weight of the commitment transaction"
},
"fee_per_kw": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe required number of satoshis per kilo-weight that the requester will\npay at all times, for both the funding transaction and commitment\ntransaction. This value can later be updated once the channel is open."
}
}
},
@ -679,63 +745,78 @@
"properties": {
"active": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ Whether this channel is active or not"
},
"remote_pubkey": {
"type": "string"
"type": "string",
"title": "/ The identity pubkey of the remote node"
},
"channel_point": {
"type": "string"
"type": "string",
"description": "*\nThe outpoint (txid:index) of the funding transaction. With this value, Bob\nwill be able to generate a signature for Alice's version of the commitment\ntransaction."
},
"chan_id": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel."
},
"capacity": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The total amount of funds held in this channel"
},
"local_balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ This node's current balance in this channel"
},
"remote_balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The counterparty's current balance in this channel"
},
"commit_fee": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe amount calculated to be paid in fees for the current set of commitment\ntransactions. The fee amount is persisted with the channel in order to\nallow the fee amount to be removed and recalculated with each channel state\nupdate, including updates that happen after a system restart."
},
"commit_weight": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The weight of the commitment transaction"
},
"fee_per_kw": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe required number of satoshis per kilo-weight that the requester will pay\nat all times, for both the funding transaction and commitment transaction.\nThis value can later be updated once the channel is open."
},
"unsettled_balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The unsettled balance in this channel"
},
"total_satoshis_sent": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe total number of satoshis we've sent within this channel."
},
"total_satoshis_received": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe total number of satoshis we've received within this channel."
},
"num_updates": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe total number of updates conducted within this channel."
},
"pending_htlcs": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcHTLC"
}
},
"description": "*\nThe list of active, uncleared HTLCs currently pending within the channel."
}
}
},
@ -747,28 +828,18 @@
"format": "byte"
},
"payment_request": {
"type": "string"
}
}
},
"lnrpcChanInfoRequest": {
"type": "object",
"properties": {
"chan_id": {
"type": "string",
"format": "uint64"
"description": "*\nA bare-bones invoice for a payment within the Lightning Network. With the\ndetails of the invoice, the sender has all the data necessary to send a\npayment to the recipient."
}
}
},
"lnrpcChannelBalanceRequest": {
"type": "object"
},
"lnrpcChannelBalanceResponse": {
"type": "object",
"properties": {
"balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Sum of channels balances denominated in satoshis"
}
}
},
@ -790,7 +861,8 @@
"properties": {
"channel_id": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel."
},
"chan_point": {
"type": "string"
@ -815,14 +887,16 @@
"node2_policy": {
"$ref": "#/definitions/lnrpcRoutingPolicy"
}
}
},
"description": "*\nA fully authenticated channel along with all its unique attributes.\nOnce an authenticated channel announcement has been processed on the network,\nthen a instance of ChannelEdgeInfo encapsulating the channels attributes is\nstored. The other portions relevant to routing policy of a channel are stored\nwithin a ChannelEdgePolicy for each direction of the channel."
},
"lnrpcChannelEdgeUpdate": {
"type": "object",
"properties": {
"chan_id": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel."
},
"chan_point": {
"$ref": "#/definitions/lnrpcChannelPoint"
@ -842,6 +916,30 @@
}
}
},
"lnrpcChannelFeeReport": {
"type": "object",
"properties": {
"chan_point": {
"type": "string",
"description": "/ The channel that this fee report belongs to."
},
"base_fee_msat": {
"type": "string",
"format": "int64",
"description": "/ The base fee charged regardless of the number of milli-satoshis sent."
},
"fee_per_mil": {
"type": "string",
"format": "int64",
"description": "/ The amount charged per milli-satoshis transferred expressed in millionths of a satoshi."
},
"fee_rate": {
"type": "number",
"format": "double",
"description": "/ The effective fee rate in milli-satoshis. Computed by dividing the fee_per_mil value by 1 million."
}
}
},
"lnrpcChannelGraph": {
"type": "object",
"properties": {
@ -849,18 +947,18 @@
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcLightningNode"
}
},
"title": "/ The list of `LightningNode`s in this channel graph"
},
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcChannelEdge"
}
},
"title": "/ The list of `ChannelEdge`s in this channel graph"
}
}
},
"lnrpcChannelGraphRequest": {
"type": "object"
},
"description": "/ Returns a new instance of the directed channel graph."
},
"lnrpcChannelOpenUpdate": {
"type": "object",
@ -876,30 +974,16 @@
"funding_txid": {
"type": "string",
"format": "byte",
"title": "TODO(roasbeef): make str vs bytes into a oneof"
"title": "/ Txid of the funding transaction"
},
"funding_txid_str": {
"type": "string"
"type": "string",
"title": "/ Hex-encoded string representing the funding transaction"
},
"output_index": {
"type": "integer",
"format": "int64"
}
}
},
"lnrpcCloseChannelRequest": {
"type": "object",
"properties": {
"channel_point": {
"$ref": "#/definitions/lnrpcChannelPoint"
},
"time_limit": {
"type": "string",
"format": "int64"
},
"force": {
"type": "boolean",
"format": "boolean"
"format": "int64",
"title": "/ The index of the output of the funding transaction"
}
}
},
@ -922,7 +1006,8 @@
"properties": {
"chan_id": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel."
},
"capacity": {
"type": "string",
@ -958,11 +1043,13 @@
"type": "object",
"properties": {
"addr": {
"$ref": "#/definitions/lnrpcLightningAddress"
"$ref": "#/definitions/lnrpcLightningAddress",
"title": "/ Lightning address of the peer, in the format `\u003cpubkey\u003e@host`"
},
"perm": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"description": "* If set, the daemon will attempt to persistently connect to the target\npeer. Otherwise, the call will be synchronous."
}
}
},
@ -971,19 +1058,8 @@
"properties": {
"peer_id": {
"type": "integer",
"format": "int32"
}
}
},
"lnrpcDebugLevelRequest": {
"type": "object",
"properties": {
"show": {
"type": "boolean",
"format": "boolean"
},
"level_spec": {
"type": "string"
"format": "int32",
"title": "/ The id of the newly connected peer"
}
}
},
@ -995,76 +1071,105 @@
}
}
},
"lnrpcDeleteAllPaymentsRequest": {
"type": "object"
},
"lnrpcDeleteAllPaymentsResponse": {
"type": "object"
},
"lnrpcDisconnectPeerRequest": {
"type": "object",
"properties": {
"pub_key": {
"type": "string"
}
}
},
"lnrpcDisconnectPeerResponse": {
"type": "object"
},
"lnrpcGetInfoRequest": {
"lnrpcFeeReportResponse": {
"type": "object",
"properties": {
"channel_fees": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcChannelFeeReport"
},
"description": "/ An array of channel fee reports which describes the current fee schedule for each channel."
}
}
},
"lnrpcFeeUpdateRequest": {
"type": "object",
"properties": {
"global": {
"type": "boolean",
"format": "boolean",
"description": "/ If set, then this fee update applies to all currently active channels."
},
"chan_point": {
"$ref": "#/definitions/lnrpcChannelPoint",
"description": "/ If set, this fee update will target a specific channel."
},
"base_fee_msat": {
"type": "string",
"format": "int64",
"description": "/ The base fee charged regardless of the number of milli-satoshis sent."
},
"fee_rate": {
"type": "number",
"format": "double",
"description": "/ The effective fee rate in milli-satoshis. The precision of this value goes up to 6 decimal places, so 1e-6."
}
}
},
"lnrpcFeeUpdateResponse": {
"type": "object"
},
"lnrpcGetInfoResponse": {
"type": "object",
"properties": {
"identity_pubkey": {
"type": "string"
"type": "string",
"description": "/ The identity pubkey of the current node."
},
"alias": {
"type": "string"
"type": "string",
"title": "/ If applicable, the alias of the current node, e.g. \"bob\""
},
"num_pending_channels": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ Number of pending channels"
},
"num_active_channels": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ Number of active channels"
},
"num_peers": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ Number of peers"
},
"block_height": {
"type": "integer",
"format": "int64"
"format": "int64",
"title": "/ The node's current view of the height of the best block"
},
"block_hash": {
"type": "string"
"type": "string",
"title": "/ The node's current view of the hash of the best block"
},
"synced_to_chain": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ Whether the wallet's view is synced to the main chain"
},
"testnet": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ Whether the current node is connected to testnet"
},
"chains": {
"type": "array",
"items": {
"type": "string"
}
},
"title": "/ A list of active chains the node is connected to"
}
}
},
"lnrpcGetTransactionsRequest": {
"type": "object"
},
"lnrpcGraphTopologySubscription": {
"type": "object"
},
"lnrpcGraphTopologyUpdate": {
"type": "object",
"properties": {
@ -1118,7 +1223,8 @@
"properties": {
"chan_id": {
"type": "string",
"format": "uint64"
"format": "uint64",
"description": "*\nThe unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel."
},
"chan_capacity": {
"type": "string",
@ -1142,52 +1248,60 @@
"type": "object",
"properties": {
"memo": {
"type": "string"
"type": "string",
"title": "/ An optional memo to attach along with the invoice"
},
"receipt": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "/ An optional cryptographic receipt of payment"
},
"r_preimage": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "*\nThe hex-encoded preimage (32 byte) which will allow settling an incoming\nHTLC payable to this preimage"
},
"r_hash": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "/ The hash of the preimage"
},
"value": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The value of this invoice in satoshis"
},
"settled": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ Whether this invoice has been fulfilled"
},
"creation_date": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ When this invoice was created"
},
"settle_date": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ When this invoice was settled"
},
"payment_request": {
"type": "string"
"type": "string",
"description": "*\nA bare-bones invoice for a payment within the Lightning Network. With the\ndetails of the invoice, the sender has all the data necessary to send a\npayment to the recipient."
}
}
},
"lnrpcInvoiceSubscription": {
"type": "object"
},
"lnrpcLightningAddress": {
"type": "object",
"properties": {
"pubkey": {
"type": "string"
"type": "string",
"title": "/ The identity pubkey of the Lightning node"
},
"host": {
"type": "string"
"type": "string",
"title": "/ The network location of the lightning node, e.g. `69.69.69.69:1337` or `localhost:10011`"
}
}
},
@ -1210,10 +1324,8 @@
"$ref": "#/definitions/lnrpcNodeAddress"
}
}
}
},
"lnrpcListChannelsRequest": {
"type": "object"
},
"description": "*\nAn individual vertex/node within the channel graph. A node is\nconnected to other nodes by one or more channel edges emanating from it. As the\ngraph is directed, a node will also have an incoming edge attached to it for\neach outgoing edge."
},
"lnrpcListChannelsResponse": {
"type": "object",
@ -1222,16 +1334,8 @@
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcActiveChannel"
}
}
}
},
"lnrpcListInvoiceRequest": {
"type": "object",
"properties": {
"pending_only": {
"type": "boolean",
"format": "boolean"
},
"title": "/ The list of active channels"
}
}
},
@ -1246,9 +1350,6 @@
}
}
},
"lnrpcListPaymentsRequest": {
"type": "object"
},
"lnrpcListPaymentsResponse": {
"type": "object",
"properties": {
@ -1256,13 +1357,11 @@
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcPayment"
}
},
"title": "/ The list of payments"
}
}
},
"lnrpcListPeersRequest": {
"type": "object"
},
"lnrpcListPeersResponse": {
"type": "object",
"properties": {
@ -1270,7 +1369,8 @@
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcPeer"
}
},
"title": "/ The list of currently connected peers"
}
}
},
@ -1315,28 +1415,15 @@
}
}
},
"lnrpcNetworkInfoRequest": {
"type": "object"
},
"lnrpcNewAddressRequest": {
"type": "object",
"properties": {
"type": {
"$ref": "#/definitions/NewAddressRequestAddressType"
}
}
},
"lnrpcNewAddressResponse": {
"type": "object",
"properties": {
"address": {
"type": "string"
"type": "string",
"title": "/ The newly generated wallet address"
}
}
},
"lnrpcNewWitnessAddressRequest": {
"type": "object"
},
"lnrpcNodeAddress": {
"type": "object",
"properties": {
@ -1352,7 +1439,8 @@
"type": "object",
"properties": {
"node": {
"$ref": "#/definitions/lnrpcLightningNode"
"$ref": "#/definitions/lnrpcLightningNode",
"description": "*\nAn individual vertex/node within the channel graph. A node is\nconnected to other nodes by one or more channel edges emanating from it. As\nthe graph is directed, a node will also have an incoming edge attached to\nit for each outgoing edge."
},
"num_channels": {
"type": "integer",
@ -1364,14 +1452,6 @@
}
}
},
"lnrpcNodeInfoRequest": {
"type": "object",
"properties": {
"pub_key": {
"type": "string"
}
}
},
"lnrpcNodeUpdate": {
"type": "object",
"properties": {
@ -1398,22 +1478,27 @@
"properties": {
"target_peer_id": {
"type": "integer",
"format": "int32"
"format": "int32",
"title": "/ The peer_id of the node to open a channel with"
},
"node_pubkey": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "/ The pubkey of the node to open a channel with"
},
"node_pubkey_string": {
"type": "string"
"type": "string",
"title": "/ The hex encorded pubkey of the node to open a channel with"
},
"local_funding_amount": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The number of satoshis the wallet should commit to the channel"
},
"push_sat": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The number of satoshis to push to the remote side as part of the initial commitment state"
}
}
},
@ -1446,49 +1531,34 @@
}
}
},
"lnrpcPayReqString": {
"type": "object",
"properties": {
"pay_req": {
"type": "string"
}
}
},
"lnrpcPayment": {
"type": "object",
"properties": {
"payment_hash": {
"type": "string"
"type": "string",
"title": "/ The payment hash"
},
"value": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The value of the payment in satoshis"
},
"creation_date": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The date of this payment"
},
"path": {
"type": "array",
"items": {
"type": "string"
}
},
"title": "/ The path this payment took"
},
"fee": {
"type": "string",
"format": "int64"
}
}
},
"lnrpcPaymentHash": {
"type": "object",
"properties": {
"r_hash_str": {
"type": "string"
},
"r_hash": {
"type": "string",
"format": "byte"
"format": "int64",
"title": "/ The fee paid for this payment in satoshis"
}
}
},
@ -1496,68 +1566,78 @@
"type": "object",
"properties": {
"pub_key": {
"type": "string"
"type": "string",
"title": "/ The identity pubkey of the peer"
},
"peer_id": {
"type": "integer",
"format": "int32"
"format": "int32",
"title": "/ The peer's id from the local point of view"
},
"address": {
"type": "string"
"type": "string",
"title": "/ Network address of the peer; eg `127.0.0.1:10011`"
},
"bytes_sent": {
"type": "string",
"format": "uint64"
"format": "uint64",
"title": "/ Bytes of data transmitted to this peer"
},
"bytes_recv": {
"type": "string",
"format": "uint64"
"format": "uint64",
"title": "/ Bytes of data transmitted from this peer"
},
"sat_sent": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Satoshis sent to this peer"
},
"sat_recv": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Satoshis received from this peer"
},
"inbound": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ A channel is inbound if the counterparty initiated the channel"
},
"ping_time": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Ping time to this peer"
}
}
},
"lnrpcPendingChannelRequest": {
"type": "object"
},
"lnrpcPendingChannelResponse": {
"type": "object",
"properties": {
"total_limbo_balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The balance in satoshis encumbered in pending channels"
},
"pending_open_channels": {
"type": "array",
"items": {
"$ref": "#/definitions/PendingChannelResponsePendingOpenChannel"
}
},
"title": "/ Channels pending opening"
},
"pending_closing_channels": {
"type": "array",
"items": {
"$ref": "#/definitions/PendingChannelResponseClosedChannel"
}
},
"title": "/ Channels pending closing"
},
"pending_force_closing_channels": {
"type": "array",
"items": {
"$ref": "#/definitions/PendingChannelResponseForceClosedChannel"
}
},
"title": "/ Channels pending force closing"
}
}
},
@ -1574,18 +1654,6 @@
}
}
},
"lnrpcQueryRoutesRequest": {
"type": "object",
"properties": {
"pub_key": {
"type": "string"
},
"amt": {
"type": "string",
"format": "int64"
}
}
},
"lnrpcQueryRoutesResponse": {
"type": "object",
"properties": {
@ -1602,23 +1670,28 @@
"properties": {
"total_time_lock": {
"type": "integer",
"format": "int64"
"format": "int64",
"description": "*\nThe cumulative (final) time lock across the entire route. This is the CLTV\nvalue that should be extended to the first hop in the route. All other hops\nwill decrement the time-lock as advertised, leaving enough time for all\nhops to wait for or present the payment preimage to complete the payment."
},
"total_fees": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe sum of the fees paid at each hop within the final route. In the case\nof a one-hop payment, this value will be zero as we don't need to pay a fee\nit ourself."
},
"total_amt": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "*\nThe total amount of funds required to complete a payment over this route.\nThis value includes the cumulative fees at each hop. As a result, the HTLC\nextended to the first-hop in the route will need to have at least this many\nsatoshis, otherwise the route will fail at an intermediate node due to an\ninsufficient amount of fees."
},
"hops": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcHop"
}
},
"description": "*\nContains details concerning the specific forwarding details at each hop."
}
}
},
"description": "*\nA path through the channel graph which runs over one or more channels in\nsuccession. This struct carries all the information required to craft the\nSphinx onion packet, and send the payment along the first hop in the path. A\nroute is only selected as valid if all the channels have sufficient capacity to\ncarry the initial payment amount after fees are accounted for."
},
"lnrpcRoutingPolicy": {
"type": "object",
@ -1645,11 +1718,13 @@
"type": "object",
"properties": {
"addr": {
"type": "string"
"type": "string",
"title": "/ The address to send coins to"
},
"amount": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The amount in satoshis to send"
}
}
},
@ -1657,19 +1732,8 @@
"type": "object",
"properties": {
"txid": {
"type": "string"
}
}
},
"lnrpcSendManyRequest": {
"type": "object",
"properties": {
"AddrToAmount": {
"type": "object",
"additionalProperties": {
"type": "string",
"format": "int64"
}
"type": "string",
"title": "/ The transaction ID of the transaction"
}
}
},
@ -1677,7 +1741,8 @@
"type": "object",
"properties": {
"txid": {
"type": "string"
"type": "string",
"title": "/ The id of the transaction"
}
}
},
@ -1686,24 +1751,30 @@
"properties": {
"dest": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "/ The identity pubkey of the payment recipient"
},
"dest_string": {
"type": "string"
"type": "string",
"title": "/ The hex-encoded identity pubkey of the payment recipient"
},
"amt": {
"type": "string",
"format": "int64"
"format": "int64",
"description": "/ Number of satoshis to send."
},
"payment_hash": {
"type": "string",
"format": "byte"
"format": "byte",
"title": "/ The hash to use within the payment's HTLC"
},
"payment_hash_string": {
"type": "string"
"type": "string",
"title": "/ The hex-encoded hash to use within the payment's HTLC"
},
"payment_request": {
"type": "string"
"type": "string",
"description": "*\nA bare-bones invoice for a payment within the Lightning Network. With the\ndetails of the invoice, the sender has all the data necessary to send a\npayment to the recipient."
}
}
},
@ -1722,37 +1793,18 @@
}
}
},
"lnrpcSetAliasRequest": {
"type": "object",
"properties": {
"new_alias": {
"type": "string"
}
}
},
"lnrpcSetAliasResponse": {
"type": "object"
},
"lnrpcSignMessageRequest": {
"type": "object",
"properties": {
"msg": {
"type": "string",
"format": "byte"
}
}
},
"lnrpcSignMessageResponse": {
"type": "object",
"properties": {
"signature": {
"type": "string"
"type": "string",
"title": "/ The signature for the given message"
}
}
},
"lnrpcStopRequest": {
"type": "object"
},
"lnrpcStopResponse": {
"type": "object"
},
@ -1760,30 +1812,37 @@
"type": "object",
"properties": {
"tx_hash": {
"type": "string"
"type": "string",
"title": "/ The transaction hash"
},
"amount": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The transaction ammount, denominated in satoshis"
},
"num_confirmations": {
"type": "integer",
"format": "int32"
"format": "int32",
"title": "/ The number of confirmations"
},
"block_hash": {
"type": "string"
"type": "string",
"title": "/ The hash of the block this transaction was included in"
},
"block_height": {
"type": "integer",
"format": "int32"
"format": "int32",
"title": "/ The height of the block this transaction was included in"
},
"time_stamp": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Timestamp of this transaction"
},
"total_fees": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ Fees paid for this transaction"
}
}
},
@ -1794,19 +1853,8 @@
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcTransaction"
}
}
}
},
"lnrpcVerifyMessageRequest": {
"type": "object",
"properties": {
"msg": {
"type": "string",
"format": "byte"
},
"signature": {
"type": "string"
},
"description": "/ The list of transactions relevant to the wallet."
}
}
},
@ -1815,19 +1863,12 @@
"properties": {
"valid": {
"type": "boolean",
"format": "boolean"
"format": "boolean",
"title": "/ Whether the signature was valid over the given message"
},
"pubkey": {
"type": "string"
}
}
},
"lnrpcWalletBalanceRequest": {
"type": "object",
"properties": {
"witness_only": {
"type": "boolean",
"format": "boolean"
"type": "string",
"title": "/ The pubkey recovered from the signature"
}
}
},
@ -1836,7 +1877,8 @@
"properties": {
"balance": {
"type": "string",
"format": "int64"
"format": "int64",
"title": "/ The balance of the wallet"
}
}
}