Merge pull request #3039 from Crypt-iQ/predicate_channel_accept_0428

rpc: bi-directional streaming for predicate-based channel acceptance
This commit is contained in:
Olaoluwa Osuntokun 2019-09-25 16:29:48 -07:00 committed by GitHub
commit e0d7854432
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1571 additions and 652 deletions

@ -0,0 +1,156 @@
package chanacceptor
import (
"bytes"
"sync/atomic"
"testing"
"time"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/lnwire"
)
func randKey(t *testing.T) *btcec.PublicKey {
t.Helper()
priv, err := btcec.NewPrivateKey(btcec.S256())
if err != nil {
t.Fatalf("unable to generate new public key")
}
return priv.PubKey()
}
// requestInfo encapsulates the information sent from the RPCAcceptor to the
// receiver on the other end of the stream.
type requestInfo struct {
chanReq *ChannelAcceptRequest
responseChan chan lnrpc.ChannelAcceptResponse
}
var defaultAcceptTimeout = 5 * time.Second
func acceptAndIncrementCtr(rpc ChannelAcceptor, req *ChannelAcceptRequest,
ctr *uint32, success chan struct{}) {
result := rpc.Accept(req)
if !result {
return
}
val := atomic.AddUint32(ctr, 1)
if val == 3 {
success <- struct{}{}
}
}
// TestMultipleRPCClients tests that the RPCAcceptor is able to handle multiple
// callers to its Accept method and respond to them correctly.
func TestRPCMultipleAcceptClients(t *testing.T) {
var (
node = randKey(t)
firstOpenReq = &ChannelAcceptRequest{
Node: node,
OpenChanMsg: &lnwire.OpenChannel{
PendingChannelID: [32]byte{0},
},
}
secondOpenReq = &ChannelAcceptRequest{
Node: node,
OpenChanMsg: &lnwire.OpenChannel{
PendingChannelID: [32]byte{1},
},
}
thirdOpenReq = &ChannelAcceptRequest{
Node: node,
OpenChanMsg: &lnwire.OpenChannel{
PendingChannelID: [32]byte{2},
},
}
counter uint32
)
quit := make(chan struct{})
defer close(quit)
// Create channels to handle requests and successes.
requests := make(chan *requestInfo)
successChan := make(chan struct{})
errChan := make(chan struct{}, 4)
// demultiplexReq is a closure used to abstract the RPCAcceptor's request
// and response logic.
demultiplexReq := func(req *ChannelAcceptRequest) bool {
respChan := make(chan lnrpc.ChannelAcceptResponse, 1)
newRequest := &requestInfo{
chanReq: req,
responseChan: respChan,
}
// Send the newRequest to the requests channel.
select {
case requests <- newRequest:
case <-quit:
return false
}
// Receive the response and verify that the PendingChanId matches
// the ID found in the ChannelAcceptRequest. If no response has been
// received in defaultAcceptTimeout, then return false.
select {
case resp := <-respChan:
pendingID := req.OpenChanMsg.PendingChannelID
if !bytes.Equal(pendingID[:], resp.PendingChanId) {
errChan <- struct{}{}
return false
}
return resp.Accept
case <-time.After(defaultAcceptTimeout):
errChan <- struct{}{}
return false
case <-quit:
return false
}
}
rpcAcceptor := NewRPCAcceptor(demultiplexReq)
// Now we call the Accept method for each request.
go func() {
acceptAndIncrementCtr(rpcAcceptor, firstOpenReq, &counter, successChan)
}()
go func() {
acceptAndIncrementCtr(rpcAcceptor, secondOpenReq, &counter, successChan)
}()
go func() {
acceptAndIncrementCtr(rpcAcceptor, thirdOpenReq, &counter, successChan)
}()
for {
select {
case newRequest := <-requests:
newResponse := lnrpc.ChannelAcceptResponse{
Accept: true,
PendingChanId: newRequest.chanReq.OpenChanMsg.PendingChannelID[:],
}
newRequest.responseChan <- newResponse
case <-errChan:
t.Fatalf("unable to accept ChannelAcceptRequest")
case <-successChan:
return
case <-quit:
}
}
}

@ -0,0 +1,65 @@
package chanacceptor
import (
"sync"
"sync/atomic"
)
// ChainedAcceptor represents a conjunction of ChannelAcceptor results.
type ChainedAcceptor struct {
// acceptors is a map of ChannelAcceptors that will be evaluated when
// the ChainedAcceptor's Accept method is called.
acceptors map[uint64]ChannelAcceptor
acceptorsMtx sync.RWMutex
acceptorID uint64 // To be used atomically.
}
// NewChainedAcceptor initializes a ChainedAcceptor.
func NewChainedAcceptor() *ChainedAcceptor {
return &ChainedAcceptor{
acceptors: make(map[uint64]ChannelAcceptor),
}
}
// AddAcceptor adds a ChannelAcceptor to this ChainedAcceptor.
func (c *ChainedAcceptor) AddAcceptor(acceptor ChannelAcceptor) uint64 {
id := atomic.AddUint64(&c.acceptorID, 1)
c.acceptorsMtx.Lock()
c.acceptors[id] = acceptor
c.acceptorsMtx.Unlock()
// Return the id so that a caller can call RemoveAcceptor.
return id
}
// RemoveAcceptor removes a ChannelAcceptor from this ChainedAcceptor given
// an ID.
func (c *ChainedAcceptor) RemoveAcceptor(id uint64) {
c.acceptorsMtx.Lock()
delete(c.acceptors, id)
c.acceptorsMtx.Unlock()
}
// Accept evaluates the results of all ChannelAcceptors in the acceptors map
// and returns the conjunction of all these predicates.
//
// NOTE: Part of the ChannelAcceptor interface.
func (c *ChainedAcceptor) Accept(req *ChannelAcceptRequest) bool {
result := true
c.acceptorsMtx.RLock()
for _, acceptor := range c.acceptors {
// We call Accept first in case any acceptor (perhaps an RPCAcceptor)
// wishes to be notified about ChannelAcceptRequest.
result = acceptor.Accept(req) && result
}
c.acceptorsMtx.RUnlock()
return result
}
// A compile-time constraint to ensure ChainedAcceptor implements the
// ChannelAcceptor interface.
var _ ChannelAcceptor = (*ChainedAcceptor)(nil)

25
chanacceptor/interface.go Normal file

@ -0,0 +1,25 @@
package chanacceptor
import (
"github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/lnwire"
)
// ChannelAcceptRequest is a struct containing the requesting node's public key
// along with the lnwire.OpenChannel message that they sent when requesting an
// inbound channel. This information is provided to each acceptor so that they
// can each leverage their own decision-making with this information.
type ChannelAcceptRequest struct {
// Node is the public key of the node requesting to open a channel.
Node *btcec.PublicKey
// OpenChanMsg is the actual OpenChannel protocol message that the peer
// sent to us.
OpenChanMsg *lnwire.OpenChannel
}
// ChannelAcceptor is an interface that represents a predicate on the data
// contained in ChannelAcceptRequest.
type ChannelAcceptor interface {
Accept(req *ChannelAcceptRequest) bool
}

@ -0,0 +1,27 @@
package chanacceptor
// RPCAcceptor represents the RPC-controlled variant of the ChannelAcceptor.
// One RPCAcceptor allows one RPC client.
type RPCAcceptor struct {
acceptClosure func(req *ChannelAcceptRequest) bool
}
// Accept is a predicate on the ChannelAcceptRequest which is sent to the RPC
// client who will respond with the ultimate decision. This assumes an accept
// closure has been specified during creation.
//
// NOTE: Part of the ChannelAcceptor interface.
func (r *RPCAcceptor) Accept(req *ChannelAcceptRequest) bool {
return r.acceptClosure(req)
}
// NewRPCAcceptor creates and returns an instance of the RPCAcceptor.
func NewRPCAcceptor(closure func(*ChannelAcceptRequest) bool) *RPCAcceptor {
return &RPCAcceptor{
acceptClosure: closure,
}
}
// A compile-time constraint to ensure RPCAcceptor implements the ChannelAcceptor
// interface.
var _ ChannelAcceptor = (*RPCAcceptor)(nil)

@ -15,6 +15,7 @@ import (
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/chanacceptor"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/discovery" "github.com/lightningnetwork/lnd/discovery"
"github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/htlcswitch"
@ -338,6 +339,11 @@ type fundingConfig struct {
// NotifyOpenChannelEvent informs the ChannelNotifier when channels // NotifyOpenChannelEvent informs the ChannelNotifier when channels
// transition from pending open to open. // transition from pending open to open.
NotifyOpenChannelEvent func(wire.OutPoint) NotifyOpenChannelEvent func(wire.OutPoint)
// OpenChannelPredicate is a predicate on the lnwire.OpenChannel message
// and on the requesting node's public key that returns a bool which tells
// the funding manager whether or not to accept the channel.
OpenChannelPredicate chanacceptor.ChannelAcceptor
} }
// fundingManager acts as an orchestrator/bridge between the wallet's // fundingManager acts as an orchestrator/bridge between the wallet's
@ -1057,7 +1063,23 @@ func (f *fundingManager) handleFundingOpen(fmsg *fundingOpenMsg) {
if f.cfg.RejectPush && msg.PushAmount > 0 { if f.cfg.RejectPush && msg.PushAmount > 0 {
f.failFundingFlow( f.failFundingFlow(
fmsg.peer, fmsg.msg.PendingChannelID, fmsg.peer, fmsg.msg.PendingChannelID,
lnwallet.ErrNonZeroPushAmount()) lnwallet.ErrNonZeroPushAmount(),
)
return
}
// Send the OpenChannel request to the ChannelAcceptor to determine whether
// this node will accept the channel.
chanReq := &chanacceptor.ChannelAcceptRequest{
Node: fmsg.peer.IdentityKey(),
OpenChanMsg: fmsg.msg,
}
if !f.cfg.OpenChannelPredicate.Accept(chanReq) {
f.failFundingFlow(
fmsg.peer, fmsg.msg.PendingChannelID,
fmt.Errorf("open channel request rejected"),
)
return return
} }

@ -23,6 +23,7 @@ import (
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/chanacceptor"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/discovery" "github.com/lightningnetwork/lnd/discovery"
"github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/htlcswitch"
@ -281,6 +282,8 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey,
var chanIDSeed [32]byte var chanIDSeed [32]byte
chainedAcceptor := chanacceptor.NewChainedAcceptor()
fundingCfg := fundingConfig{ fundingCfg := fundingConfig{
IDKey: privKey.PubKey(), IDKey: privKey.PubKey(),
Wallet: lnw, Wallet: lnw,
@ -364,6 +367,7 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey,
ReservationTimeout: 1 * time.Nanosecond, ReservationTimeout: 1 * time.Nanosecond,
MaxPendingChannels: DefaultMaxPendingChannels, MaxPendingChannels: DefaultMaxPendingChannels,
NotifyOpenChannelEvent: func(wire.OutPoint) {}, NotifyOpenChannelEvent: func(wire.OutPoint) {},
OpenChannelPredicate: chainedAcceptor,
} }
for _, op := range options { for _, op := range options {
@ -414,6 +418,8 @@ func recreateAliceFundingManager(t *testing.T, alice *testNode) {
oldCfg := alice.fundingMgr.cfg oldCfg := alice.fundingMgr.cfg
chainedAcceptor := chanacceptor.NewChainedAcceptor()
f, err := newFundingManager(fundingConfig{ f, err := newFundingManager(fundingConfig{
IDKey: oldCfg.IDKey, IDKey: oldCfg.IDKey,
Wallet: oldCfg.Wallet, Wallet: oldCfg.Wallet,
@ -458,6 +464,7 @@ func recreateAliceFundingManager(t *testing.T, alice *testNode) {
}, },
ZombieSweeperInterval: oldCfg.ZombieSweeperInterval, ZombieSweeperInterval: oldCfg.ZombieSweeperInterval,
ReservationTimeout: oldCfg.ReservationTimeout, ReservationTimeout: oldCfg.ReservationTimeout,
OpenChannelPredicate: chainedAcceptor,
}) })
if err != nil { if err != nil {
t.Fatalf("failed recreating aliceFundingManager: %v", err) t.Fatalf("failed recreating aliceFundingManager: %v", err)

8
lnd.go

@ -43,6 +43,7 @@ import (
"github.com/lightningnetwork/lnd/autopilot" "github.com/lightningnetwork/lnd/autopilot"
"github.com/lightningnetwork/lnd/build" "github.com/lightningnetwork/lnd/build"
"github.com/lightningnetwork/lnd/chanacceptor"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lncfg" "github.com/lightningnetwork/lnd/lncfg"
@ -488,11 +489,14 @@ func Main(lisCfg ListenerCfg) error {
} }
} }
// Initialize the ChainedAcceptor.
chainedAcceptor := chanacceptor.NewChainedAcceptor()
// Set up the core server which will listen for incoming peer // Set up the core server which will listen for incoming peer
// connections. // connections.
server, err := newServer( server, err := newServer(
cfg.Listeners, chanDB, towerClientDB, activeChainControl, cfg.Listeners, chanDB, towerClientDB, activeChainControl,
idPrivKey, walletInitParams.ChansToRestore, idPrivKey, walletInitParams.ChansToRestore, chainedAcceptor,
) )
if err != nil { if err != nil {
err := fmt.Errorf("Unable to create server: %v", err) err := fmt.Errorf("Unable to create server: %v", err)
@ -547,7 +551,7 @@ func Main(lisCfg ListenerCfg) error {
rpcServer, err := newRPCServer( rpcServer, err := newRPCServer(
server, macaroonService, cfg.SubRPCServers, restDialOpts, server, macaroonService, cfg.SubRPCServers, restDialOpts,
restProxyDest, atplManager, server.invoices, tower, tlsCfg, restProxyDest, atplManager, server.invoices, tower, tlsCfg,
rpcListeners, rpcListeners, chainedAcceptor,
) )
if err != nil { if err != nil {
err := fmt.Errorf("Unable to create RPC server: %v", err) err := fmt.Errorf("Unable to create RPC server: %v", err)

@ -121,7 +121,7 @@ func (x ChannelCloseSummary_ClosureType) String() string {
} }
func (ChannelCloseSummary_ClosureType) EnumDescriptor() ([]byte, []int) { func (ChannelCloseSummary_ClosureType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{41, 0} return fileDescriptor_77a6da22d6a3feb1, []int{43, 0}
} }
type Peer_SyncType int32 type Peer_SyncType int32
@ -155,7 +155,7 @@ func (x Peer_SyncType) String() string {
} }
func (Peer_SyncType) EnumDescriptor() ([]byte, []int) { func (Peer_SyncType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{44, 0} return fileDescriptor_77a6da22d6a3feb1, []int{46, 0}
} }
type ChannelEventUpdate_UpdateType int32 type ChannelEventUpdate_UpdateType int32
@ -186,7 +186,7 @@ func (x ChannelEventUpdate_UpdateType) String() string {
} }
func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) { func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{62, 0} return fileDescriptor_77a6da22d6a3feb1, []int{64, 0}
} }
type Invoice_InvoiceState int32 type Invoice_InvoiceState int32
@ -217,7 +217,7 @@ func (x Invoice_InvoiceState) String() string {
} }
func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) { func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{93, 0} return fileDescriptor_77a6da22d6a3feb1, []int{95, 0}
} }
type Payment_PaymentStatus int32 type Payment_PaymentStatus int32
@ -248,7 +248,7 @@ func (x Payment_PaymentStatus) String() string {
} }
func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) { func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{100, 0} return fileDescriptor_77a6da22d6a3feb1, []int{102, 0}
} }
type GenSeedRequest struct { type GenSeedRequest struct {
@ -1288,6 +1288,205 @@ func (m *SendToRouteRequest) GetRoute() *Route {
return nil return nil
} }
type ChannelAcceptRequest struct {
/// The pubkey of the node that wishes to open an inbound channel.
NodePubkey []byte `protobuf:"bytes,1,opt,name=node_pubkey,json=nodePubkey,proto3" json:"node_pubkey,omitempty"`
/// The hash of the genesis block that the proposed channel resides in.
ChainHash []byte `protobuf:"bytes,2,opt,name=chain_hash,json=chainHash,proto3" json:"chain_hash,omitempty"`
/// The pending channel id.
PendingChanId []byte `protobuf:"bytes,3,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"`
/// The funding amount in satoshis that initiator wishes to use in the channel.
FundingAmt uint64 `protobuf:"varint,4,opt,name=funding_amt,json=fundingAmt,proto3" json:"funding_amt,omitempty"`
/// The push amount of the proposed channel in millisatoshis.
PushAmt uint64 `protobuf:"varint,5,opt,name=push_amt,json=pushAmt,proto3" json:"push_amt,omitempty"`
/// The dust limit of the initiator's commitment tx.
DustLimit uint64 `protobuf:"varint,6,opt,name=dust_limit,json=dustLimit,proto3" json:"dust_limit,omitempty"`
/// The maximum amount of coins in millisatoshis that can be pending in this channel.
MaxValueInFlight uint64 `protobuf:"varint,7,opt,name=max_value_in_flight,json=maxValueInFlight,proto3" json:"max_value_in_flight,omitempty"`
/// The minimum amount of satoshis the initiator requires us to have at all times.
ChannelReserve uint64 `protobuf:"varint,8,opt,name=channel_reserve,json=channelReserve,proto3" json:"channel_reserve,omitempty"`
/// The smallest HTLC in millisatoshis that the initiator will accept.
MinHtlc uint64 `protobuf:"varint,9,opt,name=min_htlc,json=minHtlc,proto3" json:"min_htlc,omitempty"`
/// The initial fee rate that the initiator suggests for both commitment transactions.
FeePerKw uint64 `protobuf:"varint,10,opt,name=fee_per_kw,json=feePerKw,proto3" json:"fee_per_kw,omitempty"`
//*
//The number of blocks to use for the relative time lock in the pay-to-self output
//of both commitment transactions.
CsvDelay uint32 `protobuf:"varint,11,opt,name=csv_delay,json=csvDelay,proto3" json:"csv_delay,omitempty"`
/// The total number of incoming HTLC's that the initiator will accept.
MaxAcceptedHtlcs uint32 `protobuf:"varint,12,opt,name=max_accepted_htlcs,json=maxAcceptedHtlcs,proto3" json:"max_accepted_htlcs,omitempty"`
/// A bit-field which the initiator uses to specify proposed channel behavior.
ChannelFlags uint32 `protobuf:"varint,13,opt,name=channel_flags,json=channelFlags,proto3" json:"channel_flags,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ChannelAcceptRequest) Reset() { *m = ChannelAcceptRequest{} }
func (m *ChannelAcceptRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelAcceptRequest) ProtoMessage() {}
func (*ChannelAcceptRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{16}
}
func (m *ChannelAcceptRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelAcceptRequest.Unmarshal(m, b)
}
func (m *ChannelAcceptRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ChannelAcceptRequest.Marshal(b, m, deterministic)
}
func (m *ChannelAcceptRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ChannelAcceptRequest.Merge(m, src)
}
func (m *ChannelAcceptRequest) XXX_Size() int {
return xxx_messageInfo_ChannelAcceptRequest.Size(m)
}
func (m *ChannelAcceptRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ChannelAcceptRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ChannelAcceptRequest proto.InternalMessageInfo
func (m *ChannelAcceptRequest) GetNodePubkey() []byte {
if m != nil {
return m.NodePubkey
}
return nil
}
func (m *ChannelAcceptRequest) GetChainHash() []byte {
if m != nil {
return m.ChainHash
}
return nil
}
func (m *ChannelAcceptRequest) GetPendingChanId() []byte {
if m != nil {
return m.PendingChanId
}
return nil
}
func (m *ChannelAcceptRequest) GetFundingAmt() uint64 {
if m != nil {
return m.FundingAmt
}
return 0
}
func (m *ChannelAcceptRequest) GetPushAmt() uint64 {
if m != nil {
return m.PushAmt
}
return 0
}
func (m *ChannelAcceptRequest) GetDustLimit() uint64 {
if m != nil {
return m.DustLimit
}
return 0
}
func (m *ChannelAcceptRequest) GetMaxValueInFlight() uint64 {
if m != nil {
return m.MaxValueInFlight
}
return 0
}
func (m *ChannelAcceptRequest) GetChannelReserve() uint64 {
if m != nil {
return m.ChannelReserve
}
return 0
}
func (m *ChannelAcceptRequest) GetMinHtlc() uint64 {
if m != nil {
return m.MinHtlc
}
return 0
}
func (m *ChannelAcceptRequest) GetFeePerKw() uint64 {
if m != nil {
return m.FeePerKw
}
return 0
}
func (m *ChannelAcceptRequest) GetCsvDelay() uint32 {
if m != nil {
return m.CsvDelay
}
return 0
}
func (m *ChannelAcceptRequest) GetMaxAcceptedHtlcs() uint32 {
if m != nil {
return m.MaxAcceptedHtlcs
}
return 0
}
func (m *ChannelAcceptRequest) GetChannelFlags() uint32 {
if m != nil {
return m.ChannelFlags
}
return 0
}
type ChannelAcceptResponse struct {
/// Whether or not the client accepts the channel.
Accept bool `protobuf:"varint,1,opt,name=accept,proto3" json:"accept,omitempty"`
/// The pending channel id to which this response applies.
PendingChanId []byte `protobuf:"bytes,2,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ChannelAcceptResponse) Reset() { *m = ChannelAcceptResponse{} }
func (m *ChannelAcceptResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelAcceptResponse) ProtoMessage() {}
func (*ChannelAcceptResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{17}
}
func (m *ChannelAcceptResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelAcceptResponse.Unmarshal(m, b)
}
func (m *ChannelAcceptResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ChannelAcceptResponse.Marshal(b, m, deterministic)
}
func (m *ChannelAcceptResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ChannelAcceptResponse.Merge(m, src)
}
func (m *ChannelAcceptResponse) XXX_Size() int {
return xxx_messageInfo_ChannelAcceptResponse.Size(m)
}
func (m *ChannelAcceptResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ChannelAcceptResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ChannelAcceptResponse proto.InternalMessageInfo
func (m *ChannelAcceptResponse) GetAccept() bool {
if m != nil {
return m.Accept
}
return false
}
func (m *ChannelAcceptResponse) GetPendingChanId() []byte {
if m != nil {
return m.PendingChanId
}
return nil
}
type ChannelPoint struct { type ChannelPoint struct {
// Types that are valid to be assigned to FundingTxid: // Types that are valid to be assigned to FundingTxid:
// *ChannelPoint_FundingTxidBytes // *ChannelPoint_FundingTxidBytes
@ -1304,7 +1503,7 @@ func (m *ChannelPoint) Reset() { *m = ChannelPoint{} }
func (m *ChannelPoint) String() string { return proto.CompactTextString(m) } func (m *ChannelPoint) String() string { return proto.CompactTextString(m) }
func (*ChannelPoint) ProtoMessage() {} func (*ChannelPoint) ProtoMessage() {}
func (*ChannelPoint) Descriptor() ([]byte, []int) { func (*ChannelPoint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{16} return fileDescriptor_77a6da22d6a3feb1, []int{18}
} }
func (m *ChannelPoint) XXX_Unmarshal(b []byte) error { func (m *ChannelPoint) XXX_Unmarshal(b []byte) error {
@ -1393,7 +1592,7 @@ func (m *OutPoint) Reset() { *m = OutPoint{} }
func (m *OutPoint) String() string { return proto.CompactTextString(m) } func (m *OutPoint) String() string { return proto.CompactTextString(m) }
func (*OutPoint) ProtoMessage() {} func (*OutPoint) ProtoMessage() {}
func (*OutPoint) Descriptor() ([]byte, []int) { func (*OutPoint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{17} return fileDescriptor_77a6da22d6a3feb1, []int{19}
} }
func (m *OutPoint) XXX_Unmarshal(b []byte) error { func (m *OutPoint) XXX_Unmarshal(b []byte) error {
@ -1449,7 +1648,7 @@ func (m *LightningAddress) Reset() { *m = LightningAddress{} }
func (m *LightningAddress) String() string { return proto.CompactTextString(m) } func (m *LightningAddress) String() string { return proto.CompactTextString(m) }
func (*LightningAddress) ProtoMessage() {} func (*LightningAddress) ProtoMessage() {}
func (*LightningAddress) Descriptor() ([]byte, []int) { func (*LightningAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{18} return fileDescriptor_77a6da22d6a3feb1, []int{20}
} }
func (m *LightningAddress) XXX_Unmarshal(b []byte) error { func (m *LightningAddress) XXX_Unmarshal(b []byte) error {
@ -1498,7 +1697,7 @@ func (m *EstimateFeeRequest) Reset() { *m = EstimateFeeRequest{} }
func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) } func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeRequest) ProtoMessage() {} func (*EstimateFeeRequest) ProtoMessage() {}
func (*EstimateFeeRequest) Descriptor() ([]byte, []int) { func (*EstimateFeeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{19} return fileDescriptor_77a6da22d6a3feb1, []int{21}
} }
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error { func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
@ -1547,7 +1746,7 @@ func (m *EstimateFeeResponse) Reset() { *m = EstimateFeeResponse{} }
func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) } func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeResponse) ProtoMessage() {} func (*EstimateFeeResponse) ProtoMessage() {}
func (*EstimateFeeResponse) Descriptor() ([]byte, []int) { func (*EstimateFeeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{20} return fileDescriptor_77a6da22d6a3feb1, []int{22}
} }
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error { func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
@ -1598,7 +1797,7 @@ func (m *SendManyRequest) Reset() { *m = SendManyRequest{} }
func (m *SendManyRequest) String() string { return proto.CompactTextString(m) } func (m *SendManyRequest) String() string { return proto.CompactTextString(m) }
func (*SendManyRequest) ProtoMessage() {} func (*SendManyRequest) ProtoMessage() {}
func (*SendManyRequest) Descriptor() ([]byte, []int) { func (*SendManyRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{21} return fileDescriptor_77a6da22d6a3feb1, []int{23}
} }
func (m *SendManyRequest) XXX_Unmarshal(b []byte) error { func (m *SendManyRequest) XXX_Unmarshal(b []byte) error {
@ -1652,7 +1851,7 @@ func (m *SendManyResponse) Reset() { *m = SendManyResponse{} }
func (m *SendManyResponse) String() string { return proto.CompactTextString(m) } func (m *SendManyResponse) String() string { return proto.CompactTextString(m) }
func (*SendManyResponse) ProtoMessage() {} func (*SendManyResponse) ProtoMessage() {}
func (*SendManyResponse) Descriptor() ([]byte, []int) { func (*SendManyResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{22} return fileDescriptor_77a6da22d6a3feb1, []int{24}
} }
func (m *SendManyResponse) XXX_Unmarshal(b []byte) error { func (m *SendManyResponse) XXX_Unmarshal(b []byte) error {
@ -1703,7 +1902,7 @@ func (m *SendCoinsRequest) Reset() { *m = SendCoinsRequest{} }
func (m *SendCoinsRequest) String() string { return proto.CompactTextString(m) } func (m *SendCoinsRequest) String() string { return proto.CompactTextString(m) }
func (*SendCoinsRequest) ProtoMessage() {} func (*SendCoinsRequest) ProtoMessage() {}
func (*SendCoinsRequest) Descriptor() ([]byte, []int) { func (*SendCoinsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{23} return fileDescriptor_77a6da22d6a3feb1, []int{25}
} }
func (m *SendCoinsRequest) XXX_Unmarshal(b []byte) error { func (m *SendCoinsRequest) XXX_Unmarshal(b []byte) error {
@ -1771,7 +1970,7 @@ func (m *SendCoinsResponse) Reset() { *m = SendCoinsResponse{} }
func (m *SendCoinsResponse) String() string { return proto.CompactTextString(m) } func (m *SendCoinsResponse) String() string { return proto.CompactTextString(m) }
func (*SendCoinsResponse) ProtoMessage() {} func (*SendCoinsResponse) ProtoMessage() {}
func (*SendCoinsResponse) Descriptor() ([]byte, []int) { func (*SendCoinsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{24} return fileDescriptor_77a6da22d6a3feb1, []int{26}
} }
func (m *SendCoinsResponse) XXX_Unmarshal(b []byte) error { func (m *SendCoinsResponse) XXX_Unmarshal(b []byte) error {
@ -1813,7 +2012,7 @@ func (m *ListUnspentRequest) Reset() { *m = ListUnspentRequest{} }
func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) } func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) }
func (*ListUnspentRequest) ProtoMessage() {} func (*ListUnspentRequest) ProtoMessage() {}
func (*ListUnspentRequest) Descriptor() ([]byte, []int) { func (*ListUnspentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{25} return fileDescriptor_77a6da22d6a3feb1, []int{27}
} }
func (m *ListUnspentRequest) XXX_Unmarshal(b []byte) error { func (m *ListUnspentRequest) XXX_Unmarshal(b []byte) error {
@ -1860,7 +2059,7 @@ func (m *ListUnspentResponse) Reset() { *m = ListUnspentResponse{} }
func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) } func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) }
func (*ListUnspentResponse) ProtoMessage() {} func (*ListUnspentResponse) ProtoMessage() {}
func (*ListUnspentResponse) Descriptor() ([]byte, []int) { func (*ListUnspentResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{26} return fileDescriptor_77a6da22d6a3feb1, []int{28}
} }
func (m *ListUnspentResponse) XXX_Unmarshal(b []byte) error { func (m *ListUnspentResponse) XXX_Unmarshal(b []byte) error {
@ -1900,7 +2099,7 @@ func (m *NewAddressRequest) Reset() { *m = NewAddressRequest{} }
func (m *NewAddressRequest) String() string { return proto.CompactTextString(m) } func (m *NewAddressRequest) String() string { return proto.CompactTextString(m) }
func (*NewAddressRequest) ProtoMessage() {} func (*NewAddressRequest) ProtoMessage() {}
func (*NewAddressRequest) Descriptor() ([]byte, []int) { func (*NewAddressRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{27} return fileDescriptor_77a6da22d6a3feb1, []int{29}
} }
func (m *NewAddressRequest) XXX_Unmarshal(b []byte) error { func (m *NewAddressRequest) XXX_Unmarshal(b []byte) error {
@ -1940,7 +2139,7 @@ func (m *NewAddressResponse) Reset() { *m = NewAddressResponse{} }
func (m *NewAddressResponse) String() string { return proto.CompactTextString(m) } func (m *NewAddressResponse) String() string { return proto.CompactTextString(m) }
func (*NewAddressResponse) ProtoMessage() {} func (*NewAddressResponse) ProtoMessage() {}
func (*NewAddressResponse) Descriptor() ([]byte, []int) { func (*NewAddressResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{28} return fileDescriptor_77a6da22d6a3feb1, []int{30}
} }
func (m *NewAddressResponse) XXX_Unmarshal(b []byte) error { func (m *NewAddressResponse) XXX_Unmarshal(b []byte) error {
@ -1980,7 +2179,7 @@ func (m *SignMessageRequest) Reset() { *m = SignMessageRequest{} }
func (m *SignMessageRequest) String() string { return proto.CompactTextString(m) } func (m *SignMessageRequest) String() string { return proto.CompactTextString(m) }
func (*SignMessageRequest) ProtoMessage() {} func (*SignMessageRequest) ProtoMessage() {}
func (*SignMessageRequest) Descriptor() ([]byte, []int) { func (*SignMessageRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{29} return fileDescriptor_77a6da22d6a3feb1, []int{31}
} }
func (m *SignMessageRequest) XXX_Unmarshal(b []byte) error { func (m *SignMessageRequest) XXX_Unmarshal(b []byte) error {
@ -2020,7 +2219,7 @@ func (m *SignMessageResponse) Reset() { *m = SignMessageResponse{} }
func (m *SignMessageResponse) String() string { return proto.CompactTextString(m) } func (m *SignMessageResponse) String() string { return proto.CompactTextString(m) }
func (*SignMessageResponse) ProtoMessage() {} func (*SignMessageResponse) ProtoMessage() {}
func (*SignMessageResponse) Descriptor() ([]byte, []int) { func (*SignMessageResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{30} return fileDescriptor_77a6da22d6a3feb1, []int{32}
} }
func (m *SignMessageResponse) XXX_Unmarshal(b []byte) error { func (m *SignMessageResponse) XXX_Unmarshal(b []byte) error {
@ -2062,7 +2261,7 @@ func (m *VerifyMessageRequest) Reset() { *m = VerifyMessageRequest{} }
func (m *VerifyMessageRequest) String() string { return proto.CompactTextString(m) } func (m *VerifyMessageRequest) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageRequest) ProtoMessage() {} func (*VerifyMessageRequest) ProtoMessage() {}
func (*VerifyMessageRequest) Descriptor() ([]byte, []int) { func (*VerifyMessageRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{31} return fileDescriptor_77a6da22d6a3feb1, []int{33}
} }
func (m *VerifyMessageRequest) XXX_Unmarshal(b []byte) error { func (m *VerifyMessageRequest) XXX_Unmarshal(b []byte) error {
@ -2111,7 +2310,7 @@ func (m *VerifyMessageResponse) Reset() { *m = VerifyMessageResponse{} }
func (m *VerifyMessageResponse) String() string { return proto.CompactTextString(m) } func (m *VerifyMessageResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageResponse) ProtoMessage() {} func (*VerifyMessageResponse) ProtoMessage() {}
func (*VerifyMessageResponse) Descriptor() ([]byte, []int) { func (*VerifyMessageResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{32} return fileDescriptor_77a6da22d6a3feb1, []int{34}
} }
func (m *VerifyMessageResponse) XXX_Unmarshal(b []byte) error { func (m *VerifyMessageResponse) XXX_Unmarshal(b []byte) error {
@ -2161,7 +2360,7 @@ func (m *ConnectPeerRequest) Reset() { *m = ConnectPeerRequest{} }
func (m *ConnectPeerRequest) String() string { return proto.CompactTextString(m) } func (m *ConnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerRequest) ProtoMessage() {} func (*ConnectPeerRequest) ProtoMessage() {}
func (*ConnectPeerRequest) Descriptor() ([]byte, []int) { func (*ConnectPeerRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{33} return fileDescriptor_77a6da22d6a3feb1, []int{35}
} }
func (m *ConnectPeerRequest) XXX_Unmarshal(b []byte) error { func (m *ConnectPeerRequest) XXX_Unmarshal(b []byte) error {
@ -2206,7 +2405,7 @@ func (m *ConnectPeerResponse) Reset() { *m = ConnectPeerResponse{} }
func (m *ConnectPeerResponse) String() string { return proto.CompactTextString(m) } func (m *ConnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerResponse) ProtoMessage() {} func (*ConnectPeerResponse) ProtoMessage() {}
func (*ConnectPeerResponse) Descriptor() ([]byte, []int) { func (*ConnectPeerResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{34} return fileDescriptor_77a6da22d6a3feb1, []int{36}
} }
func (m *ConnectPeerResponse) XXX_Unmarshal(b []byte) error { func (m *ConnectPeerResponse) XXX_Unmarshal(b []byte) error {
@ -2239,7 +2438,7 @@ func (m *DisconnectPeerRequest) Reset() { *m = DisconnectPeerRequest{} }
func (m *DisconnectPeerRequest) String() string { return proto.CompactTextString(m) } func (m *DisconnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerRequest) ProtoMessage() {} func (*DisconnectPeerRequest) ProtoMessage() {}
func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) { func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{35} return fileDescriptor_77a6da22d6a3feb1, []int{37}
} }
func (m *DisconnectPeerRequest) XXX_Unmarshal(b []byte) error { func (m *DisconnectPeerRequest) XXX_Unmarshal(b []byte) error {
@ -2277,7 +2476,7 @@ func (m *DisconnectPeerResponse) Reset() { *m = DisconnectPeerResponse{}
func (m *DisconnectPeerResponse) String() string { return proto.CompactTextString(m) } func (m *DisconnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerResponse) ProtoMessage() {} func (*DisconnectPeerResponse) ProtoMessage() {}
func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) { func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{36} return fileDescriptor_77a6da22d6a3feb1, []int{38}
} }
func (m *DisconnectPeerResponse) XXX_Unmarshal(b []byte) error { func (m *DisconnectPeerResponse) XXX_Unmarshal(b []byte) error {
@ -2312,7 +2511,7 @@ func (m *HTLC) Reset() { *m = HTLC{} }
func (m *HTLC) String() string { return proto.CompactTextString(m) } func (m *HTLC) String() string { return proto.CompactTextString(m) }
func (*HTLC) ProtoMessage() {} func (*HTLC) ProtoMessage() {}
func (*HTLC) Descriptor() ([]byte, []int) { func (*HTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{37} return fileDescriptor_77a6da22d6a3feb1, []int{39}
} }
func (m *HTLC) XXX_Unmarshal(b []byte) error { func (m *HTLC) XXX_Unmarshal(b []byte) error {
@ -2433,7 +2632,7 @@ func (m *Channel) Reset() { *m = Channel{} }
func (m *Channel) String() string { return proto.CompactTextString(m) } func (m *Channel) String() string { return proto.CompactTextString(m) }
func (*Channel) ProtoMessage() {} func (*Channel) ProtoMessage() {}
func (*Channel) Descriptor() ([]byte, []int) { func (*Channel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{38} return fileDescriptor_77a6da22d6a3feb1, []int{40}
} }
func (m *Channel) XXX_Unmarshal(b []byte) error { func (m *Channel) XXX_Unmarshal(b []byte) error {
@ -2615,7 +2814,7 @@ func (m *ListChannelsRequest) Reset() { *m = ListChannelsRequest{} }
func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ListChannelsRequest) ProtoMessage() {} func (*ListChannelsRequest) ProtoMessage() {}
func (*ListChannelsRequest) Descriptor() ([]byte, []int) { func (*ListChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{39} return fileDescriptor_77a6da22d6a3feb1, []int{41}
} }
func (m *ListChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *ListChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -2676,7 +2875,7 @@ func (m *ListChannelsResponse) Reset() { *m = ListChannelsResponse{} }
func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) } func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ListChannelsResponse) ProtoMessage() {} func (*ListChannelsResponse) ProtoMessage() {}
func (*ListChannelsResponse) Descriptor() ([]byte, []int) { func (*ListChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{40} return fileDescriptor_77a6da22d6a3feb1, []int{42}
} }
func (m *ListChannelsResponse) XXX_Unmarshal(b []byte) error { func (m *ListChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -2734,7 +2933,7 @@ func (m *ChannelCloseSummary) Reset() { *m = ChannelCloseSummary{} }
func (m *ChannelCloseSummary) String() string { return proto.CompactTextString(m) } func (m *ChannelCloseSummary) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseSummary) ProtoMessage() {} func (*ChannelCloseSummary) ProtoMessage() {}
func (*ChannelCloseSummary) Descriptor() ([]byte, []int) { func (*ChannelCloseSummary) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{41} return fileDescriptor_77a6da22d6a3feb1, []int{43}
} }
func (m *ChannelCloseSummary) XXX_Unmarshal(b []byte) error { func (m *ChannelCloseSummary) XXX_Unmarshal(b []byte) error {
@ -2841,7 +3040,7 @@ func (m *ClosedChannelsRequest) Reset() { *m = ClosedChannelsRequest{} }
func (m *ClosedChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *ClosedChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsRequest) ProtoMessage() {} func (*ClosedChannelsRequest) ProtoMessage() {}
func (*ClosedChannelsRequest) Descriptor() ([]byte, []int) { func (*ClosedChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{42} return fileDescriptor_77a6da22d6a3feb1, []int{44}
} }
func (m *ClosedChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *ClosedChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -2915,7 +3114,7 @@ func (m *ClosedChannelsResponse) Reset() { *m = ClosedChannelsResponse{}
func (m *ClosedChannelsResponse) String() string { return proto.CompactTextString(m) } func (m *ClosedChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsResponse) ProtoMessage() {} func (*ClosedChannelsResponse) ProtoMessage() {}
func (*ClosedChannelsResponse) Descriptor() ([]byte, []int) { func (*ClosedChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{43} return fileDescriptor_77a6da22d6a3feb1, []int{45}
} }
func (m *ClosedChannelsResponse) XXX_Unmarshal(b []byte) error { func (m *ClosedChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -2971,7 +3170,7 @@ func (m *Peer) Reset() { *m = Peer{} }
func (m *Peer) String() string { return proto.CompactTextString(m) } func (m *Peer) String() string { return proto.CompactTextString(m) }
func (*Peer) ProtoMessage() {} func (*Peer) ProtoMessage() {}
func (*Peer) Descriptor() ([]byte, []int) { func (*Peer) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{44} return fileDescriptor_77a6da22d6a3feb1, []int{46}
} }
func (m *Peer) XXX_Unmarshal(b []byte) error { func (m *Peer) XXX_Unmarshal(b []byte) error {
@ -3065,7 +3264,7 @@ func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} }
func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) } func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) }
func (*ListPeersRequest) ProtoMessage() {} func (*ListPeersRequest) ProtoMessage() {}
func (*ListPeersRequest) Descriptor() ([]byte, []int) { func (*ListPeersRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{45} return fileDescriptor_77a6da22d6a3feb1, []int{47}
} }
func (m *ListPeersRequest) XXX_Unmarshal(b []byte) error { func (m *ListPeersRequest) XXX_Unmarshal(b []byte) error {
@ -3098,7 +3297,7 @@ func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} }
func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) } func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) }
func (*ListPeersResponse) ProtoMessage() {} func (*ListPeersResponse) ProtoMessage() {}
func (*ListPeersResponse) Descriptor() ([]byte, []int) { func (*ListPeersResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{46} return fileDescriptor_77a6da22d6a3feb1, []int{48}
} }
func (m *ListPeersResponse) XXX_Unmarshal(b []byte) error { func (m *ListPeersResponse) XXX_Unmarshal(b []byte) error {
@ -3136,7 +3335,7 @@ func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} }
func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) } func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetInfoRequest) ProtoMessage() {} func (*GetInfoRequest) ProtoMessage() {}
func (*GetInfoRequest) Descriptor() ([]byte, []int) { func (*GetInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{47} return fileDescriptor_77a6da22d6a3feb1, []int{49}
} }
func (m *GetInfoRequest) XXX_Unmarshal(b []byte) error { func (m *GetInfoRequest) XXX_Unmarshal(b []byte) error {
@ -3201,7 +3400,7 @@ func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} }
func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) } func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetInfoResponse) ProtoMessage() {} func (*GetInfoResponse) ProtoMessage() {}
func (*GetInfoResponse) Descriptor() ([]byte, []int) { func (*GetInfoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{48} return fileDescriptor_77a6da22d6a3feb1, []int{50}
} }
func (m *GetInfoResponse) XXX_Unmarshal(b []byte) error { func (m *GetInfoResponse) XXX_Unmarshal(b []byte) error {
@ -3349,7 +3548,7 @@ func (m *Chain) Reset() { *m = Chain{} }
func (m *Chain) String() string { return proto.CompactTextString(m) } func (m *Chain) String() string { return proto.CompactTextString(m) }
func (*Chain) ProtoMessage() {} func (*Chain) ProtoMessage() {}
func (*Chain) Descriptor() ([]byte, []int) { func (*Chain) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{49} return fileDescriptor_77a6da22d6a3feb1, []int{51}
} }
func (m *Chain) XXX_Unmarshal(b []byte) error { func (m *Chain) XXX_Unmarshal(b []byte) error {
@ -3397,7 +3596,7 @@ func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} }
func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) } func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) }
func (*ConfirmationUpdate) ProtoMessage() {} func (*ConfirmationUpdate) ProtoMessage() {}
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { func (*ConfirmationUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{50} return fileDescriptor_77a6da22d6a3feb1, []int{52}
} }
func (m *ConfirmationUpdate) XXX_Unmarshal(b []byte) error { func (m *ConfirmationUpdate) XXX_Unmarshal(b []byte) error {
@ -3450,7 +3649,7 @@ func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} }
func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelOpenUpdate) ProtoMessage() {} func (*ChannelOpenUpdate) ProtoMessage() {}
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{51} return fileDescriptor_77a6da22d6a3feb1, []int{53}
} }
func (m *ChannelOpenUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelOpenUpdate) XXX_Unmarshal(b []byte) error {
@ -3490,7 +3689,7 @@ func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} }
func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseUpdate) ProtoMessage() {} func (*ChannelCloseUpdate) ProtoMessage() {}
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{52} return fileDescriptor_77a6da22d6a3feb1, []int{54}
} }
func (m *ChannelCloseUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelCloseUpdate) XXX_Unmarshal(b []byte) error {
@ -3546,7 +3745,7 @@ func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) } func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) }
func (*CloseChannelRequest) ProtoMessage() {} func (*CloseChannelRequest) ProtoMessage() {}
func (*CloseChannelRequest) Descriptor() ([]byte, []int) { func (*CloseChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{53} return fileDescriptor_77a6da22d6a3feb1, []int{55}
} }
func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error { func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error {
@ -3609,7 +3808,7 @@ func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} }
func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*CloseStatusUpdate) ProtoMessage() {} func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { func (*CloseStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{54} return fileDescriptor_77a6da22d6a3feb1, []int{56}
} }
func (m *CloseStatusUpdate) XXX_Unmarshal(b []byte) error { func (m *CloseStatusUpdate) XXX_Unmarshal(b []byte) error {
@ -3687,7 +3886,7 @@ func (m *PendingUpdate) Reset() { *m = PendingUpdate{} }
func (m *PendingUpdate) String() string { return proto.CompactTextString(m) } func (m *PendingUpdate) String() string { return proto.CompactTextString(m) }
func (*PendingUpdate) ProtoMessage() {} func (*PendingUpdate) ProtoMessage() {}
func (*PendingUpdate) Descriptor() ([]byte, []int) { func (*PendingUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{55} return fileDescriptor_77a6da22d6a3feb1, []int{57}
} }
func (m *PendingUpdate) XXX_Unmarshal(b []byte) error { func (m *PendingUpdate) XXX_Unmarshal(b []byte) error {
@ -3754,7 +3953,7 @@ func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) } func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) }
func (*OpenChannelRequest) ProtoMessage() {} func (*OpenChannelRequest) ProtoMessage() {}
func (*OpenChannelRequest) Descriptor() ([]byte, []int) { func (*OpenChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{56} return fileDescriptor_77a6da22d6a3feb1, []int{58}
} }
func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error { func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error {
@ -3866,7 +4065,7 @@ func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*OpenStatusUpdate) ProtoMessage() {} func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { func (*OpenStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{57} return fileDescriptor_77a6da22d6a3feb1, []int{59}
} }
func (m *OpenStatusUpdate) XXX_Unmarshal(b []byte) error { func (m *OpenStatusUpdate) XXX_Unmarshal(b []byte) error {
@ -3957,7 +4156,7 @@ func (m *PendingHTLC) Reset() { *m = PendingHTLC{} }
func (m *PendingHTLC) String() string { return proto.CompactTextString(m) } func (m *PendingHTLC) String() string { return proto.CompactTextString(m) }
func (*PendingHTLC) ProtoMessage() {} func (*PendingHTLC) ProtoMessage() {}
func (*PendingHTLC) Descriptor() ([]byte, []int) { func (*PendingHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{58} return fileDescriptor_77a6da22d6a3feb1, []int{60}
} }
func (m *PendingHTLC) XXX_Unmarshal(b []byte) error { func (m *PendingHTLC) XXX_Unmarshal(b []byte) error {
@ -4030,7 +4229,7 @@ func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{}
func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsRequest) ProtoMessage() {} func (*PendingChannelsRequest) ProtoMessage() {}
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) { func (*PendingChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{59} return fileDescriptor_77a6da22d6a3feb1, []int{61}
} }
func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -4071,7 +4270,7 @@ func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse
func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse) ProtoMessage() {} func (*PendingChannelsResponse) ProtoMessage() {}
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60} return fileDescriptor_77a6da22d6a3feb1, []int{62}
} }
func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -4150,7 +4349,7 @@ func (m *PendingChannelsResponse_PendingChannel) Reset() {
func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60, 0} return fileDescriptor_77a6da22d6a3feb1, []int{62, 0}
} }
func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error {
@ -4252,7 +4451,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string {
} }
func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60, 1} return fileDescriptor_77a6da22d6a3feb1, []int{62, 1}
} }
func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error {
@ -4326,7 +4525,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string {
} }
func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {} func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {}
func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60, 2} return fileDescriptor_77a6da22d6a3feb1, []int{62, 2}
} }
func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error {
@ -4375,7 +4574,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh
func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60, 3} return fileDescriptor_77a6da22d6a3feb1, []int{62, 3}
} }
func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error {
@ -4440,7 +4639,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
} }
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60, 4} return fileDescriptor_77a6da22d6a3feb1, []int{62, 4}
} }
func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error {
@ -4520,7 +4719,7 @@ func (m *ChannelEventSubscription) Reset() { *m = ChannelEventSubscripti
func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) } func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelEventSubscription) ProtoMessage() {} func (*ChannelEventSubscription) ProtoMessage() {}
func (*ChannelEventSubscription) Descriptor() ([]byte, []int) { func (*ChannelEventSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{61} return fileDescriptor_77a6da22d6a3feb1, []int{63}
} }
func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error { func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error {
@ -4558,7 +4757,7 @@ func (m *ChannelEventUpdate) Reset() { *m = ChannelEventUpdate{} }
func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEventUpdate) ProtoMessage() {} func (*ChannelEventUpdate) ProtoMessage() {}
func (*ChannelEventUpdate) Descriptor() ([]byte, []int) { func (*ChannelEventUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{62} return fileDescriptor_77a6da22d6a3feb1, []int{64}
} }
func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error {
@ -4669,7 +4868,7 @@ func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {} func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { func (*WalletBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{63} return fileDescriptor_77a6da22d6a3feb1, []int{65}
} }
func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error { func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -4706,7 +4905,7 @@ func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { func (*WalletBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64} return fileDescriptor_77a6da22d6a3feb1, []int{66}
} }
func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error { func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -4758,7 +4957,7 @@ func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {} func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{65} return fileDescriptor_77a6da22d6a3feb1, []int{67}
} }
func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error { func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -4793,7 +4992,7 @@ func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{}
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {} func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{66} return fileDescriptor_77a6da22d6a3feb1, []int{68}
} }
func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error { func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -4873,7 +5072,7 @@ func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) } func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesRequest) ProtoMessage() {} func (*QueryRoutesRequest) ProtoMessage() {}
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { func (*QueryRoutesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{67} return fileDescriptor_77a6da22d6a3feb1, []int{69}
} }
func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error { func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error {
@ -4979,7 +5178,7 @@ func (m *NodePair) Reset() { *m = NodePair{} }
func (m *NodePair) String() string { return proto.CompactTextString(m) } func (m *NodePair) String() string { return proto.CompactTextString(m) }
func (*NodePair) ProtoMessage() {} func (*NodePair) ProtoMessage() {}
func (*NodePair) Descriptor() ([]byte, []int) { func (*NodePair) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68} return fileDescriptor_77a6da22d6a3feb1, []int{70}
} }
func (m *NodePair) XXX_Unmarshal(b []byte) error { func (m *NodePair) XXX_Unmarshal(b []byte) error {
@ -5032,7 +5231,7 @@ func (m *EdgeLocator) Reset() { *m = EdgeLocator{} }
func (m *EdgeLocator) String() string { return proto.CompactTextString(m) } func (m *EdgeLocator) String() string { return proto.CompactTextString(m) }
func (*EdgeLocator) ProtoMessage() {} func (*EdgeLocator) ProtoMessage() {}
func (*EdgeLocator) Descriptor() ([]byte, []int) { func (*EdgeLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{69} return fileDescriptor_77a6da22d6a3feb1, []int{71}
} }
func (m *EdgeLocator) XXX_Unmarshal(b []byte) error { func (m *EdgeLocator) XXX_Unmarshal(b []byte) error {
@ -5085,7 +5284,7 @@ func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} }
func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) } func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesResponse) ProtoMessage() {} func (*QueryRoutesResponse) ProtoMessage() {}
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { func (*QueryRoutesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{70} return fileDescriptor_77a6da22d6a3feb1, []int{72}
} }
func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error { func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error {
@ -5155,7 +5354,7 @@ func (m *Hop) Reset() { *m = Hop{} }
func (m *Hop) String() string { return proto.CompactTextString(m) } func (m *Hop) String() string { return proto.CompactTextString(m) }
func (*Hop) ProtoMessage() {} func (*Hop) ProtoMessage() {}
func (*Hop) Descriptor() ([]byte, []int) { func (*Hop) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{71} return fileDescriptor_77a6da22d6a3feb1, []int{73}
} }
func (m *Hop) XXX_Unmarshal(b []byte) error { func (m *Hop) XXX_Unmarshal(b []byte) error {
@ -5291,7 +5490,7 @@ func (m *Route) Reset() { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) } func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage() {} func (*Route) ProtoMessage() {}
func (*Route) Descriptor() ([]byte, []int) { func (*Route) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{72} return fileDescriptor_77a6da22d6a3feb1, []int{74}
} }
func (m *Route) XXX_Unmarshal(b []byte) error { func (m *Route) XXX_Unmarshal(b []byte) error {
@ -5370,7 +5569,7 @@ func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} }
func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) } func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NodeInfoRequest) ProtoMessage() {} func (*NodeInfoRequest) ProtoMessage() {}
func (*NodeInfoRequest) Descriptor() ([]byte, []int) { func (*NodeInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{73} return fileDescriptor_77a6da22d6a3feb1, []int{75}
} }
func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error { func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error {
@ -5427,7 +5626,7 @@ func (m *NodeInfo) Reset() { *m = NodeInfo{} }
func (m *NodeInfo) String() string { return proto.CompactTextString(m) } func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
func (*NodeInfo) ProtoMessage() {} func (*NodeInfo) ProtoMessage() {}
func (*NodeInfo) Descriptor() ([]byte, []int) { func (*NodeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{74} return fileDescriptor_77a6da22d6a3feb1, []int{76}
} }
func (m *NodeInfo) XXX_Unmarshal(b []byte) error { func (m *NodeInfo) XXX_Unmarshal(b []byte) error {
@ -5496,7 +5695,7 @@ func (m *LightningNode) Reset() { *m = LightningNode{} }
func (m *LightningNode) String() string { return proto.CompactTextString(m) } func (m *LightningNode) String() string { return proto.CompactTextString(m) }
func (*LightningNode) ProtoMessage() {} func (*LightningNode) ProtoMessage() {}
func (*LightningNode) Descriptor() ([]byte, []int) { func (*LightningNode) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{75} return fileDescriptor_77a6da22d6a3feb1, []int{77}
} }
func (m *LightningNode) XXX_Unmarshal(b []byte) error { func (m *LightningNode) XXX_Unmarshal(b []byte) error {
@ -5564,7 +5763,7 @@ func (m *NodeAddress) Reset() { *m = NodeAddress{} }
func (m *NodeAddress) String() string { return proto.CompactTextString(m) } func (m *NodeAddress) String() string { return proto.CompactTextString(m) }
func (*NodeAddress) ProtoMessage() {} func (*NodeAddress) ProtoMessage() {}
func (*NodeAddress) Descriptor() ([]byte, []int) { func (*NodeAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{76} return fileDescriptor_77a6da22d6a3feb1, []int{78}
} }
func (m *NodeAddress) XXX_Unmarshal(b []byte) error { func (m *NodeAddress) XXX_Unmarshal(b []byte) error {
@ -5616,7 +5815,7 @@ func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} }
func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) } func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) }
func (*RoutingPolicy) ProtoMessage() {} func (*RoutingPolicy) ProtoMessage() {}
func (*RoutingPolicy) Descriptor() ([]byte, []int) { func (*RoutingPolicy) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{77} return fileDescriptor_77a6da22d6a3feb1, []int{79}
} }
func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error { func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error {
@ -5714,7 +5913,7 @@ func (m *ChannelEdge) Reset() { *m = ChannelEdge{} }
func (m *ChannelEdge) String() string { return proto.CompactTextString(m) } func (m *ChannelEdge) String() string { return proto.CompactTextString(m) }
func (*ChannelEdge) ProtoMessage() {} func (*ChannelEdge) ProtoMessage() {}
func (*ChannelEdge) Descriptor() ([]byte, []int) { func (*ChannelEdge) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{78} return fileDescriptor_77a6da22d6a3feb1, []int{80}
} }
func (m *ChannelEdge) XXX_Unmarshal(b []byte) error { func (m *ChannelEdge) XXX_Unmarshal(b []byte) error {
@ -5807,7 +6006,7 @@ func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} }
func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) } func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelGraphRequest) ProtoMessage() {} func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { func (*ChannelGraphRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{79} return fileDescriptor_77a6da22d6a3feb1, []int{81}
} }
func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error { func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error {
@ -5850,7 +6049,7 @@ func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
func (m *ChannelGraph) String() string { return proto.CompactTextString(m) } func (m *ChannelGraph) String() string { return proto.CompactTextString(m) }
func (*ChannelGraph) ProtoMessage() {} func (*ChannelGraph) ProtoMessage() {}
func (*ChannelGraph) Descriptor() ([]byte, []int) { func (*ChannelGraph) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{80} return fileDescriptor_77a6da22d6a3feb1, []int{82}
} }
func (m *ChannelGraph) XXX_Unmarshal(b []byte) error { func (m *ChannelGraph) XXX_Unmarshal(b []byte) error {
@ -5900,7 +6099,7 @@ func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} }
func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) } func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ChanInfoRequest) ProtoMessage() {} func (*ChanInfoRequest) ProtoMessage() {}
func (*ChanInfoRequest) Descriptor() ([]byte, []int) { func (*ChanInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{81} return fileDescriptor_77a6da22d6a3feb1, []int{83}
} }
func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error { func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error {
@ -5938,7 +6137,7 @@ func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} }
func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) } func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkInfoRequest) ProtoMessage() {} func (*NetworkInfoRequest) ProtoMessage() {}
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { func (*NetworkInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{82} return fileDescriptor_77a6da22d6a3feb1, []int{84}
} }
func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error { func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error {
@ -5981,7 +6180,7 @@ func (m *NetworkInfo) Reset() { *m = NetworkInfo{} }
func (m *NetworkInfo) String() string { return proto.CompactTextString(m) } func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
func (*NetworkInfo) ProtoMessage() {} func (*NetworkInfo) ProtoMessage() {}
func (*NetworkInfo) Descriptor() ([]byte, []int) { func (*NetworkInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{83} return fileDescriptor_77a6da22d6a3feb1, []int{85}
} }
func (m *NetworkInfo) XXX_Unmarshal(b []byte) error { func (m *NetworkInfo) XXX_Unmarshal(b []byte) error {
@ -6089,7 +6288,7 @@ func (m *StopRequest) Reset() { *m = StopRequest{} }
func (m *StopRequest) String() string { return proto.CompactTextString(m) } func (m *StopRequest) String() string { return proto.CompactTextString(m) }
func (*StopRequest) ProtoMessage() {} func (*StopRequest) ProtoMessage() {}
func (*StopRequest) Descriptor() ([]byte, []int) { func (*StopRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{84} return fileDescriptor_77a6da22d6a3feb1, []int{86}
} }
func (m *StopRequest) XXX_Unmarshal(b []byte) error { func (m *StopRequest) XXX_Unmarshal(b []byte) error {
@ -6120,7 +6319,7 @@ func (m *StopResponse) Reset() { *m = StopResponse{} }
func (m *StopResponse) String() string { return proto.CompactTextString(m) } func (m *StopResponse) String() string { return proto.CompactTextString(m) }
func (*StopResponse) ProtoMessage() {} func (*StopResponse) ProtoMessage() {}
func (*StopResponse) Descriptor() ([]byte, []int) { func (*StopResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{85} return fileDescriptor_77a6da22d6a3feb1, []int{87}
} }
func (m *StopResponse) XXX_Unmarshal(b []byte) error { func (m *StopResponse) XXX_Unmarshal(b []byte) error {
@ -6151,7 +6350,7 @@ func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscrip
func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) } func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) }
func (*GraphTopologySubscription) ProtoMessage() {} func (*GraphTopologySubscription) ProtoMessage() {}
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { func (*GraphTopologySubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{86} return fileDescriptor_77a6da22d6a3feb1, []int{88}
} }
func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error { func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error {
@ -6185,7 +6384,7 @@ func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} }
func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) } func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) }
func (*GraphTopologyUpdate) ProtoMessage() {} func (*GraphTopologyUpdate) ProtoMessage() {}
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{87} return fileDescriptor_77a6da22d6a3feb1, []int{89}
} }
func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error { func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error {
@ -6242,7 +6441,7 @@ func (m *NodeUpdate) Reset() { *m = NodeUpdate{} }
func (m *NodeUpdate) String() string { return proto.CompactTextString(m) } func (m *NodeUpdate) String() string { return proto.CompactTextString(m) }
func (*NodeUpdate) ProtoMessage() {} func (*NodeUpdate) ProtoMessage() {}
func (*NodeUpdate) Descriptor() ([]byte, []int) { func (*NodeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{88} return fileDescriptor_77a6da22d6a3feb1, []int{90}
} }
func (m *NodeUpdate) XXX_Unmarshal(b []byte) error { func (m *NodeUpdate) XXX_Unmarshal(b []byte) error {
@ -6318,7 +6517,7 @@ func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} }
func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEdgeUpdate) ProtoMessage() {} func (*ChannelEdgeUpdate) ProtoMessage() {}
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{89} return fileDescriptor_77a6da22d6a3feb1, []int{91}
} }
func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error {
@ -6399,7 +6598,7 @@ func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} }
func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) } func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelUpdate) ProtoMessage() {} func (*ClosedChannelUpdate) ProtoMessage() {}
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{90} return fileDescriptor_77a6da22d6a3feb1, []int{92}
} }
func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error { func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error {
@ -6470,7 +6669,7 @@ func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) } func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {} func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) { func (*HopHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{91} return fileDescriptor_77a6da22d6a3feb1, []int{93}
} }
func (m *HopHint) XXX_Unmarshal(b []byte) error { func (m *HopHint) XXX_Unmarshal(b []byte) error {
@ -6540,7 +6739,7 @@ func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) } func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {} func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) { func (*RouteHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{92} return fileDescriptor_77a6da22d6a3feb1, []int{94}
} }
func (m *RouteHint) XXX_Unmarshal(b []byte) error { func (m *RouteHint) XXX_Unmarshal(b []byte) error {
@ -6658,7 +6857,7 @@ func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) } func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {} func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) { func (*Invoice) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{93} return fileDescriptor_77a6da22d6a3feb1, []int{95}
} }
func (m *Invoice) XXX_Unmarshal(b []byte) error { func (m *Invoice) XXX_Unmarshal(b []byte) error {
@ -6863,7 +7062,7 @@ func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} }
func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) } func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) }
func (*InvoiceHTLC) ProtoMessage() {} func (*InvoiceHTLC) ProtoMessage() {}
func (*InvoiceHTLC) Descriptor() ([]byte, []int) { func (*InvoiceHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{94} return fileDescriptor_77a6da22d6a3feb1, []int{96}
} }
func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error { func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error {
@ -6962,7 +7161,7 @@ func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {} func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { func (*AddInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{95} return fileDescriptor_77a6da22d6a3feb1, []int{97}
} }
func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error { func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -7020,7 +7219,7 @@ func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {} func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) { func (*PaymentHash) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{96} return fileDescriptor_77a6da22d6a3feb1, []int{98}
} }
func (m *PaymentHash) XXX_Unmarshal(b []byte) error { func (m *PaymentHash) XXX_Unmarshal(b []byte) error {
@ -7077,7 +7276,7 @@ func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {} func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { func (*ListInvoiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{97} return fileDescriptor_77a6da22d6a3feb1, []int{99}
} }
func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error { func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error {
@ -7148,7 +7347,7 @@ func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {} func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { func (*ListInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{98} return fileDescriptor_77a6da22d6a3feb1, []int{100}
} }
func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error { func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -7212,7 +7411,7 @@ func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) } func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {} func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { func (*InvoiceSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{99} return fileDescriptor_77a6da22d6a3feb1, []int{101}
} }
func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error { func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error {
@ -7281,7 +7480,7 @@ func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) } func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {} func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) { func (*Payment) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{100} return fileDescriptor_77a6da22d6a3feb1, []int{102}
} }
func (m *Payment) XXX_Unmarshal(b []byte) error { func (m *Payment) XXX_Unmarshal(b []byte) error {
@ -7403,7 +7602,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {} func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { func (*ListPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{101} return fileDescriptor_77a6da22d6a3feb1, []int{103}
} }
func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error { func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -7443,7 +7642,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {} func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { func (*ListPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{102} return fileDescriptor_77a6da22d6a3feb1, []int{104}
} }
func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error { func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -7481,7 +7680,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {} func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{103} return fileDescriptor_77a6da22d6a3feb1, []int{105}
} }
func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error { func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -7512,7 +7711,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{104} return fileDescriptor_77a6da22d6a3feb1, []int{106}
} }
func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error { func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -7544,7 +7743,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} }
func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) } func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelRequest) ProtoMessage() {} func (*AbandonChannelRequest) ProtoMessage() {}
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { func (*AbandonChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{105} return fileDescriptor_77a6da22d6a3feb1, []int{107}
} }
func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error { func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error {
@ -7582,7 +7781,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{}
func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) } func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelResponse) ProtoMessage() {} func (*AbandonChannelResponse) ProtoMessage() {}
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { func (*AbandonChannelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{106} return fileDescriptor_77a6da22d6a3feb1, []int{108}
} }
func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error { func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error {
@ -7615,7 +7814,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {} func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) { func (*DebugLevelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{107} return fileDescriptor_77a6da22d6a3feb1, []int{109}
} }
func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error { func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error {
@ -7661,7 +7860,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {} func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) { func (*DebugLevelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{108} return fileDescriptor_77a6da22d6a3feb1, []int{110}
} }
func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error { func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error {
@ -7701,7 +7900,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {} func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) { func (*PayReqString) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{109} return fileDescriptor_77a6da22d6a3feb1, []int{111}
} }
func (m *PayReqString) XXX_Unmarshal(b []byte) error { func (m *PayReqString) XXX_Unmarshal(b []byte) error {
@ -7749,7 +7948,7 @@ func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) } func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {} func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) { func (*PayReq) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{110} return fileDescriptor_77a6da22d6a3feb1, []int{112}
} }
func (m *PayReq) XXX_Unmarshal(b []byte) error { func (m *PayReq) XXX_Unmarshal(b []byte) error {
@ -7850,7 +8049,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {} func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) { func (*FeeReportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{111} return fileDescriptor_77a6da22d6a3feb1, []int{113}
} }
func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error { func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error {
@ -7889,7 +8088,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {} func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { func (*ChannelFeeReport) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{112} return fileDescriptor_77a6da22d6a3feb1, []int{114}
} }
func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error { func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error {
@ -7956,7 +8155,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {} func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) { func (*FeeReportResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{113} return fileDescriptor_77a6da22d6a3feb1, []int{115}
} }
func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error { func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error {
@ -8027,7 +8226,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {} func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{114} return fileDescriptor_77a6da22d6a3feb1, []int{116}
} }
func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error { func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error {
@ -8131,7 +8330,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {} func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{115} return fileDescriptor_77a6da22d6a3feb1, []int{117}
} }
func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error { func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error {
@ -8170,7 +8369,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {} func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{116} return fileDescriptor_77a6da22d6a3feb1, []int{118}
} }
func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error { func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error {
@ -8243,7 +8442,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {} func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) { func (*ForwardingEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{117} return fileDescriptor_77a6da22d6a3feb1, []int{119}
} }
func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error { func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error {
@ -8327,7 +8526,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {} func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{118} return fileDescriptor_77a6da22d6a3feb1, []int{120}
} }
func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error { func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error {
@ -8374,7 +8573,7 @@ func (m *ExportChannelBackupRequest) Reset() { *m = ExportChannelBackupR
func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) } func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) }
func (*ExportChannelBackupRequest) ProtoMessage() {} func (*ExportChannelBackupRequest) ProtoMessage() {}
func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) { func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{119} return fileDescriptor_77a6da22d6a3feb1, []int{121}
} }
func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error { func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error {
@ -8420,7 +8619,7 @@ func (m *ChannelBackup) Reset() { *m = ChannelBackup{} }
func (m *ChannelBackup) String() string { return proto.CompactTextString(m) } func (m *ChannelBackup) String() string { return proto.CompactTextString(m) }
func (*ChannelBackup) ProtoMessage() {} func (*ChannelBackup) ProtoMessage() {}
func (*ChannelBackup) Descriptor() ([]byte, []int) { func (*ChannelBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{120} return fileDescriptor_77a6da22d6a3feb1, []int{122}
} }
func (m *ChannelBackup) XXX_Unmarshal(b []byte) error { func (m *ChannelBackup) XXX_Unmarshal(b []byte) error {
@ -8473,7 +8672,7 @@ func (m *MultiChanBackup) Reset() { *m = MultiChanBackup{} }
func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) } func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) }
func (*MultiChanBackup) ProtoMessage() {} func (*MultiChanBackup) ProtoMessage() {}
func (*MultiChanBackup) Descriptor() ([]byte, []int) { func (*MultiChanBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{121} return fileDescriptor_77a6da22d6a3feb1, []int{123}
} }
func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error { func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error {
@ -8518,7 +8717,7 @@ func (m *ChanBackupExportRequest) Reset() { *m = ChanBackupExportRequest
func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) } func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) }
func (*ChanBackupExportRequest) ProtoMessage() {} func (*ChanBackupExportRequest) ProtoMessage() {}
func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) { func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{122} return fileDescriptor_77a6da22d6a3feb1, []int{124}
} }
func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error { func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error {
@ -8557,7 +8756,7 @@ func (m *ChanBackupSnapshot) Reset() { *m = ChanBackupSnapshot{} }
func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) } func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) }
func (*ChanBackupSnapshot) ProtoMessage() {} func (*ChanBackupSnapshot) ProtoMessage() {}
func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) { func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{123} return fileDescriptor_77a6da22d6a3feb1, []int{125}
} }
func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error { func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error {
@ -8605,7 +8804,7 @@ func (m *ChannelBackups) Reset() { *m = ChannelBackups{} }
func (m *ChannelBackups) String() string { return proto.CompactTextString(m) } func (m *ChannelBackups) String() string { return proto.CompactTextString(m) }
func (*ChannelBackups) ProtoMessage() {} func (*ChannelBackups) ProtoMessage() {}
func (*ChannelBackups) Descriptor() ([]byte, []int) { func (*ChannelBackups) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{124} return fileDescriptor_77a6da22d6a3feb1, []int{126}
} }
func (m *ChannelBackups) XXX_Unmarshal(b []byte) error { func (m *ChannelBackups) XXX_Unmarshal(b []byte) error {
@ -8647,7 +8846,7 @@ func (m *RestoreChanBackupRequest) Reset() { *m = RestoreChanBackupReque
func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) } func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) }
func (*RestoreChanBackupRequest) ProtoMessage() {} func (*RestoreChanBackupRequest) ProtoMessage() {}
func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) { func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{125} return fileDescriptor_77a6da22d6a3feb1, []int{127}
} }
func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error { func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error {
@ -8723,7 +8922,7 @@ func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} }
func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) } func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) }
func (*RestoreBackupResponse) ProtoMessage() {} func (*RestoreBackupResponse) ProtoMessage() {}
func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { func (*RestoreBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{126} return fileDescriptor_77a6da22d6a3feb1, []int{128}
} }
func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error { func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error {
@ -8754,7 +8953,7 @@ func (m *ChannelBackupSubscription) Reset() { *m = ChannelBackupSubscrip
func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) } func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelBackupSubscription) ProtoMessage() {} func (*ChannelBackupSubscription) ProtoMessage() {}
func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) { func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{127} return fileDescriptor_77a6da22d6a3feb1, []int{129}
} }
func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error { func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error {
@ -8785,7 +8984,7 @@ func (m *VerifyChanBackupResponse) Reset() { *m = VerifyChanBackupRespon
func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) } func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyChanBackupResponse) ProtoMessage() {} func (*VerifyChanBackupResponse) ProtoMessage() {}
func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) { func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{128} return fileDescriptor_77a6da22d6a3feb1, []int{130}
} }
func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error { func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error {
@ -8831,6 +9030,8 @@ func init() {
proto.RegisterMapType((map[uint64][]byte)(nil), "lnrpc.SendRequest.DestTlvEntry") proto.RegisterMapType((map[uint64][]byte)(nil), "lnrpc.SendRequest.DestTlvEntry")
proto.RegisterType((*SendResponse)(nil), "lnrpc.SendResponse") proto.RegisterType((*SendResponse)(nil), "lnrpc.SendResponse")
proto.RegisterType((*SendToRouteRequest)(nil), "lnrpc.SendToRouteRequest") proto.RegisterType((*SendToRouteRequest)(nil), "lnrpc.SendToRouteRequest")
proto.RegisterType((*ChannelAcceptRequest)(nil), "lnrpc.ChannelAcceptRequest")
proto.RegisterType((*ChannelAcceptResponse)(nil), "lnrpc.ChannelAcceptResponse")
proto.RegisterType((*ChannelPoint)(nil), "lnrpc.ChannelPoint") proto.RegisterType((*ChannelPoint)(nil), "lnrpc.ChannelPoint")
proto.RegisterType((*OutPoint)(nil), "lnrpc.OutPoint") proto.RegisterType((*OutPoint)(nil), "lnrpc.OutPoint")
proto.RegisterType((*LightningAddress)(nil), "lnrpc.LightningAddress") proto.RegisterType((*LightningAddress)(nil), "lnrpc.LightningAddress")
@ -8958,524 +9159,539 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{ var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 8259 bytes of a gzipped FileDescriptorProto // 8508 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x6d, 0x6c, 0x24, 0xd9, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5b, 0x6c, 0x1c, 0xc9,
0xb5, 0x90, 0xab, 0x3f, 0xec, 0xee, 0xd3, 0xed, 0x76, 0xfb, 0xda, 0x63, 0xf7, 0xf4, 0xce, 0xce, 0xb5, 0x18, 0x7b, 0x1e, 0xe4, 0xcc, 0x99, 0xe1, 0x70, 0x58, 0xa4, 0xc8, 0xd1, 0xac, 0x56, 0xe2,
0xce, 0x56, 0xe6, 0xed, 0x4c, 0x9c, 0x8d, 0x3d, 0x3b, 0x49, 0x96, 0x79, 0xbb, 0x09, 0x0f, 0x8f, 0xb6, 0x75, 0x25, 0x99, 0x5e, 0x93, 0x5a, 0xd9, 0xde, 0xe8, 0xee, 0xda, 0xb9, 0xa1, 0x48, 0x4a,
0xed, 0x19, 0x4f, 0xe2, 0xf5, 0x38, 0x65, 0x4f, 0x86, 0x24, 0x0f, 0x55, 0xca, 0xdd, 0xd7, 0xed, 0x94, 0x97, 0x4b, 0xd1, 0x4d, 0xca, 0x8a, 0xed, 0x1b, 0xb4, 0x9b, 0x33, 0x45, 0xb2, 0xad, 0x9e,
0xca, 0x54, 0x57, 0x75, 0xaa, 0xaa, 0xed, 0x71, 0x96, 0x45, 0x02, 0x21, 0x84, 0x9e, 0x84, 0x50, 0xee, 0x71, 0x77, 0x0f, 0x29, 0x7a, 0xb3, 0x01, 0x12, 0x04, 0x41, 0x70, 0x81, 0x20, 0x70, 0xf2,
0x40, 0x42, 0x80, 0x40, 0x48, 0xc9, 0x13, 0xe2, 0x89, 0x1f, 0xc0, 0x0f, 0x10, 0x48, 0x91, 0xde, 0x93, 0x04, 0x09, 0x02, 0xd8, 0x17, 0x41, 0x2e, 0xf2, 0x91, 0xe4, 0x23, 0x41, 0x02, 0x18, 0xb8,
0x4f, 0x7e, 0x21, 0x84, 0xde, 0x7f, 0x9e, 0x10, 0x48, 0x28, 0xe2, 0x1f, 0x12, 0xff, 0xd1, 0x3d, 0x9f, 0xf9, 0x0a, 0x82, 0xe0, 0xfe, 0xe5, 0x23, 0x46, 0x90, 0x00, 0x89, 0x91, 0xbf, 0x00, 0xf9,
0xf7, 0xa3, 0xee, 0xad, 0xaa, 0x9e, 0x8f, 0x64, 0xe1, 0x97, 0xfb, 0x9e, 0x73, 0xea, 0x7e, 0x9e, 0x0f, 0xea, 0xd4, 0xa3, 0xab, 0xba, 0x7b, 0x24, 0xad, 0xbd, 0xb9, 0x5f, 0x9c, 0x3a, 0xe7, 0x74,
0x73, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0x0d, 0xcd, 0x78, 0x32, 0xd8, 0x9c, 0xc4, 0x51, 0x1a, 0x91, 0x3d, 0xcf, 0x39, 0x75, 0xce, 0xa9, 0x53, 0x45, 0x68, 0xc6, 0xe3, 0xc1, 0xc6, 0x38, 0x8e, 0xd2,
0x7a, 0x10, 0xc6, 0x93, 0x41, 0xff, 0xc6, 0x28, 0x8a, 0x46, 0x01, 0xdd, 0xf2, 0x26, 0xfe, 0x96, 0x88, 0xd4, 0x83, 0x30, 0x1e, 0x0f, 0xfa, 0x37, 0xce, 0xa2, 0xe8, 0x2c, 0xa0, 0x9b, 0xde, 0xd8,
0x17, 0x86, 0x51, 0xea, 0xa5, 0x7e, 0x14, 0x26, 0x9c, 0xc8, 0xfe, 0x09, 0x74, 0x1e, 0xd3, 0xf0, 0xdf, 0xf4, 0xc2, 0x30, 0x4a, 0xbd, 0xd4, 0x8f, 0xc2, 0x84, 0x13, 0xd9, 0x3f, 0x86, 0xce, 0x13,
0x98, 0xd2, 0xa1, 0x43, 0x7f, 0x36, 0xa5, 0x49, 0x4a, 0xbe, 0x06, 0xcb, 0x1e, 0xfd, 0x39, 0xa5, 0x1a, 0x1e, 0x51, 0x3a, 0x74, 0xe8, 0x4f, 0x27, 0x34, 0x49, 0xc9, 0xd7, 0x60, 0xd1, 0xa3, 0x3f,
0x43, 0x77, 0xe2, 0x25, 0xc9, 0xe4, 0x3c, 0xf6, 0x12, 0xda, 0xb3, 0x6e, 0x59, 0x77, 0xdb, 0x4e, 0xa3, 0x74, 0xe8, 0x8e, 0xbd, 0x24, 0x19, 0x9f, 0xc7, 0x5e, 0x42, 0x7b, 0xd6, 0x9a, 0x75, 0xaf,
0x97, 0x23, 0x8e, 0x14, 0x9c, 0xbc, 0x0f, 0xed, 0x84, 0x91, 0xd2, 0x30, 0x8d, 0xa3, 0xc9, 0x55, 0xed, 0x74, 0x39, 0xe2, 0x50, 0xc1, 0xc9, 0x7b, 0xd0, 0x4e, 0x18, 0x29, 0x0d, 0xd3, 0x38, 0x1a,
0xaf, 0x82, 0x74, 0x2d, 0x06, 0xdb, 0xe3, 0x20, 0x3b, 0x80, 0x25, 0xd5, 0x42, 0x32, 0x89, 0xc2, 0x5f, 0xf5, 0x2a, 0x48, 0xd7, 0x62, 0xb0, 0x5d, 0x0e, 0xb2, 0x03, 0x58, 0x50, 0x2d, 0x24, 0xe3,
0x84, 0x92, 0x7b, 0xb0, 0x3a, 0xf0, 0x27, 0xe7, 0x34, 0x76, 0xf1, 0xe3, 0x71, 0x48, 0xc7, 0x51, 0x28, 0x4c, 0x28, 0xb9, 0x0f, 0xcb, 0x03, 0x7f, 0x7c, 0x4e, 0x63, 0x17, 0x3f, 0x1e, 0x85, 0x74,
0xe8, 0x0f, 0x7a, 0xd6, 0xad, 0xea, 0xdd, 0xa6, 0x43, 0x38, 0x8e, 0x7d, 0xf1, 0x99, 0xc0, 0x90, 0x14, 0x85, 0xfe, 0xa0, 0x67, 0xad, 0x55, 0xef, 0x35, 0x1d, 0xc2, 0x71, 0xec, 0x8b, 0x4f, 0x05,
0x3b, 0xb0, 0x44, 0x43, 0x0e, 0xa7, 0x43, 0xfc, 0x4a, 0x34, 0xd5, 0xc9, 0xc0, 0xec, 0x03, 0xfb, 0x86, 0xdc, 0x85, 0x05, 0x1a, 0x72, 0x38, 0x1d, 0xe2, 0x57, 0xa2, 0xa9, 0x4e, 0x06, 0x66, 0x1f,
0x6f, 0x57, 0x60, 0xf9, 0x49, 0xe8, 0xa7, 0xcf, 0xbd, 0x20, 0xa0, 0xa9, 0x1c, 0xd3, 0x1d, 0x58, 0xd8, 0x7f, 0xbb, 0x02, 0x8b, 0x4f, 0x43, 0x3f, 0x7d, 0xe1, 0x05, 0x01, 0x4d, 0xe5, 0x98, 0xee,
0xba, 0x44, 0x00, 0x8e, 0xe9, 0x32, 0x8a, 0x87, 0x62, 0x44, 0x1d, 0x0e, 0x3e, 0x12, 0xd0, 0x99, 0xc2, 0xc2, 0x25, 0x02, 0x70, 0x4c, 0x97, 0x51, 0x3c, 0x14, 0x23, 0xea, 0x70, 0xf0, 0xa1, 0x80,
0x3d, 0xab, 0xcc, 0xec, 0x59, 0xe9, 0x74, 0x55, 0x67, 0x4c, 0xd7, 0x1d, 0x58, 0x8a, 0xe9, 0x20, 0x4e, 0xed, 0x59, 0x65, 0x6a, 0xcf, 0x4a, 0xa7, 0xab, 0x3a, 0x65, 0xba, 0xee, 0xc2, 0x42, 0x4c,
0xba, 0xa0, 0xf1, 0x95, 0x7b, 0xe9, 0x87, 0xc3, 0xe8, 0xb2, 0x57, 0xbb, 0x65, 0xdd, 0xad, 0x3b, 0x07, 0xd1, 0x05, 0x8d, 0xaf, 0xdc, 0x4b, 0x3f, 0x1c, 0x46, 0x97, 0xbd, 0xda, 0x9a, 0x75, 0xaf,
0x1d, 0x09, 0x7e, 0x8e, 0x50, 0xf2, 0x10, 0x96, 0x06, 0xe7, 0x5e, 0x18, 0xd2, 0xc0, 0x3d, 0xf5, 0xee, 0x74, 0x24, 0xf8, 0x05, 0x42, 0xc9, 0x23, 0x58, 0x18, 0x9c, 0x7b, 0x61, 0x48, 0x03, 0xf7,
0x06, 0x2f, 0xa6, 0x93, 0xa4, 0x57, 0xbf, 0x65, 0xdd, 0x6d, 0xdd, 0xbf, 0xbe, 0x89, 0xab, 0xba, 0xc4, 0x1b, 0xbc, 0x9c, 0x8c, 0x93, 0x5e, 0x7d, 0xcd, 0xba, 0xd7, 0x7a, 0x70, 0x7d, 0x03, 0x57,
0xb9, 0x73, 0xee, 0x85, 0x0f, 0x11, 0x73, 0x1c, 0x7a, 0x93, 0xe4, 0x3c, 0x4a, 0x9d, 0x8e, 0xf8, 0x75, 0x63, 0xfb, 0xdc, 0x0b, 0x1f, 0x21, 0xe6, 0x28, 0xf4, 0xc6, 0xc9, 0x79, 0x94, 0x3a, 0x1d,
0x82, 0x83, 0x13, 0x7b, 0x15, 0x88, 0x3e, 0x13, 0x7c, 0xee, 0xed, 0x7f, 0x69, 0xc1, 0xca, 0xb3, 0xf1, 0x05, 0x07, 0x27, 0xf6, 0x32, 0x10, 0x7d, 0x26, 0xf8, 0xdc, 0xdb, 0xff, 0xc2, 0x82, 0xa5,
0x30, 0x88, 0x06, 0x2f, 0x7e, 0xcb, 0x29, 0x2a, 0x19, 0x43, 0xe5, 0x4d, 0xc7, 0x50, 0x7d, 0xdb, 0xe7, 0x61, 0x10, 0x0d, 0x5e, 0xfe, 0x96, 0x53, 0x54, 0x32, 0x86, 0xca, 0xdb, 0x8e, 0xa1, 0xfa,
0x31, 0xac, 0xc1, 0xaa, 0xd9, 0x59, 0x31, 0x0a, 0x0a, 0xd7, 0xd8, 0xd7, 0x23, 0x2a, 0xbb, 0x25, 0x45, 0xc7, 0xb0, 0x02, 0xcb, 0x66, 0x67, 0xc5, 0x28, 0x28, 0x5c, 0x63, 0x5f, 0x9f, 0x51, 0xd9,
0x87, 0xf1, 0x55, 0xe8, 0x0e, 0xa6, 0x71, 0x4c, 0xc3, 0xc2, 0x38, 0x96, 0x04, 0x5c, 0x0d, 0xe4, 0x2d, 0x39, 0x8c, 0xaf, 0x42, 0x77, 0x30, 0x89, 0x63, 0x1a, 0x16, 0xc6, 0xb1, 0x20, 0xe0, 0x6a,
0x7d, 0x68, 0x87, 0xf4, 0x32, 0x23, 0x13, 0xbc, 0x1b, 0xd2, 0x4b, 0x49, 0x62, 0xf7, 0x60, 0x2d, 0x20, 0xef, 0x41, 0x3b, 0xa4, 0x97, 0x19, 0x99, 0xe0, 0xdd, 0x90, 0x5e, 0x4a, 0x12, 0xbb, 0x07,
0xdf, 0x8c, 0xe8, 0xc0, 0x7f, 0xb3, 0xa0, 0xf6, 0x2c, 0x7d, 0x19, 0x91, 0x4d, 0xa8, 0xa5, 0x57, 0x2b, 0xf9, 0x66, 0x44, 0x07, 0xfe, 0x9b, 0x05, 0xb5, 0xe7, 0xe9, 0xab, 0x88, 0x6c, 0x40, 0x2d,
0x13, 0x2e, 0x21, 0x9d, 0xfb, 0x44, 0x0c, 0x6d, 0x7b, 0x38, 0x8c, 0x69, 0x92, 0x9c, 0x5c, 0x4d, 0xbd, 0x1a, 0x73, 0x09, 0xe9, 0x3c, 0x20, 0x62, 0x68, 0x5b, 0xc3, 0x61, 0x4c, 0x93, 0xe4, 0xf8,
0xa8, 0xd3, 0xf6, 0x78, 0xc1, 0x65, 0x74, 0xa4, 0x07, 0x0b, 0xa2, 0x8c, 0x0d, 0x36, 0x1d, 0x59, 0x6a, 0x4c, 0x9d, 0xb6, 0xc7, 0x0b, 0x2e, 0xa3, 0x23, 0x3d, 0x98, 0x13, 0x65, 0x6c, 0xb0, 0xe9,
0x24, 0x37, 0x01, 0xbc, 0x71, 0x34, 0x0d, 0x53, 0x37, 0xf1, 0x52, 0x9c, 0xaa, 0xaa, 0xa3, 0x41, 0xc8, 0x22, 0xb9, 0x09, 0xe0, 0x8d, 0xa2, 0x49, 0x98, 0xba, 0x89, 0x97, 0xe2, 0x54, 0x55, 0x1d,
0xc8, 0x0d, 0x68, 0x4e, 0x5e, 0xb8, 0xc9, 0x20, 0xf6, 0x27, 0x29, 0xb2, 0x4d, 0xd3, 0xc9, 0x00, 0x0d, 0x42, 0x6e, 0x40, 0x73, 0xfc, 0xd2, 0x4d, 0x06, 0xb1, 0x3f, 0x4e, 0x91, 0x6d, 0x9a, 0x4e,
0xe4, 0x6b, 0xd0, 0x88, 0xa6, 0xe9, 0x24, 0xf2, 0xc3, 0x54, 0xb0, 0xca, 0x92, 0xe8, 0xcb, 0xd3, 0x06, 0x20, 0x5f, 0x83, 0x46, 0x34, 0x49, 0xc7, 0x91, 0x1f, 0xa6, 0x82, 0x55, 0x16, 0x44, 0x5f,
0x69, 0x7a, 0xc4, 0xc0, 0x8e, 0x22, 0x20, 0xb7, 0x61, 0x71, 0x10, 0x85, 0x67, 0x7e, 0x3c, 0xe6, 0x9e, 0x4d, 0xd2, 0x43, 0x06, 0x76, 0x14, 0x01, 0xb9, 0x0d, 0xf3, 0x83, 0x28, 0x3c, 0xf5, 0xe3,
0xca, 0xa0, 0x37, 0x8f, 0xad, 0x99, 0x40, 0xfb, 0x3f, 0x54, 0xa0, 0x75, 0x12, 0x7b, 0x61, 0xe2, 0x11, 0x57, 0x06, 0xbd, 0x59, 0x6c, 0xcd, 0x04, 0xda, 0xff, 0xbe, 0x02, 0xad, 0xe3, 0xd8, 0x0b,
0x0d, 0x18, 0x80, 0x75, 0x3d, 0x7d, 0xe9, 0x9e, 0x7b, 0xc9, 0x39, 0x8e, 0xb6, 0xe9, 0xc8, 0x22, 0x13, 0x6f, 0xc0, 0x00, 0xac, 0xeb, 0xe9, 0x2b, 0xf7, 0xdc, 0x4b, 0xce, 0x71, 0xb4, 0x4d, 0x47,
0x59, 0x83, 0x79, 0xde, 0x51, 0x1c, 0x53, 0xd5, 0x11, 0x25, 0xf2, 0x21, 0x2c, 0x87, 0xd3, 0xb1, 0x16, 0xc9, 0x0a, 0xcc, 0xf2, 0x8e, 0xe2, 0x98, 0xaa, 0x8e, 0x28, 0x91, 0xf7, 0x61, 0x31, 0x9c,
0x6b, 0xb6, 0x55, 0x45, 0x6e, 0x29, 0x22, 0xd8, 0x04, 0x9c, 0xb2, 0xb5, 0xe6, 0x4d, 0xf0, 0x11, 0x8c, 0x5c, 0xb3, 0xad, 0x2a, 0x72, 0x4b, 0x11, 0xc1, 0x26, 0xe0, 0x84, 0xad, 0x35, 0x6f, 0x82,
0x6a, 0x10, 0x62, 0x43, 0x5b, 0x94, 0xa8, 0x3f, 0x3a, 0xe7, 0xc3, 0xac, 0x3b, 0x06, 0x8c, 0xd5, 0x8f, 0x50, 0x83, 0x10, 0x1b, 0xda, 0xa2, 0x44, 0xfd, 0xb3, 0x73, 0x3e, 0xcc, 0xba, 0x63, 0xc0,
0x91, 0xfa, 0x63, 0xea, 0x26, 0xa9, 0x37, 0x9e, 0x88, 0x61, 0x69, 0x10, 0xc4, 0x47, 0xa9, 0x17, 0x58, 0x1d, 0xa9, 0x3f, 0xa2, 0x6e, 0x92, 0x7a, 0xa3, 0xb1, 0x18, 0x96, 0x06, 0x41, 0x7c, 0x94,
0xb8, 0x67, 0x94, 0x26, 0xbd, 0x05, 0x81, 0x57, 0x10, 0xf2, 0x01, 0x74, 0x86, 0x34, 0x49, 0x5d, 0x7a, 0x81, 0x7b, 0x4a, 0x69, 0xd2, 0x9b, 0x13, 0x78, 0x05, 0x21, 0x77, 0xa0, 0x33, 0xa4, 0x49,
0xb1, 0x28, 0x34, 0xe9, 0x35, 0x50, 0xf4, 0x73, 0x50, 0x56, 0x4f, 0xec, 0x5d, 0xba, 0x6c, 0x02, 0xea, 0x8a, 0x45, 0xa1, 0x49, 0xaf, 0x81, 0xa2, 0x9f, 0x83, 0xb2, 0x7a, 0x62, 0xef, 0xd2, 0x65,
0xe8, 0xcb, 0x5e, 0x93, 0xf7, 0x35, 0x83, 0x30, 0xce, 0x79, 0x4c, 0x53, 0x6d, 0xf6, 0x12, 0xc1, 0x13, 0x40, 0x5f, 0xf5, 0x9a, 0xbc, 0xaf, 0x19, 0x84, 0x71, 0xce, 0x13, 0x9a, 0x6a, 0xb3, 0x97,
0xa1, 0xf6, 0x01, 0x10, 0x0d, 0xbc, 0x4b, 0x53, 0xcf, 0x0f, 0x12, 0xf2, 0x31, 0xb4, 0x53, 0x8d, 0x08, 0x0e, 0xb5, 0xf7, 0x81, 0x68, 0xe0, 0x1d, 0x9a, 0x7a, 0x7e, 0x90, 0x90, 0x0f, 0xa1, 0x9d,
0x18, 0x55, 0x61, 0x4b, 0xb1, 0x93, 0xf6, 0x81, 0x63, 0xd0, 0xd9, 0x8f, 0xa1, 0xf1, 0x88, 0xd2, 0x6a, 0xc4, 0xa8, 0x0a, 0x5b, 0x8a, 0x9d, 0xb4, 0x0f, 0x1c, 0x83, 0xce, 0x7e, 0x02, 0x8d, 0xc7,
0x03, 0x7f, 0xec, 0xa7, 0x64, 0x0d, 0xea, 0x67, 0xfe, 0x4b, 0xca, 0x19, 0xbe, 0xba, 0x3f, 0xe7, 0x94, 0xee, 0xfb, 0x23, 0x3f, 0x25, 0x2b, 0x50, 0x3f, 0xf5, 0x5f, 0x51, 0xce, 0xf0, 0xd5, 0xbd,
0xf0, 0x22, 0xe9, 0xc3, 0xc2, 0x84, 0xc6, 0x03, 0x2a, 0x97, 0x67, 0x7f, 0xce, 0x91, 0x80, 0x87, 0x19, 0x87, 0x17, 0x49, 0x1f, 0xe6, 0xc6, 0x34, 0x1e, 0x50, 0xb9, 0x3c, 0x7b, 0x33, 0x8e, 0x04,
0x0b, 0x50, 0x0f, 0xd8, 0xc7, 0xf6, 0x6f, 0xaa, 0xd0, 0x3a, 0xa6, 0xa1, 0x12, 0x24, 0x02, 0x35, 0x3c, 0x9a, 0x83, 0x7a, 0xc0, 0x3e, 0xb6, 0x7f, 0x53, 0x85, 0xd6, 0x11, 0x0d, 0x95, 0x20, 0x11,
0x36, 0x64, 0x21, 0x3c, 0xf8, 0x9b, 0xbc, 0x07, 0x2d, 0x9c, 0x86, 0x24, 0x8d, 0xfd, 0x70, 0x24, 0xa8, 0xb1, 0x21, 0x0b, 0xe1, 0xc1, 0xdf, 0xe4, 0x16, 0xb4, 0x70, 0x1a, 0x92, 0x34, 0xf6, 0xc3,
0xf8, 0x17, 0x18, 0xe8, 0x18, 0x21, 0xa4, 0x0b, 0x55, 0x6f, 0x2c, 0x79, 0x97, 0xfd, 0x64, 0x42, 0x33, 0xc1, 0xbf, 0xc0, 0x40, 0x47, 0x08, 0x21, 0x5d, 0xa8, 0x7a, 0x23, 0xc9, 0xbb, 0xec, 0x27,
0x36, 0xf1, 0xae, 0xc6, 0x4c, 0x1e, 0xd5, 0xaa, 0xb6, 0x9d, 0x96, 0x80, 0xed, 0xb3, 0x65, 0xdd, 0x13, 0xb2, 0xb1, 0x77, 0x35, 0x62, 0xf2, 0xa8, 0x56, 0xb5, 0xed, 0xb4, 0x04, 0x6c, 0x8f, 0x2d,
0x84, 0x15, 0x9d, 0x44, 0xd6, 0x5e, 0xc7, 0xda, 0x97, 0x35, 0x4a, 0xd1, 0xc8, 0x1d, 0x58, 0x92, 0xeb, 0x06, 0x2c, 0xe9, 0x24, 0xb2, 0xf6, 0x3a, 0xd6, 0xbe, 0xa8, 0x51, 0x8a, 0x46, 0xee, 0xc2,
0xf4, 0x31, 0xef, 0x2c, 0xae, 0x73, 0xd3, 0xe9, 0x08, 0xb0, 0x1c, 0xc2, 0x5d, 0xe8, 0x9e, 0xf9, 0x82, 0xa4, 0x8f, 0x79, 0x67, 0x71, 0x9d, 0x9b, 0x4e, 0x47, 0x80, 0xe5, 0x10, 0xee, 0x41, 0xf7,
0xa1, 0x17, 0xb8, 0x83, 0x20, 0xbd, 0x70, 0x87, 0x34, 0x48, 0x3d, 0x5c, 0xf1, 0xba, 0xd3, 0x41, 0xd4, 0x0f, 0xbd, 0xc0, 0x1d, 0x04, 0xe9, 0x85, 0x3b, 0xa4, 0x41, 0xea, 0xe1, 0x8a, 0xd7, 0x9d,
0xf8, 0x4e, 0x90, 0x5e, 0xec, 0x32, 0x28, 0xf9, 0x10, 0x9a, 0x67, 0x94, 0xba, 0x38, 0x13, 0xbd, 0x0e, 0xc2, 0xb7, 0x83, 0xf4, 0x62, 0x87, 0x41, 0xc9, 0xfb, 0xd0, 0x3c, 0xa5, 0xd4, 0xc5, 0x99,
0x86, 0x21, 0x3d, 0x72, 0x76, 0x9d, 0xc6, 0x99, 0x9c, 0xe7, 0xbb, 0xd0, 0x8d, 0xa6, 0xe9, 0x28, 0xe8, 0x35, 0x0c, 0xe9, 0x91, 0xb3, 0xeb, 0x34, 0x4e, 0xe5, 0x3c, 0xdf, 0x83, 0x6e, 0x34, 0x49,
0xf2, 0xc3, 0x91, 0xcb, 0xf4, 0x95, 0xeb, 0x0f, 0x91, 0x03, 0x6a, 0x4e, 0x47, 0xc2, 0x99, 0xd6, 0xcf, 0x22, 0x3f, 0x3c, 0x73, 0x99, 0xbe, 0x72, 0xfd, 0x21, 0x72, 0x40, 0xcd, 0xe9, 0x48, 0x38,
0x78, 0x32, 0x24, 0xef, 0x02, 0x60, 0xdb, 0xbc, 0x62, 0xb8, 0x65, 0xdd, 0x5d, 0x74, 0x9a, 0x0c, 0xd3, 0x1a, 0x4f, 0x87, 0xe4, 0x5d, 0x00, 0x6c, 0x9b, 0x57, 0x0c, 0x6b, 0xd6, 0xbd, 0x79, 0xa7,
0xc2, 0x2b, 0xfa, 0x04, 0x1a, 0x38, 0x9f, 0x69, 0x70, 0xd1, 0x6b, 0xe1, 0x82, 0xbf, 0x27, 0x5a, 0xc9, 0x20, 0xbc, 0xa2, 0x8f, 0xa0, 0x81, 0xf3, 0x99, 0x06, 0x17, 0xbd, 0x16, 0x2e, 0xf8, 0x2d,
0xd5, 0x56, 0x62, 0x73, 0x97, 0x26, 0xe9, 0x49, 0x70, 0xc1, 0xf6, 0xd3, 0x2b, 0x67, 0x61, 0xc8, 0xd1, 0xaa, 0xb6, 0x12, 0x1b, 0x3b, 0x34, 0x49, 0x8f, 0x83, 0x0b, 0xb6, 0x9f, 0x5e, 0x39, 0x73,
0x4b, 0xfd, 0x4f, 0xa0, 0xad, 0x23, 0xd8, 0xd4, 0xbf, 0xa0, 0x57, 0xb8, 0x5c, 0x35, 0x87, 0xfd, 0x43, 0x5e, 0xea, 0x7f, 0x04, 0x6d, 0x1d, 0xc1, 0xa6, 0xfe, 0x25, 0xbd, 0xc2, 0xe5, 0xaa, 0x39,
0x24, 0xab, 0x50, 0xbf, 0xf0, 0x82, 0x29, 0x15, 0x8a, 0x8d, 0x17, 0x3e, 0xa9, 0x3c, 0xb0, 0xec, 0xec, 0x27, 0x59, 0x86, 0xfa, 0x85, 0x17, 0x4c, 0xa8, 0x50, 0x6c, 0xbc, 0xf0, 0x51, 0xe5, 0xa1,
0x7f, 0x6f, 0x41, 0x9b, 0xb7, 0x20, 0x36, 0xe4, 0xdb, 0xb0, 0x28, 0xa7, 0x94, 0xc6, 0x71, 0x14, 0x65, 0xff, 0x3b, 0x0b, 0xda, 0xbc, 0x05, 0xb1, 0x21, 0xdf, 0x86, 0x79, 0x39, 0xa5, 0x34, 0x8e,
0x0b, 0xf9, 0x36, 0x81, 0x64, 0x03, 0xba, 0x12, 0x30, 0x89, 0xa9, 0x3f, 0xf6, 0x46, 0xb2, 0xee, 0xa3, 0x58, 0xc8, 0xb7, 0x09, 0x24, 0xeb, 0xd0, 0x95, 0x80, 0x71, 0x4c, 0xfd, 0x91, 0x77, 0x26,
0x02, 0x9c, 0xdc, 0xcf, 0x6a, 0x8c, 0xa3, 0x69, 0x4a, 0x85, 0xea, 0x6f, 0x8b, 0xf1, 0x39, 0x0c, 0xeb, 0x2e, 0xc0, 0xc9, 0x83, 0xac, 0xc6, 0x38, 0x9a, 0xa4, 0x54, 0xa8, 0xfe, 0xb6, 0x18, 0x9f,
0xe6, 0x98, 0x24, 0x4c, 0xbe, 0x4b, 0x78, 0xc5, 0x80, 0xd9, 0xbf, 0xb0, 0x80, 0xb0, 0xae, 0x9f, 0xc3, 0x60, 0x8e, 0x49, 0xc2, 0xe4, 0xbb, 0x84, 0x57, 0x0c, 0x98, 0xfd, 0x73, 0x0b, 0x08, 0xeb,
0x44, 0xbc, 0x0a, 0xb1, 0xd4, 0x79, 0x36, 0xb3, 0xde, 0x98, 0xcd, 0x2a, 0xb3, 0xd8, 0xcc, 0x86, 0xfa, 0x71, 0xc4, 0xab, 0x10, 0x4b, 0x9d, 0x67, 0x33, 0xeb, 0xad, 0xd9, 0xac, 0x32, 0x8d, 0xcd,
0x3a, 0xef, 0x79, 0xad, 0xa4, 0xe7, 0x1c, 0xf5, 0xdd, 0x5a, 0xa3, 0xda, 0xad, 0xd9, 0xbf, 0xb4, 0x6c, 0xa8, 0xf3, 0x9e, 0xd7, 0x4a, 0x7a, 0xce, 0x51, 0xdf, 0xad, 0x35, 0xaa, 0xdd, 0x9a, 0xfd,
0xa0, 0xbd, 0xc3, 0xf7, 0x2d, 0x54, 0xb4, 0xe4, 0x1e, 0x90, 0xb3, 0x69, 0x38, 0x64, 0xfc, 0x91, 0x5f, 0xaa, 0xb0, 0xbc, 0xcd, 0xf7, 0xad, 0xad, 0xc1, 0x80, 0x8e, 0x15, 0x03, 0xde, 0x82, 0x56,
0xbe, 0xf4, 0x87, 0xee, 0xe9, 0x55, 0x4a, 0x13, 0xde, 0xa7, 0xfd, 0x39, 0xa7, 0x04, 0x47, 0x3e, 0x18, 0x0d, 0xa9, 0x3b, 0x9e, 0x9c, 0xc8, 0xb5, 0x69, 0x3b, 0xc0, 0x40, 0x87, 0x08, 0x41, 0xfe,
0x84, 0xae, 0x01, 0x4d, 0xd2, 0x98, 0xf7, 0x6c, 0x7f, 0xce, 0x29, 0x60, 0xd8, 0x44, 0x31, 0x55, 0x38, 0xf7, 0xfc, 0x90, 0x77, 0x9a, 0xcf, 0x65, 0x13, 0x21, 0xd8, 0xe5, 0x3b, 0xb0, 0x30, 0xa6,
0x3e, 0x4d, 0x5d, 0x3f, 0x1c, 0xd2, 0x97, 0x38, 0xb7, 0x8b, 0x8e, 0x01, 0x7b, 0xd8, 0x81, 0xb6, 0xe1, 0x50, 0xe7, 0x33, 0x6e, 0x59, 0xcc, 0x0b, 0xb0, 0x60, 0xb3, 0x5b, 0xd0, 0x3a, 0x9d, 0x70,
0xfe, 0x9d, 0xfd, 0x53, 0x68, 0xc8, 0x8d, 0x00, 0x95, 0x60, 0xae, 0x5f, 0x8e, 0x06, 0x21, 0x7d, 0x3a, 0x26, 0x7e, 0x35, 0xe4, 0x01, 0x10, 0xa0, 0xad, 0x51, 0x4a, 0xae, 0x43, 0x63, 0x3c, 0x49,
0x68, 0x98, 0xbd, 0x70, 0x1a, 0x6f, 0xd3, 0xb6, 0xfd, 0x17, 0xa1, 0x7b, 0xc0, 0xb4, 0x71, 0xe8, 0xce, 0x11, 0x5b, 0x47, 0xec, 0x1c, 0x2b, 0x33, 0xd4, 0xbb, 0x00, 0xc3, 0x49, 0x92, 0x0a, 0x16,
0x87, 0x23, 0xb1, 0x13, 0xb2, 0x2d, 0x62, 0x32, 0x3d, 0x95, 0x2c, 0xda, 0x74, 0x44, 0x89, 0xe9, 0x9d, 0x45, 0x64, 0x93, 0x41, 0x38, 0x8b, 0x7e, 0x1d, 0x96, 0x46, 0xde, 0x2b, 0x17, 0x79, 0xc7,
0x99, 0xf3, 0x28, 0x49, 0x45, 0x3b, 0xf8, 0xdb, 0xfe, 0x8f, 0x16, 0x90, 0xbd, 0x24, 0xf5, 0xc7, 0xf5, 0x43, 0xf7, 0x34, 0x40, 0xd5, 0x3b, 0x87, 0x74, 0xdd, 0x91, 0xf7, 0xea, 0xfb, 0x0c, 0xf3,
0x5e, 0x4a, 0x1f, 0x51, 0xb5, 0xc8, 0x4f, 0xa1, 0xcd, 0x6a, 0x3b, 0x89, 0xb6, 0xf9, 0x5e, 0xc3, 0x34, 0x7c, 0x8c, 0x70, 0x26, 0x9b, 0x72, 0xcf, 0x8f, 0x69, 0x42, 0xe3, 0x0b, 0x8a, 0xe2, 0x54,
0x75, 0xe4, 0xd7, 0xc4, 0xc2, 0x14, 0x3f, 0xd8, 0xd4, 0xa9, 0xb9, 0xf8, 0x18, 0x15, 0x30, 0x7d, 0x53, 0x1b, 0xbb, 0xc3, 0xa1, 0xac, 0x47, 0x23, 0x36, 0xee, 0x34, 0x18, 0x08, 0xd9, 0x99, 0x1b,
0x96, 0x7a, 0xf1, 0x88, 0xa6, 0xb8, 0x11, 0x09, 0x33, 0x06, 0x38, 0x68, 0x27, 0x0a, 0xcf, 0xfa, 0xf9, 0xe1, 0x5e, 0x1a, 0x0c, 0xc8, 0x0d, 0x00, 0x26, 0x8c, 0x63, 0x1a, 0xbb, 0x2f, 0x2f, 0x51,
0x7f, 0x00, 0xcb, 0x85, 0x3a, 0x74, 0x49, 0x6b, 0x96, 0x48, 0x5a, 0x55, 0x97, 0xb4, 0x01, 0xac, 0x68, 0x6a, 0x28, 0x7c, 0x87, 0x34, 0xfe, 0xe4, 0x92, 0xbc, 0x03, 0xcd, 0x41, 0x82, 0xd2, 0xec,
0x18, 0xfd, 0x12, 0xf2, 0xd6, 0x83, 0x05, 0xa6, 0x6f, 0xd8, 0x3e, 0x8f, 0xba, 0xda, 0x91, 0x45, 0x5d, 0xf5, 0x5a, 0x28, 0x51, 0x8d, 0x41, 0xc2, 0xe4, 0xd8, 0xbb, 0x22, 0xef, 0x03, 0x61, 0xbd,
0x72, 0x1f, 0x56, 0xcf, 0x28, 0x8d, 0xbd, 0x14, 0x8b, 0xee, 0x84, 0xc6, 0xb8, 0x26, 0xa2, 0xe6, 0xf5, 0x70, 0x15, 0xe8, 0x10, 0xab, 0x4f, 0x7a, 0x6d, 0xa4, 0x62, 0x9d, 0xdd, 0x12, 0x08, 0xd6,
0x52, 0x9c, 0xfd, 0xdf, 0x2d, 0x58, 0x62, 0x32, 0xf1, 0x99, 0x17, 0x5e, 0xc9, 0xb9, 0x3a, 0x28, 0x4e, 0x42, 0xbe, 0x02, 0xf3, 0xb2, 0xb3, 0xa7, 0x81, 0x77, 0x96, 0xf4, 0xe6, 0x91, 0xb0, 0x2d,
0x9d, 0xab, 0xbb, 0x9a, 0x7a, 0xd1, 0xa8, 0xdf, 0x76, 0xa2, 0xaa, 0xf9, 0x89, 0x22, 0xb7, 0xa0, 0x80, 0x8f, 0x19, 0xcc, 0x7e, 0xc1, 0x2d, 0x0d, 0x6d, 0x6d, 0x85, 0xcc, 0xb0, 0x3d, 0x0f, 0x21,
0x6d, 0x74, 0xb7, 0xce, 0x37, 0xd6, 0xc4, 0x4b, 0x8f, 0x68, 0xfc, 0xf0, 0x2a, 0xa5, 0xbf, 0xfb, 0xb8, 0xae, 0x0d, 0x47, 0x94, 0xca, 0x16, 0xad, 0x52, 0xb2, 0x68, 0xf6, 0x2f, 0x2c, 0x68, 0x8b,
0x54, 0x7e, 0x00, 0xdd, 0xac, 0xdb, 0x62, 0x1e, 0x09, 0xd4, 0x18, 0x63, 0x8a, 0x0a, 0xf0, 0xb7, 0x9a, 0x71, 0x7b, 0x26, 0xf7, 0x81, 0xc8, 0x55, 0x4c, 0x5f, 0xf9, 0x43, 0xf7, 0xe4, 0x2a, 0xa5,
0xfd, 0x4f, 0x2c, 0x4e, 0xb8, 0x13, 0xf9, 0x6a, 0xd3, 0x65, 0x84, 0x6c, 0xef, 0x96, 0x84, 0xec, 0x09, 0x67, 0x9a, 0xbd, 0x19, 0xa7, 0x04, 0x47, 0xde, 0x87, 0xae, 0x01, 0x4d, 0xd2, 0x98, 0xf3,
0xf7, 0x4c, 0xa3, 0xe5, 0x77, 0x1f, 0x2c, 0xb9, 0x0e, 0x8d, 0x84, 0x86, 0x43, 0xd7, 0x0b, 0x02, 0xf3, 0xde, 0x8c, 0x53, 0xc0, 0x30, 0xf1, 0x62, 0x06, 0xc0, 0x24, 0x75, 0xfd, 0x70, 0x48, 0x5f,
0xdc, 0x9b, 0x1a, 0xce, 0x02, 0x2b, 0x6f, 0x07, 0x81, 0x7d, 0x07, 0x96, 0xb5, 0xde, 0xbd, 0x62, 0x21, 0x2b, 0xcd, 0x3b, 0x06, 0xec, 0x51, 0x07, 0xda, 0xfa, 0x77, 0xf6, 0x4f, 0xa0, 0x21, 0xcd,
0x1c, 0x87, 0x40, 0x0e, 0xfc, 0x24, 0x7d, 0x16, 0x26, 0x13, 0x6d, 0x4f, 0x7b, 0x07, 0x9a, 0x63, 0x07, 0xdc, 0x3a, 0x73, 0xfd, 0x72, 0x34, 0x08, 0xe9, 0x43, 0xc3, 0xec, 0x85, 0xd3, 0xf8, 0x22,
0x3f, 0xc4, 0x9e, 0x71, 0xc9, 0xad, 0x3b, 0x8d, 0xb1, 0x1f, 0xb2, 0x7e, 0x25, 0x88, 0xf4, 0x5e, 0x6d, 0xdb, 0x7f, 0x11, 0xba, 0xfb, 0x8c, 0x89, 0x42, 0xc6, 0xb4, 0xc2, 0x26, 0x5a, 0x81, 0x59,
0x0a, 0x64, 0x45, 0x20, 0xbd, 0x97, 0x88, 0xb4, 0x1f, 0xc0, 0x8a, 0x51, 0x9f, 0x68, 0xfa, 0x7d, 0x4d, 0x78, 0x9a, 0x8e, 0x28, 0xb1, 0xdd, 0xe9, 0x3c, 0x4a, 0x52, 0xd1, 0x0e, 0xfe, 0xb6, 0xff,
0xa8, 0x4f, 0xd3, 0x97, 0x91, 0xb4, 0x38, 0x5a, 0x82, 0x43, 0x98, 0x6d, 0xeb, 0x70, 0x8c, 0xfd, 0x83, 0x05, 0x64, 0x37, 0x49, 0xfd, 0x91, 0x97, 0xd2, 0xc7, 0x54, 0xa9, 0x86, 0x67, 0xd0, 0x66,
0x29, 0x2c, 0x1f, 0xd2, 0x4b, 0x21, 0xc8, 0xb2, 0x23, 0x1f, 0xbc, 0xd6, 0xee, 0x45, 0xbc, 0xbd, 0xb5, 0x1d, 0x47, 0x5b, 0xdc, 0x42, 0xe1, 0x3b, 0xeb, 0xd7, 0x84, 0x38, 0x17, 0x3f, 0xd8, 0xd0,
0x09, 0x44, 0xff, 0x38, 0x13, 0x00, 0x69, 0x05, 0x5b, 0x86, 0x15, 0x6c, 0x7f, 0x00, 0xe4, 0xd8, 0xa9, 0xb9, 0xd2, 0x35, 0x2a, 0x60, 0xd2, 0x96, 0x7a, 0xf1, 0x19, 0x4d, 0xd1, 0x7c, 0x11, 0xc6,
0x1f, 0x85, 0x9f, 0xd1, 0x24, 0xf1, 0x46, 0x4a, 0xf4, 0xbb, 0x50, 0x1d, 0x27, 0x23, 0xa1, 0xaa, 0x2f, 0x70, 0xd0, 0x76, 0x14, 0x9e, 0xf6, 0xff, 0x00, 0x16, 0x0b, 0x75, 0xe8, 0xfa, 0xb9, 0x59,
0xd8, 0x4f, 0xfb, 0x1b, 0xb0, 0x62, 0xd0, 0x89, 0x8a, 0x6f, 0x40, 0x33, 0xf1, 0x47, 0xa1, 0x97, 0xa2, 0x9f, 0xab, 0xba, 0x7e, 0x1e, 0xc0, 0x92, 0xd1, 0x2f, 0xc1, 0x71, 0x3d, 0x98, 0x63, 0x82,
0x4e, 0x63, 0x2a, 0xaa, 0xce, 0x00, 0xf6, 0x23, 0x58, 0xfd, 0x01, 0x8d, 0xfd, 0xb3, 0xab, 0xd7, 0xc1, 0xac, 0x43, 0xdc, 0xe1, 0x1d, 0x59, 0x24, 0x0f, 0x60, 0xf9, 0x94, 0xd2, 0xd8, 0x4b, 0xb1,
0x55, 0x6f, 0xd6, 0x53, 0xc9, 0xd7, 0xb3, 0x07, 0xd7, 0x72, 0xf5, 0x88, 0xe6, 0x39, 0xfb, 0x8a, 0x88, 0xa2, 0xc3, 0xd6, 0x44, 0xd4, 0x5c, 0x8a, 0xb3, 0xff, 0xbb, 0x05, 0x0b, 0x4c, 0x93, 0x7e,
0x95, 0x6c, 0x38, 0xbc, 0xa0, 0xe9, 0xbe, 0x8a, 0xae, 0xfb, 0xec, 0x67, 0x40, 0x76, 0xa2, 0x30, 0xea, 0x85, 0x57, 0x72, 0xae, 0xf6, 0x4b, 0xe7, 0xea, 0x9e, 0xb6, 0x29, 0x69, 0xd4, 0x5f, 0x74,
0xa4, 0x83, 0xf4, 0x88, 0xd2, 0x38, 0x73, 0xc0, 0x33, 0x5e, 0x6d, 0xdd, 0x5f, 0x17, 0x33, 0x9b, 0xa2, 0xaa, 0xf9, 0x89, 0x22, 0x6b, 0xd0, 0x36, 0xba, 0x5b, 0xe7, 0xe6, 0x58, 0xe2, 0xa5, 0x87,
0x57, 0xa8, 0x82, 0x89, 0x09, 0xd4, 0x26, 0x34, 0x1e, 0x63, 0xc5, 0x0d, 0x07, 0x7f, 0xdb, 0xd7, 0x34, 0x7e, 0x74, 0x95, 0xd2, 0xdf, 0x7d, 0x2a, 0xef, 0x40, 0x37, 0xeb, 0xb6, 0x98, 0x47, 0x02,
0x60, 0xc5, 0xa8, 0x56, 0xb8, 0x2c, 0x1f, 0xc1, 0xb5, 0x5d, 0x3f, 0x19, 0x14, 0x1b, 0xec, 0xc1, 0x35, 0xc6, 0x98, 0xa2, 0x02, 0xfc, 0x6d, 0xff, 0x63, 0x8b, 0x13, 0x6e, 0x47, 0xbe, 0x32, 0xd5,
0xc2, 0x64, 0x7a, 0xea, 0x66, 0x92, 0x28, 0x8b, 0xcc, 0x8a, 0xcd, 0x7f, 0x22, 0x2a, 0xfb, 0x5b, 0x18, 0x21, 0xb3, 0xf8, 0x24, 0x21, 0xfb, 0x3d, 0xd5, 0xd4, 0xfd, 0xdd, 0x07, 0xcb, 0x74, 0x62,
0x16, 0xd4, 0xf6, 0x4f, 0x0e, 0x76, 0xd8, 0x5e, 0xe1, 0x87, 0x83, 0x68, 0xcc, 0xf6, 0x52, 0x3e, 0x42, 0xc3, 0xa1, 0xeb, 0x05, 0x01, 0x2a, 0xe2, 0x86, 0x33, 0xc7, 0xca, 0x5b, 0x41, 0x60, 0xdf,
0x68, 0x55, 0x9e, 0x29, 0x61, 0x37, 0xa0, 0x89, 0x5b, 0x30, 0x33, 0xdc, 0x85, 0xaf, 0x9c, 0x01, 0x85, 0x45, 0xad, 0x77, 0xaf, 0x19, 0xc7, 0x01, 0x90, 0x7d, 0x3f, 0x49, 0x9f, 0x87, 0xc9, 0x58,
0x98, 0xd3, 0x40, 0x5f, 0x4e, 0xfc, 0x18, 0xbd, 0x02, 0x69, 0xeb, 0xd7, 0x70, 0x9b, 0x29, 0x22, 0xb3, 0x84, 0xde, 0x81, 0x26, 0xd3, 0xb6, 0xac, 0x67, 0x5c, 0x72, 0xeb, 0x0e, 0x53, 0xbf, 0xac,
0xec, 0x5f, 0xcf, 0xc3, 0x82, 0xd8, 0x7c, 0xb1, 0xbd, 0x41, 0xea, 0x5f, 0x50, 0xd1, 0x13, 0x51, 0x5f, 0x09, 0x22, 0xbd, 0x57, 0x02, 0x59, 0x11, 0x48, 0xef, 0x15, 0x22, 0xed, 0x87, 0xb0, 0x64,
0x62, 0xe6, 0x4d, 0x4c, 0xc7, 0x51, 0x4a, 0x5d, 0x63, 0x19, 0x4c, 0x20, 0x3a, 0x45, 0xc2, 0x5f, 0xd4, 0x27, 0x9a, 0x7e, 0x0f, 0xea, 0x93, 0xf4, 0x55, 0x24, 0xed, 0xd4, 0x96, 0xe0, 0x10, 0xe6,
0xe5, 0x6e, 0x54, 0x95, 0x53, 0x19, 0x40, 0x36, 0x59, 0xd2, 0xe6, 0xab, 0xa1, 0xad, 0x25, 0x8b, 0x11, 0x39, 0x1c, 0x63, 0x7f, 0x0c, 0x8b, 0x07, 0xf4, 0x52, 0x08, 0xb2, 0xec, 0xc8, 0x9d, 0x37,
0x6c, 0x26, 0x06, 0xde, 0xc4, 0x1b, 0xf8, 0xe9, 0x95, 0x50, 0x09, 0xaa, 0xcc, 0xea, 0x0e, 0xa2, 0x7a, 0x4b, 0x88, 0xb7, 0x37, 0x80, 0xe8, 0x1f, 0x67, 0x02, 0x20, 0x7d, 0x27, 0xcb, 0xf0, 0x9d,
0x81, 0xc7, 0x3c, 0xe1, 0xc0, 0x0b, 0x07, 0x54, 0x3a, 0x5c, 0x06, 0x90, 0x39, 0x1f, 0xa2, 0x4b, 0xec, 0x3b, 0x40, 0x8e, 0xfc, 0xb3, 0xf0, 0x53, 0x9a, 0x24, 0xde, 0x99, 0x12, 0xfd, 0x2e, 0x54,
0x92, 0x8c, 0x3b, 0x28, 0x39, 0x28, 0xdb, 0xbf, 0x07, 0xd1, 0x78, 0xec, 0xa7, 0xcc, 0x67, 0x41, 0x47, 0xc9, 0x99, 0x50, 0x55, 0xec, 0xa7, 0xfd, 0x0d, 0x58, 0x32, 0xe8, 0x44, 0xc5, 0x37, 0xa0,
0x7b, 0xb5, 0xea, 0x68, 0x10, 0xee, 0xde, 0x61, 0xe9, 0x92, 0xcf, 0x5e, 0x53, 0xba, 0x77, 0x1a, 0x99, 0xf8, 0x67, 0xa1, 0x97, 0x4e, 0x62, 0x2a, 0xaa, 0xce, 0x00, 0xf6, 0x63, 0x58, 0xfe, 0x3e,
0x90, 0xd5, 0xc2, 0x76, 0x1d, 0xa6, 0xc6, 0x5e, 0x5c, 0xa2, 0x71, 0x5a, 0x75, 0x34, 0x08, 0x5b, 0x8d, 0xfd, 0xd3, 0xab, 0x37, 0x55, 0x6f, 0xd6, 0x53, 0xc9, 0xd7, 0xb3, 0x0b, 0xd7, 0x72, 0xf5,
0x87, 0x69, 0x98, 0xd0, 0x34, 0x0d, 0xe8, 0x50, 0x75, 0xa8, 0x85, 0x64, 0x45, 0x04, 0xb9, 0x07, 0x88, 0xe6, 0x39, 0xfb, 0x8a, 0x95, 0x6c, 0x38, 0xbc, 0xa0, 0xe9, 0xbe, 0x8a, 0xae, 0xfb, 0xec,
0x2b, 0xdc, 0x8d, 0x4a, 0xbc, 0x34, 0x4a, 0xce, 0xfd, 0xc4, 0x4d, 0x98, 0xc3, 0xd1, 0x46, 0xfa, 0xe7, 0x40, 0xb6, 0xa3, 0x30, 0xa4, 0x83, 0xf4, 0x90, 0xd2, 0x38, 0x0b, 0xdb, 0x64, 0xbc, 0xda,
0x32, 0x14, 0x79, 0x00, 0xeb, 0x39, 0x70, 0x4c, 0x07, 0xd4, 0xbf, 0xa0, 0xc3, 0xde, 0x22, 0x7e, 0x7a, 0xb0, 0x2a, 0x66, 0x36, 0xaf, 0x50, 0x05, 0x13, 0x13, 0xa8, 0x8d, 0x69, 0x3c, 0xc2, 0x8a,
0x35, 0x0b, 0x4d, 0x6e, 0x41, 0x8b, 0x79, 0x8f, 0xd3, 0xc9, 0xd0, 0x63, 0x06, 0x4c, 0x07, 0xd7, 0x1b, 0x0e, 0xfe, 0xb6, 0xaf, 0xc1, 0x92, 0x51, 0xad, 0x70, 0x74, 0x3f, 0x80, 0x6b, 0x3b, 0x7e,
0x41, 0x07, 0x91, 0x8f, 0x60, 0x71, 0x42, 0xb9, 0xf5, 0x73, 0x9e, 0x06, 0x83, 0xa4, 0xb7, 0x64, 0x32, 0x28, 0x36, 0xd8, 0x83, 0xb9, 0xf1, 0xe4, 0xc4, 0xcd, 0x24, 0x51, 0x16, 0x99, 0xef, 0x93,
0x68, 0x37, 0xc6, 0xb9, 0x8e, 0x49, 0xc1, 0x98, 0x72, 0x90, 0xa0, 0x9b, 0xe0, 0x5d, 0xf5, 0xba, 0xff, 0x44, 0x54, 0xf6, 0xb7, 0x2c, 0xa8, 0xed, 0x1d, 0xef, 0x6f, 0xb3, 0xbd, 0xc2, 0x0f, 0x07,
0xc2, 0x54, 0x97, 0x00, 0x94, 0x91, 0xd8, 0xbf, 0xf0, 0x52, 0xda, 0x5b, 0xe6, 0x0a, 0x5d, 0x14, 0xd1, 0x88, 0x59, 0x60, 0x7c, 0xd0, 0xaa, 0x3c, 0x55, 0xc2, 0x6e, 0x40, 0x13, 0x0d, 0x37, 0xe6,
0xd9, 0x77, 0x7e, 0xe8, 0xa7, 0xbe, 0x97, 0x46, 0x71, 0x8f, 0x20, 0x2e, 0x03, 0xb0, 0x49, 0x44, 0xee, 0x09, 0x3b, 0x28, 0x03, 0x30, 0x57, 0x93, 0xbe, 0x1a, 0xfb, 0x31, 0xfa, 0x92, 0xd2, 0x43,
0xfe, 0x48, 0x52, 0x2f, 0x9d, 0x26, 0xee, 0x59, 0xe0, 0x8d, 0x92, 0xde, 0x0a, 0xb7, 0x39, 0x0b, 0xac, 0xe1, 0x36, 0x53, 0x44, 0xd8, 0xbf, 0x9a, 0x85, 0x39, 0xb1, 0xf9, 0xf2, 0x8d, 0x3c, 0xf5,
0x08, 0xf2, 0x31, 0xac, 0x71, 0x8e, 0x40, 0x54, 0x4c, 0x13, 0x1a, 0x5f, 0x70, 0x33, 0x61, 0x15, 0x2f, 0x68, 0xb6, 0x91, 0xb3, 0x12, 0x33, 0x8a, 0x63, 0x3a, 0x8a, 0x52, 0x65, 0xbf, 0xf1, 0x65,
0x67, 0x64, 0x06, 0x96, 0x4d, 0xa5, 0x60, 0x91, 0xc2, 0x87, 0xd7, 0xf8, 0x54, 0xce, 0x40, 0xdb, 0x30, 0x81, 0xe8, 0x4a, 0x0b, 0x23, 0x82, 0x3b, 0xdf, 0x55, 0x4e, 0x65, 0x00, 0xd9, 0x64, 0x49,
0xff, 0xcc, 0xe2, 0xdb, 0x82, 0x10, 0x21, 0xa5, 0xde, 0xdf, 0x83, 0x16, 0x17, 0x1e, 0x37, 0x0a, 0x63, 0x80, 0x5b, 0x67, 0xb2, 0xc8, 0x66, 0x62, 0xe0, 0x8d, 0xbd, 0x81, 0x9f, 0x5e, 0x09, 0x95,
0x83, 0x2b, 0x21, 0x4f, 0xc0, 0x41, 0x4f, 0xc3, 0xe0, 0x8a, 0x7c, 0x05, 0x16, 0xfd, 0x50, 0x27, 0xa0, 0xca, 0xac, 0xee, 0x20, 0x1a, 0x78, 0x81, 0x7b, 0xe2, 0x05, 0x5e, 0x38, 0xa0, 0xd2, 0x4d,
0xe1, 0x1a, 0xa8, 0x2d, 0x81, 0x48, 0xf4, 0x1e, 0xb4, 0x26, 0xd3, 0xd3, 0xc0, 0x1f, 0x70, 0x92, 0x37, 0x80, 0xcc, 0x65, 0x15, 0x5d, 0x92, 0x64, 0xdc, 0xad, 0xcd, 0x41, 0xd9, 0xfe, 0x3d, 0x88,
0x2a, 0xaf, 0x85, 0x83, 0x90, 0x80, 0xd9, 0xed, 0x7c, 0x1e, 0x39, 0x45, 0x0d, 0x29, 0x5a, 0x02, 0x46, 0x23, 0x3f, 0x65, 0x9e, 0x2e, 0x9a, 0x65, 0x55, 0x47, 0x83, 0xf0, 0xa0, 0x00, 0x96, 0x2e,
0xc6, 0x48, 0xec, 0x87, 0xb0, 0x6a, 0x76, 0x50, 0xa8, 0xda, 0x0d, 0x68, 0x08, 0xc9, 0x4c, 0x84, 0xf9, 0xec, 0x35, 0x65, 0x50, 0x40, 0x03, 0xb2, 0x5a, 0x72, 0xd6, 0x59, 0xd5, 0xd1, 0x20, 0x6c,
0xf3, 0xd4, 0xd1, 0xe2, 0x4a, 0x21, 0x0d, 0x1c, 0x85, 0xb7, 0xff, 0x5d, 0x0d, 0x56, 0x04, 0x74, 0x1d, 0x26, 0x61, 0x42, 0xd3, 0x34, 0xa0, 0x43, 0xd5, 0xa1, 0x16, 0x92, 0x15, 0x11, 0xe4, 0x3e,
0x27, 0x88, 0x12, 0x7a, 0x3c, 0x1d, 0x8f, 0xbd, 0xb8, 0x44, 0xe4, 0xad, 0xd7, 0x88, 0x7c, 0xc5, 0x2c, 0x71, 0xe7, 0x3b, 0xf1, 0xd2, 0x28, 0x39, 0xf7, 0x13, 0x37, 0x61, 0x6e, 0x6a, 0x1b, 0xe9,
0x14, 0x79, 0x26, 0x88, 0xe7, 0x9e, 0x1f, 0x72, 0xa7, 0x83, 0xeb, 0x0b, 0x0d, 0x42, 0xee, 0xc2, 0xcb, 0x50, 0xe4, 0x21, 0xac, 0xe6, 0xc0, 0x31, 0x1d, 0x50, 0xff, 0x82, 0x0e, 0xd1, 0x7c, 0xab,
0xd2, 0x20, 0x88, 0x12, 0x6e, 0x84, 0xeb, 0x61, 0x8d, 0x3c, 0xb8, 0xa8, 0xa2, 0xea, 0x65, 0x2a, 0x3a, 0xd3, 0xd0, 0x64, 0x0d, 0x5a, 0xe1, 0x64, 0xe4, 0x4e, 0xc6, 0x43, 0x8f, 0x19, 0x30, 0x1d,
0x4a, 0x57, 0x31, 0xf3, 0x39, 0x15, 0x63, 0x43, 0x9b, 0x55, 0x4a, 0xa5, 0xc6, 0x5c, 0xe0, 0x86, 0x5c, 0x07, 0x1d, 0x44, 0x3e, 0x00, 0x69, 0xa3, 0x09, 0xcb, 0x71, 0xc1, 0xd0, 0x6e, 0x8c, 0x73,
0xb9, 0x0e, 0x63, 0xfd, 0xc9, 0x0b, 0x34, 0xd7, 0x1e, 0x4b, 0x65, 0xe2, 0xec, 0x8f, 0x29, 0x6a, 0x1d, 0x93, 0x82, 0x31, 0x65, 0x66, 0x8e, 0x76, 0x85, 0x83, 0x27, 0x01, 0x28, 0x23, 0xb1, 0x7f,
0x64, 0x8d, 0xba, 0x29, 0xc4, 0xb9, 0x88, 0x22, 0x8f, 0x98, 0xaf, 0xcb, 0xda, 0x42, 0xb3, 0x00, 0xe1, 0xa5, 0xb4, 0xb7, 0xc8, 0x15, 0xba, 0x28, 0xb2, 0xef, 0xfc, 0xd0, 0x4f, 0x7d, 0x2f, 0x8d,
0xd0, 0x2c, 0xf8, 0xc0, 0x5c, 0x11, 0x7d, 0xee, 0x37, 0x59, 0x61, 0x1a, 0x53, 0x34, 0x15, 0xb4, 0xe2, 0x1e, 0x41, 0x5c, 0x06, 0x60, 0x93, 0x88, 0xfc, 0x91, 0xa4, 0x5e, 0x3a, 0x49, 0x84, 0x75,
0x2f, 0xed, 0x3f, 0xb2, 0xa0, 0xa5, 0xe1, 0xc8, 0x35, 0x58, 0xde, 0x79, 0xfa, 0xf4, 0x68, 0xcf, 0xba, 0xc4, 0x3d, 0x95, 0x02, 0x82, 0x7c, 0x08, 0x2b, 0x9c, 0x23, 0x10, 0x25, 0xec, 0x6e, 0x34,
0xd9, 0x3e, 0x79, 0xf2, 0x83, 0x3d, 0x77, 0xe7, 0xe0, 0xe9, 0xf1, 0x5e, 0x77, 0x8e, 0x81, 0x0f, 0x13, 0x96, 0x71, 0x46, 0xa6, 0x60, 0xd9, 0x54, 0x0a, 0x16, 0x29, 0x7c, 0x78, 0x8d, 0x4f, 0xe5,
0x9e, 0xee, 0x6c, 0x1f, 0xb8, 0x8f, 0x9e, 0x3a, 0x3b, 0x12, 0x6c, 0x91, 0x35, 0x20, 0xce, 0xde, 0x14, 0xb4, 0xfd, 0x4f, 0x2d, 0xbe, 0x2d, 0x08, 0x11, 0x4a, 0x34, 0x87, 0x87, 0x0b, 0x8f, 0x1b,
0x67, 0x4f, 0x4f, 0xf6, 0x0c, 0x78, 0x85, 0x74, 0xa1, 0xfd, 0xd0, 0xd9, 0xdb, 0xde, 0xd9, 0x17, 0x85, 0xc1, 0x95, 0x90, 0x27, 0xe0, 0xa0, 0x67, 0x61, 0x70, 0xc5, 0x4c, 0x6e, 0x3f, 0xd4, 0x49,
0x90, 0x2a, 0x59, 0x85, 0xee, 0xa3, 0x67, 0x87, 0xbb, 0x4f, 0x0e, 0x1f, 0xbb, 0x3b, 0xdb, 0x87, 0xb8, 0x06, 0x6a, 0x4b, 0x20, 0x12, 0xdd, 0x82, 0xd6, 0x78, 0x72, 0x12, 0xf8, 0x03, 0x4e, 0x52,
0x3b, 0x7b, 0x07, 0x7b, 0xbb, 0xdd, 0x1a, 0x59, 0x84, 0xe6, 0xf6, 0xc3, 0xed, 0xc3, 0xdd, 0xa7, 0xe5, 0xb5, 0x70, 0x10, 0x12, 0x30, 0x6f, 0x8f, 0xcf, 0x23, 0xa7, 0xa8, 0x21, 0x45, 0x4b, 0xc0,
0x87, 0x7b, 0xbb, 0xdd, 0xba, 0xfd, 0x5f, 0x2d, 0xb8, 0x86, 0xbd, 0x1e, 0xe6, 0x05, 0xe4, 0x16, 0x18, 0x89, 0xfd, 0x08, 0x96, 0xcd, 0x0e, 0x0a, 0x55, 0xbb, 0x0e, 0x0d, 0x21, 0x99, 0x89, 0x70,
0xb4, 0x06, 0x51, 0x34, 0x61, 0xe6, 0x78, 0xb6, 0xe1, 0xe8, 0x20, 0xc6, 0xfc, 0x5c, 0x5c, 0xcf, 0xb9, 0x3b, 0x5a, 0x34, 0x92, 0x39, 0x28, 0x0a, 0x6f, 0xff, 0xdb, 0x1a, 0x2c, 0x09, 0xe8, 0x76,
0xa2, 0x78, 0x40, 0x85, 0x7c, 0x00, 0x82, 0x1e, 0x31, 0x08, 0x63, 0x7e, 0xb1, 0xbc, 0x9c, 0x82, 0x10, 0x25, 0xf4, 0x68, 0x32, 0x1a, 0x79, 0x71, 0x89, 0xc8, 0x5b, 0x6f, 0x10, 0xf9, 0x8a, 0x29,
0x8b, 0x47, 0x8b, 0xc3, 0x38, 0xc9, 0x1a, 0xcc, 0x9f, 0xc6, 0xd4, 0x1b, 0x9c, 0x0b, 0xc9, 0x10, 0xf2, 0x37, 0x0d, 0xaf, 0x8f, 0xeb, 0x0b, 0x0d, 0x42, 0xee, 0xc1, 0xc2, 0x20, 0x88, 0x12, 0x6e,
0x25, 0xf2, 0xd5, 0xcc, 0x5f, 0x1c, 0xb0, 0xd9, 0x0f, 0xe8, 0x10, 0x39, 0xa6, 0xe1, 0x2c, 0x09, 0x84, 0xeb, 0xc1, 0xb0, 0x3c, 0xb8, 0xa8, 0xa2, 0xea, 0x65, 0x2a, 0x4a, 0x57, 0x31, 0xb3, 0x39,
0xf8, 0x8e, 0x00, 0x33, 0xfd, 0xe4, 0x9d, 0x7a, 0xe1, 0x30, 0x0a, 0xe9, 0x50, 0x18, 0xa3, 0x19, 0x15, 0x63, 0x43, 0x9b, 0x55, 0x4a, 0xa5, 0xc6, 0x9c, 0x13, 0x2e, 0x90, 0x06, 0x63, 0xfd, 0xc9,
0xc0, 0x3e, 0x82, 0xb5, 0xfc, 0xf8, 0x84, 0x7c, 0x7d, 0xac, 0xc9, 0x17, 0xb7, 0x0d, 0xfb, 0xb3, 0x0b, 0x34, 0xd7, 0x1e, 0x0b, 0x65, 0xe2, 0xec, 0x8f, 0x28, 0x6a, 0x64, 0x8d, 0xba, 0x29, 0xc4,
0x57, 0x53, 0x93, 0xb5, 0x3f, 0xaf, 0x40, 0x8d, 0x99, 0x0a, 0xb3, 0xcd, 0x0a, 0xdd, 0xfa, 0xab, 0xb9, 0x88, 0x22, 0x8f, 0x01, 0x78, 0x5b, 0x68, 0x16, 0x00, 0x9a, 0x05, 0x77, 0xcc, 0x15, 0xd1,
0x16, 0x62, 0xa0, 0xe8, 0x82, 0xf2, 0xcd, 0x83, 0x6f, 0xb0, 0x1a, 0x24, 0xc3, 0xc7, 0x74, 0x70, 0xe7, 0x7e, 0x83, 0x15, 0x26, 0x31, 0x45, 0x53, 0x41, 0xfb, 0xd2, 0xfe, 0x23, 0x0b, 0x5a, 0x1a,
0x81, 0x23, 0x56, 0x78, 0x06, 0x61, 0x02, 0xc2, 0x4c, 0x73, 0xfc, 0x5a, 0x08, 0x88, 0x2c, 0x4b, 0x8e, 0x5c, 0x83, 0xc5, 0xed, 0x67, 0xcf, 0x0e, 0x77, 0x9d, 0xad, 0xe3, 0xa7, 0xdf, 0xdf, 0x75,
0x1c, 0x7e, 0xb9, 0x90, 0xe1, 0xf0, 0xbb, 0x1e, 0x2c, 0xf8, 0xe1, 0x69, 0x34, 0x0d, 0x87, 0x28, 0xb7, 0xf7, 0x9f, 0x1d, 0xed, 0x76, 0x67, 0x18, 0x78, 0xff, 0xd9, 0xf6, 0xd6, 0xbe, 0xfb, 0xf8,
0x10, 0x0d, 0x47, 0x16, 0x31, 0xea, 0x8a, 0x82, 0xea, 0x8f, 0x25, 0xfb, 0x67, 0x00, 0x72, 0x1f, 0x99, 0xb3, 0x2d, 0xc1, 0x16, 0x59, 0x01, 0xe2, 0xec, 0x7e, 0xfa, 0xec, 0x78, 0xd7, 0x80, 0x57,
0x9a, 0xc9, 0x55, 0x38, 0xd0, 0x79, 0x7e, 0x55, 0xcc, 0x12, 0x9b, 0x83, 0xcd, 0xe3, 0xab, 0x70, 0x48, 0x17, 0xda, 0x8f, 0x9c, 0xdd, 0xad, 0xed, 0x3d, 0x01, 0xa9, 0x92, 0x65, 0xe8, 0x3e, 0x7e,
0x80, 0x1c, 0x9e, 0x91, 0xd9, 0x7f, 0x00, 0x0d, 0x09, 0x66, 0x6c, 0xf9, 0xec, 0xf0, 0x7b, 0x87, 0x7e, 0xb0, 0xf3, 0xf4, 0xe0, 0x89, 0xbb, 0xbd, 0x75, 0xb0, 0xbd, 0xbb, 0xbf, 0xbb, 0xd3, 0xad,
0x4f, 0x9f, 0x1f, 0xba, 0xc7, 0x3f, 0x3c, 0xdc, 0xe9, 0xce, 0x91, 0x25, 0x68, 0x6d, 0xef, 0x20, 0x91, 0x79, 0x68, 0x6e, 0x3d, 0xda, 0x3a, 0xd8, 0x79, 0x76, 0xb0, 0xbb, 0xd3, 0xad, 0xdb, 0xff,
0xa7, 0x23, 0xc0, 0x62, 0x24, 0x47, 0xdb, 0xc7, 0xc7, 0x0a, 0x52, 0xb1, 0x09, 0x73, 0xaf, 0x13, 0xd5, 0x82, 0x6b, 0xd8, 0xeb, 0x61, 0x5e, 0x40, 0xd6, 0xa0, 0x35, 0x88, 0xa2, 0x31, 0x33, 0xc7,
0xb4, 0xc7, 0x54, 0x54, 0xf1, 0x63, 0x58, 0xd6, 0x60, 0x99, 0x6d, 0x3f, 0x61, 0x80, 0x9c, 0x6d, 0xb3, 0x0d, 0x47, 0x07, 0x31, 0xe6, 0xe7, 0xe2, 0x7a, 0x1a, 0xc5, 0x03, 0x2a, 0xe4, 0x03, 0x10,
0x8f, 0x86, 0x1c, 0xc7, 0xd8, 0x5d, 0xe8, 0x3c, 0xa6, 0xe9, 0x93, 0xf0, 0x2c, 0x92, 0x35, 0xfd, 0xf4, 0x98, 0x41, 0x18, 0xf3, 0x8b, 0xe5, 0xe5, 0x14, 0x5c, 0x3c, 0x5a, 0x1c, 0xc6, 0x49, 0x56,
0xcf, 0x1a, 0x2c, 0x29, 0x90, 0xa8, 0xe8, 0x2e, 0x2c, 0xf9, 0x43, 0x1a, 0xa6, 0x7e, 0x7a, 0xe5, 0x60, 0xf6, 0x24, 0xa6, 0xde, 0xe0, 0x5c, 0x48, 0x86, 0x28, 0x91, 0xaf, 0x66, 0xfe, 0xe2, 0x80,
0x1a, 0x5e, 0x7c, 0x1e, 0xcc, 0x0c, 0x60, 0x2f, 0xf0, 0x3d, 0x19, 0xdc, 0xe6, 0x05, 0xe6, 0xd5, 0xcd, 0x7e, 0x40, 0x87, 0xc8, 0x31, 0x0d, 0x67, 0x41, 0xc0, 0xb7, 0x05, 0x98, 0xe9, 0x27, 0xef,
0xb2, 0xdd, 0x59, 0x6e, 0xb8, 0x8a, 0xaf, 0x78, 0xf0, 0xa0, 0x14, 0xc7, 0x34, 0x10, 0x83, 0x8b, 0xc4, 0x0b, 0x87, 0x51, 0x48, 0x87, 0xc2, 0x18, 0xcd, 0x00, 0xf6, 0x21, 0xac, 0xe4, 0xc7, 0x27,
0x2d, 0x46, 0x7d, 0xc2, 0x0d, 0xc1, 0x32, 0x14, 0x5b, 0x2a, 0x5e, 0x13, 0x1b, 0x72, 0x9d, 0xef, 0xe4, 0xeb, 0x43, 0x4d, 0xbe, 0xb8, 0x6d, 0xd8, 0x9f, 0xbe, 0x9a, 0x9a, 0xac, 0xfd, 0xba, 0x02,
0xe0, 0x0a, 0x50, 0x88, 0x1e, 0xcf, 0x73, 0xfd, 0x98, 0x8f, 0x1e, 0x6b, 0x11, 0xe8, 0x46, 0x21, 0x35, 0x66, 0x2a, 0x4c, 0x37, 0x2b, 0x74, 0xeb, 0xaf, 0x5a, 0x88, 0x9c, 0xa3, 0x0b, 0xca, 0x37,
0x02, 0xcd, 0xf4, 0xe7, 0x55, 0x38, 0xa0, 0x43, 0x37, 0x8d, 0x5c, 0xd4, 0xf3, 0xc8, 0x12, 0x0d, 0x0f, 0x11, 0xfe, 0xc8, 0x20, 0x19, 0x3e, 0xa6, 0x83, 0x0b, 0x11, 0x00, 0xd1, 0x20, 0x4c, 0x40,
0x27, 0x0f, 0x26, 0x37, 0x60, 0x21, 0xa5, 0x49, 0x1a, 0x52, 0x1e, 0xf6, 0x6b, 0x3c, 0xac, 0xf4, 0x98, 0x69, 0x8e, 0x5f, 0x0b, 0x01, 0x91, 0x65, 0x89, 0xc3, 0x2f, 0xe7, 0x32, 0x1c, 0x7e, 0xd7,
0x2c, 0x47, 0x82, 0x98, 0xd5, 0x3e, 0x8d, 0xfd, 0xa4, 0xd7, 0xc6, 0xd8, 0x32, 0xfe, 0x26, 0xdf, 0x83, 0x39, 0x3f, 0x3c, 0x89, 0x26, 0xe1, 0x10, 0x05, 0xa2, 0xe1, 0xc8, 0x22, 0xc6, 0xea, 0x51,
0x84, 0x6b, 0xa7, 0x34, 0x49, 0xdd, 0x73, 0xea, 0x0d, 0x69, 0x8c, 0xec, 0xc5, 0x83, 0xd8, 0xdc, 0x50, 0xfd, 0x91, 0x64, 0xff, 0x0c, 0x40, 0x1e, 0x40, 0x33, 0xb9, 0x0a, 0x07, 0x3a, 0xcf, 0x2f,
0x18, 0x2a, 0x47, 0x32, 0xc6, 0xbd, 0xa0, 0x71, 0xe2, 0x47, 0x21, 0x9a, 0x41, 0x4d, 0x47, 0x16, 0x8b, 0x59, 0x62, 0x73, 0xb0, 0x71, 0x74, 0x15, 0x0e, 0x90, 0xc3, 0x33, 0x32, 0xfb, 0x0f, 0xa0,
0x59, 0x7d, 0x6c, 0xf0, 0x6a, 0x93, 0x56, 0x33, 0xb8, 0x84, 0x03, 0x2f, 0x47, 0x92, 0xdb, 0x30, 0x21, 0xc1, 0x8c, 0x2d, 0x9f, 0x1f, 0x7c, 0x72, 0xf0, 0xec, 0xc5, 0x81, 0x7b, 0xf4, 0x83, 0x83,
0x8f, 0x03, 0x48, 0x7a, 0x5d, 0xe4, 0x99, 0x76, 0x26, 0xf3, 0x7e, 0xe8, 0x08, 0x1c, 0x5b, 0xe5, 0xed, 0xee, 0x0c, 0x59, 0x80, 0xd6, 0xd6, 0x36, 0x72, 0x3a, 0x02, 0x2c, 0x46, 0x72, 0xb8, 0x75,
0x41, 0x14, 0x44, 0x31, 0xda, 0x42, 0x4d, 0x87, 0x17, 0xcc, 0xd9, 0x19, 0xc5, 0xde, 0xe4, 0x5c, 0x74, 0xa4, 0x20, 0x15, 0x9b, 0x30, 0xf7, 0x3a, 0x41, 0x7b, 0x4c, 0xc5, 0xa2, 0x3f, 0x84, 0x45,
0xd8, 0x43, 0x79, 0xf0, 0x77, 0x6b, 0x8d, 0x56, 0xb7, 0x6d, 0xff, 0x05, 0xa8, 0x63, 0xb5, 0x58, 0x0d, 0x96, 0xd9, 0xf6, 0x63, 0x06, 0xc8, 0xd9, 0xf6, 0x68, 0xc8, 0x71, 0x8c, 0xdd, 0x85, 0xce,
0x1d, 0x4e, 0xa6, 0x25, 0xaa, 0x43, 0x68, 0x0f, 0x16, 0x42, 0x9a, 0x5e, 0x46, 0xf1, 0x0b, 0x79, 0x13, 0x9a, 0x3e, 0x0d, 0x4f, 0x23, 0x59, 0xd3, 0xff, 0xac, 0xc1, 0x82, 0x02, 0x89, 0x8a, 0xee,
0x52, 0x22, 0x8a, 0xf6, 0xcf, 0xd1, 0x6f, 0x52, 0x27, 0x07, 0xcf, 0xd0, 0xe8, 0x63, 0xde, 0x2f, 0xc1, 0x82, 0x3f, 0xa4, 0x61, 0xea, 0xa7, 0x57, 0xae, 0xe1, 0xc5, 0xe7, 0xc1, 0xcc, 0x00, 0xf6,
0x5f, 0xaa, 0xe4, 0xdc, 0x13, 0xae, 0x5c, 0x03, 0x01, 0xc7, 0xe7, 0x1e, 0xd3, 0xb5, 0xc6, 0xea, 0x02, 0xdf, 0x93, 0x47, 0x22, 0xbc, 0xc0, 0xbc, 0x5a, 0xb6, 0x3b, 0xeb, 0xd1, 0x14, 0xe4, 0x2b,
0x73, 0xef, 0xb8, 0x85, 0xb0, 0x7d, 0xbe, 0xf8, 0xb7, 0xa1, 0x23, 0xcf, 0x24, 0x12, 0x37, 0xa0, 0x1e, 0x3c, 0x28, 0xc5, 0x31, 0x0d, 0xc4, 0xe0, 0x62, 0x8b, 0x51, 0x9f, 0x70, 0x43, 0xb0, 0x0c,
0x67, 0xa9, 0x8c, 0x6d, 0x85, 0xd3, 0x31, 0xba, 0xd0, 0x07, 0xf4, 0x2c, 0xb5, 0x0f, 0x61, 0x59, 0xc5, 0x96, 0x8a, 0xd7, 0xc4, 0x86, 0x5c, 0xe7, 0x3b, 0xb8, 0x02, 0x14, 0xce, 0x1c, 0x66, 0xb9,
0xe8, 0xbf, 0xa7, 0x13, 0x2a, 0x9b, 0xfe, 0xfd, 0x32, 0x3b, 0xa2, 0x75, 0x7f, 0xc5, 0x54, 0x98, 0x7e, 0xcc, 0x9f, 0x39, 0x68, 0xe7, 0x16, 0x8d, 0xc2, 0xb9, 0x05, 0xd3, 0x9f, 0x57, 0xe1, 0x80,
0xfc, 0x14, 0xc6, 0xa4, 0xb4, 0x1d, 0x20, 0xba, 0x3e, 0x15, 0x15, 0x8a, 0xcd, 0x5c, 0x46, 0xef, 0x0e, 0xdd, 0x34, 0x72, 0x51, 0xcf, 0x23, 0x4b, 0x34, 0x9c, 0x3c, 0x98, 0xdc, 0x80, 0xb9, 0x94,
0xc4, 0x70, 0x0c, 0x18, 0x9b, 0x9f, 0x64, 0x3a, 0x18, 0xc8, 0x93, 0xa4, 0x86, 0x23, 0x8b, 0xf6, 0x26, 0x69, 0x48, 0x79, 0xb0, 0xb8, 0xf1, 0xa8, 0xd2, 0xb3, 0x1c, 0x09, 0x62, 0x56, 0xfb, 0x24,
0xbf, 0xb0, 0x60, 0x05, 0x6b, 0x93, 0x96, 0x90, 0xd8, 0xb3, 0x1e, 0xbc, 0x45, 0x37, 0xdb, 0x03, 0xf6, 0x93, 0x5e, 0x1b, 0x4f, 0x24, 0xf0, 0x37, 0xf9, 0x26, 0x5c, 0x3b, 0xa1, 0x49, 0xea, 0x9e,
0x3d, 0xa2, 0xb9, 0x0a, 0x75, 0x7d, 0x17, 0xe3, 0x85, 0xb7, 0x8f, 0x94, 0xd4, 0xf2, 0x91, 0x12, 0x53, 0x6f, 0x48, 0x63, 0x64, 0x2f, 0x7e, 0xf4, 0xc1, 0x8d, 0xa1, 0x72, 0x24, 0x63, 0xdc, 0x0b,
0xfb, 0x1f, 0x5a, 0xb0, 0xcc, 0x37, 0x12, 0xb4, 0x83, 0xc5, 0xf0, 0xbf, 0x0d, 0x8b, 0xdc, 0x22, 0x1a, 0x27, 0x7e, 0x14, 0xa2, 0x19, 0xd4, 0x74, 0x64, 0x91, 0xd5, 0xc7, 0x06, 0xaf, 0x36, 0x69,
0x10, 0x5a, 0x41, 0x74, 0x34, 0x53, 0xad, 0x08, 0xe5, 0xc4, 0xfb, 0x73, 0x8e, 0x49, 0x4c, 0x3e, 0x35, 0x83, 0x0b, 0x38, 0xf0, 0x72, 0x24, 0xb9, 0x0d, 0xb3, 0x38, 0x80, 0xa4, 0xd7, 0x45, 0x9e,
0x45, 0xab, 0x2c, 0x74, 0x11, 0x5a, 0x72, 0xe6, 0x68, 0xce, 0xf5, 0xfe, 0x9c, 0xa3, 0x91, 0x3f, 0x69, 0x67, 0x32, 0xef, 0x87, 0x8e, 0xc0, 0xb1, 0x55, 0x1e, 0x44, 0x41, 0x14, 0xa3, 0x2d, 0xd4,
0x6c, 0xc0, 0x3c, 0x77, 0x22, 0xec, 0xc7, 0xb0, 0x68, 0x34, 0x64, 0x44, 0x69, 0xda, 0x3c, 0x4a, 0x74, 0x78, 0xc1, 0x9c, 0x9d, 0xb3, 0xd8, 0x1b, 0x9f, 0x0b, 0x7b, 0x28, 0x0f, 0xfe, 0x6e, 0xad,
0x53, 0x08, 0x87, 0x56, 0x4a, 0xc2, 0xa1, 0xff, 0xa6, 0x0a, 0x84, 0x31, 0x4b, 0x6e, 0x35, 0x98, 0xd1, 0xea, 0xb6, 0xed, 0xbf, 0x00, 0x75, 0xac, 0x16, 0xab, 0xc3, 0xc9, 0xb4, 0x44, 0x75, 0x08,
0x17, 0x13, 0x0d, 0x0d, 0x9f, 0xb4, 0xed, 0xe8, 0x20, 0xb2, 0x09, 0x44, 0x2b, 0xca, 0x88, 0x35, 0xed, 0xc1, 0x5c, 0x48, 0xd3, 0xcb, 0x28, 0x7e, 0x29, 0xcf, 0xd7, 0x44, 0xd1, 0xfe, 0x19, 0xfa,
0xdf, 0x32, 0x4b, 0x30, 0x4c, 0xcd, 0x0a, 0x8b, 0x43, 0xd8, 0x06, 0xc2, 0xfb, 0xe6, 0xd3, 0x5e, 0x4d, 0xea, 0xbc, 0xe9, 0x39, 0x1a, 0x7d, 0xcc, 0xfb, 0xe5, 0x4b, 0x95, 0x9c, 0x7b, 0xc2, 0x95,
0x8a, 0x63, 0xbb, 0xe2, 0x64, 0x9a, 0x9c, 0xa3, 0xaf, 0x20, 0xbc, 0x56, 0x59, 0xce, 0xaf, 0xef, 0x6b, 0x20, 0xe0, 0xe8, 0xdc, 0x63, 0xba, 0xd6, 0x58, 0x7d, 0xee, 0x1d, 0xb7, 0x10, 0xb6, 0xc7,
0xfc, 0x6b, 0xd7, 0x77, 0xa1, 0x10, 0x09, 0xd3, 0xfc, 0xa6, 0x86, 0xe9, 0x37, 0xdd, 0x86, 0xc5, 0x17, 0xff, 0x36, 0x74, 0xe4, 0x49, 0x56, 0xe2, 0x06, 0xf4, 0x34, 0x95, 0xb1, 0xad, 0x70, 0x32,
0x31, 0xb3, 0x93, 0xd3, 0x60, 0xe0, 0x8e, 0x59, 0xeb, 0xc2, 0x49, 0x35, 0x80, 0x64, 0x03, 0xba, 0x42, 0x17, 0x7a, 0x9f, 0x9e, 0xa6, 0xf6, 0x01, 0x2c, 0x0a, 0xfd, 0xf7, 0x6c, 0x4c, 0x65, 0xd3,
0xd2, 0x75, 0x51, 0xce, 0x19, 0x3f, 0x47, 0x29, 0xc0, 0x99, 0xfe, 0xcf, 0x62, 0x63, 0x2d, 0xec, 0xbf, 0x5f, 0x66, 0x47, 0xb4, 0x1e, 0x2c, 0x99, 0x0a, 0x93, 0x9f, 0xdd, 0x99, 0x94, 0xb6, 0x03,
0x6c, 0x06, 0x60, 0x9e, 0x58, 0xc2, 0x38, 0xc4, 0x9d, 0x86, 0xe2, 0xd8, 0x91, 0x0e, 0xd1, 0x3d, 0x44, 0xd7, 0xa7, 0xa2, 0x42, 0xb1, 0x99, 0xcb, 0xe8, 0x9d, 0x18, 0x8e, 0x01, 0x63, 0xf3, 0x93,
0x6d, 0x38, 0x45, 0x84, 0xfd, 0xf7, 0x2c, 0xe8, 0xb2, 0x35, 0x33, 0xd8, 0xf2, 0x13, 0x40, 0xa9, 0x4c, 0x06, 0x03, 0x79, 0xfe, 0xd8, 0x70, 0x64, 0xd1, 0xfe, 0xe7, 0x16, 0x2c, 0x61, 0x6d, 0xd2,
0x78, 0x43, 0xae, 0x34, 0x68, 0xc9, 0x03, 0x68, 0x62, 0x39, 0x9a, 0xd0, 0x50, 0xf0, 0x64, 0xcf, 0x12, 0x12, 0x7b, 0xd6, 0xc3, 0x2f, 0xd0, 0x4d, 0x19, 0x3b, 0xe5, 0x11, 0xc3, 0x65, 0xa8, 0xeb,
0xe4, 0xc9, 0x4c, 0x9f, 0xec, 0xcf, 0x39, 0x19, 0xb1, 0xc6, 0x91, 0xff, 0xd9, 0x82, 0x96, 0x68, 0xbb, 0x18, 0x2f, 0x7c, 0xf1, 0x48, 0x49, 0x2d, 0x1f, 0x29, 0xb1, 0xff, 0x81, 0x05, 0x8b, 0x7c,
0xe5, 0xb7, 0x8e, 0xbd, 0xf4, 0xb5, 0x73, 0x62, 0xce, 0x49, 0xd9, 0xb1, 0xf0, 0x5d, 0x58, 0x1a, 0x23, 0x41, 0x3b, 0x58, 0x0c, 0xff, 0xdb, 0x30, 0xcf, 0x2d, 0x02, 0xa1, 0x15, 0x44, 0x47, 0x33,
0x7b, 0xe9, 0x34, 0x66, 0xfb, 0xb9, 0x11, 0x77, 0xc9, 0x83, 0xd9, 0xe6, 0x8c, 0xaa, 0x33, 0x71, 0xd5, 0x8a, 0x50, 0x4e, 0xbc, 0x37, 0xe3, 0x98, 0xc4, 0xe4, 0x63, 0xb4, 0xca, 0x42, 0x17, 0xa1,
0x53, 0x3f, 0x70, 0x25, 0x56, 0x9c, 0xc8, 0x96, 0xa1, 0x98, 0x06, 0x49, 0x52, 0x6f, 0x44, 0xc5, 0x25, 0x27, 0xd5, 0xe6, 0x5c, 0xef, 0xcd, 0x38, 0x1a, 0xf9, 0xa3, 0x06, 0xcc, 0x72, 0x27, 0xc2,
0xbe, 0xcb, 0x0b, 0x76, 0x0f, 0xd6, 0xc4, 0x80, 0x72, 0xf6, 0xb5, 0xfd, 0xaf, 0x16, 0x61, 0xbd, 0x7e, 0x02, 0xf3, 0x46, 0x43, 0x46, 0x94, 0xa6, 0xcd, 0xa3, 0x34, 0x85, 0x70, 0x68, 0xa5, 0x24,
0x80, 0x52, 0xf9, 0x23, 0x22, 0xa0, 0x10, 0xf8, 0xe3, 0xd3, 0x48, 0x39, 0x27, 0x96, 0x1e, 0x6b, 0x1c, 0xfa, 0xaf, 0xab, 0x40, 0x18, 0xb3, 0xe4, 0x56, 0x63, 0xcd, 0x3c, 0x53, 0x90, 0x87, 0xd6,
0x30, 0x50, 0x64, 0x04, 0xd7, 0xa4, 0x81, 0xc1, 0xe6, 0x34, 0xdb, 0x0c, 0x2b, 0xb8, 0xcb, 0x7d, 0x19, 0x88, 0x6c, 0x00, 0xd1, 0x8a, 0xf2, 0x9c, 0x83, 0x6f, 0x99, 0x25, 0x18, 0xa6, 0x66, 0x85,
0x64, 0x2e, 0x61, 0xbe, 0x41, 0x09, 0xd7, 0x85, 0xb8, 0xbc, 0x3e, 0x72, 0x0e, 0x3d, 0x65, 0xc9, 0xc5, 0xa1, 0xce, 0x10, 0xd0, 0xfb, 0xe6, 0xd3, 0x5e, 0x8a, 0x63, 0xbb, 0x22, 0x1e, 0x28, 0x30,
0x08, 0x65, 0xad, 0x59, 0x3b, 0xac, 0xad, 0x0f, 0x5f, 0xd3, 0x96, 0x61, 0x8e, 0x3b, 0x33, 0x6b, 0x5f, 0x41, 0x78, 0xad, 0xb2, 0x9c, 0x5f, 0xdf, 0xd9, 0x37, 0xae, 0xef, 0x5c, 0x21, 0x12, 0xa6,
0x23, 0x57, 0x70, 0x53, 0xe2, 0x50, 0x1b, 0x17, 0xdb, 0xab, 0xbd, 0xd1, 0xd8, 0xd0, 0xd1, 0x30, 0xf9, 0x4d, 0x0d, 0xd3, 0x6f, 0xba, 0x0d, 0xf3, 0xf2, 0xdc, 0xc0, 0x1d, 0xb1, 0xd6, 0x85, 0x93,
0x1b, 0x7d, 0x4d, 0xc5, 0xe4, 0xa7, 0xb0, 0x76, 0xe9, 0xf9, 0xa9, 0xec, 0x96, 0x66, 0x5b, 0xd4, 0x6a, 0x00, 0xc9, 0x3a, 0x74, 0xa5, 0xeb, 0xa2, 0x9c, 0x33, 0x7e, 0xfa, 0x56, 0x80, 0x33, 0xfd,
0xb1, 0xc9, 0xfb, 0xaf, 0x69, 0xf2, 0x39, 0xff, 0xd8, 0xd8, 0xa2, 0x66, 0xd4, 0xd8, 0xff, 0x75, 0x9f, 0xc5, 0xc6, 0x5a, 0xd8, 0xd9, 0x0c, 0xc0, 0x3c, 0xb1, 0x84, 0x71, 0x88, 0x3b, 0x09, 0xc5,
0x05, 0x3a, 0x66, 0x3d, 0x8c, 0x4d, 0x85, 0xec, 0x4b, 0x1d, 0x28, 0xad, 0xd1, 0x1c, 0xb8, 0xe8, 0x61, 0x35, 0x1d, 0xa2, 0x7b, 0xda, 0x70, 0x8a, 0x08, 0xfb, 0xef, 0x59, 0xd0, 0x65, 0x6b, 0x66,
0xdf, 0x57, 0xca, 0xfc, 0x7b, 0xdd, 0xab, 0xae, 0xbe, 0x2e, 0x70, 0x57, 0x7b, 0xb3, 0xc0, 0x5d, 0xb0, 0xe5, 0x47, 0x80, 0x52, 0xf1, 0x96, 0x5c, 0x69, 0xd0, 0x92, 0x87, 0xd0, 0xc4, 0x72, 0x34,
0xbd, 0x34, 0x70, 0x37, 0x3b, 0xbe, 0x33, 0xff, 0xdb, 0xc6, 0x77, 0x16, 0x5e, 0x19, 0xdf, 0xe9, 0xa6, 0xa1, 0xe0, 0xc9, 0x9e, 0xc9, 0x93, 0x99, 0x3e, 0xd9, 0x9b, 0x71, 0x32, 0x62, 0x8d, 0x23,
0xff, 0x1f, 0x0b, 0x48, 0x91, 0x7b, 0xc9, 0x63, 0x1e, 0xd2, 0x08, 0x69, 0x20, 0x94, 0xd8, 0xd7, 0xff, 0x93, 0x05, 0x2d, 0xd1, 0xca, 0x6f, 0x1d, 0x7b, 0xe9, 0x6b, 0xd9, 0x05, 0x9c, 0x93, 0xb2,
0xdf, 0x4c, 0x02, 0xe4, 0x6a, 0xc9, 0xaf, 0x99, 0x28, 0xea, 0x49, 0x1c, 0xba, 0x79, 0xb5, 0xe8, 0x64, 0x82, 0x7b, 0xb0, 0x30, 0xf2, 0xd2, 0x49, 0xcc, 0xf6, 0x73, 0x23, 0xee, 0x92, 0x07, 0xb3,
0x94, 0xa1, 0x72, 0xc1, 0xcb, 0xda, 0xeb, 0x83, 0x97, 0xf5, 0xd7, 0x07, 0x2f, 0xe7, 0xf3, 0xc1, 0xcd, 0x19, 0x55, 0x67, 0xe2, 0xa6, 0x7e, 0xe0, 0x4a, 0xac, 0x38, 0xc7, 0x2f, 0x43, 0x31, 0x0d,
0xcb, 0xfe, 0xdf, 0xb4, 0x60, 0xa5, 0x84, 0xcd, 0xbe, 0xbc, 0x81, 0x33, 0xc6, 0x30, 0xb4, 0x4f, 0x92, 0xa4, 0xde, 0x19, 0x15, 0xfb, 0x2e, 0x2f, 0xd8, 0x3d, 0x58, 0x39, 0xcc, 0xce, 0x52, 0x34,
0x45, 0x30, 0x86, 0x0e, 0xec, 0xff, 0x55, 0x58, 0x34, 0x44, 0xeb, 0xcb, 0x6b, 0x3f, 0x6f, 0x21, 0xfb, 0xda, 0xfe, 0x97, 0xf3, 0xb0, 0x5a, 0x40, 0xa9, 0xac, 0x23, 0x11, 0x50, 0x08, 0xfc, 0xd1,
0x72, 0xce, 0x36, 0x60, 0xfd, 0xff, 0x55, 0x01, 0x52, 0x14, 0xef, 0xff, 0xaf, 0x7d, 0x28, 0xce, 0x49, 0xa4, 0x9c, 0x13, 0x4b, 0x8f, 0x35, 0x18, 0x28, 0x72, 0x06, 0xd7, 0xa4, 0x81, 0xc1, 0xe6,
0x53, 0xb5, 0x64, 0x9e, 0xfe, 0x9f, 0xee, 0x3c, 0x1f, 0xc2, 0xb2, 0xc8, 0x4c, 0xd3, 0x02, 0x59, 0x34, 0xdb, 0x0c, 0x2b, 0xb8, 0xcb, 0x7d, 0x60, 0x2e, 0x61, 0xbe, 0x41, 0x09, 0xd7, 0x85, 0xb8,
0x9c, 0x63, 0x8a, 0x08, 0x66, 0x23, 0x9b, 0x91, 0xe3, 0x86, 0x91, 0x89, 0xa3, 0x6d, 0xbf, 0xb9, 0xbc, 0x3e, 0x72, 0x0e, 0x3d, 0x65, 0xc9, 0x08, 0x65, 0xad, 0x59, 0x3b, 0xac, 0xad, 0xf7, 0xdf,
0x00, 0xb2, 0xdd, 0x87, 0x9e, 0x98, 0xa1, 0xbd, 0x0b, 0x1a, 0xa6, 0xc7, 0xd3, 0x53, 0x9e, 0x9a, 0xd0, 0x96, 0x61, 0x8e, 0x3b, 0x53, 0x6b, 0x23, 0x57, 0x70, 0x53, 0xe2, 0x50, 0x1b, 0x17, 0xdb,
0xe5, 0x47, 0xa1, 0xfd, 0x6f, 0xab, 0xca, 0xcc, 0x47, 0xa4, 0x30, 0x28, 0xbe, 0x09, 0x6d, 0x7d, 0xab, 0xbd, 0xd5, 0xd8, 0xd0, 0xd1, 0x30, 0x1b, 0x7d, 0x43, 0xc5, 0xe4, 0x27, 0xb0, 0x72, 0xe9,
0xfb, 0x10, 0xcb, 0x91, 0x8b, 0x63, 0x32, 0x53, 0x42, 0xa7, 0x22, 0xbb, 0xd0, 0x41, 0x25, 0x39, 0xf9, 0xa9, 0xec, 0x96, 0x66, 0x5b, 0xd4, 0xb1, 0xc9, 0x07, 0x6f, 0x68, 0xf2, 0x05, 0xff, 0xd8,
0x54, 0xdf, 0x55, 0xf0, 0xbb, 0x57, 0xc4, 0x67, 0xf6, 0xe7, 0x9c, 0xdc, 0x37, 0xe4, 0x3b, 0xd0, 0xd8, 0xa2, 0xa6, 0xd4, 0xd8, 0xff, 0x55, 0x05, 0x3a, 0x66, 0x3d, 0x8c, 0x4d, 0x85, 0xec, 0x4b,
0x31, 0x9d, 0x3f, 0x61, 0x95, 0x94, 0x79, 0x03, 0xec, 0x73, 0x93, 0x98, 0x6c, 0x43, 0x37, 0xef, 0x1d, 0x28, 0xad, 0xd1, 0x1c, 0xb8, 0xe8, 0xdf, 0x57, 0xca, 0xfc, 0x7b, 0xdd, 0xab, 0xae, 0xbe,
0x3d, 0x8a, 0x4c, 0x89, 0x19, 0x15, 0x14, 0xc8, 0xc9, 0x03, 0x71, 0x84, 0x58, 0xc7, 0xb8, 0xc9, 0x29, 0x70, 0x57, 0x7b, 0xbb, 0xc0, 0x5d, 0xbd, 0x34, 0x70, 0x37, 0x3d, 0xbe, 0x33, 0xfb, 0xdb,
0x6d, 0xf3, 0x33, 0x6d, 0x9a, 0x36, 0xf9, 0x1f, 0xed, 0x50, 0xf1, 0x0f, 0x01, 0x32, 0x18, 0xe9, 0xc6, 0x77, 0xe6, 0x5e, 0x1b, 0xdf, 0xe9, 0xff, 0x5f, 0x0b, 0x48, 0x91, 0x7b, 0xc9, 0x13, 0x1e,
0x42, 0xfb, 0xe9, 0xd1, 0xde, 0xa1, 0xbb, 0xb3, 0xbf, 0x7d, 0x78, 0xb8, 0x77, 0xd0, 0x9d, 0x23, 0xd2, 0x08, 0x69, 0x20, 0x94, 0xd8, 0xd7, 0xdf, 0x4e, 0x02, 0xe4, 0x6a, 0xc9, 0xaf, 0x99, 0x28,
0x04, 0x3a, 0x18, 0xe6, 0xdb, 0x55, 0x30, 0x8b, 0xc1, 0x44, 0x60, 0x45, 0xc2, 0x2a, 0x64, 0x15, 0xea, 0xa9, 0x3f, 0xba, 0x79, 0x35, 0xef, 0x94, 0xa1, 0x72, 0xc1, 0xcb, 0xda, 0x9b, 0x83, 0x97,
0xba, 0x4f, 0x0e, 0x73, 0xd0, 0xea, 0xc3, 0xa6, 0x92, 0x0f, 0x7b, 0x0d, 0x56, 0x79, 0xe6, 0xe1, 0xf5, 0x37, 0x07, 0x2f, 0x67, 0xf3, 0xc1, 0xcb, 0xfe, 0xdf, 0xb4, 0x60, 0xa9, 0x84, 0xcd, 0xbe,
0x43, 0xce, 0x1e, 0xd2, 0x3a, 0xf9, 0xa7, 0x16, 0x5c, 0xcb, 0x21, 0xb2, 0x54, 0x1a, 0x6e, 0x80, 0xbc, 0x81, 0x33, 0xc6, 0x30, 0xb4, 0x4f, 0x45, 0x30, 0x86, 0x0e, 0xec, 0xff, 0x55, 0x98, 0x37,
0x98, 0x56, 0x89, 0x09, 0xc4, 0x63, 0x01, 0x69, 0x6b, 0xe6, 0x34, 0x48, 0x11, 0xc1, 0x78, 0x5e, 0x44, 0xeb, 0xcb, 0x6b, 0x3f, 0x6f, 0x21, 0x72, 0xce, 0x36, 0x60, 0xfd, 0xff, 0x5d, 0x01, 0x52,
0xb3, 0x4d, 0x73, 0x92, 0x54, 0x86, 0xb2, 0xd7, 0x79, 0x7e, 0x24, 0x66, 0x52, 0x1a, 0x1d, 0x3f, 0x14, 0xef, 0x3f, 0xd7, 0x3e, 0x14, 0xe7, 0xa9, 0x5a, 0x32, 0x4f, 0xff, 0x5f, 0x77, 0x9e, 0xf7,
0xe3, 0x19, 0x8d, 0x3a, 0x22, 0x3b, 0x92, 0x35, 0xbb, 0x2c, 0x8b, 0xcc, 0xad, 0x30, 0x8c, 0x1d, 0x61, 0x51, 0xe4, 0x33, 0x6a, 0x81, 0x2c, 0xce, 0x31, 0x45, 0x04, 0xb3, 0x91, 0xcd, 0xc8, 0x71,
0xb3, 0xbf, 0xa5, 0x38, 0xfb, 0x8f, 0x6a, 0x40, 0xbe, 0x3f, 0xa5, 0xf1, 0x15, 0xe6, 0xcb, 0xa8, 0xc3, 0xc8, 0xdf, 0xd2, 0xb6, 0xdf, 0x5c, 0x00, 0xd9, 0xee, 0x43, 0x4f, 0xcc, 0xd0, 0xee, 0x05,
0xa8, 0xe9, 0x7a, 0x3e, 0x26, 0x38, 0x3f, 0x99, 0x9e, 0x7e, 0x8f, 0x5e, 0xc9, 0xcc, 0xb1, 0x4a, 0x0d, 0xd3, 0xa3, 0xc9, 0x09, 0x4f, 0xe8, 0xf3, 0xa3, 0xd0, 0xfe, 0x37, 0x55, 0x65, 0xe6, 0x23,
0x96, 0x39, 0x56, 0x96, 0xbd, 0x55, 0x7b, 0x7d, 0xf6, 0x56, 0xfd, 0x75, 0xd9, 0x5b, 0x5f, 0x81, 0x52, 0x18, 0x14, 0xdf, 0x84, 0xb6, 0xbe, 0x7d, 0x88, 0xe5, 0xc8, 0xc5, 0x31, 0x99, 0x29, 0xa1,
0x45, 0x7f, 0x14, 0x46, 0x4c, 0xe6, 0x99, 0x9d, 0x90, 0xf4, 0xe6, 0x6f, 0x55, 0x99, 0x6f, 0x2d, 0x53, 0x91, 0x1d, 0xe8, 0xa0, 0x92, 0x1c, 0xaa, 0xef, 0x2a, 0xf8, 0xdd, 0x6b, 0xe2, 0x33, 0x7b,
0x80, 0x87, 0x0c, 0x46, 0x3e, 0xcd, 0x88, 0xe8, 0x70, 0x84, 0x99, 0x82, 0xba, 0x16, 0xd8, 0x1b, 0x33, 0x4e, 0xee, 0x1b, 0xf2, 0x1d, 0xe8, 0x98, 0xce, 0x9f, 0xb0, 0x4a, 0xca, 0xbc, 0x01, 0xf6,
0x8e, 0xe8, 0x41, 0x34, 0xf0, 0xd2, 0x28, 0xc6, 0xc0, 0x8e, 0xfc, 0x98, 0xc1, 0x13, 0x72, 0x1b, 0xb9, 0x49, 0x4c, 0xb6, 0xa0, 0x9b, 0xf7, 0x1e, 0x45, 0x7e, 0xcd, 0x94, 0x0a, 0x0a, 0xe4, 0xe4,
0x3a, 0x49, 0x34, 0x65, 0x96, 0x93, 0x1c, 0x2b, 0x8f, 0x24, 0xb5, 0x39, 0xf4, 0x88, 0x8f, 0x78, 0xa1, 0x38, 0x42, 0xac, 0x63, 0xdc, 0xe4, 0xb6, 0xf9, 0x99, 0x36, 0x4d, 0x1b, 0xfc, 0x8f, 0x76,
0x13, 0x56, 0xa6, 0x09, 0x75, 0xc7, 0x7e, 0x92, 0xb0, 0xdd, 0x71, 0x10, 0x85, 0x69, 0x1c, 0x05, 0xa8, 0xf8, 0x87, 0x00, 0x19, 0x8c, 0x74, 0xa1, 0xfd, 0xec, 0x70, 0xf7, 0xc0, 0xdd, 0xde, 0xdb,
0x22, 0x9e, 0xb4, 0x3c, 0x4d, 0xe8, 0x67, 0x1c, 0xb3, 0xc3, 0x11, 0xe4, 0x9b, 0x59, 0x97, 0x26, 0x3a, 0x38, 0xd8, 0xdd, 0xef, 0xce, 0x10, 0x02, 0x1d, 0x0c, 0xf3, 0xed, 0x28, 0x98, 0xc5, 0x60,
0x9e, 0x1f, 0x27, 0x3d, 0xc0, 0x2e, 0xc9, 0x91, 0xb2, 0x7e, 0x1f, 0x79, 0x7e, 0xac, 0xfa, 0xc2, 0x22, 0xb0, 0x22, 0x61, 0x15, 0xb2, 0x0c, 0xdd, 0xa7, 0x07, 0x39, 0x68, 0xf5, 0x51, 0x53, 0xc9,
0x0a, 0x09, 0xd9, 0x2e, 0xa4, 0x98, 0xc9, 0x98, 0x7c, 0x71, 0x75, 0xbe, 0xfc, 0x4c, 0x33, 0x91, 0x87, 0xbd, 0x02, 0xcb, 0x3c, 0x5f, 0xf5, 0x11, 0x67, 0x0f, 0x69, 0x9d, 0xfc, 0x13, 0x0b, 0xae,
0x20, 0xb5, 0x09, 0x0d, 0xd9, 0x3d, 0xe6, 0x44, 0x9f, 0xc5, 0xd1, 0x58, 0x3a, 0xd1, 0xec, 0x37, 0xe5, 0x10, 0x59, 0x02, 0x16, 0x37, 0x40, 0x4c, 0xab, 0xc4, 0x04, 0xe2, 0xb1, 0x80, 0xb4, 0x35,
0xe9, 0x40, 0x25, 0x8d, 0xc4, 0xc7, 0x95, 0x34, 0xb2, 0x7f, 0x08, 0x2d, 0x6d, 0x86, 0x31, 0x8b, 0x73, 0x1a, 0xa4, 0x88, 0x60, 0x3c, 0xaf, 0xd9, 0xa6, 0x39, 0x49, 0x2a, 0x43, 0xd9, 0xab, 0x2a,
0x4e, 0x18, 0x6c, 0xc2, 0xfb, 0xae, 0x71, 0xff, 0x28, 0xa4, 0xc1, 0x93, 0x21, 0xf9, 0x1a, 0x2c, 0xd7, 0x25, 0xd7, 0xf1, 0x53, 0x9e, 0x07, 0xab, 0x23, 0xb2, 0x23, 0x59, 0xb3, 0xcb, 0xb2, 0xc8,
0x0f, 0xfd, 0x98, 0x62, 0x42, 0xa4, 0x1b, 0xd3, 0x0b, 0x1a, 0x27, 0x32, 0x4e, 0xd1, 0x55, 0x08, 0xdc, 0x0a, 0xc3, 0xd8, 0x31, 0xfb, 0x5b, 0x8a, 0xb3, 0xff, 0xa8, 0x06, 0xe4, 0x7b, 0x13, 0x1a,
0x87, 0xc3, 0x6d, 0x17, 0x56, 0x8c, 0x81, 0x2b, 0xa9, 0x9d, 0xc7, 0x8c, 0x2e, 0x19, 0x2a, 0x35, 0x5f, 0x61, 0x96, 0x95, 0x8a, 0x9a, 0xae, 0xe6, 0x63, 0x82, 0xb3, 0xe3, 0xc9, 0xc9, 0x27, 0xf4,
0xb3, 0xbd, 0x04, 0x8e, 0xed, 0x77, 0x22, 0xc4, 0xe2, 0x4e, 0xe2, 0xe8, 0x14, 0x1b, 0xb1, 0x1c, 0x4a, 0xe6, 0x1b, 0x56, 0xb2, 0x7c, 0xc3, 0xb2, 0x9c, 0xbf, 0xda, 0x9b, 0x73, 0xfe, 0xea, 0x6f,
0x03, 0x66, 0xff, 0xf3, 0x2a, 0x54, 0xf7, 0xa3, 0x89, 0x7e, 0x68, 0x64, 0x99, 0x87, 0x46, 0xc2, 0xca, 0xf9, 0xfb, 0x0a, 0xcc, 0xfb, 0x67, 0x61, 0xc4, 0x64, 0x9e, 0xd9, 0x09, 0x49, 0x6f, 0x76,
0x28, 0x75, 0x95, 0xcd, 0x29, 0x2c, 0x07, 0x03, 0x48, 0x36, 0xa0, 0xe3, 0x8d, 0x53, 0x37, 0x8d, 0xad, 0xca, 0x7c, 0x6b, 0x01, 0x3c, 0x60, 0x30, 0xf2, 0x71, 0x46, 0x44, 0x87, 0x67, 0x98, 0x5f,
0x98, 0x11, 0x7e, 0xe9, 0xc5, 0x43, 0x2e, 0xee, 0xc8, 0x6e, 0x39, 0x0c, 0x59, 0x85, 0xaa, 0xb2, 0xaa, 0x6b, 0x81, 0xdd, 0xe1, 0x19, 0xdd, 0x8f, 0x06, 0x5e, 0x1a, 0xc5, 0x18, 0xd8, 0x91, 0x1f,
0xa5, 0x90, 0x80, 0x15, 0x99, 0x07, 0x88, 0xc7, 0xe5, 0x57, 0x22, 0x16, 0x2a, 0x4a, 0x4c, 0x9b, 0x33, 0x78, 0x42, 0x6e, 0x43, 0x27, 0x89, 0x26, 0xcc, 0x72, 0x92, 0x63, 0xe5, 0x91, 0xa4, 0x36,
0x98, 0xdf, 0x73, 0xf7, 0x9b, 0xef, 0x88, 0x65, 0x28, 0x66, 0x20, 0x33, 0x01, 0x1b, 0x67, 0xf6, 0x87, 0x1e, 0xf2, 0x11, 0x6f, 0xc0, 0xd2, 0x24, 0xa1, 0xee, 0xc8, 0x4f, 0x12, 0xb6, 0x3b, 0x0e,
0xa6, 0x2a, 0xeb, 0x51, 0xfe, 0x86, 0x19, 0xe5, 0xbf, 0x05, 0xad, 0x34, 0xb8, 0x70, 0x27, 0xde, 0xa2, 0x30, 0x8d, 0xa3, 0x40, 0xc4, 0x93, 0x16, 0x27, 0x09, 0xfd, 0x94, 0x63, 0xb6, 0x39, 0x82,
0x55, 0x10, 0x79, 0x43, 0xc1, 0xd8, 0x3a, 0x88, 0x7c, 0x9b, 0x53, 0xb0, 0x4d, 0x38, 0x1e, 0x4a, 0x7c, 0x33, 0xeb, 0xd2, 0xd8, 0xf3, 0xe3, 0xa4, 0x07, 0xd8, 0x25, 0x39, 0x52, 0xd6, 0xef, 0x43,
0x86, 0x96, 0xbb, 0xd8, 0x7e, 0x34, 0xd9, 0x3c, 0x09, 0x2e, 0x1c, 0x8e, 0xe4, 0x3c, 0xa9, 0x93, 0xcf, 0x8f, 0x55, 0x5f, 0x58, 0x21, 0x21, 0x5b, 0x85, 0xc4, 0x44, 0x19, 0x93, 0x2f, 0xae, 0xce,
0xf7, 0xbf, 0x03, 0x4b, 0x39, 0xfc, 0x5b, 0x25, 0x41, 0xfe, 0xc6, 0x82, 0x3a, 0x2e, 0x2f, 0x33, 0x97, 0x9f, 0x9f, 0x28, 0xd2, 0xea, 0x36, 0xa0, 0x21, 0xbb, 0xc7, 0x9c, 0xe8, 0xd3, 0x38, 0x1a,
0x3e, 0xb8, 0x76, 0x56, 0xc7, 0x5a, 0x58, 0xc3, 0xa2, 0x93, 0x07, 0x13, 0xdb, 0xc8, 0x1e, 0xae, 0x49, 0x27, 0x9a, 0xfd, 0x26, 0x1d, 0xa8, 0xa4, 0x91, 0xf8, 0xb8, 0x92, 0x46, 0xf6, 0x0f, 0xa0,
0xa8, 0xf9, 0xd6, 0x33, 0x88, 0x6f, 0x41, 0x93, 0x97, 0x54, 0x26, 0x2c, 0x92, 0x64, 0x40, 0x72, 0xa5, 0xcd, 0xb0, 0xc8, 0xad, 0x43, 0x83, 0x4d, 0x78, 0xdf, 0x35, 0xee, 0x1f, 0x85, 0x34, 0x78,
0x13, 0x6a, 0xe7, 0xd1, 0x44, 0xfa, 0x67, 0x90, 0x8d, 0xd7, 0x41, 0x78, 0xd6, 0x1f, 0x56, 0x1f, 0x3a, 0x24, 0x5f, 0x83, 0xc5, 0xa1, 0x1f, 0x53, 0x4c, 0xa3, 0x75, 0x63, 0x7a, 0x41, 0xe3, 0x44,
0x9f, 0x75, 0x6e, 0x03, 0xe7, 0xc1, 0xcc, 0xef, 0x50, 0xd5, 0xea, 0xab, 0x98, 0x83, 0xda, 0xcf, 0xc6, 0x29, 0xba, 0x0a, 0xe1, 0x70, 0xb8, 0xed, 0xc2, 0x92, 0x31, 0x70, 0x25, 0xb5, 0xb3, 0x98,
0x60, 0x89, 0x09, 0xa0, 0x16, 0xe6, 0x9f, 0xad, 0x89, 0xbf, 0xca, 0x36, 0xf6, 0x41, 0x30, 0x1d, 0x07, 0x28, 0x43, 0xa5, 0x66, 0x8e, 0xa0, 0xc0, 0xb1, 0xfd, 0x4e, 0x84, 0x58, 0xdc, 0x71, 0x1c,
0x52, 0xdd, 0x4b, 0xc6, 0x30, 0xae, 0x80, 0x4b, 0xfb, 0xd0, 0xfe, 0xd7, 0x16, 0x17, 0x6c, 0x56, 0x9d, 0x60, 0x23, 0x96, 0x63, 0xc0, 0xec, 0x7f, 0x56, 0x85, 0xea, 0x5e, 0x34, 0xd6, 0x0f, 0x8d,
0x2f, 0xb9, 0x0b, 0x35, 0xa6, 0x4f, 0x73, 0x41, 0x11, 0x95, 0xb6, 0xc2, 0xe8, 0x1c, 0xa4, 0x60, 0x2c, 0xf3, 0xd0, 0x48, 0x18, 0xa5, 0xae, 0xb2, 0x39, 0x85, 0xe5, 0x60, 0x00, 0xc9, 0x3a, 0x74,
0x62, 0x84, 0x81, 0x56, 0xbd, 0x76, 0x1e, 0x66, 0xcd, 0x5c, 0x4c, 0x35, 0xb2, 0x9c, 0x67, 0x96, 0xbc, 0x51, 0xea, 0xa6, 0x11, 0x33, 0xc2, 0x2f, 0xbd, 0x98, 0x27, 0x0c, 0x56, 0x91, 0xdd, 0x72,
0x83, 0x92, 0x4d, 0xed, 0x94, 0xaa, 0x66, 0xe8, 0x68, 0x69, 0x47, 0x0c, 0x47, 0x54, 0x3b, 0x9d, 0x18, 0xb2, 0x0c, 0x55, 0x65, 0x4b, 0x21, 0x01, 0x2b, 0x32, 0x0f, 0x10, 0x8f, 0xcb, 0xaf, 0x44,
0xfa, 0x13, 0x0b, 0x16, 0x8d, 0x3e, 0x31, 0x36, 0x0d, 0xbc, 0x24, 0x15, 0xa9, 0x03, 0x62, 0xe5, 0x2c, 0x54, 0x94, 0x98, 0x36, 0x31, 0xbf, 0xe7, 0xee, 0x37, 0xdf, 0x11, 0xcb, 0x50, 0xcc, 0x40,
0x75, 0x90, 0xce, 0xe2, 0x15, 0x93, 0xc5, 0xd5, 0x69, 0x47, 0x55, 0x3f, 0xed, 0xb8, 0x07, 0xcd, 0x66, 0x02, 0x36, 0xca, 0xec, 0x4d, 0x55, 0xd6, 0xa3, 0xfc, 0x0d, 0x33, 0xca, 0xbf, 0x06, 0xad,
0x2c, 0x7d, 0xdc, 0xec, 0x14, 0x6b, 0x51, 0x26, 0xf0, 0x64, 0x44, 0x59, 0x3c, 0xbd, 0xae, 0xc5, 0x34, 0xb8, 0x70, 0xc7, 0xde, 0x55, 0x10, 0x79, 0x43, 0xc1, 0xd8, 0x3a, 0x88, 0x7c, 0x9b, 0x53,
0xd3, 0xed, 0x4f, 0xa1, 0xa5, 0xd1, 0xeb, 0xf1, 0x70, 0xcb, 0x88, 0x87, 0xab, 0xec, 0xb6, 0x4a, 0xb0, 0x4d, 0x38, 0x1e, 0x4a, 0x86, 0x96, 0xbb, 0xd8, 0x5e, 0x34, 0xde, 0x38, 0x0e, 0x2e, 0x1c,
0x96, 0xdd, 0x66, 0xff, 0xa2, 0x02, 0x8b, 0x8c, 0xbd, 0xfd, 0x70, 0x74, 0x14, 0x05, 0xfe, 0xe0, 0x8e, 0xe4, 0x3c, 0xa9, 0x93, 0xf7, 0xbf, 0x03, 0x0b, 0x39, 0xfc, 0x17, 0x4a, 0x9d, 0xfd, 0x8d,
0x0a, 0xd9, 0x4a, 0x72, 0xb2, 0xd8, 0x4f, 0x25, 0x9b, 0x9b, 0x60, 0x26, 0xef, 0x32, 0x0a, 0x27, 0x05, 0x75, 0x5c, 0x5e, 0x66, 0x7c, 0x70, 0xed, 0xac, 0x8e, 0xb5, 0xb0, 0x86, 0x79, 0x27, 0x0f,
0x94, 0x93, 0x2a, 0x33, 0xed, 0xc5, 0x64, 0xff, 0xd4, 0x4b, 0x84, 0x42, 0x10, 0xf6, 0xbc, 0x01, 0x26, 0xb6, 0x91, 0x73, 0x5e, 0x51, 0xf3, 0xad, 0xe7, 0x9d, 0xaf, 0x41, 0x93, 0x97, 0x54, 0xfe,
0x64, 0x3a, 0x86, 0x01, 0x30, 0x57, 0x71, 0xec, 0x07, 0x81, 0xcf, 0x69, 0xb9, 0xb7, 0x57, 0x86, 0x34, 0x92, 0x64, 0x40, 0x72, 0x13, 0x6a, 0xe7, 0xd1, 0x58, 0xfa, 0x67, 0x90, 0x8d, 0xd7, 0x41,
0x62, 0x6d, 0x0e, 0xfd, 0xc4, 0x3b, 0xcd, 0x4e, 0x32, 0x55, 0x19, 0x43, 0x85, 0xde, 0x4b, 0x2d, 0x78, 0xd6, 0x1f, 0x56, 0x1f, 0x9f, 0x75, 0x6e, 0x03, 0xe7, 0xc1, 0xcc, 0xef, 0x50, 0xd5, 0xea,
0x54, 0x38, 0x8f, 0x02, 0x6e, 0x02, 0xf3, 0x0b, 0xb9, 0x50, 0x58, 0x48, 0xfb, 0x4f, 0x2b, 0xd0, 0xab, 0x98, 0x83, 0xda, 0xcf, 0x61, 0x81, 0x09, 0xa0, 0x16, 0xe6, 0x9f, 0xae, 0x89, 0xbf, 0xca,
0xd2, 0xd8, 0x42, 0x1c, 0xdf, 0x9b, 0x1b, 0x8b, 0x06, 0x91, 0x78, 0x23, 0x76, 0xa0, 0x41, 0xc8, 0x36, 0xf6, 0x41, 0x30, 0x19, 0x52, 0xdd, 0x4b, 0xc6, 0x30, 0xae, 0x80, 0x4b, 0xfb, 0xd0, 0xfe,
0x6d, 0xb3, 0x45, 0x3c, 0x2e, 0x40, 0x61, 0x37, 0xd8, 0xe7, 0x06, 0x34, 0x19, 0xdb, 0x7f, 0x84, 0x57, 0x16, 0x17, 0x6c, 0x56, 0x2f, 0xb9, 0x07, 0x35, 0xa6, 0x4f, 0x73, 0x41, 0x11, 0x95, 0xb6,
0x81, 0x0a, 0x71, 0x6f, 0x43, 0x01, 0x24, 0xf6, 0x3e, 0x62, 0xeb, 0x19, 0x16, 0x01, 0xaf, 0x3c, 0xc2, 0xe8, 0x1c, 0xa4, 0x60, 0x62, 0x84, 0x81, 0x56, 0xbd, 0x76, 0x1e, 0x66, 0xcd, 0x5c, 0x4c,
0xf0, 0x7f, 0x00, 0x6d, 0x51, 0x0d, 0xae, 0x2f, 0x0e, 0x38, 0x13, 0x3c, 0x63, 0xed, 0x1d, 0x83, 0x35, 0xb2, 0x9c, 0x67, 0x96, 0x83, 0x92, 0x0d, 0xed, 0x94, 0xaa, 0x66, 0xe8, 0x68, 0x69, 0x47,
0x52, 0x7e, 0x79, 0x5f, 0x7e, 0xd9, 0x78, 0xdd, 0x97, 0x92, 0xd2, 0x7e, 0xac, 0xf2, 0x28, 0x1e, 0x0c, 0xcf, 0xa8, 0x76, 0x3a, 0xf5, 0x27, 0x16, 0xcc, 0x1b, 0x7d, 0x62, 0x6c, 0x1a, 0x78, 0x49,
0xc7, 0xde, 0xe4, 0x5c, 0x2a, 0x93, 0x7b, 0xb0, 0x22, 0x75, 0xc6, 0x34, 0xf4, 0xc2, 0x30, 0x9a, 0x2a, 0x52, 0x07, 0xc4, 0xca, 0xeb, 0x20, 0x9d, 0xc5, 0x2b, 0x26, 0x8b, 0xab, 0xd3, 0x8e, 0xaa,
0x86, 0x03, 0x2a, 0x93, 0xe0, 0xca, 0x50, 0xf6, 0x50, 0xa5, 0x4c, 0x63, 0x45, 0x64, 0x03, 0xea, 0x7e, 0xda, 0x71, 0x1f, 0x9a, 0xd9, 0xa5, 0x03, 0xb3, 0x53, 0xac, 0x45, 0x99, 0xc0, 0x93, 0x11,
0xdc, 0x1a, 0xe3, 0xfb, 0x6f, 0xb9, 0xfa, 0xe0, 0x24, 0xe4, 0x2e, 0xd4, 0xb9, 0x51, 0x56, 0x99, 0x65, 0xf1, 0xf4, 0xba, 0x16, 0x4f, 0xb7, 0x3f, 0x86, 0x96, 0x46, 0xaf, 0xc7, 0xc3, 0x2d, 0x23,
0x29, 0xf0, 0x9c, 0xc0, 0xde, 0x80, 0x25, 0xcc, 0xc4, 0x37, 0xf5, 0x9e, 0xb9, 0x2f, 0xcf, 0x0f, 0x1e, 0xae, 0xb2, 0xdb, 0x2a, 0x59, 0x76, 0x9b, 0xfd, 0xf3, 0x0a, 0xcc, 0x33, 0xf6, 0xf6, 0xc3,
0x30, 0x57, 0xdf, 0x5e, 0x05, 0x72, 0xc8, 0xe5, 0x49, 0x3f, 0x0d, 0xfd, 0x4d, 0x15, 0x5a, 0x1a, 0xb3, 0xc3, 0x28, 0xf0, 0x07, 0x57, 0xc8, 0x56, 0x92, 0x93, 0xc5, 0x7e, 0x2a, 0xd9, 0xdc, 0x04,
0x98, 0xe9, 0x25, 0x3c, 0xc2, 0x72, 0x87, 0xbe, 0x37, 0xa6, 0x29, 0x8d, 0x85, 0x0c, 0xe5, 0xa0, 0x33, 0x79, 0x57, 0x29, 0xbd, 0x5c, 0x39, 0xa9, 0x32, 0xd3, 0x5e, 0x4c, 0xf6, 0x4f, 0xbc, 0x44,
0x8c, 0xce, 0xbb, 0x18, 0xb9, 0xd1, 0x34, 0x75, 0x87, 0x74, 0x14, 0x53, 0x2a, 0x8c, 0x85, 0x1c, 0x28, 0x04, 0x61, 0xcf, 0x1b, 0x40, 0xa6, 0x63, 0x18, 0x00, 0x73, 0x15, 0x47, 0x7e, 0x10, 0xf8,
0x94, 0xd1, 0x31, 0x2e, 0xd6, 0xe8, 0xf8, 0xa1, 0x53, 0x0e, 0x2a, 0xcf, 0x36, 0xf9, 0x1c, 0xd5, 0x9c, 0x96, 0x7b, 0x7b, 0x65, 0x28, 0xd6, 0xe6, 0xd0, 0x4f, 0xbc, 0x93, 0xec, 0x24, 0x53, 0x95,
0xb2, 0xb3, 0x4d, 0x3e, 0x23, 0x79, 0x8d, 0x5a, 0x2f, 0xd1, 0xa8, 0x1f, 0xc3, 0x1a, 0xd7, 0x9d, 0x31, 0x54, 0xe8, 0xbd, 0xd2, 0x42, 0x85, 0x3c, 0xb9, 0xd9, 0x04, 0xe6, 0x17, 0x72, 0xae, 0xb0,
0x42, 0x6b, 0xb8, 0x39, 0xc6, 0x9a, 0x81, 0x25, 0x1b, 0xd0, 0x65, 0x7d, 0x96, 0x62, 0x91, 0xf8, 0x90, 0xf6, 0x9f, 0x56, 0xa0, 0xa5, 0xb1, 0x85, 0x38, 0xbe, 0x37, 0x37, 0x16, 0x0d, 0x22, 0xf1,
0x3f, 0xe7, 0xb2, 0x65, 0x39, 0x05, 0x38, 0xa3, 0xc5, 0x80, 0xbb, 0x4e, 0xcb, 0x13, 0x4c, 0x0a, 0x46, 0xec, 0x40, 0x83, 0x90, 0xdb, 0x66, 0x8b, 0x78, 0x5c, 0x80, 0xc2, 0x6e, 0xb0, 0xcf, 0x0d,
0x70, 0xa4, 0xf5, 0x5e, 0x9a, 0xb4, 0x4d, 0x41, 0x9b, 0x83, 0x93, 0x07, 0xb0, 0x3e, 0xa6, 0x43, 0x68, 0x32, 0xb6, 0xff, 0x00, 0x03, 0x15, 0xe2, 0xb6, 0x8f, 0x02, 0x48, 0xec, 0x03, 0xc4, 0xd6,
0xdf, 0x33, 0xab, 0xc0, 0xf8, 0x17, 0xcf, 0x5b, 0x9b, 0x85, 0x66, 0xad, 0xb0, 0x59, 0xf8, 0x79, 0x33, 0x2c, 0x02, 0x5e, 0x7b, 0xe0, 0xff, 0x10, 0xda, 0xa2, 0x1a, 0x5c, 0x5f, 0x1c, 0x70, 0x26,
0x34, 0x3e, 0xf5, 0xf9, 0x86, 0xc6, 0x8f, 0x06, 0x6a, 0x4e, 0x01, 0x6e, 0x2f, 0x42, 0xeb, 0x38, 0x78, 0xc6, 0xda, 0x3b, 0x06, 0xa5, 0xfc, 0xf2, 0x81, 0xfc, 0xb2, 0xf1, 0xa6, 0x2f, 0x25, 0xa5,
0x8d, 0x26, 0x72, 0xe9, 0x3b, 0xd0, 0xe6, 0x45, 0x91, 0xf2, 0xf8, 0x0e, 0x5c, 0x47, 0x5e, 0x3d, 0xfd, 0x44, 0xe5, 0x51, 0x3c, 0x89, 0xbd, 0xf1, 0xb9, 0x54, 0x26, 0xf7, 0x61, 0x49, 0xea, 0x8c,
0x89, 0x26, 0x51, 0x10, 0x8d, 0xae, 0x0c, 0x07, 0xff, 0x3f, 0x59, 0xb0, 0x62, 0x60, 0x33, 0x0f, 0x49, 0xe8, 0x85, 0x61, 0x34, 0x09, 0x07, 0x54, 0x26, 0xc1, 0x95, 0xa1, 0xec, 0xa1, 0x4a, 0x99,
0x1f, 0xa3, 0x91, 0x32, 0x57, 0x8d, 0xb3, 0xf7, 0xb2, 0xb6, 0x1d, 0x70, 0x42, 0x7e, 0xf0, 0xf3, 0xc6, 0x8a, 0xc8, 0x3a, 0xd4, 0xb9, 0x35, 0xc6, 0xf7, 0xdf, 0x72, 0xf5, 0xc1, 0x49, 0xc8, 0x3d,
0x4c, 0xa4, 0xaf, 0x6d, 0x67, 0x57, 0xe7, 0xe4, 0x87, 0x9c, 0xd7, 0x7b, 0x45, 0x5e, 0x17, 0xdf, 0xa8, 0x73, 0xa3, 0xac, 0x32, 0x55, 0xe0, 0x39, 0x81, 0xbd, 0x0e, 0x0b, 0x98, 0xa3, 0x6d, 0xea,
0xcb, 0x9b, 0x73, 0xb2, 0x8a, 0xef, 0x88, 0x74, 0xa0, 0xa1, 0x18, 0x74, 0xd5, 0x4c, 0xe1, 0xd0, 0x3d, 0x73, 0x5f, 0x9e, 0x1d, 0xf0, 0x2c, 0xee, 0x65, 0x20, 0x07, 0x5c, 0x9e, 0xf4, 0xd3, 0xd0,
0x03, 0x42, 0xb2, 0x07, 0x03, 0x05, 0x4c, 0xec, 0x5f, 0x5a, 0x00, 0x59, 0xef, 0x30, 0x89, 0x44, 0xdf, 0x54, 0xa1, 0xa5, 0x81, 0x99, 0x5e, 0xc2, 0x23, 0x2c, 0x77, 0xe8, 0x7b, 0x23, 0x9a, 0xd2,
0x6d, 0x69, 0xfc, 0x9a, 0xa6, 0xb6, 0x7d, 0xbd, 0x0f, 0x6d, 0x95, 0x07, 0x90, 0xed, 0x92, 0x2d, 0x58, 0xc8, 0x50, 0x0e, 0xca, 0xe8, 0xbc, 0x8b, 0x33, 0x37, 0x9a, 0xa4, 0xee, 0x90, 0x9e, 0xc5,
0x09, 0x63, 0x56, 0xc5, 0x1d, 0x58, 0x1a, 0x05, 0xd1, 0x29, 0x5a, 0x2f, 0x98, 0x43, 0x9b, 0x88, 0x94, 0x0a, 0x63, 0x21, 0x07, 0x65, 0x74, 0x8c, 0x8b, 0x35, 0x3a, 0x7e, 0xe8, 0x94, 0x83, 0xca,
0xc4, 0xcf, 0x0e, 0x07, 0x3f, 0x12, 0xd0, 0x6c, 0x4b, 0xad, 0xe9, 0x5b, 0x6a, 0xf9, 0x06, 0xf9, 0xb3, 0x4d, 0x3e, 0x47, 0xb5, 0xec, 0x6c, 0x93, 0xcf, 0x48, 0x5e, 0xa3, 0xd6, 0x4b, 0x34, 0xea,
0x77, 0x2a, 0xea, 0x30, 0x36, 0x9b, 0x89, 0x99, 0x12, 0x4e, 0xee, 0x17, 0xd4, 0xf9, 0x8c, 0xb3, 0x87, 0xb0, 0xc2, 0x75, 0xa7, 0xd0, 0x1a, 0x6e, 0x8e, 0xb1, 0xa6, 0x60, 0xc9, 0x3a, 0x74, 0x59,
0x4f, 0x74, 0x2e, 0x8e, 0x5e, 0x1b, 0x1b, 0xfe, 0x14, 0x3a, 0x31, 0xd7, 0x95, 0x52, 0x91, 0xd6, 0x9f, 0xa5, 0x58, 0x24, 0xfe, 0xcf, 0xb8, 0x6c, 0x59, 0x4e, 0x01, 0xce, 0x68, 0x31, 0xe0, 0xae,
0x5e, 0xa1, 0x48, 0x17, 0x63, 0x63, 0x37, 0xfe, 0x2a, 0x74, 0xbd, 0xe1, 0x05, 0x8d, 0x53, 0x1f, 0xd3, 0xf2, 0x04, 0x93, 0x02, 0x1c, 0x69, 0xbd, 0x57, 0x26, 0x6d, 0x53, 0xd0, 0xe6, 0xe0, 0xe4,
0x63, 0x65, 0x68, 0x3a, 0xf1, 0xc1, 0x2d, 0x69, 0x70, 0xb4, 0x50, 0xee, 0xc0, 0x92, 0x48, 0xc1, 0x21, 0xac, 0x8e, 0xe8, 0xd0, 0xf7, 0xcc, 0x2a, 0x30, 0xfe, 0xc5, 0xf3, 0xd6, 0xa6, 0xa1, 0x59,
0x55, 0x94, 0xe2, 0xc2, 0x53, 0x06, 0x66, 0x84, 0xf6, 0xaf, 0xe4, 0xb9, 0xaf, 0xb9, 0xb2, 0xb3, 0x2b, 0x6c, 0x16, 0x7e, 0x16, 0x8d, 0x4e, 0x7c, 0xbe, 0xa1, 0xf1, 0xa3, 0x81, 0x9a, 0x53, 0x80,
0x67, 0x44, 0x1f, 0x5d, 0x25, 0x37, 0xba, 0xaf, 0x88, 0x33, 0xd8, 0xa1, 0x0c, 0xc8, 0x55, 0xb5, 0xdb, 0xf3, 0xd0, 0x3a, 0x4a, 0xa3, 0xb1, 0x5c, 0xfa, 0x0e, 0xb4, 0x79, 0x51, 0xa4, 0x3c, 0xbe,
0x84, 0xb2, 0xa1, 0x38, 0x33, 0x37, 0xa7, 0xb4, 0xf6, 0x26, 0x53, 0x6a, 0xff, 0x99, 0x05, 0x0b, 0x03, 0xd7, 0x91, 0x57, 0x8f, 0xa3, 0x71, 0x14, 0x44, 0x67, 0x57, 0x86, 0x83, 0xff, 0x1f, 0x2d,
0xfb, 0xd1, 0x64, 0x5f, 0xa4, 0xd6, 0xa1, 0x78, 0xa8, 0xdc, 0x77, 0x59, 0x7c, 0x45, 0xd2, 0x5d, 0x58, 0x32, 0xb0, 0x99, 0x87, 0x8f, 0xd1, 0x48, 0x99, 0xab, 0xc6, 0xd9, 0x7b, 0x51, 0xdb, 0x0e,
0xa9, 0x05, 0xb2, 0x98, 0xb7, 0x40, 0xfe, 0x12, 0xbc, 0x83, 0xe1, 0xe0, 0x38, 0x9a, 0x44, 0x31, 0x38, 0x21, 0x3f, 0xf8, 0x79, 0x2e, 0xd2, 0xd7, 0xb6, 0xb2, 0xcb, 0x17, 0xf2, 0x43, 0xce, 0xeb,
0x13, 0x51, 0x2f, 0xe0, 0xe6, 0x46, 0x14, 0xa6, 0xe7, 0x52, 0x85, 0xbe, 0x8a, 0x04, 0x63, 0x34, 0xbd, 0x22, 0xaf, 0x8b, 0xef, 0xe5, 0xb5, 0x0c, 0x59, 0xc5, 0x77, 0x44, 0x3a, 0xd0, 0x50, 0x0c,
0x41, 0x7a, 0xe1, 0x72, 0xb7, 0x49, 0x58, 0x4c, 0x5c, 0xb3, 0x16, 0x11, 0xf6, 0xef, 0x43, 0x13, 0xba, 0x6a, 0xa6, 0x70, 0xe8, 0x01, 0x21, 0xd9, 0x83, 0x81, 0x02, 0x26, 0xf6, 0x2f, 0x2c, 0x80,
0xbd, 0x09, 0x1c, 0xd6, 0x87, 0xd0, 0x3c, 0x8f, 0x26, 0xee, 0xb9, 0x1f, 0xa6, 0x52, 0xe4, 0x3b, 0xac, 0x77, 0x98, 0x44, 0xa2, 0xb6, 0x34, 0x7e, 0xb9, 0x57, 0xdb, 0xbe, 0xde, 0x83, 0xb6, 0xca,
0x99, 0x99, 0xbf, 0x8f, 0x13, 0xa2, 0x08, 0xec, 0x3f, 0x9d, 0x87, 0x85, 0x27, 0xe1, 0x45, 0xe4, 0x03, 0xc8, 0x76, 0xc9, 0x96, 0x84, 0x31, 0xab, 0xe2, 0x2e, 0x2c, 0x9c, 0x05, 0xd1, 0x09, 0x5a,
0x0f, 0xf0, 0x8c, 0x79, 0x4c, 0xc7, 0x91, 0xbc, 0x09, 0xc0, 0x7e, 0x93, 0x1b, 0xb0, 0x80, 0xa9, 0x2f, 0x98, 0x43, 0x9b, 0x88, 0xc4, 0xcf, 0x0e, 0x07, 0x3f, 0x16, 0xd0, 0x6c, 0x4b, 0xad, 0xe9,
0xaf, 0x13, 0xce, 0xb4, 0x6d, 0x9e, 0x4b, 0x22, 0x40, 0x78, 0x13, 0x31, 0xbb, 0x8f, 0xc5, 0x85, 0x5b, 0x6a, 0xf9, 0x06, 0xf9, 0x77, 0x2a, 0xea, 0x30, 0x36, 0x9b, 0x89, 0xa9, 0x12, 0x4e, 0x1e,
0x4a, 0x83, 0x30, 0x37, 0x30, 0xd6, 0xef, 0x53, 0x89, 0x52, 0xe6, 0x19, 0xd5, 0xb5, 0x9b, 0x16, 0x14, 0xd4, 0xf9, 0x94, 0xb3, 0x4f, 0x74, 0x2e, 0x0e, 0xdf, 0x18, 0x1b, 0xfe, 0x18, 0x3a, 0x31,
0xac, 0x2d, 0x91, 0x0a, 0xc8, 0x73, 0xc5, 0x78, 0x5b, 0x02, 0x84, 0xae, 0x6b, 0x4c, 0x79, 0x38, 0xd7, 0x95, 0x52, 0x91, 0xd6, 0x5e, 0xa3, 0x48, 0xe7, 0x63, 0x63, 0x37, 0xfe, 0x2a, 0x74, 0xbd,
0x5f, 0x19, 0x59, 0xcc, 0x75, 0xd5, 0x81, 0xcc, 0x10, 0xe3, 0x1f, 0x70, 0x1a, 0xbe, 0x01, 0xe8, 0xe1, 0x05, 0x8d, 0x53, 0x1f, 0x63, 0x65, 0x68, 0x3a, 0xf1, 0xc1, 0x2d, 0x68, 0x70, 0xb4, 0x50,
0x20, 0x66, 0x8a, 0xe6, 0xaf, 0xf0, 0xf1, 0x2b, 0x94, 0x79, 0x30, 0xd3, 0xdf, 0x43, 0xaa, 0xd4, 0xee, 0xc2, 0x82, 0x48, 0xc1, 0x55, 0x94, 0xe2, 0x9a, 0x5c, 0x06, 0x66, 0x84, 0xf6, 0x2f, 0xe5,
0x2c, 0x1f, 0x07, 0xf0, 0x3b, 0x67, 0x79, 0xb8, 0xe6, 0xf0, 0xf2, 0x2c, 0x65, 0xe9, 0xf0, 0x32, 0xb9, 0xaf, 0xb9, 0xb2, 0xd3, 0x67, 0x44, 0x1f, 0x5d, 0x25, 0x37, 0xba, 0xaf, 0x88, 0x33, 0xd8,
0x86, 0xf1, 0x82, 0xe0, 0xd4, 0x1b, 0xbc, 0xc0, 0x1b, 0x9c, 0x78, 0xea, 0xdb, 0x74, 0x4c, 0x20, 0xa1, 0x0c, 0xc8, 0x55, 0xb5, 0x84, 0xb2, 0xa1, 0x38, 0x33, 0x37, 0xa7, 0xb4, 0xf6, 0x36, 0x53,
0x26, 0xf4, 0x65, 0xab, 0x8a, 0x59, 0x37, 0x35, 0x47, 0x07, 0x91, 0xfb, 0xd0, 0xc2, 0x40, 0x80, 0x6a, 0xff, 0x99, 0x05, 0x73, 0x7b, 0xd1, 0x78, 0x4f, 0xa4, 0xd6, 0xa1, 0x78, 0xa8, 0xdc, 0x77,
0x58, 0xd7, 0x0e, 0xae, 0x6b, 0x57, 0x8f, 0x14, 0xe0, 0xca, 0xea, 0x44, 0xfa, 0xf9, 0xf7, 0x52, 0x59, 0x7c, 0x4d, 0xd2, 0x5d, 0xa9, 0x05, 0x32, 0x9f, 0xb7, 0x40, 0xfe, 0x12, 0xbc, 0x83, 0xe1,
0x21, 0x6f, 0xd8, 0x1b, 0x0e, 0x45, 0xda, 0x40, 0x97, 0x07, 0x35, 0x14, 0x00, 0x43, 0x0d, 0x7c, 0xe0, 0x38, 0x1a, 0x47, 0x31, 0x13, 0x51, 0x2f, 0xe0, 0xe6, 0x46, 0x14, 0xa6, 0xe7, 0x52, 0x85,
0xc2, 0x38, 0xc1, 0x32, 0x12, 0x18, 0x30, 0x72, 0x13, 0x1a, 0xcc, 0xc3, 0x9b, 0x78, 0xfe, 0x10, 0xbe, 0x8e, 0x04, 0x63, 0x34, 0x41, 0x7a, 0xe1, 0x72, 0xb7, 0x49, 0x58, 0x4c, 0x5c, 0xb3, 0x16,
0x13, 0x6d, 0xb8, 0xa3, 0xa9, 0x60, 0xac, 0x0e, 0xf9, 0x1b, 0xb7, 0xca, 0x15, 0x9c, 0x15, 0x03, 0x11, 0xf6, 0xef, 0x43, 0x13, 0xbd, 0x09, 0x1c, 0xd6, 0xfb, 0xd0, 0x3c, 0x8f, 0xc6, 0xee, 0xb9,
0xc6, 0xe6, 0x46, 0x95, 0xc7, 0x59, 0xa2, 0xb1, 0x09, 0x24, 0x1f, 0xe1, 0xe1, 0x6d, 0x4a, 0x31, 0x1f, 0xa6, 0x52, 0xe4, 0x3b, 0x99, 0x99, 0xbf, 0x87, 0x13, 0xa2, 0x08, 0xec, 0x3f, 0x9d, 0x85,
0x9b, 0xb8, 0x73, 0xff, 0x1d, 0x31, 0x66, 0xc1, 0xb4, 0xf2, 0xef, 0x31, 0x23, 0x71, 0x38, 0x25, 0xb9, 0xa7, 0xe1, 0x45, 0xe4, 0x0f, 0xf0, 0x8c, 0x79, 0x44, 0x47, 0x91, 0xbc, 0x09, 0xc0, 0x7e,
0x33, 0xd2, 0x78, 0xfc, 0x7c, 0xcd, 0x30, 0xd2, 0x04, 0x29, 0xc6, 0xcf, 0x39, 0x81, 0xbd, 0x0d, 0x93, 0x1b, 0x30, 0x87, 0xa9, 0xaf, 0x63, 0xce, 0xb4, 0x6d, 0x9e, 0x4b, 0x22, 0x40, 0x78, 0x7f,
0x6d, 0xbd, 0x02, 0xd2, 0x80, 0xda, 0xd3, 0xa3, 0xbd, 0xc3, 0xee, 0x1c, 0x69, 0xc1, 0xc2, 0xf1, 0x35, 0xbb, 0xc5, 0xc7, 0x85, 0x4a, 0x83, 0x30, 0x37, 0x30, 0xd6, 0x6f, 0xe1, 0x89, 0x52, 0xe6,
0xde, 0xc9, 0xc9, 0xc1, 0xde, 0x6e, 0xd7, 0x22, 0x6d, 0x68, 0xa8, 0x3c, 0xcd, 0x0a, 0x2b, 0x6d, 0x19, 0xd5, 0xb5, 0x9b, 0x16, 0xac, 0x2d, 0x91, 0x0a, 0xc8, 0x73, 0xc5, 0x78, 0x5b, 0x02, 0x84,
0xef, 0xec, 0xec, 0x1d, 0x9d, 0xec, 0xed, 0x76, 0xab, 0xf6, 0x1f, 0x57, 0xa0, 0xa5, 0xd5, 0xfc, 0xae, 0x6b, 0x4c, 0x79, 0x38, 0x5f, 0x19, 0x59, 0xcc, 0x75, 0xd5, 0x81, 0xcc, 0x10, 0xe3, 0x1f,
0x8a, 0xe0, 0xcb, 0x4d, 0x00, 0xf4, 0x18, 0xb2, 0x6c, 0x8d, 0x9a, 0xa3, 0x41, 0x98, 0x46, 0x54, 0x70, 0x1a, 0xbe, 0x01, 0xe8, 0x20, 0x66, 0x8a, 0xe6, 0x2f, 0x7e, 0xf2, 0x8b, 0xb7, 0x79, 0x30,
0xbe, 0x74, 0x15, 0xb1, 0xaa, 0x8c, 0x73, 0x35, 0x18, 0xd0, 0x49, 0xaa, 0x1f, 0x51, 0xd4, 0x1d, 0xd3, 0xdf, 0x43, 0xaa, 0xd4, 0x2c, 0x1f, 0x07, 0xf0, 0x9b, 0x8a, 0x79, 0xb8, 0xe6, 0xf0, 0xf2,
0x13, 0xc8, 0xf8, 0x48, 0x00, 0x30, 0x65, 0x90, 0x4b, 0x97, 0x0e, 0x62, 0xeb, 0x12, 0xd3, 0x24, 0x2c, 0x65, 0xe9, 0xf0, 0x32, 0x86, 0xf1, 0x82, 0xe0, 0xc4, 0x1b, 0xbc, 0xc4, 0x7b, 0xbf, 0x78,
0x0a, 0x2e, 0x28, 0x27, 0xe1, 0xf6, 0x97, 0x01, 0x63, 0x6d, 0x09, 0xf5, 0xa2, 0xa5, 0xf3, 0xd6, 0xea, 0xdb, 0x74, 0x4c, 0x20, 0x26, 0xf4, 0x65, 0xab, 0x8a, 0x59, 0x37, 0x35, 0x47, 0x07, 0x91,
0x1d, 0x13, 0x48, 0xbe, 0x2e, 0xd7, 0xa5, 0x81, 0xeb, 0xb2, 0x5e, 0x9c, 0x64, 0x7d, 0x4d, 0xec, 0x07, 0xd0, 0xc2, 0x40, 0x80, 0x58, 0xd7, 0x0e, 0xae, 0x6b, 0x57, 0x8f, 0x14, 0xe0, 0xca, 0xea,
0x14, 0xc8, 0xf6, 0x70, 0x28, 0xb0, 0x2a, 0xf6, 0x95, 0x29, 0x08, 0xcb, 0x50, 0x10, 0x25, 0x42, 0x44, 0xfa, 0xf9, 0xf7, 0x42, 0x21, 0x6f, 0xd8, 0x1b, 0x0e, 0x45, 0xda, 0x40, 0x97, 0x07, 0x35,
0x5a, 0x29, 0x17, 0xd2, 0x57, 0xb2, 0xb2, 0xbd, 0x07, 0xad, 0x23, 0xed, 0x1e, 0x26, 0xea, 0x2b, 0x14, 0x00, 0x43, 0x0d, 0x7c, 0xc2, 0x38, 0xc1, 0x22, 0x12, 0x18, 0x30, 0x72, 0x13, 0x1a, 0xcc,
0x79, 0x03, 0x53, 0xe8, 0x39, 0x0d, 0xa2, 0x75, 0xa7, 0xa2, 0x77, 0xc7, 0xfe, 0x63, 0x8b, 0x5f, 0xc3, 0x1b, 0x7b, 0xfe, 0x10, 0x13, 0x6d, 0xb8, 0xa3, 0xa9, 0x60, 0xac, 0x0e, 0xf9, 0x1b, 0xb7,
0x88, 0x52, 0xdd, 0xe7, 0x6d, 0xdb, 0xd0, 0x56, 0x01, 0xe8, 0x2c, 0x53, 0xdd, 0x80, 0x31, 0x1a, 0xca, 0x25, 0x9c, 0x15, 0x03, 0xc6, 0xe6, 0x46, 0x95, 0x47, 0x59, 0xa2, 0xb1, 0x09, 0x24, 0x1f,
0xec, 0x8a, 0x1b, 0x9d, 0x9d, 0x25, 0x54, 0xe6, 0x95, 0x1a, 0x30, 0x69, 0x28, 0x32, 0xd3, 0xd3, 0xe0, 0xe1, 0x6d, 0x4a, 0x31, 0x9b, 0xb8, 0xf3, 0xe0, 0x1d, 0x31, 0x66, 0xc1, 0xb4, 0xf2, 0xef,
0xe7, 0x2d, 0x24, 0x22, 0xbf, 0xb4, 0x00, 0x67, 0x4c, 0x22, 0xe2, 0x8c, 0x32, 0xa3, 0x56, 0x95, 0x11, 0x23, 0x71, 0x38, 0x25, 0x33, 0xd2, 0x78, 0xfc, 0x7c, 0xc5, 0x30, 0xd2, 0x04, 0x29, 0xc6,
0x55, 0x42, 0x7d, 0x7e, 0x96, 0x37, 0xa0, 0xa1, 0xea, 0x35, 0x77, 0x04, 0x49, 0xa9, 0xf0, 0x6c, 0xcf, 0x39, 0x81, 0xbd, 0x05, 0x6d, 0xbd, 0x02, 0xd2, 0x80, 0xda, 0xb3, 0xc3, 0xdd, 0x83, 0xee,
0xe7, 0x41, 0x07, 0xd2, 0xe8, 0x34, 0xe7, 0xd5, 0x22, 0x82, 0x6c, 0x02, 0x39, 0xf3, 0xe3, 0x3c, 0x0c, 0x69, 0xc1, 0xdc, 0xd1, 0xee, 0xf1, 0xf1, 0xfe, 0xee, 0x4e, 0xd7, 0x22, 0x6d, 0x68, 0xa8,
0x39, 0x67, 0xde, 0x12, 0x8c, 0xfd, 0x1c, 0x56, 0xa4, 0xbc, 0x69, 0x16, 0xac, 0xb9, 0x88, 0xd6, 0x3c, 0xcd, 0x0a, 0x2b, 0x6d, 0x6d, 0x6f, 0xef, 0x1e, 0x1e, 0xef, 0xee, 0x74, 0xab, 0xf6, 0x1f,
0xeb, 0xf4, 0x51, 0xa5, 0xa8, 0x8f, 0xec, 0x3f, 0xaf, 0xc2, 0x82, 0x58, 0xe9, 0xc2, 0x5d, 0x5e, 0x57, 0xa0, 0xa5, 0xd5, 0xfc, 0x9a, 0xe0, 0xcb, 0x4d, 0x00, 0xf4, 0x18, 0xb2, 0x6c, 0x8d, 0x9a,
0xbe, 0xce, 0x06, 0x8c, 0xf4, 0x8c, 0xbb, 0x7e, 0xa8, 0xbc, 0xc4, 0x2e, 0x54, 0xd8, 0x67, 0xaa, 0xa3, 0x41, 0x98, 0x46, 0x54, 0xbe, 0x74, 0x95, 0x5f, 0x58, 0x94, 0x65, 0x9c, 0x2b, 0xbc, 0x19,
0x65, 0xfb, 0x0c, 0x81, 0xda, 0xc4, 0x4b, 0xcf, 0x31, 0xc4, 0xd2, 0x74, 0xf0, 0xb7, 0x0c, 0x85, 0xa8, 0x1f, 0x51, 0xd4, 0x1d, 0x13, 0xc8, 0xf8, 0x48, 0x00, 0x30, 0x65, 0x90, 0x4b, 0x97, 0x0e,
0xd6, 0xcd, 0x50, 0x68, 0xd9, 0xcd, 0x65, 0x6e, 0x42, 0x15, 0x6f, 0x2e, 0xdf, 0x80, 0x26, 0x76, 0x62, 0xeb, 0x12, 0xd3, 0x24, 0x0a, 0x2e, 0x28, 0x27, 0xe1, 0xf6, 0x97, 0x01, 0x63, 0x6d, 0x09,
0x42, 0x3b, 0x5d, 0xcf, 0x00, 0x8c, 0x7b, 0x79, 0x01, 0x35, 0x84, 0xb8, 0x7a, 0x93, 0x41, 0xde, 0xf5, 0xa2, 0xa5, 0xf3, 0xd6, 0x1d, 0x13, 0x48, 0xbe, 0x2e, 0xd7, 0xa5, 0x81, 0xeb, 0xb2, 0x5a,
0x62, 0x67, 0xfb, 0x26, 0xcc, 0xf3, 0xbb, 0x1f, 0x22, 0x6f, 0xf8, 0x86, 0x3c, 0x61, 0xe4, 0x74, 0x9c, 0x64, 0x7d, 0x4d, 0xec, 0x14, 0xc8, 0xd6, 0x70, 0x28, 0xb0, 0xfa, 0xf5, 0xc7, 0x58, 0xbf,
0xf2, 0x2f, 0x4f, 0x40, 0x72, 0x04, 0xad, 0x7e, 0x73, 0xb4, 0x65, 0xde, 0x1c, 0xd5, 0x83, 0xb4, 0x6b, 0x2b, 0x15, 0x44, 0x89, 0x90, 0x56, 0xca, 0x85, 0xf4, 0xb5, 0xac, 0x6c, 0xef, 0x42, 0xeb,
0x6d, 0x33, 0x48, 0x6b, 0x3f, 0x82, 0x45, 0xa3, 0x3a, 0xa6, 0x59, 0x45, 0xde, 0x71, 0x77, 0x8e, 0x50, 0xbb, 0xbd, 0x8b, 0xfa, 0x4a, 0xde, 0xdb, 0x15, 0x7a, 0x4e, 0x83, 0x68, 0xdd, 0xa9, 0xe8,
0x2c, 0x42, 0xf3, 0xc9, 0xa1, 0xfb, 0xe8, 0xe0, 0xc9, 0xe3, 0xfd, 0x93, 0xae, 0xc5, 0x8a, 0xc7, 0xdd, 0xb1, 0xff, 0xd8, 0xe2, 0x17, 0xa2, 0x54, 0xf7, 0x79, 0xdb, 0x36, 0xb4, 0x55, 0x00, 0x3a,
0xcf, 0x76, 0x76, 0xf6, 0xf6, 0x76, 0x51, 0xd3, 0x02, 0xcc, 0x3f, 0xda, 0x7e, 0x72, 0x80, 0x7a, 0xcb, 0x54, 0x37, 0x60, 0x8c, 0x06, 0xbb, 0xe2, 0x46, 0xa7, 0xa7, 0x09, 0x95, 0x79, 0xa5, 0x06,
0x76, 0x97, 0xf3, 0xb6, 0xa8, 0x4b, 0x9d, 0xea, 0x7c, 0x1d, 0x88, 0xf4, 0xf1, 0x31, 0xff, 0x68, 0x4c, 0x1a, 0x8a, 0xcc, 0xf4, 0xf4, 0x79, 0x0b, 0x89, 0xc8, 0x2f, 0x2d, 0xc0, 0x19, 0x93, 0x88,
0x12, 0xd0, 0x54, 0xa6, 0xc4, 0x2f, 0x0b, 0xcc, 0x13, 0x85, 0x90, 0x37, 0x3a, 0xb2, 0x5a, 0x32, 0x38, 0xa3, 0xcc, 0xa8, 0x55, 0x65, 0x95, 0x50, 0x9f, 0x9f, 0xe5, 0x75, 0x68, 0xa8, 0x7a, 0xcd,
0x11, 0x11, 0x93, 0x94, 0x17, 0x11, 0x41, 0xea, 0x28, 0xbc, 0xdd, 0x87, 0xde, 0x2e, 0x65, 0xb5, 0x1d, 0x41, 0x52, 0x2a, 0x3c, 0xdb, 0x79, 0xd0, 0x81, 0x34, 0x3a, 0xcd, 0x79, 0xb5, 0x88, 0x20,
0x6d, 0x07, 0x41, 0xae, 0x3b, 0xcc, 0x51, 0x2b, 0xc1, 0x09, 0x2f, 0xee, 0xfb, 0x70, 0x6d, 0x9b, 0x1b, 0x40, 0x4e, 0xfd, 0x38, 0x4f, 0xce, 0x99, 0xb7, 0x04, 0x63, 0xbf, 0x80, 0x25, 0x29, 0x6f,
0x67, 0xbf, 0x7f, 0x59, 0xc9, 0x91, 0x76, 0x0f, 0xd6, 0xf2, 0x55, 0x8a, 0xc6, 0x1e, 0xc1, 0xf2, 0x9a, 0x05, 0x6b, 0x2e, 0xa2, 0xf5, 0x26, 0x7d, 0x54, 0x29, 0xea, 0x23, 0xfb, 0xd7, 0x55, 0x98,
0x2e, 0x3d, 0x9d, 0x8e, 0x0e, 0xe8, 0x45, 0xd6, 0x10, 0x81, 0x5a, 0x72, 0x1e, 0x5d, 0x8a, 0xf9, 0x13, 0x2b, 0x5d, 0xb8, 0x01, 0xce, 0xd7, 0xd9, 0x80, 0x91, 0x9e, 0x71, 0xd7, 0x0f, 0x95, 0x97,
0xc1, 0xdf, 0xe4, 0x5d, 0x80, 0x80, 0xd1, 0xb8, 0xc9, 0x84, 0x0e, 0xe4, 0x7d, 0x43, 0x84, 0x1c, 0xd8, 0x85, 0x0a, 0xfb, 0x4c, 0xb5, 0x6c, 0x9f, 0x21, 0x50, 0x1b, 0x7b, 0xe9, 0x39, 0x86, 0x58,
0x4f, 0xe8, 0xc0, 0xfe, 0x18, 0x88, 0x5e, 0x8f, 0x98, 0x2f, 0x66, 0x67, 0x4d, 0x4f, 0xdd, 0xe4, 0x9a, 0x0e, 0xfe, 0x96, 0xa1, 0xd0, 0xba, 0x19, 0x0a, 0x2d, 0xbb, 0xef, 0xce, 0x4d, 0xa8, 0xe2,
0x2a, 0x49, 0xe9, 0x58, 0x5e, 0xa4, 0xd4, 0x41, 0xf6, 0x1d, 0x68, 0x1f, 0x79, 0x57, 0x0e, 0xfd, 0x7d, 0xf7, 0x1b, 0xd0, 0xe4, 0x77, 0xa4, 0xb3, 0x68, 0x67, 0x06, 0x60, 0xdc, 0xcb, 0x0b, 0xa8,
0x99, 0xb8, 0xd3, 0xbe, 0x0e, 0x0b, 0x13, 0xef, 0x8a, 0xb1, 0xa0, 0x0a, 0xfa, 0x22, 0xda, 0xfe, 0x21, 0xc4, 0xd5, 0x9b, 0x0c, 0xf2, 0x05, 0x76, 0xb6, 0x6f, 0xc2, 0x2c, 0xbf, 0xfb, 0x21, 0xf2,
0xdf, 0x15, 0x98, 0xe7, 0x94, 0xac, 0xd6, 0x21, 0x4d, 0x52, 0x3f, 0x44, 0x49, 0x93, 0xb5, 0x6a, 0x86, 0x6f, 0xc8, 0x13, 0x46, 0x4e, 0x27, 0xff, 0xf2, 0x04, 0x24, 0x47, 0xd0, 0xea, 0x37, 0x47,
0xa0, 0x82, 0x6c, 0x57, 0x4a, 0x64, 0x5b, 0x44, 0x24, 0xe4, 0xdd, 0x2d, 0x21, 0xc0, 0x06, 0x8c, 0x5b, 0xe6, 0xcd, 0x51, 0x3d, 0x48, 0xdb, 0x36, 0x83, 0xb4, 0xf6, 0x63, 0x98, 0x37, 0xaa, 0x63,
0x49, 0x5a, 0x96, 0xe5, 0xcc, 0x43, 0x83, 0x19, 0x20, 0x77, 0x7c, 0x91, 0x59, 0x73, 0xbc, 0x7f, 0x9a, 0x55, 0xe4, 0x1d, 0x77, 0x67, 0xc8, 0x3c, 0x34, 0x9f, 0x1e, 0xb8, 0x8f, 0xf7, 0x9f, 0x3e,
0x52, 0x6d, 0x09, 0x31, 0xd6, 0x41, 0xa5, 0x36, 0xe3, 0x02, 0x97, 0xf6, 0x82, 0xcd, 0x58, 0xb0, 0xd9, 0x3b, 0xee, 0x5a, 0xac, 0x78, 0xf4, 0x7c, 0x7b, 0x7b, 0x77, 0x77, 0x07, 0x35, 0x2d, 0xc0,
0x0d, 0x1b, 0x6f, 0x60, 0x1b, 0xf2, 0x30, 0xc5, 0xab, 0x6c, 0x43, 0x78, 0x03, 0xdb, 0xd0, 0x26, 0xec, 0xe3, 0xad, 0xa7, 0xfb, 0xa8, 0x67, 0x77, 0x38, 0x6f, 0x8b, 0xba, 0xd4, 0xa9, 0xce, 0xd7,
0xd0, 0xc5, 0x4b, 0xe1, 0xcc, 0xfb, 0x90, 0xbc, 0xfb, 0x8f, 0x2c, 0xe8, 0x0a, 0x2e, 0x52, 0x38, 0x81, 0x48, 0x1f, 0x1f, 0xf3, 0x8f, 0xc6, 0x01, 0x4d, 0x65, 0x4a, 0xfc, 0xa2, 0xc0, 0x3c, 0x55,
0xf2, 0xbe, 0xe1, 0x65, 0x95, 0xde, 0x51, 0xba, 0x0d, 0x8b, 0xe8, 0xfb, 0x28, 0x15, 0x20, 0x0e, 0x08, 0x79, 0xa3, 0x23, 0xab, 0x25, 0x13, 0x11, 0x31, 0x49, 0x79, 0x11, 0x11, 0xa4, 0x8e, 0xc2,
0x95, 0x0c, 0x20, 0x1b, 0x87, 0xcc, 0x91, 0x19, 0xfb, 0x81, 0x58, 0x14, 0x1d, 0x24, 0xb5, 0x48, 0xdb, 0x7d, 0xe8, 0xed, 0x50, 0x56, 0xdb, 0x56, 0x10, 0xe4, 0xba, 0xc3, 0x1c, 0xb5, 0x12, 0x9c,
0xec, 0x89, 0x6c, 0x5d, 0xcb, 0x51, 0x65, 0xfb, 0xd7, 0x16, 0x2c, 0x6b, 0x1d, 0x16, 0x5c, 0xf8, 0xf0, 0xe2, 0xbe, 0x07, 0xd7, 0xb6, 0x78, 0xf6, 0xfb, 0x97, 0x95, 0x1c, 0x69, 0xf7, 0x60, 0x25,
0x29, 0x48, 0x69, 0xe0, 0xa7, 0x22, 0x5c, 0x72, 0xd7, 0x4d, 0xb1, 0xc9, 0x3e, 0x33, 0x88, 0x71, 0x5f, 0xa5, 0x68, 0xec, 0x31, 0x2c, 0xee, 0xd0, 0x93, 0xc9, 0xd9, 0x3e, 0xbd, 0xc8, 0x1a, 0x22,
0x31, 0xbd, 0x2b, 0xec, 0x60, 0x32, 0x1d, 0x8b, 0x5d, 0x45, 0x07, 0x31, 0x46, 0xba, 0xa4, 0xf4, 0x50, 0x4b, 0xce, 0xa3, 0x4b, 0x31, 0x3f, 0xf8, 0x9b, 0xbc, 0x0b, 0x10, 0x30, 0x1a, 0x37, 0x19,
0x85, 0x22, 0xe1, 0xfb, 0x9a, 0x01, 0xc3, 0xf8, 0x30, 0xf3, 0xd9, 0x14, 0x51, 0x4d, 0xc4, 0x87, 0xd3, 0x81, 0xbc, 0x6f, 0x88, 0x90, 0xa3, 0x31, 0x1d, 0xd8, 0x1f, 0x02, 0xd1, 0xeb, 0x11, 0xf3,
0x75, 0xa0, 0xfd, 0xd7, 0x2b, 0xb0, 0xc2, 0x9d, 0x6f, 0x11, 0xf0, 0x50, 0xd7, 0x5f, 0xe7, 0x79, 0xc5, 0xec, 0xac, 0xc9, 0x89, 0x9b, 0x5c, 0x25, 0x29, 0x1d, 0xc9, 0x8b, 0x94, 0x3a, 0xc8, 0xbe,
0x0c, 0x82, 0x4b, 0xe4, 0xfe, 0x9c, 0x23, 0xca, 0xe4, 0x5b, 0x6f, 0x18, 0x30, 0x50, 0x29, 0xc4, 0x0b, 0xed, 0x43, 0xef, 0xca, 0xa1, 0x3f, 0x15, 0x2f, 0x21, 0xac, 0xc2, 0xdc, 0xd8, 0xbb, 0x62,
0x33, 0xd6, 0xa2, 0x5a, 0xb6, 0x16, 0xaf, 0x98, 0xe9, 0xb2, 0x50, 0x7d, 0xbd, 0x3c, 0x54, 0xff, 0x2c, 0xa8, 0x82, 0xbe, 0x88, 0xb6, 0xff, 0x4f, 0x05, 0x66, 0x39, 0x25, 0xab, 0x75, 0x48, 0x93,
0x46, 0xa1, 0xf1, 0x87, 0x0b, 0x50, 0x4f, 0x06, 0xd1, 0x84, 0xda, 0x6b, 0xb0, 0x6a, 0x4e, 0x81, 0xd4, 0x0f, 0x51, 0xd2, 0x64, 0xad, 0x1a, 0xa8, 0x20, 0xdb, 0x95, 0x12, 0xd9, 0x16, 0x11, 0x09,
0x50, 0x54, 0xbf, 0xb4, 0xa0, 0xf7, 0x88, 0x1f, 0xf9, 0xf9, 0xe1, 0x68, 0xdf, 0x4f, 0xd2, 0x28, 0x79, 0x77, 0x4b, 0x08, 0xb0, 0x01, 0x63, 0x92, 0x96, 0x65, 0x39, 0xf3, 0xd0, 0x60, 0x06, 0xc8,
0x56, 0x6f, 0x09, 0xdc, 0x04, 0x48, 0x52, 0x2f, 0x16, 0x06, 0xad, 0x08, 0x93, 0x67, 0x10, 0x36, 0x1d, 0x5f, 0x64, 0xd6, 0x1c, 0xef, 0x9f, 0x54, 0x5b, 0x42, 0x8c, 0x75, 0x50, 0xa9, 0xcd, 0x38,
0x12, 0x1a, 0x0e, 0x39, 0x96, 0xaf, 0xa0, 0x2a, 0x17, 0x4c, 0x2f, 0x11, 0x44, 0x30, 0x0c, 0x98, 0xc7, 0xa5, 0xbd, 0x60, 0x33, 0x16, 0x6c, 0xc3, 0xc6, 0x5b, 0xd8, 0x86, 0x3c, 0x4c, 0xf1, 0x3a,
0x0f, 0x78, 0xe2, 0x3d, 0xeb, 0x32, 0xbd, 0x40, 0xed, 0xcf, 0xbd, 0xf3, 0x1c, 0xd4, 0xfe, 0x2f, 0xdb, 0x10, 0xde, 0xc2, 0x36, 0xb4, 0x09, 0x74, 0xf1, 0x52, 0x38, 0xf3, 0x3e, 0x24, 0xef, 0xfe,
0x16, 0x2c, 0x65, 0x9d, 0xc4, 0x04, 0x11, 0x53, 0x87, 0x08, 0xab, 0x25, 0xd3, 0x21, 0x32, 0x80, 0x43, 0x0b, 0xba, 0x82, 0x8b, 0x14, 0x8e, 0xbc, 0x67, 0x78, 0x59, 0xa5, 0x77, 0x94, 0x6e, 0xc3,
0xef, 0x33, 0x33, 0x46, 0x5a, 0xfb, 0x19, 0x04, 0xe5, 0x5a, 0x94, 0xa2, 0xa9, 0xb4, 0x0b, 0x75, 0x3c, 0xfa, 0x3e, 0x4a, 0x05, 0x88, 0x43, 0x25, 0x03, 0xc8, 0xc6, 0x21, 0x73, 0x64, 0x46, 0x7e,
0x10, 0x4f, 0xa3, 0x65, 0x06, 0x94, 0x30, 0x06, 0x45, 0x09, 0xaf, 0x30, 0x8d, 0x53, 0xfc, 0x8a, 0x20, 0x16, 0x45, 0x07, 0x49, 0x2d, 0x12, 0x7b, 0x22, 0x5b, 0xd7, 0x72, 0x54, 0xd9, 0xfe, 0x95,
0xcf, 0xb8, 0x2c, 0x92, 0x2e, 0xb7, 0x40, 0x16, 0xf8, 0x19, 0x24, 0xb3, 0x3e, 0xf4, 0x9d, 0xb9, 0x05, 0x8b, 0x5a, 0x87, 0x05, 0x17, 0x7e, 0x0c, 0x6d, 0xf5, 0xf6, 0x02, 0x55, 0x9b, 0xdb, 0xaa,
0xc1, 0xe7, 0x47, 0xed, 0xcc, 0x7f, 0xd7, 0x82, 0xeb, 0x25, 0x13, 0x2f, 0x64, 0x6b, 0x17, 0x96, 0x29, 0x36, 0xd9, 0x67, 0x06, 0x31, 0x2e, 0xa6, 0x77, 0x85, 0x1d, 0x4c, 0x26, 0x23, 0xb1, 0xab,
0xcf, 0x14, 0x52, 0x4e, 0x0e, 0x17, 0xb0, 0x35, 0x99, 0xe1, 0x60, 0x4e, 0x88, 0x53, 0xfc, 0x40, 0xe8, 0x20, 0xc6, 0x48, 0x97, 0x94, 0xbe, 0x54, 0x24, 0x7c, 0x5f, 0x33, 0x60, 0x18, 0x1f, 0x66,
0x99, 0x93, 0x7c, 0xba, 0x8d, 0x44, 0xf5, 0x22, 0xc2, 0x3e, 0x82, 0xfe, 0xde, 0x4b, 0x26, 0xaa, 0x3e, 0x9b, 0x22, 0xaa, 0x89, 0xf8, 0xb0, 0x0e, 0xb4, 0xff, 0x7a, 0x05, 0x96, 0xb8, 0xf3, 0x2d,
0x3b, 0xfa, 0x53, 0x5c, 0x92, 0x17, 0xee, 0x17, 0x54, 0xd1, 0xeb, 0x03, 0x3e, 0x67, 0xb0, 0x68, 0x02, 0x1e, 0xea, 0xfa, 0xeb, 0x2c, 0x8f, 0x41, 0x70, 0x89, 0xdc, 0x9b, 0x71, 0x44, 0x99, 0x7c,
0xd4, 0x45, 0xbe, 0xf1, 0xa6, 0x95, 0xe8, 0x52, 0x25, 0xd7, 0x8a, 0xbf, 0x25, 0x26, 0xd3, 0xe5, 0xeb, 0x2d, 0x03, 0x06, 0x2a, 0x85, 0x78, 0xca, 0x5a, 0x54, 0xcb, 0xd6, 0xe2, 0x35, 0x33, 0x5d,
0x35, 0x90, 0x7d, 0x01, 0x4b, 0x9f, 0x4d, 0x83, 0xd4, 0xcf, 0xde, 0x15, 0x23, 0xdf, 0x12, 0x1f, 0x16, 0xaa, 0xaf, 0x97, 0x87, 0xea, 0xdf, 0x2a, 0x34, 0xfe, 0x68, 0x0e, 0xea, 0xc9, 0x20, 0x1a,
0x61, 0x15, 0x72, 0xea, 0x4a, 0x9b, 0xd2, 0xe9, 0xd8, 0x8c, 0x8d, 0x59, 0x4d, 0x6e, 0xb1, 0xc5, 0x53, 0x7b, 0x05, 0x96, 0xcd, 0x29, 0x10, 0x8a, 0xea, 0x17, 0x16, 0xf4, 0x1e, 0xf3, 0x23, 0x3f,
0x22, 0xc2, 0xbe, 0x0e, 0xeb, 0x59, 0x93, 0x7c, 0xee, 0xa4, 0x3a, 0xff, 0x95, 0xc5, 0xf3, 0xbe, 0x3f, 0x3c, 0xdb, 0xf3, 0x93, 0x34, 0x8a, 0xd5, 0x5b, 0x02, 0x37, 0x01, 0x92, 0xd4, 0x8b, 0x85,
0xcc, 0x67, 0xce, 0xc8, 0x63, 0x58, 0x49, 0xfc, 0x70, 0x14, 0x50, 0xbd, 0x9e, 0x44, 0xcc, 0xc4, 0x41, 0x2b, 0xc2, 0xe4, 0x19, 0x84, 0x8d, 0x84, 0x86, 0x43, 0x8e, 0xe5, 0x2b, 0xa8, 0xca, 0x05,
0x35, 0xb3, 0x7b, 0xe2, 0x29, 0x34, 0xa7, 0xec, 0x0b, 0xc6, 0x20, 0xe5, 0x1d, 0xcd, 0x18, 0x24, 0xd3, 0x4b, 0x04, 0x11, 0x0c, 0x03, 0xe6, 0x0e, 0x4f, 0xbc, 0x67, 0x5d, 0xa6, 0x17, 0xa8, 0xfd,
0x37, 0x25, 0x65, 0x03, 0xf8, 0x2e, 0x74, 0xcc, 0xc6, 0xc8, 0x03, 0x91, 0xe9, 0x9e, 0xf5, 0x4c, 0xb9, 0x77, 0x9e, 0x83, 0xda, 0xff, 0xd9, 0x82, 0x85, 0xac, 0x93, 0x98, 0x20, 0x62, 0xea, 0x10,
0x3f, 0x95, 0x31, 0x39, 0xc3, 0xa0, 0xb4, 0x7f, 0x61, 0x41, 0xcf, 0xa1, 0x8c, 0x8d, 0xa9, 0xd6, 0x61, 0xb5, 0x64, 0x3a, 0x44, 0x06, 0xf0, 0x7d, 0x66, 0xc6, 0x48, 0x6b, 0x3f, 0x83, 0xa0, 0x5c,
0xa8, 0xe0, 0x9e, 0x4f, 0x0b, 0xd5, 0xce, 0x1e, 0xb0, 0xca, 0xa0, 0x97, 0x63, 0xdd, 0x9c, 0xb9, 0x8b, 0x52, 0x34, 0x91, 0x76, 0xa1, 0x0e, 0xe2, 0x69, 0xb4, 0xcc, 0x80, 0x12, 0xc6, 0xa0, 0x28,
0x28, 0xfb, 0x73, 0x25, 0xa3, 0x7a, 0xd8, 0x80, 0x79, 0x31, 0xbe, 0x75, 0xb8, 0x26, 0xba, 0x24, 0xe1, 0x15, 0xa6, 0x51, 0x8a, 0x5f, 0xf1, 0x19, 0x97, 0x45, 0xd2, 0xe5, 0x16, 0x08, 0x7f, 0x57,
0xbb, 0x93, 0x85, 0xf4, 0x8d, 0x46, 0x8d, 0x90, 0x7e, 0x1f, 0x7a, 0xfc, 0x91, 0x07, 0x7d, 0x1c, 0x05, 0xad, 0x0f, 0x7d, 0x67, 0x6e, 0xa8, 0x47, 0x50, 0xf8, 0xce, 0xfc, 0x77, 0x2d, 0xb8, 0x5e,
0xfc, 0xc3, 0x8d, 0x2f, 0xa0, 0xa5, 0x3d, 0x75, 0x41, 0xd6, 0x61, 0xe5, 0xf9, 0x93, 0x93, 0xc3, 0x32, 0xf1, 0x42, 0xb6, 0x76, 0x60, 0xf1, 0x54, 0x21, 0xe5, 0xe4, 0x70, 0x01, 0x5b, 0x91, 0x19,
0xbd, 0xe3, 0x63, 0xf7, 0xe8, 0xd9, 0xc3, 0xef, 0xed, 0xfd, 0xd0, 0xdd, 0xdf, 0x3e, 0xde, 0xef, 0x0e, 0xe6, 0x84, 0x38, 0xc5, 0x0f, 0x94, 0x39, 0xc9, 0xa7, 0xdb, 0x48, 0x54, 0x2f, 0x22, 0xec,
0xce, 0x91, 0x35, 0x20, 0x87, 0x7b, 0xc7, 0x27, 0x7b, 0xbb, 0x06, 0xdc, 0x22, 0x37, 0xa1, 0xff, 0x43, 0xe8, 0xef, 0xbe, 0x62, 0xa2, 0xba, 0xad, 0x3f, 0xe0, 0x26, 0x79, 0xe1, 0x41, 0x41, 0x15,
0xec, 0xf0, 0xd9, 0xf1, 0xde, 0xae, 0x5b, 0xf6, 0x5d, 0x85, 0xbc, 0x0b, 0xd7, 0x05, 0xbe, 0xe4, 0xbd, 0x39, 0xe0, 0x73, 0x0a, 0xf3, 0x46, 0x5d, 0xe4, 0x1b, 0x6f, 0x5b, 0x89, 0x2e, 0x55, 0x72,
0xf3, 0xea, 0xc6, 0xb7, 0xa1, 0x9b, 0xf7, 0xf1, 0x8d, 0x88, 0x48, 0x2e, 0x74, 0xb2, 0x08, 0x4d, 0xad, 0xf8, 0x0b, 0x74, 0x32, 0x5d, 0x5e, 0x03, 0xd9, 0x17, 0xb0, 0xf0, 0xe9, 0x24, 0x48, 0xfd,
0x1e, 0x3a, 0xc1, 0xd8, 0xc9, 0xfd, 0x5f, 0x54, 0xa1, 0xc3, 0x93, 0xd7, 0xf8, 0xdb, 0x7a, 0x34, 0xec, 0x35, 0x3a, 0xf2, 0x2d, 0xf1, 0x11, 0x56, 0x21, 0xa7, 0xae, 0xb4, 0x29, 0x9d, 0x8e, 0xcd,
0x26, 0x9f, 0xc1, 0x82, 0x78, 0xa4, 0x91, 0xc8, 0xd5, 0x30, 0x9f, 0x85, 0xec, 0xaf, 0xe5, 0xc1, 0xd8, 0x88, 0xd5, 0xe4, 0x16, 0x5b, 0x2c, 0x22, 0xec, 0xeb, 0xb0, 0x9a, 0x35, 0xc9, 0xe7, 0x4e,
0x62, 0x0a, 0x57, 0xfe, 0xc6, 0x9f, 0xfd, 0x8f, 0xbf, 0x5f, 0x59, 0x24, 0xad, 0xad, 0x8b, 0x8f, 0xaa, 0xf3, 0x5f, 0x5a, 0x3c, 0xef, 0xcb, 0x7c, 0x1c, 0x8f, 0x3c, 0x81, 0xa5, 0xc4, 0x0f, 0xcf,
0xb6, 0x46, 0x34, 0x4c, 0x58, 0x1d, 0x7f, 0x08, 0x90, 0x3d, 0x3d, 0x48, 0x7a, 0xca, 0xd1, 0xcd, 0x02, 0xaa, 0xd7, 0x93, 0x88, 0x99, 0xb8, 0x66, 0x76, 0x4f, 0x3c, 0xa0, 0xe7, 0x94, 0x7d, 0xc1,
0xbd, 0xcb, 0xd8, 0xbf, 0x5e, 0x82, 0x11, 0xf5, 0x5e, 0xc7, 0x7a, 0x57, 0xec, 0x0e, 0xab, 0xd7, 0x18, 0xa4, 0xbc, 0xa3, 0x19, 0x83, 0xe4, 0xa6, 0xa4, 0x6c, 0x00, 0xdf, 0x85, 0x8e, 0xd9, 0x18,
0x0f, 0xfd, 0x94, 0x3f, 0x43, 0xf8, 0x89, 0xb5, 0x41, 0x86, 0xd0, 0xd6, 0x1f, 0x05, 0x24, 0xf2, 0x79, 0x28, 0x32, 0xdd, 0xb3, 0x9e, 0xe9, 0xa7, 0x32, 0x26, 0x67, 0x18, 0x94, 0xf6, 0xcf, 0x2d,
0x50, 0xa3, 0xe4, 0x59, 0xc3, 0xfe, 0x3b, 0xa5, 0x38, 0xb9, 0xfc, 0xd8, 0xc6, 0x35, 0xbb, 0xcb, 0xe8, 0x39, 0x94, 0xb1, 0x31, 0xd5, 0x1a, 0x15, 0xdc, 0xf3, 0x71, 0xa1, 0xda, 0xe9, 0x03, 0x56,
0xda, 0x98, 0x22, 0x45, 0xd6, 0x4a, 0xc0, 0x85, 0x22, 0x7b, 0xfb, 0x8f, 0xdc, 0xd0, 0xf8, 0xb4, 0x19, 0xf4, 0x72, 0xac, 0x1b, 0x53, 0x17, 0x65, 0x6f, 0xa6, 0x64, 0x54, 0x8f, 0x1a, 0x30, 0x2b,
0xf0, 0xf2, 0x60, 0xff, 0xdd, 0x19, 0x58, 0xd1, 0xd6, 0xbb, 0xd8, 0xd6, 0xba, 0x4d, 0x58, 0x5b, 0xc6, 0xb7, 0x0a, 0xd7, 0x44, 0x97, 0x64, 0x77, 0xb2, 0x90, 0xbe, 0xd1, 0xa8, 0x11, 0xd2, 0xef,
0x03, 0xa4, 0x91, 0x2f, 0x0f, 0x7e, 0x62, 0x6d, 0xdc, 0xff, 0x07, 0x1f, 0x40, 0x53, 0x1d, 0x76, 0x43, 0x8f, 0x3f, 0xf2, 0xa0, 0x8f, 0x83, 0x7f, 0xb8, 0xfe, 0x39, 0xb4, 0xb4, 0xa7, 0x2e, 0xc8,
0x92, 0x9f, 0xc2, 0xa2, 0x91, 0x5d, 0x48, 0xe4, 0x30, 0xca, 0x92, 0x11, 0xfb, 0x37, 0xca, 0x91, 0x2a, 0x2c, 0xbd, 0x78, 0x7a, 0x7c, 0xb0, 0x7b, 0x74, 0xe4, 0x1e, 0x3e, 0x7f, 0xf4, 0xc9, 0xee,
0xa2, 0xe1, 0x9b, 0xd8, 0x70, 0x8f, 0xac, 0xb1, 0x86, 0x45, 0x7a, 0xde, 0x16, 0xe6, 0xc9, 0xf2, 0x0f, 0xdc, 0xbd, 0xad, 0xa3, 0xbd, 0xee, 0x0c, 0x59, 0x01, 0x72, 0xb0, 0x7b, 0x74, 0xbc, 0xbb,
0x6b, 0x76, 0x2f, 0x34, 0xe1, 0xe7, 0x8d, 0xdd, 0xc8, 0xcb, 0xa3, 0xd1, 0xda, 0xbb, 0x33, 0xb0, 0x63, 0xc0, 0x2d, 0x72, 0x13, 0xfa, 0xcf, 0x0f, 0x9e, 0x1f, 0xed, 0xee, 0xb8, 0x65, 0xdf, 0x55,
0xa2, 0xb9, 0x1b, 0xd8, 0xdc, 0x1a, 0x59, 0xd5, 0x9b, 0x53, 0x87, 0x90, 0x14, 0xef, 0x96, 0xea, 0xc8, 0xbb, 0x70, 0x5d, 0xe0, 0x4b, 0x3e, 0xaf, 0xae, 0x7f, 0x1b, 0xba, 0x79, 0x1f, 0xdf, 0x88,
0xcf, 0xe2, 0x91, 0x77, 0x15, 0x63, 0x95, 0x3d, 0x97, 0xa7, 0x58, 0xa4, 0xf8, 0x66, 0x9e, 0xdd, 0x88, 0xe4, 0x42, 0x27, 0xf3, 0xd0, 0xe4, 0xa1, 0x13, 0x8c, 0x9d, 0x3c, 0xf8, 0x79, 0x15, 0x3a,
0xc3, 0xa6, 0x08, 0xc1, 0xe5, 0xd3, 0x5f, 0xc5, 0x23, 0xa7, 0xd0, 0xd2, 0x9e, 0x5d, 0x22, 0xd7, 0x3c, 0x79, 0x8d, 0xbf, 0xc8, 0x48, 0x63, 0xf2, 0x29, 0xcc, 0x89, 0xa7, 0x3d, 0x89, 0x5c, 0x0d,
0x67, 0x3e, 0x11, 0xd5, 0xef, 0x97, 0xa1, 0xca, 0x86, 0xa2, 0xd7, 0xbf, 0xc5, 0x76, 0xf5, 0x1f, 0xf3, 0x31, 0xd1, 0xfe, 0x4a, 0x1e, 0x2c, 0xa6, 0x70, 0xe9, 0x6f, 0xfc, 0xd9, 0xff, 0xf8, 0xfb,
0x43, 0x53, 0x3d, 0xe4, 0x43, 0xd6, 0xb5, 0x87, 0x95, 0xf4, 0x87, 0x87, 0xfa, 0xbd, 0x22, 0xa2, 0x95, 0x79, 0xd2, 0xda, 0xbc, 0xf8, 0x60, 0xf3, 0x8c, 0x86, 0x09, 0xab, 0xe3, 0x0f, 0x01, 0xb2,
0x8c, 0xf9, 0xf4, 0xda, 0x19, 0xf3, 0x3d, 0x87, 0x96, 0xf6, 0x58, 0x8f, 0x1a, 0x40, 0xf1, 0x41, 0x07, 0x2b, 0x49, 0x4f, 0x39, 0xba, 0xb9, 0xd7, 0x3c, 0xfb, 0xd7, 0x4b, 0x30, 0xa2, 0xde, 0xeb,
0x20, 0x35, 0x80, 0x92, 0xb7, 0x7d, 0xec, 0x65, 0x6c, 0xa2, 0x45, 0x9a, 0xc8, 0xdf, 0xe9, 0xcb, 0x58, 0xef, 0x92, 0xdd, 0x61, 0xf5, 0xfa, 0xa1, 0x9f, 0xf2, 0xc7, 0x2b, 0x3f, 0xb2, 0xd6, 0xc9,
0x28, 0x21, 0x07, 0x70, 0x4d, 0x28, 0xb9, 0x53, 0xfa, 0x36, 0xcb, 0x50, 0xf2, 0x12, 0xe1, 0x3d, 0x10, 0xda, 0xfa, 0x53, 0x92, 0x44, 0x1e, 0x6a, 0x94, 0x3c, 0x86, 0xd9, 0x7f, 0xa7, 0x14, 0x27,
0x8b, 0x7c, 0x0a, 0x0d, 0xf9, 0x26, 0x13, 0x59, 0x2b, 0x7f, 0x5b, 0xaa, 0xbf, 0x5e, 0x80, 0x0b, 0x97, 0x1f, 0xdb, 0xb8, 0x66, 0x77, 0x59, 0x1b, 0x13, 0xa4, 0xc8, 0x5a, 0x09, 0xb8, 0x50, 0x64,
0xe3, 0xe6, 0x87, 0x00, 0xd9, 0xcb, 0x40, 0x4a, 0x49, 0x14, 0x5e, 0x1a, 0x52, 0x1c, 0x50, 0x7c, 0x2f, 0x46, 0x92, 0x1b, 0x1a, 0x9f, 0x16, 0xde, 0xab, 0xec, 0xbf, 0x3b, 0x05, 0x2b, 0xda, 0x7a,
0x46, 0xc8, 0x5e, 0xc3, 0x01, 0x76, 0x09, 0x2a, 0x89, 0x90, 0x5e, 0xca, 0x6b, 0xe4, 0x3f, 0x81, 0x17, 0xdb, 0x5a, 0xb5, 0x09, 0x6b, 0x6b, 0x80, 0x34, 0xf2, 0xbd, 0xca, 0x8f, 0xac, 0xf5, 0x07,
0x96, 0xf6, 0x38, 0x90, 0x9a, 0xbe, 0xe2, 0xc3, 0x42, 0x6a, 0xfa, 0x4a, 0xde, 0x12, 0xb2, 0xfb, 0xff, 0xeb, 0x0e, 0x34, 0xd5, 0x61, 0x27, 0xf9, 0x09, 0xcc, 0x1b, 0xd9, 0x85, 0x44, 0x0e, 0xa3,
0x58, 0xfb, 0xaa, 0xbd, 0xc4, 0x6a, 0x4f, 0xfc, 0x51, 0x38, 0xe6, 0x04, 0x6c, 0x81, 0xce, 0x61, 0x2c, 0x19, 0xb1, 0x7f, 0xa3, 0x1c, 0x29, 0x1a, 0xbe, 0x89, 0x0d, 0xf7, 0xc8, 0x0a, 0x6b, 0x58,
0xd1, 0x78, 0x01, 0x48, 0x49, 0x68, 0xd9, 0xfb, 0x42, 0x4a, 0x42, 0x4b, 0x1f, 0x0d, 0x92, 0x7c, 0xa4, 0xe7, 0x6d, 0x62, 0x9e, 0x2c, 0xbf, 0x66, 0xf7, 0x52, 0x13, 0x7e, 0xde, 0xd8, 0x8d, 0xbc,
0x66, 0x2f, 0xb3, 0x76, 0x2e, 0x90, 0x44, 0x6b, 0xe9, 0x47, 0xd0, 0xd2, 0x5e, 0xf3, 0x51, 0x63, 0x3c, 0x1a, 0xad, 0xbd, 0x3b, 0x05, 0x2b, 0x9a, 0xbb, 0x81, 0xcd, 0xad, 0x90, 0x65, 0xbd, 0x39,
0x29, 0x3e, 0x1c, 0xa4, 0xc6, 0x52, 0xf6, 0xf8, 0xcf, 0x2a, 0xb6, 0xd1, 0xb1, 0x91, 0x15, 0xf0, 0x75, 0x08, 0x49, 0xf1, 0x6e, 0xa9, 0xfe, 0x98, 0x22, 0x79, 0x57, 0x31, 0x56, 0xd9, 0x23, 0x8b,
0x42, 0x34, 0xab, 0xfb, 0xa7, 0xd0, 0x31, 0xdf, 0xf7, 0x51, 0xb2, 0x5f, 0xfa, 0x52, 0x90, 0x92, 0x8a, 0x45, 0x8a, 0x2f, 0x2d, 0xda, 0x3d, 0x6c, 0x8a, 0x10, 0x5c, 0x3e, 0xfd, 0x2d, 0x45, 0x72,
0xfd, 0x19, 0x8f, 0x02, 0x09, 0x96, 0xde, 0x58, 0x51, 0x8d, 0x6c, 0x7d, 0x2e, 0x52, 0xa5, 0xbe, 0x02, 0x2d, 0xed, 0xd9, 0x25, 0x72, 0x7d, 0xea, 0x13, 0x51, 0xfd, 0x7e, 0x19, 0xaa, 0x6c, 0x28,
0x20, 0xdf, 0x67, 0x0a, 0x4e, 0xdc, 0x50, 0x27, 0xeb, 0x1a, 0xd7, 0xea, 0xf7, 0xd8, 0x95, 0xbc, 0x7a, 0xfd, 0x9b, 0x6c, 0x57, 0xff, 0x11, 0x34, 0xd5, 0x43, 0x3e, 0x64, 0x55, 0x7b, 0x58, 0x49,
0x14, 0x2e, 0xb3, 0x9b, 0xcc, 0xcc, 0xaf, 0x74, 0xe3, 0xae, 0x85, 0x37, 0xd5, 0xb5, 0x5d, 0x4b, 0x7f, 0x78, 0xa8, 0xdf, 0x2b, 0x22, 0xca, 0x98, 0x4f, 0xaf, 0x9d, 0x31, 0xdf, 0x0b, 0x68, 0x69,
0xbf, 0xcc, 0xae, 0xed, 0x5a, 0xc6, 0x85, 0xf6, 0xfc, 0xae, 0x95, 0xfa, 0xac, 0x8e, 0x10, 0x96, 0x8f, 0xf5, 0xa8, 0x01, 0x14, 0x1f, 0x04, 0x52, 0x03, 0x28, 0x79, 0xdb, 0xc7, 0x5e, 0xc4, 0x26,
0x72, 0x37, 0x20, 0x94, 0x54, 0x94, 0x5f, 0x52, 0xeb, 0xdf, 0x7c, 0xf5, 0xc5, 0x09, 0x53, 0x83, 0x5a, 0xa4, 0x89, 0xfc, 0x9d, 0xbe, 0x8a, 0x12, 0xb2, 0x0f, 0xd7, 0x84, 0x92, 0x3b, 0xa1, 0x5f,
0x48, 0x25, 0xb8, 0x25, 0xaf, 0x04, 0xfe, 0x15, 0x68, 0xeb, 0x2f, 0x9b, 0x10, 0x5d, 0x94, 0xf3, 0x64, 0x19, 0x4a, 0xde, 0xaf, 0xbc, 0x6f, 0x91, 0x8f, 0xa1, 0x21, 0xdf, 0x64, 0x22, 0x2b, 0xe5,
0x2d, 0xbd, 0x53, 0x8a, 0x33, 0x17, 0x97, 0xb4, 0xf5, 0x66, 0xc8, 0x0f, 0x60, 0x4d, 0x89, 0xba, 0x6f, 0x4b, 0xf5, 0x57, 0x0b, 0x70, 0x61, 0xdc, 0xfc, 0x00, 0x20, 0x7b, 0x19, 0x48, 0x29, 0x89,
0x9e, 0x54, 0x9f, 0x90, 0xf7, 0x4a, 0x52, 0xed, 0x75, 0xd3, 0xa7, 0x7f, 0x7d, 0x66, 0x2e, 0xfe, 0xc2, 0x4b, 0x43, 0x8a, 0x03, 0x8a, 0xcf, 0x08, 0xd9, 0x2b, 0x38, 0xc0, 0x2e, 0x41, 0x25, 0x11,
0x3d, 0x8b, 0x31, 0x8d, 0xf9, 0x64, 0x44, 0xb6, 0x61, 0x94, 0xbd, 0x94, 0x91, 0x6d, 0x18, 0xa5, 0xd2, 0x4b, 0x79, 0x8d, 0xfc, 0xc7, 0xd0, 0xd2, 0x1e, 0x07, 0x52, 0xd3, 0x57, 0x7c, 0x58, 0x48,
0xef, 0x4c, 0x48, 0xa6, 0x21, 0x2b, 0xc6, 0x1c, 0xf1, 0x53, 0x66, 0xf2, 0x23, 0x58, 0xd2, 0xae, 0x4d, 0x5f, 0xc9, 0x5b, 0x42, 0x76, 0x1f, 0x6b, 0x5f, 0xb6, 0x17, 0x58, 0xed, 0x89, 0x7f, 0x16,
0x2d, 0x1d, 0x5f, 0x85, 0x03, 0x25, 0x00, 0xc5, 0x1b, 0xb5, 0xfd, 0x32, 0xc3, 0xde, 0x5e, 0xc7, 0x8e, 0x38, 0x01, 0x5b, 0xa0, 0x73, 0x98, 0x37, 0x5e, 0x00, 0x52, 0x12, 0x5a, 0xf6, 0xbe, 0x90,
0xfa, 0x97, 0x6d, 0x63, 0x72, 0x18, 0xf3, 0xef, 0x40, 0x4b, 0xbf, 0x12, 0xf5, 0x8a, 0x7a, 0xd7, 0x92, 0xd0, 0xd2, 0x47, 0x83, 0x24, 0x9f, 0xd9, 0x8b, 0xac, 0x9d, 0x0b, 0x24, 0xd1, 0x5a, 0xfa,
0x35, 0x94, 0x7e, 0x21, 0xf4, 0x9e, 0x45, 0xfe, 0xb1, 0x05, 0x6d, 0xe3, 0x82, 0x91, 0x91, 0x61, 0x21, 0xb4, 0xb4, 0xd7, 0x7c, 0xd4, 0x58, 0x8a, 0x0f, 0x07, 0xa9, 0xb1, 0x94, 0x3d, 0xfe, 0xb3,
0x91, 0xab, 0xa7, 0xa7, 0xe3, 0xf4, 0x8a, 0x6c, 0x07, 0x3b, 0x79, 0xb0, 0xf1, 0x5d, 0x63, 0x12, 0x8c, 0x6d, 0x74, 0x6c, 0x64, 0x05, 0xbc, 0x10, 0xcd, 0xea, 0xfe, 0x09, 0x74, 0xcc, 0xf7, 0x7d,
0x3e, 0x37, 0x62, 0x3c, 0x9b, 0xf9, 0x77, 0x20, 0xbf, 0xc8, 0x13, 0xe8, 0xb7, 0x8e, 0xbf, 0xb8, 0x94, 0xec, 0x97, 0xbe, 0x14, 0xa4, 0x64, 0x7f, 0xca, 0xa3, 0x40, 0x82, 0xa5, 0xd7, 0x97, 0x54,
0x67, 0x91, 0x3f, 0xb1, 0xa0, 0x63, 0x46, 0x26, 0xd5, 0x52, 0x95, 0xc6, 0x40, 0xd5, 0x52, 0xcd, 0x23, 0x9b, 0x9f, 0x89, 0x54, 0xa9, 0xcf, 0xc9, 0xf7, 0x98, 0x82, 0x13, 0x37, 0xd4, 0xc9, 0xaa,
0x08, 0x67, 0xfe, 0x08, 0x7b, 0x79, 0xb2, 0xe1, 0x18, 0xbd, 0x14, 0x8f, 0x89, 0xfc, 0x6e, 0xbd, 0xc6, 0xb5, 0xfa, 0x3d, 0x76, 0x25, 0x2f, 0x85, 0xcb, 0xec, 0x26, 0x33, 0xf3, 0x2b, 0xdd, 0xb8,
0x25, 0x9f, 0xf0, 0xe7, 0x67, 0xe5, 0xf9, 0x01, 0x29, 0x3e, 0x84, 0xaa, 0x96, 0x57, 0x7f, 0xba, 0x6b, 0xe1, 0x4d, 0x75, 0x6d, 0xd7, 0xd2, 0x2f, 0xb3, 0x6b, 0xbb, 0x96, 0x71, 0xa1, 0x3d, 0xbf,
0xf4, 0xae, 0x75, 0xcf, 0x22, 0x3f, 0xe1, 0xef, 0x1f, 0xca, 0x10, 0x37, 0xe3, 0x92, 0x37, 0xfd, 0x6b, 0xa5, 0x3e, 0xab, 0x23, 0x84, 0x85, 0xdc, 0x0d, 0x08, 0x25, 0x15, 0xe5, 0x97, 0xd4, 0xfa,
0xde, 0xbe, 0x8d, 0x63, 0xba, 0x69, 0x5f, 0x37, 0xc6, 0x94, 0xdf, 0x8f, 0xb7, 0x79, 0xef, 0xc4, 0x37, 0x5f, 0x7f, 0x71, 0xc2, 0xd4, 0x20, 0x52, 0x09, 0x6e, 0xca, 0x2b, 0x81, 0x7f, 0x05, 0xda,
0xab, 0xa3, 0xd9, 0x86, 0x52, 0x78, 0x89, 0x74, 0x76, 0x27, 0xc7, 0xbc, 0x93, 0x82, 0xdc, 0x60, 0xfa, 0xcb, 0x26, 0x44, 0x17, 0xe5, 0x7c, 0x4b, 0xef, 0x94, 0xe2, 0xcc, 0xc5, 0x25, 0x6d, 0xbd,
0xe5, 0x37, 0xac, 0xc6, 0xde, 0xc0, 0xbe, 0xde, 0xb6, 0xdf, 0x9b, 0xd9, 0xd7, 0x2d, 0x8c, 0x2f, 0x19, 0xf2, 0x7d, 0x58, 0x51, 0xa2, 0xae, 0x27, 0xd5, 0x27, 0xe4, 0x56, 0x49, 0xaa, 0xbd, 0x6e,
0xb2, 0x1e, 0x1f, 0x01, 0x64, 0x67, 0x7d, 0x24, 0x77, 0xd6, 0xa4, 0x04, 0xbc, 0x78, 0x1c, 0x68, 0xfa, 0xf4, 0xaf, 0x4f, 0xcd, 0xc5, 0xbf, 0x6f, 0x31, 0xa6, 0x31, 0x9f, 0x8c, 0xc8, 0x36, 0x8c,
0xca, 0x8b, 0x3c, 0x92, 0x62, 0x35, 0xfe, 0x98, 0xab, 0xab, 0x27, 0xf2, 0x94, 0x4a, 0x37, 0x4a, 0xb2, 0x97, 0x32, 0xb2, 0x0d, 0xa3, 0xf4, 0x9d, 0x09, 0xc9, 0x34, 0x64, 0xc9, 0x98, 0x23, 0x7e,
0xcc, 0x43, 0x39, 0xc3, 0x28, 0xc9, 0xd7, 0x6f, 0x28, 0x2b, 0x75, 0xe4, 0xf5, 0x0c, 0x16, 0x0f, 0xca, 0x4c, 0x7e, 0x08, 0x0b, 0xda, 0xb5, 0xa5, 0xa3, 0xab, 0x70, 0xa0, 0x04, 0xa0, 0x78, 0xa3,
0xa2, 0xe8, 0xc5, 0x74, 0xa2, 0x12, 0x21, 0xcc, 0xd0, 0xff, 0xbe, 0x97, 0x9c, 0xf7, 0x73, 0xa3, 0xb6, 0x5f, 0x66, 0xd8, 0xdb, 0xab, 0x58, 0xff, 0xa2, 0x6d, 0x4c, 0x0e, 0x63, 0xfe, 0x6d, 0x68,
0xb0, 0x6f, 0x61, 0x55, 0x7d, 0xd2, 0xd3, 0xaa, 0xda, 0xfa, 0x3c, 0x3b, 0x4b, 0xfc, 0x82, 0x78, 0xe9, 0x57, 0xa2, 0x5e, 0x53, 0xef, 0xaa, 0x86, 0xd2, 0x2f, 0x84, 0xde, 0xb7, 0xc8, 0x21, 0xcf,
0xb0, 0xac, 0x74, 0xa0, 0xea, 0x78, 0xdf, 0xac, 0xc6, 0xd0, 0x7c, 0xf9, 0x26, 0x0c, 0xeb, 0x59, 0x30, 0x52, 0x8f, 0x4a, 0x46, 0x71, 0x7e, 0xfb, 0x34, 0x1f, 0x9b, 0x54, 0x0b, 0x59, 0xf6, 0xcc,
0xf6, 0x76, 0x2b, 0x91, 0x75, 0xde, 0xb3, 0xc8, 0x11, 0xb4, 0x77, 0xe9, 0x00, 0xaf, 0x37, 0x60, 0xe8, 0x3d, 0xeb, 0xbe, 0x45, 0xfe, 0x91, 0x05, 0x6d, 0xe3, 0xca, 0x92, 0x91, 0xb3, 0x91, 0xeb,
0xfc, 0x7c, 0x25, 0xeb, 0xb8, 0x0a, 0xbc, 0xf7, 0x17, 0x0d, 0xa0, 0xb9, 0x2f, 0x4c, 0xbc, 0xab, 0x59, 0x4f, 0xc7, 0xe9, 0x5d, 0xb3, 0x1d, 0x1c, 0xf6, 0xfe, 0xfa, 0x77, 0x8d, 0x69, 0xfd, 0xcc,
0x98, 0xfe, 0x6c, 0xeb, 0x73, 0x11, 0x99, 0xff, 0x42, 0xee, 0x0b, 0xf2, 0xe8, 0xc2, 0xd8, 0x17, 0x88, 0x1a, 0x6d, 0xe4, 0x5f, 0x96, 0xfc, 0x3c, 0x4f, 0xa0, 0xdf, 0x63, 0xfe, 0xfc, 0xbe, 0x45,
0x72, 0x67, 0x1d, 0xc6, 0xbe, 0x50, 0x38, 0xeb, 0x30, 0xa6, 0x5a, 0x1e, 0x9d, 0x90, 0x00, 0x96, 0xfe, 0xc4, 0x82, 0x8e, 0x19, 0xeb, 0x54, 0xc3, 0x2d, 0x8d, 0xaa, 0xaa, 0xc5, 0x9f, 0x12, 0x20,
0x0b, 0xc7, 0x23, 0x6a, 0x4b, 0x98, 0x75, 0xa8, 0xd2, 0xbf, 0x35, 0x9b, 0xc0, 0x6c, 0x6d, 0xc3, 0xfd, 0x21, 0xf6, 0xf2, 0x78, 0xdd, 0x31, 0x7a, 0x29, 0x9e, 0x27, 0xf9, 0xdd, 0x7a, 0x4b, 0x3e,
0x6c, 0xed, 0x18, 0x16, 0x77, 0x29, 0x9f, 0x2c, 0x9e, 0xe9, 0x99, 0xbb, 0xa5, 0xa6, 0xe7, 0x91, 0xe2, 0xcf, 0x20, 0xcb, 0x13, 0x09, 0x52, 0x7c, 0x90, 0x57, 0x31, 0x8c, 0xfe, 0x84, 0x2e, 0x2e,
0xe6, 0x15, 0x38, 0xe2, 0xcc, 0x8d, 0x1f, 0xd3, 0x2c, 0xc9, 0x8f, 0xa1, 0xf5, 0x98, 0xa6, 0x32, 0xc2, 0x8f, 0xf9, 0x8b, 0x8a, 0x32, 0x68, 0xce, 0xf8, 0xee, 0x6d, 0xbf, 0xb7, 0x6f, 0xe3, 0x98,
0xb5, 0x53, 0x99, 0x9e, 0xb9, 0x5c, 0xcf, 0x7e, 0x49, 0x66, 0xa8, 0xc9, 0x33, 0x58, 0xdb, 0x16, 0x6e, 0xda, 0xd7, 0x8d, 0x31, 0xe5, 0x77, 0xf8, 0x2d, 0xde, 0x3b, 0xf1, 0xfa, 0x6d, 0xb6, 0x45,
0x1d, 0x8e, 0x28, 0x57, 0x4e, 0xae, 0x3f, 0xfc, 0x82, 0xfc, 0x65, 0xac, 0x5c, 0xe5, 0xb5, 0xaf, 0x15, 0x5e, 0xc4, 0x9d, 0xde, 0xc9, 0x11, 0xef, 0xa4, 0x20, 0x37, 0x84, 0xe3, 0x2d, 0xab, 0xb1,
0x69, 0xb9, 0x7a, 0x7a, 0xe5, 0x4b, 0x39, 0x78, 0x59, 0xcd, 0x61, 0x34, 0xa4, 0x9a, 0x09, 0x14, 0xd7, 0xb1, 0xaf, 0xb7, 0xed, 0x5b, 0x53, 0xfb, 0xba, 0x89, 0x11, 0x4b, 0xd6, 0xe3, 0x43, 0x80,
0x42, 0x4b, 0xbb, 0x7c, 0xa2, 0x04, 0xa8, 0x78, 0x13, 0x47, 0x09, 0x50, 0xc9, 0x5d, 0x15, 0xfb, 0xec, 0xf4, 0x90, 0xe4, 0x4e, 0xaf, 0x94, 0xca, 0x28, 0x1e, 0x30, 0x9a, 0x12, 0x28, 0x0f, 0xb9,
0x2e, 0xb6, 0x63, 0x93, 0x5b, 0x59, 0x3b, 0xfc, 0x7e, 0x4a, 0xd6, 0xd2, 0xd6, 0xe7, 0xde, 0x38, 0x58, 0x8d, 0x3f, 0xe2, 0x0a, 0xf0, 0xa9, 0x3c, 0xf7, 0xd2, 0xcd, 0x1c, 0xf3, 0x98, 0xcf, 0x30,
0xfd, 0x82, 0x3c, 0xc7, 0xc7, 0x7d, 0xf4, 0xf4, 0xd5, 0xcc, 0x96, 0xce, 0x67, 0xba, 0xaa, 0xc9, 0x73, 0xf2, 0xf5, 0x1b, 0xea, 0x4f, 0x1d, 0xa2, 0x3d, 0x87, 0xf9, 0xfd, 0x28, 0x7a, 0x39, 0x19,
0xd2, 0x50, 0xa6, 0x7d, 0xcd, 0x9b, 0x42, 0x4b, 0xe9, 0x5b, 0x00, 0xc7, 0x69, 0x34, 0xd9, 0xf5, 0xab, 0xd4, 0x0a, 0xf3, 0x30, 0x61, 0xcf, 0x4b, 0xce, 0xfb, 0xb9, 0x51, 0xd8, 0x6b, 0x58, 0x55,
0xe8, 0x38, 0x0a, 0x33, 0x5d, 0x9b, 0x25, 0x4f, 0x66, 0xfa, 0x4b, 0xcb, 0xa0, 0x24, 0xcf, 0x35, 0x9f, 0xf4, 0xb4, 0xaa, 0x36, 0x3f, 0xcb, 0x4e, 0x27, 0x3f, 0x27, 0x1e, 0x2c, 0x2a, 0xad, 0xaa,
0xe7, 0xc3, 0xc8, 0xfe, 0x95, 0xcc, 0x35, 0x33, 0xbf, 0x52, 0x4d, 0x48, 0x49, 0x8e, 0xe5, 0x3d, 0x3a, 0xde, 0x37, 0xab, 0x31, 0x74, 0x69, 0xbe, 0x09, 0xc3, 0x1e, 0x97, 0xbd, 0xdd, 0x4c, 0x64,
0x8b, 0x6c, 0x03, 0x64, 0xe7, 0x63, 0xca, 0x95, 0x28, 0x1c, 0xbd, 0x29, 0xb5, 0x57, 0x72, 0x98, 0x9d, 0xa8, 0x53, 0xda, 0x3b, 0x74, 0x80, 0x17, 0x26, 0x30, 0x22, 0xbf, 0x94, 0x75, 0x5c, 0x85,
0x76, 0x04, 0xcd, 0xec, 0xc0, 0x65, 0x3d, 0xbb, 0x3e, 0x66, 0x1c, 0xcf, 0xa8, 0x1d, 0xbc, 0x70, 0xf2, 0xfb, 0xf3, 0x06, 0xd0, 0xdc, 0x69, 0xc6, 0xde, 0x55, 0x4c, 0x7f, 0xba, 0xf9, 0x99, 0x88,
0x0c, 0x62, 0x77, 0x71, 0xaa, 0x80, 0x34, 0xd8, 0x54, 0xe1, 0xd9, 0x86, 0x0f, 0x2b, 0xbc, 0x83, 0xf5, 0x7f, 0x2e, 0x77, 0x1a, 0x79, 0x18, 0x62, 0xec, 0x34, 0xb9, 0xd3, 0x13, 0x63, 0xa7, 0x29,
0xca, 0x1c, 0xc1, 0xc4, 0x3f, 0x39, 0x92, 0x92, 0xa3, 0x08, 0x25, 0xcd, 0xa5, 0x31, 0x7a, 0x23, 0x9c, 0x9e, 0x18, 0x53, 0x2d, 0x0f, 0x63, 0x48, 0x00, 0x8b, 0x85, 0x03, 0x17, 0xb5, 0xc9, 0x4c,
0x22, 0xc2, 0xb8, 0x95, 0x27, 0x1d, 0x32, 0xd5, 0x3c, 0x86, 0xe5, 0x42, 0x10, 0x59, 0x89, 0xf4, 0x3b, 0xa6, 0xe9, 0xaf, 0x4d, 0x27, 0x30, 0x5b, 0x5b, 0x37, 0x5b, 0x3b, 0x82, 0xf9, 0x1d, 0xca,
0xac, 0xb8, 0xbe, 0x12, 0xe9, 0x99, 0xf1, 0x67, 0xfb, 0x1a, 0x36, 0xb9, 0x64, 0x03, 0x7a, 0x40, 0x27, 0x8b, 0xe7, 0x8e, 0xe6, 0xee, 0xbd, 0xe9, 0x99, 0xa9, 0xf9, 0x2d, 0x01, 0x71, 0xa6, 0x29,
0x97, 0x7e, 0x3a, 0x38, 0x67, 0xcd, 0xfd, 0xca, 0x82, 0x95, 0x92, 0x18, 0x31, 0x79, 0x5f, 0x3a, 0x81, 0x89, 0x9b, 0xe4, 0x47, 0xd0, 0x7a, 0x42, 0x53, 0x99, 0x2c, 0xaa, 0x8c, 0xd9, 0x5c, 0xf6,
0xd3, 0x33, 0xe3, 0xc7, 0xfd, 0xd2, 0x10, 0xa2, 0x7d, 0x8c, 0xed, 0x7c, 0x46, 0xbe, 0x67, 0x6c, 0x68, 0xbf, 0x24, 0xd7, 0xd4, 0xe4, 0x19, 0xac, 0x6d, 0x93, 0x0e, 0xcf, 0x28, 0x57, 0x4e, 0xae,
0x6c, 0x3c, 0x7a, 0x27, 0x24, 0xf3, 0x95, 0x46, 0x45, 0xa9, 0x45, 0xf1, 0x33, 0x58, 0xe7, 0x1d, 0x3f, 0xfc, 0x9c, 0xfc, 0x65, 0xac, 0x5c, 0x65, 0xca, 0xaf, 0x68, 0xd9, 0x7f, 0x7a, 0xe5, 0x0b,
0xd9, 0x0e, 0x82, 0x5c, 0x78, 0xf3, 0x66, 0xe1, 0x3f, 0x50, 0x18, 0x61, 0xdb, 0xfe, 0xec, 0xff, 0x39, 0x78, 0x59, 0xcd, 0x61, 0x34, 0xa4, 0x9a, 0x51, 0x15, 0x42, 0x4b, 0xbb, 0xce, 0xa2, 0x04,
0x50, 0x31, 0xc3, 0x5c, 0xe5, 0x5d, 0x25, 0x53, 0xe8, 0xe6, 0x43, 0x86, 0x64, 0x76, 0x5d, 0xfd, 0xa8, 0x78, 0xb7, 0x47, 0x09, 0x50, 0xc9, 0xed, 0x17, 0xfb, 0x1e, 0xb6, 0x63, 0x93, 0xb5, 0xac,
0xf7, 0x0c, 0xb7, 0xb0, 0x18, 0x66, 0xb4, 0x7f, 0x0f, 0x1b, 0x7b, 0xcf, 0xee, 0x97, 0xcd, 0x0b, 0x1d, 0x7e, 0xe3, 0x25, 0x6b, 0x69, 0xf3, 0x33, 0x6f, 0x94, 0x7e, 0x4e, 0x5e, 0xe0, 0x73, 0x41,
0xf7, 0x14, 0xd9, 0x7a, 0xfc, 0x35, 0x15, 0xdf, 0xcc, 0x8d, 0x53, 0x36, 0x30, 0x2b, 0x20, 0xab, 0x7a, 0x42, 0x6c, 0x66, 0x9d, 0xe7, 0x73, 0x67, 0xd5, 0x64, 0x69, 0x28, 0xd3, 0x62, 0xe7, 0x4d,
0x1c, 0xd3, 0xf2, 0xf0, 0xe8, 0x07, 0xd8, 0xfc, 0x2d, 0xfb, 0x9d, 0xb2, 0xe6, 0x63, 0xfe, 0x09, 0xa1, 0xed, 0xf5, 0x2d, 0x80, 0xa3, 0x34, 0x1a, 0xef, 0x78, 0x74, 0x14, 0x85, 0x99, 0xae, 0xcd,
0x77, 0x51, 0xd7, 0xf3, 0x72, 0x2d, 0x7b, 0x70, 0xab, 0x6c, 0xbd, 0x67, 0xfa, 0x1a, 0xb9, 0xb9, 0xd2, 0x31, 0x33, 0xfd, 0xa5, 0xe5, 0x64, 0x92, 0x17, 0x9a, 0x3b, 0x63, 0xe4, 0x13, 0x4b, 0xe6,
0x9e, 0xbb, 0x67, 0x3d, 0xbc, 0xf3, 0xa3, 0xdf, 0x1b, 0xf9, 0xe9, 0xf9, 0xf4, 0x74, 0x73, 0x10, 0x9a, 0x9a, 0xb1, 0xa9, 0x26, 0xa4, 0x24, 0x6b, 0xf3, 0xbe, 0x45, 0xb6, 0x00, 0xb2, 0x13, 0x37,
0x8d, 0xb7, 0x02, 0x19, 0x22, 0x13, 0x69, 0xea, 0x5b, 0x41, 0x38, 0xdc, 0xc2, 0xef, 0x4f, 0xe7, 0xe5, 0x9c, 0x14, 0x0e, 0xf3, 0x94, 0xda, 0x2b, 0x39, 0x9e, 0x3b, 0x84, 0x66, 0x76, 0x84, 0xb3,
0xf1, 0x1f, 0xda, 0x7c, 0xe3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xe5, 0x9a, 0x14, 0x02, 0x9a, 0x5d, 0x48, 0x33, 0x0e, 0x7c, 0xd4, 0x0e, 0x5e, 0x38, 0x58, 0xb1, 0xbb, 0x38, 0x55, 0x40,
0x67, 0x00, 0x00, 0x1a, 0x6c, 0xaa, 0xf0, 0xb4, 0xc4, 0x87, 0x25, 0xde, 0x41, 0x65, 0xe0, 0x60, 0x2a, 0xa1, 0x1c,
0x49, 0xc9, 0xe1, 0x86, 0x92, 0xe6, 0xd2, 0xa8, 0xbf, 0x11, 0x63, 0x61, 0xdc, 0xca, 0xd3, 0x18,
0x99, 0x6a, 0x1e, 0xc1, 0x62, 0x21, 0x2c, 0xad, 0x44, 0x7a, 0xda, 0x49, 0x81, 0x12, 0xe9, 0xa9,
0x11, 0x6d, 0xfb, 0x1a, 0x36, 0xb9, 0x60, 0x03, 0xfa, 0x54, 0x97, 0x7e, 0x3a, 0x38, 0x67, 0xcd,
0xfd, 0xd2, 0x82, 0xa5, 0x92, 0xa8, 0x33, 0x79, 0x4f, 0xba, 0xe7, 0x53, 0x23, 0xd2, 0xfd, 0xd2,
0xa0, 0xa4, 0x7d, 0x84, 0xed, 0x7c, 0x4a, 0x3e, 0x31, 0x36, 0x36, 0x1e, 0x0f, 0x14, 0x92, 0xf9,
0x5a, 0xa3, 0xa2, 0xd4, 0xa2, 0xf8, 0x29, 0xac, 0xf2, 0x8e, 0x6c, 0x05, 0x41, 0x2e, 0x60, 0x7a,
0xb3, 0xf0, 0x9f, 0x50, 0x8c, 0x40, 0x70, 0x7f, 0xfa, 0x7f, 0x4a, 0x99, 0x62, 0x00, 0xf3, 0xae,
0x92, 0x09, 0x74, 0xf3, 0x41, 0x48, 0x32, 0xbd, 0xae, 0xfe, 0x2d, 0xc3, 0xd1, 0x2c, 0x06, 0x2e,
0xed, 0xdf, 0xc3, 0xc6, 0x6e, 0xd9, 0xfd, 0xb2, 0x79, 0xe1, 0xbe, 0x27, 0x5b, 0x8f, 0xbf, 0xa6,
0x22, 0xa6, 0xb9, 0x71, 0xca, 0x06, 0xa6, 0x85, 0x78, 0x95, 0xab, 0x5b, 0x1e, 0x70, 0xbd, 0x83,
0xcd, 0xaf, 0xd9, 0xef, 0x94, 0x35, 0x1f, 0xf3, 0x4f, 0xb8, 0xd3, 0xbb, 0x9a, 0x97, 0x6b, 0xd9,
0x83, 0xb5, 0xb2, 0xf5, 0x9e, 0xea, 0xbd, 0xe4, 0xe6, 0x7a, 0xe6, 0xbe, 0xf5, 0xe8, 0xee, 0x0f,
0x7f, 0xef, 0xcc, 0x4f, 0xcf, 0x27, 0x27, 0x1b, 0x83, 0x68, 0xb4, 0x19, 0xc8, 0xa0, 0x9b, 0x48,
0x7c, 0xdf, 0x0c, 0xc2, 0xe1, 0x26, 0x7e, 0x7f, 0x32, 0x8b, 0xff, 0x58, 0xe9, 0x1b, 0xff, 0x2f,
0x00, 0x00, 0xff, 0xff, 0x69, 0x0d, 0x5e, 0x90, 0x8a, 0x69, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -9813,6 +10029,13 @@ type LightningClient interface {
//rate to us for the funding transaction. If neither are specified, then a //rate to us for the funding transaction. If neither are specified, then a
//lax block confirmation target is used. //lax block confirmation target is used.
OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error) OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error)
//*
//ChannelAcceptor dispatches a bi-directional streaming RPC in which
//OpenChannel requests are sent to the client and the client responds with
//a boolean that tells LND whether or not to accept the channel. This allows
//node operators to specify their own criteria for accepting inbound channels
//through a single persistent connection.
ChannelAcceptor(ctx context.Context, opts ...grpc.CallOption) (Lightning_ChannelAcceptorClient, error)
//* lncli: `closechannel` //* lncli: `closechannel`
//CloseChannel attempts to close an active channel identified by its channel //CloseChannel attempts to close an active channel identified by its channel
//outpoint (ChannelPoint). The actions of this method can additionally be //outpoint (ChannelPoint). The actions of this method can additionally be
@ -10261,8 +10484,39 @@ func (x *lightningOpenChannelClient) Recv() (*OpenStatusUpdate, error) {
return m, nil return m, nil
} }
func (c *lightningClient) ChannelAcceptor(ctx context.Context, opts ...grpc.CallOption) (Lightning_ChannelAcceptorClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[3], "/lnrpc.Lightning/ChannelAcceptor", opts...)
if err != nil {
return nil, err
}
x := &lightningChannelAcceptorClient{stream}
return x, nil
}
type Lightning_ChannelAcceptorClient interface {
Send(*ChannelAcceptResponse) error
Recv() (*ChannelAcceptRequest, error)
grpc.ClientStream
}
type lightningChannelAcceptorClient struct {
grpc.ClientStream
}
func (x *lightningChannelAcceptorClient) Send(m *ChannelAcceptResponse) error {
return x.ClientStream.SendMsg(m)
}
func (x *lightningChannelAcceptorClient) Recv() (*ChannelAcceptRequest, error) {
m := new(ChannelAcceptRequest)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *lightningClient) CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error) { func (c *lightningClient) CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[3], "/lnrpc.Lightning/CloseChannel", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[4], "/lnrpc.Lightning/CloseChannel", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10303,7 +10557,7 @@ func (c *lightningClient) AbandonChannel(ctx context.Context, in *AbandonChannel
} }
func (c *lightningClient) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) { func (c *lightningClient) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[4], "/lnrpc.Lightning/SendPayment", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[5], "/lnrpc.Lightning/SendPayment", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10343,7 +10597,7 @@ func (c *lightningClient) SendPaymentSync(ctx context.Context, in *SendRequest,
} }
func (c *lightningClient) SendToRoute(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendToRouteClient, error) { func (c *lightningClient) SendToRoute(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendToRouteClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[5], "/lnrpc.Lightning/SendToRoute", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[6], "/lnrpc.Lightning/SendToRoute", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10410,7 +10664,7 @@ func (c *lightningClient) LookupInvoice(ctx context.Context, in *PaymentHash, op
} }
func (c *lightningClient) SubscribeInvoices(ctx context.Context, in *InvoiceSubscription, opts ...grpc.CallOption) (Lightning_SubscribeInvoicesClient, error) { func (c *lightningClient) SubscribeInvoices(ctx context.Context, in *InvoiceSubscription, opts ...grpc.CallOption) (Lightning_SubscribeInvoicesClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[6], "/lnrpc.Lightning/SubscribeInvoices", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[7], "/lnrpc.Lightning/SubscribeInvoices", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10523,7 +10777,7 @@ func (c *lightningClient) StopDaemon(ctx context.Context, in *StopRequest, opts
} }
func (c *lightningClient) SubscribeChannelGraph(ctx context.Context, in *GraphTopologySubscription, opts ...grpc.CallOption) (Lightning_SubscribeChannelGraphClient, error) { func (c *lightningClient) SubscribeChannelGraph(ctx context.Context, in *GraphTopologySubscription, opts ...grpc.CallOption) (Lightning_SubscribeChannelGraphClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[7], "/lnrpc.Lightning/SubscribeChannelGraph", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[8], "/lnrpc.Lightning/SubscribeChannelGraph", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10627,7 +10881,7 @@ func (c *lightningClient) RestoreChannelBackups(ctx context.Context, in *Restore
} }
func (c *lightningClient) SubscribeChannelBackups(ctx context.Context, in *ChannelBackupSubscription, opts ...grpc.CallOption) (Lightning_SubscribeChannelBackupsClient, error) { func (c *lightningClient) SubscribeChannelBackups(ctx context.Context, in *ChannelBackupSubscription, opts ...grpc.CallOption) (Lightning_SubscribeChannelBackupsClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[8], "/lnrpc.Lightning/SubscribeChannelBackups", opts...) stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[9], "/lnrpc.Lightning/SubscribeChannelBackups", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -10764,6 +11018,13 @@ type LightningServer interface {
//rate to us for the funding transaction. If neither are specified, then a //rate to us for the funding transaction. If neither are specified, then a
//lax block confirmation target is used. //lax block confirmation target is used.
OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error
//*
//ChannelAcceptor dispatches a bi-directional streaming RPC in which
//OpenChannel requests are sent to the client and the client responds with
//a boolean that tells LND whether or not to accept the channel. This allows
//node operators to specify their own criteria for accepting inbound channels
//through a single persistent connection.
ChannelAcceptor(Lightning_ChannelAcceptorServer) error
//* lncli: `closechannel` //* lncli: `closechannel`
//CloseChannel attempts to close an active channel identified by its channel //CloseChannel attempts to close an active channel identified by its channel
//outpoint (ChannelPoint). The actions of this method can additionally be //outpoint (ChannelPoint). The actions of this method can additionally be
@ -11337,6 +11598,32 @@ func (x *lightningOpenChannelServer) Send(m *OpenStatusUpdate) error {
return x.ServerStream.SendMsg(m) return x.ServerStream.SendMsg(m)
} }
func _Lightning_ChannelAcceptor_Handler(srv interface{}, stream grpc.ServerStream) error {
return srv.(LightningServer).ChannelAcceptor(&lightningChannelAcceptorServer{stream})
}
type Lightning_ChannelAcceptorServer interface {
Send(*ChannelAcceptRequest) error
Recv() (*ChannelAcceptResponse, error)
grpc.ServerStream
}
type lightningChannelAcceptorServer struct {
grpc.ServerStream
}
func (x *lightningChannelAcceptorServer) Send(m *ChannelAcceptRequest) error {
return x.ServerStream.SendMsg(m)
}
func (x *lightningChannelAcceptorServer) Recv() (*ChannelAcceptResponse, error) {
m := new(ChannelAcceptResponse)
if err := x.ServerStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func _Lightning_CloseChannel_Handler(srv interface{}, stream grpc.ServerStream) error { func _Lightning_CloseChannel_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(CloseChannelRequest) m := new(CloseChannelRequest)
if err := stream.RecvMsg(m); err != nil { if err := stream.RecvMsg(m); err != nil {
@ -12072,6 +12359,12 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
Handler: _Lightning_OpenChannel_Handler, Handler: _Lightning_OpenChannel_Handler,
ServerStreams: true, ServerStreams: true,
}, },
{
StreamName: "ChannelAcceptor",
Handler: _Lightning_ChannelAcceptor_Handler,
ServerStreams: true,
ClientStreams: true,
},
{ {
StreamName: "CloseChannel", StreamName: "CloseChannel",
Handler: _Lightning_CloseChannel_Handler, Handler: _Lightning_CloseChannel_Handler,

@ -430,6 +430,15 @@ service Lightning {
*/ */
rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate); rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate);
/**
ChannelAcceptor dispatches a bi-directional streaming RPC in which
OpenChannel requests are sent to the client and the client responds with
a boolean that tells LND whether or not to accept the channel. This allows
node operators to specify their own criteria for accepting inbound channels
through a single persistent connection.
*/
rpc ChannelAcceptor (stream ChannelAcceptResponse) returns (stream ChannelAcceptRequest);
/** lncli: `closechannel` /** lncli: `closechannel`
CloseChannel attempts to close an active channel identified by its channel CloseChannel attempts to close an active channel identified by its channel
outpoint (ChannelPoint). The actions of this method can additionally be outpoint (ChannelPoint). The actions of this method can additionally be
@ -912,6 +921,58 @@ message SendToRouteRequest {
Route route = 4; Route route = 4;
} }
message ChannelAcceptRequest {
/// The pubkey of the node that wishes to open an inbound channel.
bytes node_pubkey = 1;
/// The hash of the genesis block that the proposed channel resides in.
bytes chain_hash = 2;
/// The pending channel id.
bytes pending_chan_id = 3;
/// The funding amount in satoshis that initiator wishes to use in the channel.
uint64 funding_amt = 4;
/// The push amount of the proposed channel in millisatoshis.
uint64 push_amt = 5;
/// The dust limit of the initiator's commitment tx.
uint64 dust_limit = 6;
/// The maximum amount of coins in millisatoshis that can be pending in this channel.
uint64 max_value_in_flight = 7;
/// The minimum amount of satoshis the initiator requires us to have at all times.
uint64 channel_reserve = 8;
/// The smallest HTLC in millisatoshis that the initiator will accept.
uint64 min_htlc = 9;
/// The initial fee rate that the initiator suggests for both commitment transactions.
uint64 fee_per_kw = 10;
/**
The number of blocks to use for the relative time lock in the pay-to-self output
of both commitment transactions.
*/
uint32 csv_delay = 11;
/// The total number of incoming HTLC's that the initiator will accept.
uint32 max_accepted_htlcs = 12;
/// A bit-field which the initiator uses to specify proposed channel behavior.
uint32 channel_flags = 13;
}
message ChannelAcceptResponse {
/// Whether or not the client accepts the channel.
bool accept = 1;
/// The pending channel id to which this response applies.
bytes pending_chan_id = 2;
}
message ChannelPoint { message ChannelPoint {
oneof funding_txid { oneof funding_txid {
/// Txid of the funding transaction /// Txid of the funding transaction

@ -1657,6 +1657,76 @@
} }
} }
}, },
"lnrpcChannelAcceptRequest": {
"type": "object",
"properties": {
"node_pubkey": {
"type": "string",
"format": "byte",
"description": "/ The pubkey of the node that wishes to open an inbound channel."
},
"chain_hash": {
"type": "string",
"format": "byte",
"description": "/ The hash of the genesis block that the proposed channel resides in."
},
"pending_chan_id": {
"type": "string",
"format": "byte",
"description": "/ The pending channel id."
},
"funding_amt": {
"type": "string",
"format": "uint64",
"description": "/ The funding amount in satoshis that initiator wishes to use in the channel."
},
"push_amt": {
"type": "string",
"format": "uint64",
"description": "/ The push amount of the proposed channel in millisatoshis."
},
"dust_limit": {
"type": "string",
"format": "uint64",
"description": "/ The dust limit of the initiator's commitment tx."
},
"max_value_in_flight": {
"type": "string",
"format": "uint64",
"description": "/ The maximum amount of coins in millisatoshis that can be pending in this channel."
},
"channel_reserve": {
"type": "string",
"format": "uint64",
"description": "/ The minimum amount of satoshis the initiator requires us to have at all times."
},
"min_htlc": {
"type": "string",
"format": "uint64",
"description": "/ The smallest HTLC in millisatoshis that the initiator will accept."
},
"fee_per_kw": {
"type": "string",
"format": "uint64",
"description": "/ The initial fee rate that the initiator suggests for both commitment transactions."
},
"csv_delay": {
"type": "integer",
"format": "int64",
"description": "*\nThe number of blocks to use for the relative time lock in the pay-to-self output\nof both commitment transactions."
},
"max_accepted_htlcs": {
"type": "integer",
"format": "int64",
"description": "/ The total number of incoming HTLC's that the initiator will accept."
},
"channel_flags": {
"type": "integer",
"format": "int64",
"description": "/ A bit-field which the initiator uses to specify proposed channel behavior."
}
}
},
"lnrpcChannelBackup": { "lnrpcChannelBackup": {
"type": "object", "type": "object",
"properties": { "properties": {

@ -16,6 +16,7 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/lightningnetwork/lnd/chanacceptor"
"github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc"
"github.com/lightningnetwork/lnd/routing/route" "github.com/lightningnetwork/lnd/routing/route"
"github.com/lightningnetwork/lnd/tlv" "github.com/lightningnetwork/lnd/tlv"
@ -76,6 +77,12 @@ var (
// It is set to the value under the Bitcoin chain as default. // It is set to the value under the Bitcoin chain as default.
MaxPaymentMSat = maxBtcPaymentMSat MaxPaymentMSat = maxBtcPaymentMSat
// defaultAcceptorTimeout is the time after which an RPCAcceptor will time
// out and return false if it hasn't yet received a response.
//
// TODO: Make this configurable
defaultAcceptorTimeout = 15 * time.Second
// readPermissions is a slice of all entities that allow read // readPermissions is a slice of all entities that allow read
// permissions for authorization purposes, all lowercase. // permissions for authorization purposes, all lowercase.
readPermissions = []bakery.Op{ readPermissions = []bakery.Op{
@ -382,6 +389,13 @@ func mainRPCServerPermissions() map[string][]bakery.Op {
Entity: "offchain", Entity: "offchain",
Action: "read", Action: "read",
}}, }},
"/lnrpc.Lightning/ChannelAcceptor": {{
Entity: "onchain",
Action: "write",
}, {
Entity: "offchain",
Action: "write",
}},
} }
} }
@ -430,6 +444,10 @@ type rpcServer struct {
// rpc sub server. // rpc sub server.
routerBackend *routerrpc.RouterBackend routerBackend *routerrpc.RouterBackend
// chanPredicate is used in the bidirectional ChannelAcceptor streaming
// method.
chanPredicate *chanacceptor.ChainedAcceptor
quit chan struct{} quit chan struct{}
} }
@ -446,7 +464,8 @@ func newRPCServer(s *server, macService *macaroons.Service,
subServerCgs *subRPCServerConfigs, restDialOpts []grpc.DialOption, subServerCgs *subRPCServerConfigs, restDialOpts []grpc.DialOption,
restProxyDest string, atpl *autopilot.Manager, restProxyDest string, atpl *autopilot.Manager,
invoiceRegistry *invoices.InvoiceRegistry, tower *watchtower.Standalone, invoiceRegistry *invoices.InvoiceRegistry, tower *watchtower.Standalone,
tlsCfg *tls.Config, getListeners rpcListeners) (*rpcServer, error) { tlsCfg *tls.Config, getListeners rpcListeners,
chanPredicate *chanacceptor.ChainedAcceptor) (*rpcServer, error) {
// Set up router rpc backend. // Set up router rpc backend.
channelGraph := s.chanDB.ChannelGraph() channelGraph := s.chanDB.ChannelGraph()
@ -601,6 +620,7 @@ func newRPCServer(s *server, macService *macaroons.Service,
grpcServer: grpcServer, grpcServer: grpcServer,
server: s, server: s,
routerBackend: routerBackend, routerBackend: routerBackend,
chanPredicate: chanPredicate,
quit: make(chan struct{}, 1), quit: make(chan struct{}, 1),
} }
lnrpc.RegisterLightningServer(grpcServer, rootRPCServer) lnrpc.RegisterLightningServer(grpcServer, rootRPCServer)
@ -5051,3 +5071,168 @@ func (r *rpcServer) SubscribeChannelBackups(req *lnrpc.ChannelBackupSubscription
} }
} }
} }
// chanAcceptInfo is used in the ChannelAcceptor bidirectional stream and
// encapsulates the request information sent from the RPCAcceptor to the
// RPCServer.
type chanAcceptInfo struct {
chanReq *chanacceptor.ChannelAcceptRequest
responseChan chan bool
}
// ChannelAcceptor dispatches a bi-directional streaming RPC in which
// OpenChannel requests are sent to the client and the client responds with
// a boolean that tells LND whether or not to accept the channel. This allows
// node operators to specify their own criteria for accepting inbound channels
// through a single persistent connection.
func (r *rpcServer) ChannelAcceptor(stream lnrpc.Lightning_ChannelAcceptorServer) error {
chainedAcceptor := r.chanPredicate
// Create two channels to handle requests and responses respectively.
newRequests := make(chan *chanAcceptInfo)
responses := make(chan lnrpc.ChannelAcceptResponse)
// Define a quit channel that will be used to signal to the RPCAcceptor's
// closure whether the stream still exists.
quit := make(chan struct{})
defer close(quit)
// demultiplexReq is a closure that will be passed to the RPCAcceptor and
// acts as an intermediary between the RPCAcceptor and the RPCServer.
demultiplexReq := func(req *chanacceptor.ChannelAcceptRequest) bool {
respChan := make(chan bool, 1)
newRequest := &chanAcceptInfo{
chanReq: req,
responseChan: respChan,
}
// timeout is the time after which ChannelAcceptRequests expire.
timeout := time.After(defaultAcceptorTimeout)
// Send the request to the newRequests channel.
select {
case newRequests <- newRequest:
case <-timeout:
rpcsLog.Errorf("RPCAcceptor returned false - reached timeout of %d",
defaultAcceptorTimeout)
return false
case <-quit:
return false
case <-r.quit:
return false
}
// Receive the response and return it. If no response has been received
// in defaultAcceptorTimeout, then return false.
select {
case resp := <-respChan:
return resp
case <-timeout:
rpcsLog.Errorf("RPCAcceptor returned false - reached timeout of %d",
defaultAcceptorTimeout)
return false
case <-quit:
return false
case <-r.quit:
return false
}
}
// Create a new RPCAcceptor via the NewRPCAcceptor method.
rpcAcceptor := chanacceptor.NewRPCAcceptor(demultiplexReq)
// Add the RPCAcceptor to the ChainedAcceptor and defer its removal.
id := chainedAcceptor.AddAcceptor(rpcAcceptor)
defer chainedAcceptor.RemoveAcceptor(id)
// errChan is used by the receive loop to signal any errors that occur
// during reading from the stream. This is primarily used to shutdown the
// send loop in the case of an RPC client disconnecting.
errChan := make(chan error, 1)
// We need to have the stream.Recv() in a goroutine since the call is
// blocking and would prevent us from sending more ChannelAcceptRequests to
// the RPC client.
go func() {
for {
resp, err := stream.Recv()
if err != nil {
errChan <- err
return
}
var pendingID [32]byte
copy(pendingID[:], resp.PendingChanId)
openChanResp := lnrpc.ChannelAcceptResponse{
Accept: resp.Accept,
PendingChanId: pendingID[:],
}
// Now that we have the response from the RPC client, send it to
// the responses chan.
select {
case responses <- openChanResp:
case <-quit:
return
case <-r.quit:
return
}
}
}()
acceptRequests := make(map[[32]byte]chan bool)
for {
select {
case newRequest := <-newRequests:
req := newRequest.chanReq
pendingChanID := req.OpenChanMsg.PendingChannelID
acceptRequests[pendingChanID] = newRequest.responseChan
// A ChannelAcceptRequest has been received, send it to the client.
chanAcceptReq := &lnrpc.ChannelAcceptRequest{
NodePubkey: req.Node.SerializeCompressed(),
ChainHash: req.OpenChanMsg.ChainHash[:],
PendingChanId: req.OpenChanMsg.PendingChannelID[:],
FundingAmt: uint64(req.OpenChanMsg.FundingAmount),
PushAmt: uint64(req.OpenChanMsg.PushAmount),
DustLimit: uint64(req.OpenChanMsg.DustLimit),
MaxValueInFlight: uint64(req.OpenChanMsg.MaxValueInFlight),
ChannelReserve: uint64(req.OpenChanMsg.ChannelReserve),
MinHtlc: uint64(req.OpenChanMsg.HtlcMinimum),
FeePerKw: uint64(req.OpenChanMsg.FeePerKiloWeight),
CsvDelay: uint32(req.OpenChanMsg.CsvDelay),
MaxAcceptedHtlcs: uint32(req.OpenChanMsg.MaxAcceptedHTLCs),
ChannelFlags: uint32(req.OpenChanMsg.ChannelFlags),
}
if err := stream.Send(chanAcceptReq); err != nil {
return err
}
case resp := <-responses:
// Look up the appropriate channel to send on given the pending ID.
// If a channel is found, send the response over it.
var pendingID [32]byte
copy(pendingID[:], resp.PendingChanId)
respChan, ok := acceptRequests[pendingID]
if !ok {
continue
}
// Send the response boolean over the buffered response channel.
respChan <- resp.Accept
// Delete the channel from the acceptRequests map.
delete(acceptRequests, pendingID)
case err := <-errChan:
rpcsLog.Errorf("Received an error: %v, shutting down", err)
return err
case <-r.quit:
return fmt.Errorf("RPC server is shutting down")
}
}
}

@ -28,6 +28,7 @@ import (
sphinx "github.com/lightningnetwork/lightning-onion" sphinx "github.com/lightningnetwork/lightning-onion"
"github.com/lightningnetwork/lnd/autopilot" "github.com/lightningnetwork/lnd/autopilot"
"github.com/lightningnetwork/lnd/brontide" "github.com/lightningnetwork/lnd/brontide"
"github.com/lightningnetwork/lnd/chanacceptor"
"github.com/lightningnetwork/lnd/chanbackup" "github.com/lightningnetwork/lnd/chanbackup"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/channelnotifier" "github.com/lightningnetwork/lnd/channelnotifier"
@ -297,7 +298,8 @@ func noiseDial(idPriv *btcec.PrivateKey) func(net.Addr) (net.Conn, error) {
func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
towerClientDB *wtdb.ClientDB, cc *chainControl, towerClientDB *wtdb.ClientDB, cc *chainControl,
privKey *btcec.PrivateKey, privKey *btcec.PrivateKey,
chansToRestore walletunlocker.ChannelsToRecover) (*server, error) { chansToRestore walletunlocker.ChannelsToRecover,
chanPredicate chanacceptor.ChannelAcceptor) (*server, error) {
var err error var err error
@ -908,6 +910,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
if _, err := rand.Read(chanIDSeed[:]); err != nil { if _, err := rand.Read(chanIDSeed[:]); err != nil {
return nil, err return nil, err
} }
s.fundingMgr, err = newFundingManager(fundingConfig{ s.fundingMgr, err = newFundingManager(fundingConfig{
IDKey: privKey.PubKey(), IDKey: privKey.PubKey(),
Wallet: cc.wallet, Wallet: cc.wallet,
@ -1069,6 +1072,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
MaxPendingChannels: cfg.MaxPendingChannels, MaxPendingChannels: cfg.MaxPendingChannels,
RejectPush: cfg.RejectPush, RejectPush: cfg.RejectPush,
NotifyOpenChannelEvent: s.channelNotifier.NotifyOpenChannelEvent, NotifyOpenChannelEvent: s.channelNotifier.NotifyOpenChannelEvent,
OpenChannelPredicate: chanPredicate,
}) })
if err != nil { if err != nil {
return nil, err return nil, err