Merge pull request #421 from nalinbhardwaj/walletbalance

Add detailed balance info to WalletBalance RPC
This commit is contained in:
Olaoluwa Osuntokun 2017-12-03 16:48:30 -08:00 committed by GitHub
commit e1893246bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 423 additions and 357 deletions

@ -241,7 +241,9 @@ alice$ lncli walletbalance
# channel: # channel:
bob$ lncli walletbalance bob$ lncli walletbalance
{ {
"balance": 0.0001 "total_balance": "0.0001",
"confirmed_balance": "0.0001",
"unconfirmed_balance": "0"
} }
``` ```

@ -71,7 +71,7 @@ is at the default `localhost:10009`, with an open channel between the two nodes.
```python ```python
# Retrieve and display the wallet balance # Retrieve and display the wallet balance
response = stub.WalletBalance(ln.WalletBalanceRequest(witness_only=True)) response = stub.WalletBalance(ln.WalletBalanceRequest(witness_only=True))
print response.balance print response.total_balance
``` ```
#### Response-streaming RPC #### Response-streaming RPC

@ -1107,7 +1107,7 @@ func testChannelForceClosure(net *networkHarness, t *harnessTest) {
t.Fatalf("unable to get carol's balance: %v", err) t.Fatalf("unable to get carol's balance: %v", err)
} }
carolStartingBalance := btcutil.Amount(carolBalResp.Balance * 1e8) carolStartingBalance := btcutil.Amount(carolBalResp.ConfirmedBalance * 1e8)
ctxt, _ := context.WithTimeout(ctxb, timeout) ctxt, _ := context.WithTimeout(ctxb, timeout)
chanPoint := openChannelAndAssert(ctxt, t, net, net.Alice, carol, chanPoint := openChannelAndAssert(ctxt, t, net, net.Alice, carol,
@ -1707,10 +1707,10 @@ func testChannelForceClosure(net *networkHarness, t *harnessTest) {
t.Fatalf("unable to get carol's balance: %v", err) t.Fatalf("unable to get carol's balance: %v", err)
} }
carolExpectedBalance := carolStartingBalance + pushAmt carolExpectedBalance := carolStartingBalance + pushAmt
if btcutil.Amount(carolBalResp.Balance*1e8) < carolExpectedBalance { if btcutil.Amount(carolBalResp.ConfirmedBalance*1e8) < carolExpectedBalance {
t.Fatalf("carol's balance is incorrect: expected %v got %v", t.Fatalf("carol's balance is incorrect: expected %v got %v",
carolExpectedBalance, carolExpectedBalance,
btcutil.Amount(carolBalResp.Balance*1e8)) btcutil.Amount(carolBalResp.ConfirmedBalance*1e8))
} }
} }

@ -2098,7 +2098,11 @@ func (m *WalletBalanceRequest) GetWitnessOnly() bool {
type WalletBalanceResponse struct { type WalletBalanceResponse struct {
// / The balance of the wallet // / The balance of the wallet
Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"` TotalBalance int64 `protobuf:"varint,1,opt,name=total_balance" json:"total_balance,omitempty"`
// / The confirmed balance of a wallet(with >= 1 confirmations)
ConfirmedBalance int64 `protobuf:"varint,2,opt,name=confirmed_balance" json:"confirmed_balance,omitempty"`
// / The unconfirmed balance of a wallet(with 0 confirmations)
UnconfirmedBalance int64 `protobuf:"varint,3,opt,name=unconfirmed_balance" json:"unconfirmed_balance,omitempty"`
} }
func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} } func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
@ -2106,9 +2110,23 @@ func (m *WalletBalanceResponse) String() string { return proto.Compac
func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (m *WalletBalanceResponse) GetBalance() int64 { func (m *WalletBalanceResponse) GetTotalBalance() int64 {
if m != nil { if m != nil {
return m.Balance return m.TotalBalance
}
return 0
}
func (m *WalletBalanceResponse) GetConfirmedBalance() int64 {
if m != nil {
return m.ConfirmedBalance
}
return 0
}
func (m *WalletBalanceResponse) GetUnconfirmedBalance() int64 {
if m != nil {
return m.UnconfirmedBalance
} }
return 0 return 0
} }
@ -3818,7 +3836,7 @@ var _WalletUnlocker_serviceDesc = grpc.ServiceDesc{
type LightningClient interface { type LightningClient interface {
// * lncli: `walletbalance` // * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
WalletBalance(ctx context.Context, in *WalletBalanceRequest, opts ...grpc.CallOption) (*WalletBalanceResponse, error) WalletBalance(ctx context.Context, in *WalletBalanceRequest, opts ...grpc.CallOption) (*WalletBalanceResponse, error)
@ -4516,7 +4534,7 @@ func (c *lightningClient) UpdateFees(ctx context.Context, in *FeeUpdateRequest,
type LightningServer interface { type LightningServer interface {
// * lncli: `walletbalance` // * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
WalletBalance(context.Context, *WalletBalanceRequest) (*WalletBalanceResponse, error) WalletBalance(context.Context, *WalletBalanceRequest) (*WalletBalanceResponse, error)
@ -5619,307 +5637,309 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 4831 bytes of a gzipped FileDescriptorProto // 4864 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0xdd, 0x6f, 0x1c, 0x4b, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7b, 0xcf, 0x8f, 0x1c, 0x49,
0x56, 0x4f, 0x8f, 0x67, 0xec, 0x99, 0x33, 0x33, 0xfe, 0x28, 0x7f, 0x4d, 0x26, 0xb9, 0xd9, 0xa4, 0x56, 0xbf, 0xb3, 0xba, 0xba, 0xbb, 0xea, 0x55, 0x55, 0xff, 0x88, 0x6e, 0xb7, 0xcb, 0x65, 0xcf,
0x36, 0xba, 0x31, 0xde, 0x2b, 0x3b, 0xf1, 0xb2, 0x97, 0x6c, 0x02, 0x5c, 0x39, 0x9f, 0xbe, 0xac, 0xac, 0x1d, 0x3b, 0x9a, 0xe9, 0xaf, 0x77, 0xe4, 0xf6, 0xf4, 0x7e, 0x77, 0x98, 0x1d, 0x03, 0x23,
0x6f, 0xae, 0xb7, 0x9d, 0xdc, 0xc0, 0xae, 0xd0, 0xd0, 0x9e, 0x2e, 0x8f, 0x7b, 0xd3, 0xd3, 0xdd, 0xff, 0x9c, 0x1e, 0xb6, 0xc7, 0xd3, 0x9b, 0xed, 0x19, 0xc3, 0xae, 0x50, 0x91, 0x5d, 0x15, 0x5d,
0xb7, 0xbb, 0xc6, 0xce, 0x6c, 0x14, 0x09, 0x16, 0xc4, 0x13, 0x68, 0x1f, 0x40, 0x20, 0x1e, 0x40, 0x9d, 0xeb, 0xac, 0xcc, 0x9c, 0xcc, 0xa8, 0x6e, 0xd7, 0x5a, 0x96, 0x60, 0x41, 0x9c, 0x40, 0x7b,
0x20, 0x84, 0x04, 0x0f, 0xf0, 0x0f, 0x20, 0xf1, 0x07, 0x20, 0x10, 0x48, 0xfb, 0x84, 0xc4, 0x1b, 0x00, 0x81, 0x38, 0x2c, 0x02, 0x21, 0x24, 0x38, 0xc0, 0x3f, 0x80, 0xc4, 0x1f, 0x80, 0x40, 0x20,
0x3c, 0xf1, 0x82, 0x78, 0xe0, 0x1d, 0xd5, 0x67, 0x57, 0x75, 0xb7, 0x13, 0x2f, 0xbb, 0xf0, 0xe4, 0xed, 0x09, 0x89, 0x1b, 0x9c, 0xb8, 0x20, 0x0e, 0xdc, 0xd1, 0x8b, 0x5f, 0x19, 0x91, 0x99, 0x6d,
0xa9, 0x5f, 0x55, 0x9f, 0xaa, 0x3a, 0x75, 0xea, 0x7c, 0xd5, 0x31, 0xb4, 0xd2, 0x64, 0xb8, 0x95, 0x7b, 0xd9, 0x85, 0x53, 0x57, 0x7c, 0x22, 0xf2, 0x45, 0xc4, 0x8b, 0x17, 0xef, 0x57, 0xbc, 0x86,
0xa4, 0x31, 0x8d, 0x51, 0x23, 0x8c, 0xd2, 0x64, 0xd8, 0xbf, 0x3a, 0x8a, 0xe3, 0x51, 0x48, 0xb6, 0x76, 0x96, 0x8e, 0x6e, 0xa6, 0x59, 0xc2, 0x13, 0xb2, 0x18, 0xc5, 0x59, 0x3a, 0x1a, 0x5c, 0x9d,
0xbd, 0x24, 0xd8, 0xf6, 0xa2, 0x28, 0xa6, 0x1e, 0x0d, 0xe2, 0x28, 0x13, 0x83, 0xf0, 0x1d, 0x58, 0x24, 0xc9, 0x24, 0x62, 0x3b, 0x41, 0x1a, 0xee, 0x04, 0x71, 0x9c, 0xf0, 0x80, 0x87, 0x49, 0x9c,
0x7e, 0x98, 0x12, 0x8f, 0x92, 0x97, 0x5e, 0x18, 0x12, 0xea, 0x92, 0x2f, 0x27, 0x24, 0xa3, 0xa8, 0xcb, 0x41, 0xf4, 0x3d, 0xd8, 0xb8, 0x97, 0xb1, 0x80, 0xb3, 0x27, 0x41, 0x14, 0x31, 0xee, 0xb3,
0x0f, 0xcd, 0xc4, 0xcb, 0xb2, 0xb3, 0x38, 0xf5, 0x7b, 0xce, 0x75, 0x67, 0xa3, 0xe3, 0xea, 0x36, 0x2f, 0x67, 0x2c, 0xe7, 0x64, 0x00, 0xad, 0x34, 0xc8, 0xf3, 0xb3, 0x24, 0x1b, 0xf7, 0xbd, 0x6b,
0x5e, 0x83, 0x15, 0xfb, 0x93, 0x2c, 0x89, 0xa3, 0x8c, 0x30, 0x52, 0x2f, 0xa2, 0x30, 0x1e, 0xbe, 0xde, 0x76, 0xd7, 0x37, 0x6d, 0xba, 0x05, 0x9b, 0xee, 0x27, 0x79, 0x9a, 0xc4, 0x39, 0x43, 0x52,
0xfa, 0xb1, 0x48, 0xd9, 0x9f, 0x48, 0x52, 0xff, 0xe5, 0x40, 0xfb, 0x79, 0xea, 0x45, 0x99, 0x37, 0x9f, 0xc7, 0x51, 0x32, 0x7a, 0xfa, 0x13, 0x91, 0x72, 0x3f, 0x51, 0xa4, 0xfe, 0xd3, 0x83, 0xce,
0x64, 0x8b, 0x45, 0x3d, 0x98, 0xa3, 0xaf, 0x07, 0x27, 0x5e, 0x76, 0xc2, 0x49, 0xb4, 0x5c, 0xd5, 0xe3, 0x2c, 0x88, 0xf3, 0x60, 0x84, 0x8b, 0x25, 0x7d, 0x58, 0xe6, 0xcf, 0x86, 0x27, 0x41, 0x7e,
0x44, 0x6b, 0x30, 0xeb, 0x8d, 0xe3, 0x49, 0x44, 0x7b, 0xb5, 0xeb, 0xce, 0xc6, 0x8c, 0x2b, 0x5b, 0x22, 0x48, 0xb4, 0x7d, 0xdd, 0x24, 0x5b, 0xb0, 0x14, 0x4c, 0x93, 0x59, 0xcc, 0xfb, 0x8d, 0x6b,
0xe8, 0x23, 0x58, 0x8a, 0x26, 0xe3, 0xc1, 0x30, 0x8e, 0x8e, 0x83, 0x74, 0x2c, 0xb6, 0xdc, 0x9b, 0xde, 0xf6, 0x82, 0xaf, 0x5a, 0xe4, 0x5d, 0x58, 0x8f, 0x67, 0xd3, 0xe1, 0x28, 0x89, 0x8f, 0xc3,
0xb9, 0xee, 0x6c, 0x34, 0xdc, 0x72, 0x07, 0xba, 0x06, 0x70, 0xc4, 0x96, 0x21, 0xa6, 0xa8, 0xf3, 0x6c, 0x2a, 0xb7, 0xdc, 0x5f, 0xb8, 0xe6, 0x6d, 0x2f, 0xfa, 0xd5, 0x0e, 0xf2, 0x26, 0xc0, 0x11,
0x29, 0x0c, 0x04, 0x61, 0xe8, 0xc8, 0x16, 0x09, 0x46, 0x27, 0xb4, 0xd7, 0xe0, 0x84, 0x2c, 0x8c, 0x2e, 0x43, 0x4e, 0xd1, 0x14, 0x53, 0x58, 0x08, 0xa1, 0xd0, 0x55, 0x2d, 0x16, 0x4e, 0x4e, 0x78,
0xd1, 0xa0, 0xc1, 0x98, 0x0c, 0x32, 0xea, 0x8d, 0x93, 0xde, 0x2c, 0x5f, 0x8d, 0x81, 0xf0, 0xfe, 0x7f, 0x51, 0x10, 0x72, 0x30, 0xa4, 0xc1, 0xc3, 0x29, 0x1b, 0xe6, 0x3c, 0x98, 0xa6, 0xfd, 0x25,
0x98, 0x7a, 0xe1, 0xe0, 0x98, 0x90, 0xac, 0x37, 0x27, 0xfb, 0x35, 0x82, 0x7b, 0xb0, 0xf6, 0x94, 0xb1, 0x1a, 0x0b, 0x11, 0xfd, 0x09, 0x0f, 0xa2, 0xe1, 0x31, 0x63, 0x79, 0x7f, 0x59, 0xf5, 0x1b,
0x50, 0x63, 0xd7, 0x99, 0xe4, 0x20, 0xde, 0x07, 0x64, 0xc0, 0x8f, 0x08, 0xf5, 0x82, 0x30, 0x43, 0x84, 0xf6, 0x61, 0xeb, 0x63, 0xc6, 0xad, 0x5d, 0xe7, 0x8a, 0x83, 0x74, 0x1f, 0x88, 0x05, 0xdf,
0x1f, 0x43, 0x87, 0x1a, 0x83, 0x7b, 0xce, 0xf5, 0x99, 0x8d, 0xf6, 0x0e, 0xda, 0xe2, 0xa7, 0xbe, 0x67, 0x3c, 0x08, 0xa3, 0x9c, 0xbc, 0x0f, 0x5d, 0x6e, 0x0d, 0xee, 0x7b, 0xd7, 0x16, 0xb6, 0x3b,
0x65, 0x7c, 0xe0, 0x5a, 0xe3, 0xf0, 0x3f, 0x3b, 0xd0, 0x3e, 0x24, 0x91, 0xaf, 0xce, 0x07, 0x41, 0xbb, 0xe4, 0xa6, 0x38, 0xf5, 0x9b, 0xd6, 0x07, 0xbe, 0x33, 0x8e, 0xfe, 0x93, 0x07, 0x9d, 0x43,
0xdd, 0x27, 0x19, 0x95, 0x67, 0xc3, 0x7f, 0xa3, 0xaf, 0x40, 0x9b, 0xfd, 0x1d, 0x64, 0x34, 0x0d, 0x16, 0x8f, 0xf5, 0xf9, 0x10, 0x68, 0x8e, 0x59, 0xce, 0xd5, 0xd9, 0x88, 0xdf, 0xe4, 0x2b, 0xd0,
0xa2, 0x11, 0x67, 0x6d, 0xcb, 0x05, 0x06, 0x1d, 0x72, 0x04, 0x2d, 0xc2, 0x8c, 0x37, 0xa6, 0x9c, 0xc1, 0xbf, 0xc3, 0x9c, 0x67, 0x61, 0x3c, 0x11, 0xac, 0x6d, 0xfb, 0x80, 0xd0, 0xa1, 0x40, 0xc8,
0xa1, 0x33, 0x2e, 0xfb, 0x89, 0x6e, 0x40, 0x27, 0xf1, 0xa6, 0x63, 0x12, 0xd1, 0x9c, 0x89, 0x1d, 0x1a, 0x2c, 0x04, 0x53, 0x2e, 0x18, 0xba, 0xe0, 0xe3, 0x4f, 0x72, 0x1d, 0xba, 0x69, 0x30, 0x9f,
0xb7, 0x2d, 0xb1, 0x3d, 0xc6, 0xc5, 0x2d, 0x58, 0x36, 0x87, 0x28, 0xea, 0x0d, 0x4e, 0x7d, 0xc9, 0xb2, 0x98, 0x17, 0x4c, 0xec, 0xfa, 0x1d, 0x85, 0xed, 0x21, 0x17, 0x6f, 0xc2, 0x86, 0x3d, 0x44,
0x18, 0x29, 0x27, 0xb9, 0x05, 0x0b, 0x6a, 0x7c, 0x2a, 0x16, 0xcb, 0xd9, 0xda, 0x72, 0xe7, 0x25, 0x53, 0x5f, 0x14, 0xd4, 0xd7, 0xad, 0x91, 0x6a, 0x92, 0x77, 0x60, 0x55, 0x8f, 0xcf, 0xe4, 0x62,
0xac, 0x18, 0xf4, 0xfb, 0x0e, 0x74, 0xc4, 0x96, 0x84, 0xfc, 0xa0, 0x9b, 0xd0, 0x55, 0x5f, 0x92, 0x05, 0x5b, 0xdb, 0xfe, 0x8a, 0x82, 0x35, 0x83, 0x7e, 0xdf, 0x83, 0xae, 0xdc, 0x92, 0x94, 0x1f,
0x34, 0x8d, 0x53, 0x29, 0x35, 0x36, 0x88, 0x36, 0x61, 0x51, 0x01, 0x49, 0x4a, 0x82, 0xb1, 0x37, 0xf2, 0x16, 0xf4, 0xf4, 0x97, 0x2c, 0xcb, 0x92, 0x4c, 0x49, 0x8d, 0x0b, 0x92, 0x1b, 0xb0, 0xa6,
0x22, 0x7c, 0xab, 0x1d, 0xb7, 0x84, 0xa3, 0x9d, 0x9c, 0x62, 0x1a, 0x4f, 0x28, 0xe1, 0x5b, 0x6f, 0x81, 0x34, 0x63, 0xe1, 0x34, 0x98, 0x30, 0xb1, 0xd5, 0xae, 0x5f, 0xc1, 0xc9, 0x6e, 0x41, 0x31,
0xef, 0x74, 0x24, 0xbb, 0x5d, 0x86, 0xb9, 0xf6, 0x10, 0xfc, 0x03, 0x07, 0x3a, 0x0f, 0x4f, 0xbc, 0x4b, 0x66, 0x9c, 0x89, 0xad, 0x77, 0x76, 0xbb, 0x8a, 0xdd, 0x3e, 0x62, 0xbe, 0x3b, 0x84, 0xfe,
0x28, 0x22, 0xe1, 0x41, 0x1c, 0x44, 0x94, 0x89, 0xd1, 0xf1, 0x24, 0xf2, 0x83, 0x68, 0x34, 0xa0, 0xc0, 0x83, 0xee, 0xbd, 0x93, 0x20, 0x8e, 0x59, 0x74, 0x90, 0x84, 0x31, 0x47, 0x31, 0x3a, 0x9e,
0xaf, 0x03, 0x75, 0x1d, 0x2c, 0x8c, 0x2d, 0xca, 0x6c, 0x33, 0x26, 0x49, 0xfe, 0x97, 0x70, 0x46, 0xc5, 0xe3, 0x30, 0x9e, 0x0c, 0xf9, 0xb3, 0x50, 0x5f, 0x07, 0x07, 0xc3, 0x45, 0xd9, 0x6d, 0x64,
0x2f, 0x9e, 0xd0, 0x64, 0x42, 0x07, 0x41, 0xe4, 0x93, 0xd7, 0x7c, 0x4d, 0x5d, 0xd7, 0xc2, 0xf0, 0x92, 0xe2, 0x7f, 0x05, 0x47, 0x7a, 0xc9, 0x8c, 0xa7, 0x33, 0x3e, 0x0c, 0xe3, 0x31, 0x7b, 0x26,
0x2f, 0xc2, 0xe2, 0x3e, 0x93, 0xcf, 0x28, 0x88, 0x46, 0xbb, 0xbe, 0x9f, 0x92, 0x2c, 0x63, 0x97, 0xd6, 0xd4, 0xf3, 0x1d, 0x8c, 0xfe, 0x22, 0xac, 0xed, 0xa3, 0x7c, 0xc6, 0x61, 0x3c, 0xb9, 0x33,
0x26, 0x99, 0x1c, 0xbd, 0x22, 0x53, 0xc9, 0x17, 0xd9, 0x62, 0xa2, 0x70, 0x12, 0x67, 0x54, 0xce, 0x1e, 0x67, 0x2c, 0xcf, 0xf1, 0xd2, 0xa4, 0xb3, 0xa3, 0xa7, 0x6c, 0xae, 0xf8, 0xa2, 0x5a, 0x28,
0xc7, 0x7f, 0xe3, 0x7f, 0x73, 0x60, 0x81, 0xf1, 0xf6, 0x33, 0x2f, 0x9a, 0x2a, 0x91, 0xd9, 0x87, 0x0a, 0x27, 0x49, 0xce, 0xd5, 0x7c, 0xe2, 0x37, 0xfd, 0x57, 0x0f, 0x56, 0x91, 0xb7, 0x9f, 0x06,
0x0e, 0x23, 0xf5, 0x3c, 0xde, 0x15, 0x57, 0x4f, 0x88, 0xde, 0x86, 0xe4, 0x45, 0x61, 0xf4, 0x96, 0xf1, 0x5c, 0x8b, 0xcc, 0x3e, 0x74, 0x91, 0xd4, 0xe3, 0xe4, 0x8e, 0xbc, 0x7a, 0x52, 0xf4, 0xb6,
0x39, 0xf4, 0x71, 0x44, 0xd3, 0xa9, 0x6b, 0x7d, 0xcd, 0x84, 0x8d, 0x7a, 0xe9, 0x88, 0x50, 0x7e, 0x15, 0x2f, 0x4a, 0xa3, 0x6f, 0xda, 0x43, 0x1f, 0xc4, 0x3c, 0x9b, 0xfb, 0xce, 0xd7, 0x28, 0x6c,
0x29, 0xe5, 0x25, 0x05, 0x01, 0x3d, 0x8c, 0xa3, 0x63, 0x74, 0x1d, 0x3a, 0x99, 0x47, 0x07, 0x09, 0x3c, 0xc8, 0x26, 0x8c, 0x8b, 0x4b, 0xa9, 0x2e, 0x29, 0x48, 0xe8, 0x5e, 0x12, 0x1f, 0x93, 0x6b,
0x49, 0x07, 0x47, 0x53, 0x4a, 0xb8, 0xc0, 0xcc, 0xb8, 0x90, 0x79, 0xf4, 0x80, 0xa4, 0x0f, 0xa6, 0xd0, 0xcd, 0x03, 0x3e, 0x4c, 0x59, 0x36, 0x3c, 0x9a, 0x73, 0x26, 0x04, 0x66, 0xc1, 0x87, 0x3c,
0x94, 0xf4, 0x3f, 0x81, 0xa5, 0xd2, 0x2c, 0x4c, 0x46, 0xf3, 0x2d, 0xb2, 0x9f, 0x68, 0x05, 0x1a, 0xe0, 0x07, 0x2c, 0xbb, 0x3b, 0xe7, 0x6c, 0xf0, 0x11, 0xac, 0x57, 0x66, 0x41, 0x19, 0x2d, 0xb6,
0xa7, 0x5e, 0x38, 0x21, 0x52, 0x57, 0x88, 0xc6, 0xbd, 0xda, 0x5d, 0x07, 0x7f, 0x08, 0x8b, 0xf9, 0x88, 0x3f, 0xc9, 0x26, 0x2c, 0x9e, 0x06, 0xd1, 0x8c, 0x29, 0x5d, 0x21, 0x1b, 0x1f, 0x36, 0x3e,
0xb2, 0xa5, 0x10, 0x21, 0xa8, 0xeb, 0x53, 0x6a, 0xb9, 0xfc, 0x37, 0xfe, 0x0d, 0x47, 0x0c, 0x7c, 0xf0, 0xe8, 0xdb, 0xb0, 0x56, 0x2c, 0x5b, 0x09, 0x11, 0x81, 0xa6, 0x39, 0xa5, 0xb6, 0x2f, 0x7e,
0x18, 0x07, 0xfa, 0x7e, 0xb2, 0x81, 0x9e, 0xef, 0x2b, 0x21, 0xe3, 0xbf, 0xcf, 0xd5, 0x4b, 0x3f, 0xd3, 0xdf, 0xf0, 0xe4, 0xc0, 0x7b, 0x49, 0x68, 0xee, 0x27, 0x0e, 0x0c, 0xc6, 0x63, 0x2d, 0x64,
0xf9, 0x66, 0xf1, 0x2d, 0x58, 0x32, 0x96, 0xf0, 0x8e, 0xc5, 0xfe, 0x89, 0x03, 0x4b, 0xcf, 0xc8, 0xe2, 0xf7, 0xb9, 0x7a, 0xe9, 0xa7, 0xdf, 0x2c, 0x7d, 0x07, 0xd6, 0xad, 0x25, 0xbc, 0x64, 0xb1,
0x99, 0x3c, 0x75, 0xb5, 0xda, 0xbb, 0x50, 0xa7, 0xd3, 0x84, 0xf0, 0x91, 0xf3, 0x3b, 0x37, 0xe5, 0x7f, 0xec, 0xc1, 0xfa, 0x23, 0x76, 0xa6, 0x4e, 0x5d, 0xaf, 0xf6, 0x03, 0x68, 0xf2, 0x79, 0xca,
0xa1, 0x95, 0xc6, 0x6d, 0xc9, 0xe6, 0xf3, 0x69, 0x42, 0x5c, 0xfe, 0x05, 0xfe, 0x1c, 0xda, 0x06, 0xc4, 0xc8, 0x95, 0xdd, 0xb7, 0xd4, 0xa1, 0x55, 0xc6, 0xdd, 0x54, 0xcd, 0xc7, 0xf3, 0x94, 0xf9,
0x88, 0xd6, 0x61, 0xf9, 0xe5, 0xa7, 0xcf, 0x9f, 0x3d, 0x3e, 0x3c, 0x1c, 0x1c, 0xbc, 0x78, 0xf0, 0xe2, 0x0b, 0xfa, 0x19, 0x74, 0x2c, 0x90, 0x5c, 0x82, 0x8d, 0x27, 0x9f, 0x3c, 0x7e, 0xf4, 0xe0,
0xad, 0xc7, 0xbf, 0x32, 0xd8, 0xdb, 0x3d, 0xdc, 0x5b, 0xbc, 0x84, 0xd6, 0x00, 0x3d, 0x7b, 0x7c, 0xf0, 0x70, 0x78, 0xf0, 0xf9, 0xdd, 0x6f, 0x3d, 0xf8, 0x95, 0xe1, 0xde, 0x9d, 0xc3, 0xbd, 0xb5,
0xf8, 0xfc, 0xf1, 0x23, 0x0b, 0x77, 0xd0, 0x02, 0xb4, 0x4d, 0xa0, 0x86, 0xfb, 0xd0, 0x7b, 0x46, 0x0b, 0x64, 0x0b, 0xc8, 0xa3, 0x07, 0x87, 0x8f, 0x1f, 0xdc, 0x77, 0x70, 0x8f, 0xac, 0x42, 0xc7,
0xce, 0x5e, 0x06, 0x34, 0x22, 0x59, 0x66, 0x4f, 0x8f, 0xb7, 0x00, 0x99, 0x6b, 0x92, 0xdb, 0xec, 0x06, 0x1a, 0x74, 0x00, 0xfd, 0x47, 0xec, 0xec, 0x49, 0xc8, 0x63, 0x96, 0xe7, 0xee, 0xf4, 0xf4,
0xc1, 0x9c, 0x27, 0x20, 0x65, 0x08, 0x64, 0x13, 0x7f, 0x08, 0xe8, 0x30, 0x18, 0x45, 0x9f, 0x91, 0x26, 0x10, 0x7b, 0x4d, 0x6a, 0x9b, 0x7d, 0x58, 0x0e, 0x24, 0xa4, 0x0d, 0x81, 0x6a, 0xd2, 0xb7,
0x2c, 0xf3, 0x46, 0x44, 0x6d, 0x76, 0x11, 0x66, 0xc6, 0xd9, 0x48, 0x5e, 0x34, 0xf6, 0x13, 0x7f, 0x81, 0x1c, 0x86, 0x93, 0xf8, 0x53, 0x96, 0xe7, 0xc1, 0x84, 0xe9, 0xcd, 0xae, 0xc1, 0xc2, 0x34,
0x1d, 0x96, 0xad, 0x71, 0x92, 0xf0, 0x55, 0x68, 0x65, 0xc1, 0x28, 0xf2, 0xe8, 0x24, 0x25, 0x92, 0x9f, 0xa8, 0x8b, 0x86, 0x3f, 0xe9, 0xd7, 0x61, 0xc3, 0x19, 0xa7, 0x08, 0x5f, 0x85, 0x76, 0x1e,
0x74, 0x0e, 0xe0, 0x27, 0xb0, 0xf2, 0x05, 0x49, 0x83, 0xe3, 0xe9, 0xfb, 0xc8, 0xdb, 0x74, 0x6a, 0x4e, 0xe2, 0x80, 0xcf, 0x32, 0xa6, 0x48, 0x17, 0x00, 0x7d, 0x08, 0x9b, 0x5f, 0xb0, 0x2c, 0x3c,
0x45, 0x3a, 0x8f, 0x61, 0xb5, 0x40, 0x47, 0x4e, 0x2f, 0x24, 0x53, 0x9e, 0x5f, 0xd3, 0x15, 0x0d, 0x9e, 0xbf, 0x8a, 0xbc, 0x4b, 0xa7, 0x51, 0xa6, 0xf3, 0x00, 0x2e, 0x96, 0xe8, 0xa8, 0xe9, 0xa5,
0xe3, 0x9e, 0xd6, 0xcc, 0x7b, 0x8a, 0x5f, 0x00, 0x7a, 0x18, 0x47, 0x11, 0x19, 0xd2, 0x03, 0x42, 0x64, 0xaa, 0xf3, 0x6b, 0xf9, 0xb2, 0x61, 0xdd, 0xd3, 0x86, 0x7d, 0x4f, 0xe9, 0xe7, 0x40, 0xee,
0x52, 0xb5, 0x98, 0xaf, 0x19, 0x62, 0xd8, 0xde, 0x59, 0x97, 0x07, 0x5b, 0xbc, 0xfc, 0x52, 0x3e, 0x25, 0x71, 0xcc, 0x46, 0xfc, 0x80, 0xb1, 0x4c, 0x2f, 0xe6, 0x6b, 0x96, 0x18, 0x76, 0x76, 0x2f,
0x11, 0xd4, 0x13, 0x92, 0x8e, 0x39, 0xe1, 0xa6, 0xcb, 0x7f, 0xe3, 0x6d, 0x58, 0xb6, 0xc8, 0xe6, 0xa9, 0x83, 0x2d, 0x5f, 0x7e, 0x25, 0x9f, 0x04, 0x9a, 0x29, 0xcb, 0xa6, 0x82, 0x70, 0xcb, 0x17,
0x3c, 0x4f, 0x08, 0x49, 0x07, 0x72, 0x75, 0x0d, 0x57, 0x35, 0xf1, 0x1d, 0x58, 0x7d, 0x14, 0x64, 0xbf, 0xe9, 0x0e, 0x6c, 0x38, 0x64, 0x0b, 0x9e, 0xa7, 0x8c, 0x65, 0x43, 0xb5, 0xba, 0x45, 0x5f,
0xc3, 0xf2, 0x52, 0xd8, 0x27, 0x93, 0xa3, 0x41, 0x7e, 0xfd, 0x54, 0x93, 0x59, 0xb9, 0xe2, 0x27, 0x37, 0xe9, 0x7b, 0x70, 0xf1, 0x7e, 0x98, 0x8f, 0xaa, 0x4b, 0xc1, 0x4f, 0x66, 0x47, 0xc3, 0xe2,
0xd2, 0xe6, 0xff, 0xb6, 0x03, 0xf5, 0xbd, 0xe7, 0xfb, 0x0f, 0x99, 0xc3, 0x10, 0x44, 0xc3, 0x78, 0xfa, 0xe9, 0x26, 0x5a, 0xb9, 0xf2, 0x27, 0xca, 0xe6, 0xff, 0xb6, 0x07, 0xcd, 0xbd, 0xc7, 0xfb,
0xcc, 0x6c, 0x83, 0x60, 0x87, 0x6e, 0x9f, 0x7b, 0xad, 0xae, 0x42, 0x8b, 0x9b, 0x14, 0x66, 0x90, 0xf7, 0xd0, 0x61, 0x08, 0xe3, 0x51, 0x32, 0x45, 0xdb, 0x20, 0xd9, 0x61, 0xda, 0xe7, 0x5e, 0xab,
0xf9, 0xa5, 0xea, 0xb8, 0x39, 0xc0, 0x9c, 0x01, 0xf2, 0x3a, 0x09, 0x52, 0x6e, 0xed, 0x95, 0x0d, 0xab, 0xd0, 0x16, 0x26, 0x05, 0x0d, 0xb2, 0xb8, 0x54, 0x5d, 0xbf, 0x00, 0xd0, 0x19, 0x60, 0xcf,
0xaf, 0x73, 0x65, 0x59, 0xee, 0xc0, 0xff, 0x50, 0x87, 0xee, 0xee, 0x90, 0x06, 0xa7, 0x44, 0x2a, 0xd2, 0x30, 0x13, 0xd6, 0x5e, 0xdb, 0xf0, 0xa6, 0x50, 0x96, 0xd5, 0x0e, 0xfa, 0xf7, 0x4d, 0xe8,
0x6f, 0x3e, 0x2b, 0x07, 0xe4, 0x7a, 0x64, 0x8b, 0x99, 0x99, 0x94, 0x8c, 0x63, 0x4a, 0x06, 0xd6, 0xdd, 0x19, 0xf1, 0xf0, 0x94, 0x29, 0xe5, 0x2d, 0x66, 0x15, 0x80, 0x5a, 0x8f, 0x6a, 0xa1, 0x99,
0x31, 0xd9, 0x20, 0x1b, 0x35, 0x14, 0x84, 0x06, 0x09, 0x33, 0x03, 0x7c, 0x7d, 0x2d, 0xd7, 0x06, 0xc9, 0xd8, 0x34, 0xe1, 0x6c, 0xe8, 0x1c, 0x93, 0x0b, 0xe2, 0xa8, 0x91, 0x24, 0x34, 0x4c, 0xd1,
0x19, 0xcb, 0x18, 0xc0, 0xb8, 0xcc, 0x56, 0x56, 0x77, 0x55, 0x93, 0xf1, 0x63, 0xe8, 0x25, 0xde, 0x0c, 0x88, 0xf5, 0xb5, 0x7d, 0x17, 0x44, 0x96, 0x21, 0x80, 0x5c, 0xc6, 0x95, 0x35, 0x7d, 0xdd,
0x30, 0xa0, 0x53, 0xa9, 0x0d, 0x74, 0x9b, 0xd1, 0x0e, 0xe3, 0xa1, 0x17, 0x0e, 0x8e, 0xbc, 0xd0, 0x44, 0x7e, 0x8c, 0x82, 0x34, 0x18, 0x85, 0x7c, 0xae, 0xb4, 0x81, 0x69, 0x23, 0xed, 0x28, 0x19,
0x8b, 0x86, 0x44, 0xfa, 0x1d, 0x36, 0x88, 0x3e, 0x84, 0x79, 0xb9, 0x24, 0x35, 0x4c, 0xb8, 0x1f, 0x05, 0xd1, 0xf0, 0x28, 0x88, 0x82, 0x78, 0xc4, 0x94, 0xdf, 0xe1, 0x82, 0xe4, 0x6d, 0x58, 0x51,
0x05, 0x94, 0xb9, 0x28, 0xc3, 0x78, 0x3c, 0x0e, 0x28, 0xf3, 0x48, 0x7a, 0x4d, 0xa1, 0x79, 0x72, 0x4b, 0xd2, 0xc3, 0xa4, 0xfb, 0x51, 0x42, 0xd1, 0x45, 0x19, 0x25, 0xd3, 0x69, 0xc8, 0xd1, 0x23,
0x84, 0xef, 0x44, 0xb4, 0xce, 0x04, 0x0f, 0x5b, 0x62, 0x36, 0x0b, 0x64, 0x54, 0x8e, 0x09, 0xe1, 0xe9, 0xb7, 0xa4, 0xe6, 0x29, 0x10, 0xb1, 0x13, 0xd9, 0x3a, 0x93, 0x3c, 0x6c, 0xcb, 0xd9, 0x1c,
0x1a, 0xec, 0xd5, 0x59, 0x0f, 0x04, 0x95, 0x1c, 0x61, 0xa7, 0x31, 0x89, 0x32, 0x42, 0x69, 0x48, 0x10, 0xa9, 0x1c, 0x33, 0x26, 0x34, 0xd8, 0xd3, 0xb3, 0x3e, 0x48, 0x2a, 0x05, 0x82, 0xa7, 0x31,
0x7c, 0xbd, 0xa0, 0x36, 0x1f, 0x56, 0xee, 0x40, 0xb7, 0x61, 0x59, 0x38, 0x49, 0x99, 0x47, 0xe3, 0x8b, 0x73, 0xc6, 0x79, 0xc4, 0xc6, 0x66, 0x41, 0x1d, 0x31, 0xac, 0xda, 0x41, 0x6e, 0xc1, 0x86,
0xec, 0x24, 0xc8, 0x06, 0x19, 0x89, 0x68, 0xaf, 0xc3, 0xc7, 0x57, 0x75, 0xa1, 0xbb, 0xb0, 0x5e, 0x74, 0x92, 0xf2, 0x80, 0x27, 0xf9, 0x49, 0x98, 0x0f, 0x73, 0x16, 0xf3, 0x7e, 0x57, 0x8c, 0xaf,
0x80, 0x53, 0x32, 0x24, 0xc1, 0x29, 0xf1, 0x7b, 0x5d, 0xfe, 0xd5, 0x79, 0xdd, 0xe8, 0x3a, 0xb4, 0xeb, 0x22, 0x1f, 0xc0, 0xa5, 0x12, 0x9c, 0xb1, 0x11, 0x0b, 0x4f, 0xd9, 0xb8, 0xdf, 0x13, 0x5f,
0x99, 0x6f, 0x38, 0x49, 0x7c, 0x8f, 0x92, 0xac, 0x37, 0xcf, 0xcf, 0xc1, 0x84, 0xd0, 0x1d, 0xe8, 0x9d, 0xd7, 0x4d, 0xae, 0x41, 0x07, 0x7d, 0xc3, 0x59, 0x3a, 0x0e, 0x38, 0xcb, 0xfb, 0x2b, 0xe2,
0x26, 0x44, 0x58, 0xe1, 0x13, 0x1a, 0x0e, 0xb3, 0xde, 0x02, 0x37, 0x7d, 0x6d, 0x79, 0xd9, 0x98, 0x1c, 0x6c, 0x88, 0xbc, 0x07, 0xbd, 0x94, 0x49, 0x2b, 0x7c, 0xc2, 0xa3, 0x51, 0xde, 0x5f, 0x15,
0xfc, 0xba, 0xf6, 0x08, 0xbc, 0x0a, 0xcb, 0xfb, 0x41, 0x46, 0xa5, 0x2c, 0x69, 0xfd, 0xb6, 0x07, 0xa6, 0xaf, 0xa3, 0x2e, 0x1b, 0xca, 0xaf, 0xef, 0x8e, 0xa0, 0x17, 0x61, 0x63, 0x3f, 0xcc, 0xb9,
0x2b, 0x36, 0x2c, 0x6f, 0xdb, 0x6d, 0x68, 0x4a, 0xc1, 0xc8, 0x7a, 0x6d, 0x4e, 0x7c, 0x45, 0x12, 0x92, 0x25, 0xa3, 0xdf, 0xf6, 0x60, 0xd3, 0x85, 0xd5, 0x6d, 0xbb, 0x05, 0x2d, 0x25, 0x18, 0x79,
0xb7, 0x64, 0xd2, 0xd5, 0xa3, 0xf0, 0x6f, 0xd5, 0xa0, 0xce, 0x6e, 0xd2, 0xf9, 0xb7, 0xce, 0xbc, 0xbf, 0x23, 0x88, 0x6f, 0x2a, 0xe2, 0x8e, 0x4c, 0xfa, 0x66, 0x14, 0xfd, 0xad, 0x06, 0x34, 0xf1,
0xc2, 0x35, 0xeb, 0x0a, 0x9b, 0x0a, 0x75, 0xc6, 0x52, 0xa8, 0xdc, 0x27, 0x9e, 0x52, 0x22, 0xf9, 0x26, 0x9d, 0x7f, 0xeb, 0xec, 0x2b, 0xdc, 0x70, 0xae, 0xb0, 0xad, 0x50, 0x17, 0x1c, 0x85, 0x2a,
0x2d, 0x64, 0xd2, 0x40, 0xf2, 0xfe, 0x94, 0x0c, 0x4f, 0xb9, 0x60, 0xea, 0x7e, 0x86, 0x30, 0xb1, 0x7c, 0xe2, 0x39, 0x67, 0x8a, 0xdf, 0x52, 0x26, 0x2d, 0xa4, 0xe8, 0xcf, 0xd8, 0xe8, 0x54, 0x08,
0x65, 0x86, 0x8c, 0x7f, 0x2d, 0xa4, 0x52, 0xb7, 0x55, 0x1f, 0xff, 0x72, 0x2e, 0xef, 0xe3, 0xdf, 0xa6, 0xe9, 0x47, 0x04, 0xc5, 0x16, 0x0d, 0x99, 0xf8, 0x5a, 0x4a, 0xa5, 0x69, 0xeb, 0x3e, 0xf1,
0xf5, 0x60, 0x2e, 0x88, 0x8e, 0xe2, 0x49, 0xe4, 0x73, 0x09, 0x6c, 0xba, 0xaa, 0xc9, 0x2e, 0x79, 0xe5, 0x72, 0xd1, 0x27, 0xbe, 0xeb, 0xc3, 0x72, 0x18, 0x1f, 0x25, 0xb3, 0x78, 0x2c, 0x24, 0xb0,
0xc2, 0xfd, 0x9f, 0x60, 0x4c, 0xa4, 0xe8, 0xe5, 0x00, 0x46, 0xcc, 0xd1, 0xc9, 0xb8, 0x4e, 0xd1, 0xe5, 0xeb, 0x26, 0x5e, 0xf2, 0x54, 0xf8, 0x3f, 0xe1, 0x94, 0x29, 0xd1, 0x2b, 0x00, 0x4a, 0xd0,
0x4c, 0xfe, 0x18, 0x96, 0x0c, 0x4c, 0x72, 0xf8, 0x06, 0x34, 0xd8, 0xee, 0x95, 0xc7, 0xac, 0xce, 0xd1, 0xc9, 0x85, 0x4e, 0x31, 0x4c, 0x7e, 0x1f, 0xd6, 0x2d, 0x4c, 0x71, 0xf8, 0x3a, 0x2c, 0xe2,
0x8e, 0x2b, 0x23, 0xd1, 0x83, 0x17, 0x61, 0xfe, 0x29, 0xa1, 0x9f, 0x46, 0xc7, 0xb1, 0xa2, 0xf4, 0xee, 0xb5, 0xc7, 0xac, 0xcf, 0x4e, 0x28, 0x23, 0xd9, 0x43, 0xd7, 0x60, 0xe5, 0x63, 0xc6, 0x3f,
0xdf, 0x35, 0x58, 0xd0, 0x90, 0x24, 0xb4, 0x01, 0x0b, 0x81, 0x4f, 0x22, 0x1a, 0xd0, 0xe9, 0xc0, 0x89, 0x8f, 0x13, 0x4d, 0xe9, 0xbf, 0x1a, 0xb0, 0x6a, 0x20, 0x45, 0x68, 0x1b, 0x56, 0xc3, 0x31,
0xf2, 0xa7, 0x8a, 0x30, 0x53, 0xef, 0x5e, 0x18, 0x78, 0x99, 0x54, 0x10, 0xa2, 0x81, 0x76, 0x60, 0x8b, 0x79, 0xc8, 0xe7, 0x43, 0xc7, 0x9f, 0x2a, 0xc3, 0xa8, 0xde, 0x83, 0x28, 0x0c, 0x72, 0xa5,
0x85, 0xc9, 0x96, 0x12, 0x17, 0x7d, 0xec, 0xc2, 0x8d, 0xab, 0xec, 0x63, 0xd7, 0x81, 0xe1, 0x42, 0x20, 0x64, 0x83, 0xec, 0xc2, 0x26, 0xca, 0x96, 0x16, 0x17, 0x73, 0xec, 0xd2, 0x8d, 0xab, 0xed,
0x01, 0xe5, 0x9f, 0x08, 0x65, 0x56, 0xd5, 0xc5, 0xb8, 0x26, 0x28, 0xb1, 0x2d, 0x37, 0xf8, 0xb8, 0xc3, 0xeb, 0x80, 0xb8, 0x54, 0x40, 0xc5, 0x27, 0x52, 0x99, 0xd5, 0x75, 0x21, 0xd7, 0x24, 0x25,
0x1c, 0x28, 0x45, 0x36, 0xb3, 0xc2, 0x85, 0x2c, 0x46, 0x36, 0x46, 0x74, 0xd4, 0x2c, 0x45, 0x47, 0xdc, 0xf2, 0xa2, 0x18, 0x57, 0x00, 0x95, 0xc8, 0x66, 0x49, 0xba, 0x90, 0xe5, 0xc8, 0xc6, 0x8a,
0x1b, 0xb0, 0x90, 0x4d, 0xa3, 0x21, 0xf1, 0x07, 0x34, 0x66, 0xf3, 0x06, 0x11, 0x3f, 0x9d, 0xa6, 0x8e, 0x5a, 0x95, 0xe8, 0x68, 0x1b, 0x56, 0xf3, 0x79, 0x3c, 0x62, 0xe3, 0x21, 0x4f, 0x70, 0xde,
0x5b, 0x84, 0x79, 0x1c, 0x47, 0x32, 0x1a, 0x11, 0xca, 0xf5, 0x42, 0xd3, 0x55, 0x4d, 0xa6, 0x62, 0x30, 0x16, 0xa7, 0xd3, 0xf2, 0xcb, 0xb0, 0x88, 0xe3, 0x58, 0xce, 0x63, 0xc6, 0x85, 0x5e, 0x68,
0xf9, 0x10, 0x21, 0xf4, 0x2d, 0x57, 0xb6, 0xf0, 0xf7, 0xb9, 0xa9, 0xd3, 0xa1, 0xda, 0x0b, 0x7e, 0xf9, 0xba, 0x89, 0x2a, 0x56, 0x0c, 0x91, 0x42, 0xdf, 0xf6, 0x55, 0x8b, 0x7e, 0x5f, 0x98, 0x3a,
0x0f, 0xd1, 0x15, 0x68, 0x89, 0xf9, 0xb3, 0x13, 0x4f, 0x05, 0x95, 0x1c, 0x38, 0x3c, 0xf1, 0x58, 0x13, 0xaa, 0x7d, 0x2e, 0xee, 0x21, 0xb9, 0x02, 0x6d, 0x39, 0x7f, 0x7e, 0x12, 0xe8, 0xa0, 0x52,
0x24, 0x62, 0x6d, 0x49, 0x48, 0x7c, 0x9b, 0x63, 0x7b, 0x62, 0x47, 0x37, 0x61, 0x5e, 0x05, 0x81, 0x00, 0x87, 0x27, 0x01, 0x46, 0x22, 0xce, 0x96, 0xa4, 0xc4, 0x77, 0x04, 0xb6, 0x27, 0x77, 0xf4,
0xd9, 0x20, 0x24, 0xc7, 0x54, 0xb9, 0xce, 0xd1, 0x64, 0xcc, 0xa6, 0xcb, 0xf6, 0xc9, 0x31, 0xc5, 0x16, 0xac, 0xe8, 0x20, 0x30, 0x1f, 0x46, 0xec, 0x98, 0x6b, 0xd7, 0x39, 0x9e, 0x4d, 0x71, 0xba,
0xcf, 0x60, 0x49, 0xde, 0xb6, 0xcf, 0x13, 0xa2, 0xa6, 0xfe, 0x66, 0x51, 0x9b, 0x0b, 0x73, 0xbb, 0x7c, 0x9f, 0x1d, 0x73, 0xfa, 0x08, 0xd6, 0xd5, 0x6d, 0xfb, 0x2c, 0x65, 0x7a, 0xea, 0x6f, 0x96,
0x2c, 0xa5, 0xc8, 0xf4, 0xf7, 0x0b, 0x2a, 0x1e, 0xbb, 0x80, 0x64, 0xf7, 0xc3, 0x30, 0xce, 0x88, 0xb5, 0xb9, 0x34, 0xb7, 0x1b, 0x4a, 0x8a, 0x6c, 0x7f, 0xbf, 0xa4, 0xe2, 0xa9, 0x0f, 0x44, 0x75,
0x24, 0x88, 0xa1, 0x33, 0x0c, 0xe3, 0xac, 0x18, 0x14, 0x98, 0x18, 0xe3, 0x5b, 0x36, 0x19, 0x0e, 0xdf, 0x8b, 0x92, 0x9c, 0x29, 0x82, 0x14, 0xba, 0xa3, 0x28, 0xc9, 0xcb, 0x41, 0x81, 0x8d, 0x21,
0xd9, 0x2d, 0x15, 0x06, 0x5b, 0x35, 0xf1, 0x5f, 0x3a, 0xb0, 0xcc, 0xa9, 0x29, 0xbd, 0xa0, 0xbd, 0xdf, 0xf2, 0xd9, 0x68, 0x84, 0xb7, 0x54, 0x1a, 0x6c, 0xdd, 0xa4, 0x7f, 0xe1, 0xc1, 0x86, 0xa0,
0xbc, 0x8b, 0x2f, 0xb3, 0x33, 0x34, 0x83, 0x94, 0x15, 0x68, 0x1c, 0xc7, 0xe9, 0x90, 0xc8, 0x99, 0xa6, 0xf5, 0x82, 0xf1, 0xf2, 0x5e, 0x7f, 0x99, 0xdd, 0x91, 0x1d, 0xa4, 0x6c, 0xc2, 0xe2, 0x71,
0x44, 0xe3, 0xa7, 0xe1, 0xb7, 0xfe, 0x8b, 0x03, 0x4b, 0x7c, 0xa9, 0x87, 0xd4, 0xa3, 0x93, 0x4c, 0x92, 0x8d, 0x98, 0x9a, 0x49, 0x36, 0x7e, 0x16, 0x7e, 0xeb, 0x3f, 0x7b, 0xb0, 0x2e, 0x96, 0x7a,
0x6e, 0xff, 0xe7, 0xa1, 0xcb, 0xb6, 0x4a, 0x94, 0xa8, 0xcb, 0x85, 0xae, 0xe8, 0x5b, 0xc9, 0x51, 0xc8, 0x03, 0x3e, 0xcb, 0xd5, 0xf6, 0x7f, 0x1e, 0x7a, 0xb8, 0x55, 0xa6, 0x45, 0x5d, 0x2d, 0x74,
0x31, 0x78, 0xef, 0x92, 0x6b, 0x0f, 0x46, 0x9f, 0x40, 0xc7, 0x8c, 0xe4, 0xf9, 0x9a, 0xdb, 0x3b, 0xd3, 0xdc, 0x4a, 0x81, 0xca, 0xc1, 0x7b, 0x17, 0x7c, 0x77, 0x30, 0xf9, 0x08, 0xba, 0x76, 0x24,
0x97, 0xd5, 0x2e, 0x4b, 0x92, 0xb3, 0x77, 0xc9, 0xb5, 0x3e, 0x40, 0xf7, 0x01, 0xb8, 0x9d, 0xe5, 0x2f, 0xd6, 0xdc, 0xd9, 0xbd, 0xac, 0x77, 0x59, 0x91, 0x9c, 0xbd, 0x0b, 0xbe, 0xf3, 0x01, 0xb9,
0x64, 0x65, 0x50, 0x77, 0xd9, 0x66, 0x92, 0x71, 0x58, 0x7b, 0x97, 0x5c, 0x63, 0xf8, 0x83, 0x26, 0x0d, 0x20, 0xec, 0xac, 0x20, 0xab, 0x82, 0xba, 0xcb, 0x2e, 0x93, 0xac, 0xc3, 0xda, 0xbb, 0xe0,
0xcc, 0x0a, 0xc3, 0x80, 0x9f, 0x42, 0xd7, 0x5a, 0xa9, 0xe5, 0x8f, 0x77, 0x84, 0x3f, 0x5e, 0x0a, 0x5b, 0xc3, 0xef, 0xb6, 0x60, 0x49, 0x1a, 0x06, 0xfa, 0x31, 0xf4, 0x9c, 0x95, 0x3a, 0xfe, 0x78,
0xd7, 0x6a, 0x15, 0xe1, 0xda, 0x9f, 0xd5, 0x00, 0x31, 0x69, 0x2b, 0x1c, 0xe7, 0x87, 0x30, 0x2f, 0x57, 0xfa, 0xe3, 0x95, 0x70, 0xad, 0x51, 0x13, 0xae, 0xfd, 0x69, 0x03, 0x08, 0x4a, 0x5b, 0xe9,
0xd9, 0x6f, 0xbb, 0x62, 0x05, 0x94, 0x5b, 0xb0, 0xd8, 0xb7, 0xfc, 0x91, 0x8e, 0x6b, 0x42, 0x68, 0x38, 0xdf, 0x86, 0x15, 0xc5, 0x7e, 0xd7, 0x15, 0x2b, 0xa1, 0xc2, 0x82, 0x25, 0x63, 0xc7, 0x1f,
0x0b, 0x90, 0xd1, 0x54, 0x31, 0xb8, 0xd0, 0xfd, 0x15, 0x3d, 0x4c, 0x49, 0x09, 0x67, 0x42, 0x45, 0xe9, 0xfa, 0x36, 0x44, 0x6e, 0x02, 0xb1, 0x9a, 0x3a, 0x06, 0x97, 0xba, 0xbf, 0xa6, 0x07, 0x95,
0x9f, 0xd2, 0xff, 0xaa, 0xf3, 0xf3, 0xad, 0xec, 0xe3, 0x29, 0x9f, 0x09, 0x0b, 0xf0, 0x3d, 0xaa, 0x94, 0x74, 0x26, 0x74, 0xf4, 0xa9, 0xfc, 0xaf, 0xa6, 0x38, 0xdf, 0xda, 0x3e, 0x91, 0xf2, 0x99,
0x3c, 0x16, 0xd5, 0x2e, 0x0a, 0xd2, 0xec, 0x7b, 0x05, 0x69, 0xae, 0x24, 0x48, 0x3f, 0x72, 0x60, 0x61, 0x80, 0x1f, 0x70, 0xed, 0xb1, 0xe8, 0x76, 0x59, 0x90, 0x96, 0x5e, 0x29, 0x48, 0xcb, 0x15,
0x91, 0xf1, 0xc8, 0x92, 0xa3, 0x7b, 0xc0, 0xc5, 0xf8, 0x82, 0x62, 0x64, 0x8d, 0xfd, 0xc9, 0xa5, 0x41, 0xfa, 0xb1, 0x07, 0x6b, 0xc8, 0x23, 0x47, 0x8e, 0x3e, 0x04, 0x21, 0xc6, 0xaf, 0x29, 0x46,
0xe8, 0x2e, 0xb4, 0x38, 0xc1, 0x38, 0x21, 0x91, 0x14, 0xa2, 0x9e, 0x2d, 0x44, 0xb9, 0x06, 0xd9, 0xce, 0xd8, 0x9f, 0x5e, 0x8a, 0x3e, 0x80, 0xb6, 0x20, 0x98, 0xa4, 0x2c, 0x56, 0x42, 0xd4, 0x77,
0xbb, 0xe4, 0xe6, 0x83, 0x0d, 0x11, 0xfa, 0x27, 0x07, 0xda, 0x72, 0x99, 0xff, 0x6b, 0x37, 0xb8, 0x85, 0xa8, 0xd0, 0x20, 0x7b, 0x17, 0xfc, 0x62, 0xb0, 0x25, 0x42, 0xff, 0xe8, 0x41, 0x47, 0x2d,
0x0f, 0x4d, 0x26, 0x4d, 0x86, 0x97, 0xa9, 0xdb, 0x4c, 0x4b, 0x8f, 0x59, 0x14, 0xc2, 0xcc, 0x92, 0xf3, 0x7f, 0xec, 0x06, 0x0f, 0xa0, 0x85, 0xd2, 0x64, 0x79, 0x99, 0xa6, 0x8d, 0x5a, 0x7a, 0x8a,
0xe5, 0x02, 0x17, 0x61, 0x66, 0x63, 0xb8, 0xb2, 0xcc, 0x06, 0x34, 0x08, 0x07, 0xaa, 0x57, 0x26, 0x51, 0x08, 0x9a, 0x25, 0xc7, 0x05, 0x2e, 0xc3, 0x68, 0x63, 0x84, 0xb2, 0xcc, 0x87, 0x3c, 0x8c,
0xbd, 0xaa, 0xba, 0x98, 0xce, 0xc8, 0xa8, 0x37, 0x22, 0xd2, 0x7c, 0x88, 0x06, 0x5e, 0x87, 0x55, 0x86, 0xba, 0x57, 0x25, 0xbd, 0xea, 0xba, 0x50, 0x67, 0xe4, 0x3c, 0x98, 0x30, 0x65, 0x3e, 0x64,
0xb9, 0x21, 0x5b, 0x9a, 0xf1, 0x7f, 0x02, 0xac, 0x15, 0x7b, 0xb4, 0xfb, 0x23, 0x7d, 0xba, 0x30, 0x83, 0x5e, 0x82, 0x8b, 0x6a, 0x43, 0xae, 0x34, 0xd3, 0xff, 0x00, 0xd8, 0x2a, 0xf7, 0x18, 0xf7,
0x18, 0x1f, 0xc5, 0xda, 0x3d, 0x74, 0x4c, 0x77, 0xcf, 0xea, 0x42, 0xc7, 0xb0, 0xaa, 0xac, 0x24, 0x47, 0xf9, 0x74, 0x51, 0x38, 0x3d, 0x4a, 0x8c, 0x7b, 0xe8, 0xd9, 0xee, 0x9e, 0xd3, 0x45, 0x8e,
0xe3, 0x68, 0x6e, 0x13, 0x6b, 0xdc, 0xbc, 0xdf, 0xb6, 0x25, 0xa0, 0x30, 0x9f, 0x82, 0xcd, 0x2b, 0xe1, 0xa2, 0xb6, 0x92, 0xc8, 0xd1, 0xc2, 0x26, 0x36, 0x84, 0x79, 0xbf, 0xe5, 0x4a, 0x40, 0x69,
0x57, 0x4d, 0x0e, 0x8d, 0xa0, 0xa7, 0xad, 0xb1, 0xd4, 0xcd, 0x86, 0xc5, 0x66, 0x53, 0x7d, 0xed, 0x3e, 0x0d, 0xdb, 0x57, 0xae, 0x9e, 0x1c, 0x99, 0x40, 0xdf, 0x58, 0x63, 0xa5, 0x9b, 0x2d, 0x8b,
0xdd, 0x53, 0x71, 0x3d, 0xe2, 0x2b, 0xf4, 0x5c, 0x62, 0xe8, 0x35, 0x5c, 0x53, 0x7d, 0x5c, 0xf7, 0x8d, 0x53, 0x7d, 0xed, 0xe5, 0x53, 0x09, 0x3d, 0x32, 0xd6, 0xe8, 0xb9, 0xc4, 0xc8, 0x33, 0x78,
0x96, 0xa7, 0xab, 0x5f, 0x64, 0x67, 0x4f, 0xd8, 0xb7, 0xf6, 0x9c, 0xef, 0xa1, 0xdb, 0xff, 0x7b, 0x53, 0xf7, 0x09, 0xdd, 0x5b, 0x9d, 0xae, 0xf9, 0x3a, 0x3b, 0x7b, 0x88, 0xdf, 0xba, 0x73, 0xbe,
0x07, 0xe6, 0x6d, 0x6a, 0x4c, 0x6a, 0x64, 0x90, 0xa0, 0x74, 0x83, 0xf2, 0x71, 0x0a, 0x70, 0x39, 0x82, 0xee, 0xe0, 0xef, 0x3c, 0x58, 0x71, 0xa9, 0xa1, 0xd4, 0xa8, 0x20, 0x41, 0xeb, 0x06, 0xed,
0xcc, 0xa9, 0x55, 0x85, 0x39, 0x66, 0x30, 0x33, 0xf3, 0xbe, 0x60, 0xa6, 0x7e, 0xb1, 0x60, 0xa6, 0xe3, 0x94, 0xe0, 0x6a, 0x98, 0xd3, 0xa8, 0x0b, 0x73, 0xec, 0x60, 0x66, 0xe1, 0x55, 0xc1, 0x4c,
0x51, 0x15, 0xcc, 0xf4, 0xff, 0xb4, 0x06, 0xa8, 0x7c, 0xba, 0xe8, 0x89, 0x88, 0xb3, 0x22, 0x12, 0xf3, 0xf5, 0x82, 0x99, 0xc5, 0xba, 0x60, 0x66, 0xf0, 0x27, 0x0d, 0x20, 0xd5, 0xd3, 0x25, 0x0f,
0x4a, 0x15, 0xf1, 0xd1, 0x85, 0x04, 0x44, 0xc1, 0xea, 0x63, 0x26, 0xa8, 0xa6, 0x0a, 0x30, 0x9d, 0x65, 0x9c, 0x15, 0xb3, 0x48, 0xa9, 0x88, 0x77, 0x5f, 0x4b, 0x40, 0x34, 0xac, 0x3f, 0x46, 0x41,
0x8d, 0xae, 0x5b, 0xd5, 0x85, 0x36, 0x61, 0x31, 0xbf, 0x3b, 0x61, 0xae, 0x2b, 0x1a, 0x6e, 0x09, 0xb5, 0x55, 0x80, 0xed, 0x6c, 0xf4, 0xfc, 0xba, 0x2e, 0x72, 0x03, 0xd6, 0x8a, 0xbb, 0x13, 0x15,
0x2f, 0x44, 0x62, 0xf5, 0xf7, 0x47, 0x62, 0x8d, 0xf7, 0x47, 0x62, 0xb3, 0xc5, 0x48, 0xac, 0xff, 0xba, 0x62, 0xd1, 0xaf, 0xe0, 0xa5, 0x48, 0xac, 0xf9, 0xea, 0x48, 0x6c, 0xf1, 0xd5, 0x91, 0xd8,
0x06, 0xba, 0x96, 0x80, 0xfc, 0xd4, 0x98, 0x53, 0xf4, 0x69, 0x84, 0x28, 0x58, 0x58, 0xff, 0x3f, 0x52, 0x39, 0x12, 0x1b, 0x3c, 0x87, 0x9e, 0x23, 0x20, 0x3f, 0x33, 0xe6, 0x94, 0x7d, 0x1a, 0x29,
0x6a, 0x80, 0xca, 0x32, 0xfa, 0xff, 0xb9, 0x04, 0x2e, 0x70, 0x96, 0x9a, 0x99, 0x91, 0x02, 0x67, 0x0a, 0x0e, 0x36, 0xf8, 0xf7, 0x06, 0x90, 0xaa, 0x8c, 0xfe, 0x5f, 0x2e, 0x41, 0x08, 0x9c, 0xa3,
0x29, 0x98, 0xff, 0x4b, 0xc5, 0xf9, 0x11, 0x2c, 0xa5, 0x64, 0x18, 0x9f, 0x92, 0xd4, 0x88, 0x85, 0x66, 0x16, 0x94, 0xc0, 0x39, 0x0a, 0xe6, 0x7f, 0x53, 0x71, 0xbe, 0x0b, 0xeb, 0x19, 0x1b, 0x25,
0xc5, 0x41, 0x95, 0x3b, 0x98, 0x53, 0x67, 0x47, 0x9f, 0x4d, 0x2b, 0xe7, 0x6f, 0x58, 0x8f, 0x62, 0xa7, 0x2c, 0xb3, 0x62, 0x61, 0x79, 0x50, 0xd5, 0x0e, 0x74, 0xea, 0xdc, 0xe8, 0xb3, 0xe5, 0xe4,
0x10, 0xfa, 0x4d, 0x58, 0x11, 0x4f, 0x2c, 0x0f, 0x04, 0x29, 0xe5, 0x57, 0xdc, 0x80, 0xce, 0x99, 0xfc, 0x2d, 0xeb, 0x51, 0x0e, 0x42, 0xbf, 0x09, 0x9b, 0xf2, 0x89, 0xe5, 0xae, 0x24, 0xa5, 0xfd,
0x48, 0xbf, 0x0d, 0xe2, 0x28, 0x9c, 0x4a, 0x43, 0xd3, 0x96, 0xd8, 0xe7, 0x51, 0x38, 0xc5, 0x77, 0x8a, 0xeb, 0xd0, 0x3d, 0x93, 0xe9, 0xb7, 0x61, 0x12, 0x47, 0x73, 0x65, 0x68, 0x3a, 0x0a, 0xfb,
0x60, 0xb5, 0xf0, 0x69, 0x9e, 0x17, 0xb2, 0xd5, 0xb3, 0x6a, 0x32, 0xc5, 0x2f, 0xcf, 0xc3, 0x9e, 0x2c, 0x8e, 0xe6, 0xf4, 0x47, 0x1e, 0x5c, 0x2c, 0x7d, 0x5b, 0x64, 0xd9, 0xa5, 0x42, 0x76, 0xb5,
0x0e, 0xef, 0xc0, 0x5a, 0xb1, 0xe3, 0xbd, 0xc4, 0x3e, 0x01, 0xf4, 0xed, 0x09, 0x49, 0xa7, 0x3c, 0xb4, 0x0b, 0xe2, 0x16, 0xd5, 0x6d, 0xb0, 0xb6, 0x28, 0xcd, 0x56, 0xb5, 0x03, 0x59, 0x38, 0x8b,
0xc5, 0xae, 0xb3, 0x98, 0xeb, 0xc5, 0x58, 0x77, 0x36, 0x99, 0x1c, 0x7d, 0x8b, 0x4c, 0xd5, 0xcb, 0xab, 0xe3, 0xe5, 0xc1, 0xd4, 0x75, 0xa1, 0x95, 0x51, 0x87, 0xef, 0xee, 0x8d, 0xee, 0xc2, 0x56,
0x44, 0x4d, 0xbf, 0x4c, 0xe0, 0xfb, 0xb0, 0x6c, 0x11, 0xd0, 0x6f, 0x04, 0xb3, 0x3c, 0x4d, 0xaf, 0xb9, 0xa3, 0xc8, 0x68, 0xb9, 0x4b, 0xd6, 0x4d, 0xfa, 0x11, 0x90, 0x6f, 0xcf, 0x58, 0x36, 0x17,
0xe2, 0x40, 0x3b, 0x95, 0x2f, 0xfb, 0xf0, 0x1f, 0x3a, 0x30, 0xb3, 0x17, 0x27, 0x66, 0x7a, 0xc6, 0xf9, 0x7c, 0x93, 0x32, 0xbd, 0x54, 0x0e, 0xac, 0x97, 0xd2, 0xd9, 0xd1, 0xb7, 0xd8, 0x5c, 0x3f,
0xb1, 0xd3, 0x33, 0x52, 0xef, 0x0d, 0xb4, 0x5a, 0xab, 0xc9, 0xab, 0x68, 0x82, 0x4c, 0x6b, 0x79, 0x83, 0x34, 0xcc, 0x33, 0x08, 0xbd, 0x0d, 0x1b, 0x0e, 0x01, 0xc3, 0xaa, 0x25, 0xf1, 0x26, 0xa0,
0x63, 0xca, 0x22, 0xa1, 0xe3, 0x38, 0x3d, 0xf3, 0x52, 0x5f, 0xca, 0x5a, 0x01, 0x65, 0xcb, 0xcf, 0x83, 0x4e, 0xf7, 0xdd, 0x40, 0xf5, 0xd1, 0x3f, 0xf4, 0x60, 0x61, 0x2f, 0x49, 0xed, 0x5c, 0x90,
0x6f, 0x3c, 0xfb, 0xc9, 0x6c, 0x3d, 0xcf, 0x51, 0x4d, 0x65, 0xf0, 0x26, 0x5b, 0xf8, 0x87, 0x0e, 0xe7, 0xe6, 0x82, 0x94, 0x92, 0x1d, 0x1a, 0x1d, 0xda, 0x50, 0xf7, 0xde, 0x06, 0x51, 0x45, 0x06,
0x34, 0xf8, 0x5a, 0x99, 0x80, 0x0a, 0xc3, 0xc8, 0x5f, 0x9b, 0x78, 0x0a, 0xcc, 0x11, 0x02, 0x5a, 0x53, 0x8e, 0x61, 0xd7, 0x71, 0x92, 0x9d, 0x05, 0xd9, 0x58, 0xf1, 0xaf, 0x84, 0xe2, 0xf2, 0x0b,
0x80, 0x0b, 0x6f, 0x50, 0xb5, 0xe2, 0x1b, 0x14, 0x8b, 0x15, 0x45, 0x2b, 0x7f, 0xdc, 0xc9, 0x01, 0xf5, 0x82, 0x3f, 0xd1, 0xb1, 0x10, 0x09, 0xb1, 0xb9, 0x8a, 0x14, 0x55, 0x8b, 0xfe, 0xd0, 0x83,
0x74, 0x0d, 0xea, 0x27, 0x71, 0xa2, 0xcc, 0x0f, 0xa8, 0x9c, 0x47, 0x9c, 0xb8, 0x1c, 0xc7, 0x9b, 0x45, 0xb1, 0x56, 0xbc, 0x0d, 0xf2, 0x7c, 0xc5, 0xd3, 0x96, 0xc8, 0xb7, 0x79, 0xf2, 0x36, 0x94,
0xb0, 0xf0, 0x2c, 0xf6, 0x89, 0x11, 0x36, 0x9f, 0x7b, 0x4c, 0xf8, 0xd7, 0x1d, 0x68, 0xaa, 0xc1, 0xe0, 0xd2, 0x83, 0x57, 0xa3, 0xfc, 0xe0, 0x85, 0x81, 0xa9, 0x6c, 0x15, 0x2f, 0x49, 0x05, 0x40,
0x68, 0x03, 0xea, 0xcc, 0x8c, 0x14, 0x7c, 0x36, 0x9d, 0xb9, 0x64, 0xe3, 0x5c, 0x3e, 0x82, 0xdd, 0xde, 0x84, 0xe6, 0x49, 0x92, 0x6a, 0x5b, 0x07, 0x3a, 0xc1, 0x92, 0xa4, 0xbe, 0xc0, 0xe9, 0x0d,
0x6a, 0x1e, 0xb8, 0xe5, 0x36, 0x5e, 0x85, 0x6d, 0xb9, 0xfd, 0x64, 0xbe, 0x32, 0x5f, 0x73, 0xc1, 0x58, 0x7d, 0x94, 0x8c, 0x99, 0x15, 0xa3, 0x9f, 0x7b, 0x4c, 0xf4, 0xd7, 0x3d, 0x68, 0xe9, 0xc1,
0xd0, 0x14, 0x50, 0xfc, 0x57, 0x0e, 0x74, 0xad, 0x39, 0x98, 0xf7, 0x1c, 0x7a, 0x19, 0x95, 0xd9, 0x64, 0x1b, 0x9a, 0x68, 0xb3, 0x4a, 0x0e, 0xa2, 0x49, 0x93, 0xe2, 0x38, 0x5f, 0x8c, 0x40, 0x15,
0x1e, 0xc9, 0x44, 0x13, 0x32, 0x53, 0x2c, 0x35, 0x3b, 0xc5, 0xa2, 0x43, 0xfc, 0x19, 0x33, 0xc4, 0x22, 0xa2, 0xc4, 0xc2, 0xa1, 0xd0, 0x31, 0x62, 0x61, 0xac, 0xd1, 0x31, 0x17, 0x6b, 0x2e, 0x59,
0xbf, 0x0d, 0x2d, 0x99, 0x4f, 0x21, 0x8a, 0x6f, 0xea, 0xb6, 0xb2, 0x19, 0x55, 0x4e, 0x36, 0x1f, 0xb5, 0x12, 0x4a, 0xff, 0xd2, 0x83, 0x9e, 0x33, 0x07, 0xba, 0xea, 0x51, 0x90, 0x73, 0x95, 0x5a,
0xc4, 0xe8, 0x0c, 0xe3, 0x30, 0x4e, 0xe5, 0xb3, 0x98, 0x68, 0xe0, 0xfb, 0xd0, 0x36, 0xc6, 0xb3, 0x52, 0x4c, 0xb4, 0x21, 0x3b, 0x9f, 0xd3, 0x70, 0xf3, 0x39, 0x26, 0x9f, 0xb0, 0x60, 0xe7, 0x13,
0x65, 0x44, 0x84, 0x9e, 0xc5, 0xe9, 0x2b, 0x95, 0xe9, 0x91, 0x4d, 0xfd, 0x16, 0x51, 0xcb, 0xdf, 0x6e, 0x41, 0x5b, 0x25, 0x6f, 0x98, 0xe6, 0x9b, 0x56, 0x0d, 0x38, 0xa3, 0x4e, 0x00, 0x17, 0x83,
0x22, 0xf0, 0x5f, 0x3b, 0xd0, 0x65, 0x92, 0x12, 0x44, 0xa3, 0x83, 0x38, 0x0c, 0x86, 0x53, 0x2e, 0x90, 0xce, 0x28, 0x89, 0x92, 0x4c, 0xbd, 0xc1, 0xc9, 0x06, 0xbd, 0x0d, 0x1d, 0x6b, 0x3c, 0x2e,
0x31, 0x4a, 0x28, 0x06, 0x3e, 0x09, 0xa9, 0xa7, 0x25, 0xc6, 0x86, 0x99, 0xbd, 0x1e, 0x07, 0x11, 0x23, 0x66, 0xfc, 0x2c, 0xc9, 0x9e, 0xea, 0xb4, 0x92, 0x6a, 0x9a, 0x87, 0x8f, 0x46, 0xf1, 0xf0,
0xd7, 0x22, 0x52, 0x5e, 0x74, 0x9b, 0x49, 0x3e, 0x33, 0x26, 0x47, 0x5e, 0x46, 0x06, 0x63, 0xe6, 0x41, 0xff, 0xca, 0x83, 0x1e, 0x4a, 0x4a, 0x18, 0x4f, 0x0e, 0x92, 0x28, 0x1c, 0xcd, 0x85, 0xc4,
0xeb, 0x4b, 0xf5, 0x69, 0x81, 0x4c, 0x29, 0x32, 0x20, 0xf5, 0x28, 0x19, 0x8c, 0x83, 0x30, 0x0c, 0x68, 0xa1, 0x18, 0x8e, 0x59, 0xc4, 0x03, 0x23, 0x31, 0x2e, 0x8c, 0xce, 0xc1, 0x34, 0x8c, 0x85,
0xc4, 0x58, 0x21, 0xe1, 0x55, 0x5d, 0xf8, 0x6f, 0x6b, 0xd0, 0x96, 0x6a, 0xe2, 0xb1, 0x3f, 0x12, 0xca, 0x52, 0xf2, 0x62, 0xda, 0x28, 0xf9, 0x68, 0xb9, 0x8e, 0x82, 0x9c, 0x0d, 0xa7, 0x18, 0x58,
0x69, 0x49, 0xe9, 0x44, 0xe8, 0xeb, 0x67, 0x20, 0xaa, 0xdf, 0x72, 0x3b, 0x0c, 0xa4, 0x78, 0xac, 0x28, 0x5d, 0xed, 0x80, 0xa8, 0x3e, 0x10, 0xc8, 0x02, 0xce, 0x86, 0xd3, 0x30, 0x8a, 0x42, 0x39,
0x33, 0xe5, 0x63, 0xbd, 0x0a, 0x2d, 0x26, 0x5e, 0x77, 0xb8, 0x7f, 0x23, 0x9e, 0x7f, 0x73, 0x40, 0x56, 0x4a, 0x78, 0x5d, 0x17, 0xfd, 0x9b, 0x06, 0x74, 0x94, 0x9a, 0x78, 0x30, 0x9e, 0xc8, 0x1c,
0xf5, 0xee, 0xf0, 0xde, 0x46, 0xde, 0xcb, 0x01, 0xcb, 0xa3, 0x99, 0x2d, 0x78, 0x34, 0x77, 0xa1, 0xa8, 0xf2, 0x58, 0xcc, 0xf5, 0xb3, 0x10, 0xdd, 0xef, 0xf8, 0x38, 0x16, 0x52, 0x3e, 0xd6, 0x85,
0x23, 0xc9, 0x70, 0xbe, 0xf3, 0x58, 0x26, 0x17, 0x70, 0xeb, 0x4c, 0x5c, 0x6b, 0xa4, 0xfa, 0x72, 0xea, 0xb1, 0x5e, 0x85, 0x36, 0x8a, 0xd7, 0x7b, 0xc2, 0x99, 0x92, 0x6f, 0xcd, 0x05, 0xa0, 0x7b,
0x47, 0x7d, 0xd9, 0x7c, 0xdf, 0x97, 0x6a, 0x24, 0x5e, 0x85, 0x65, 0xc9, 0xbc, 0xa7, 0xa9, 0x97, 0x77, 0x45, 0xef, 0x62, 0xd1, 0x2b, 0x00, 0xc7, 0x7d, 0x5a, 0x2a, 0xb9, 0x4f, 0x1f, 0x40, 0x57,
0x9c, 0x28, 0xd5, 0xeb, 0xeb, 0xb7, 0x48, 0x0e, 0xa3, 0x4d, 0x68, 0xb0, 0xcf, 0x94, 0xf6, 0xab, 0x91, 0x11, 0x7c, 0x17, 0x81, 0x53, 0x21, 0xe0, 0xce, 0x99, 0xf8, 0xce, 0x48, 0xfd, 0xe5, 0xae,
0xbe, 0x74, 0x62, 0x08, 0xda, 0x80, 0x06, 0xf1, 0x47, 0x44, 0xb9, 0xd4, 0xc8, 0x0e, 0x6d, 0xd8, 0xfe, 0xb2, 0xf5, 0xaa, 0x2f, 0xf5, 0x48, 0x7a, 0x11, 0x36, 0x14, 0xf3, 0x3e, 0xce, 0x82, 0xf4,
0x19, 0xb9, 0x62, 0x00, 0x53, 0x01, 0x0c, 0x2d, 0xa8, 0x00, 0x5b, 0x73, 0xce, 0xb2, 0xe6, 0xa7, 0x44, 0xab, 0xde, 0xb1, 0x79, 0xf8, 0x14, 0x30, 0xb9, 0x01, 0x8b, 0xf8, 0x99, 0xd6, 0x7e, 0xf5,
0x3e, 0x5e, 0x01, 0xf4, 0x4c, 0x48, 0xad, 0x99, 0x68, 0xfb, 0xcd, 0x19, 0x68, 0x1b, 0x30, 0xbb, 0x97, 0x4e, 0x0e, 0x21, 0xdb, 0xb0, 0xc8, 0xc6, 0x13, 0xa6, 0xfd, 0x77, 0xe2, 0xc6, 0x51, 0x78,
0xcd, 0x23, 0xb6, 0xe0, 0x81, 0x1f, 0x78, 0x63, 0x42, 0x49, 0x2a, 0x25, 0xb5, 0x80, 0x72, 0x05, 0x46, 0xbe, 0x1c, 0x80, 0x2a, 0x00, 0xd1, 0x92, 0x0a, 0x70, 0x35, 0xe7, 0x12, 0x36, 0x3f, 0x19,
0x7b, 0x3a, 0x1a, 0xc4, 0x13, 0x3a, 0xf0, 0xc9, 0x28, 0x25, 0x22, 0x7f, 0xe1, 0xb8, 0x05, 0x94, 0xd3, 0x4d, 0x20, 0x8f, 0xa4, 0xd4, 0xda, 0x59, 0xbd, 0xdf, 0x5c, 0x80, 0x8e, 0x05, 0xe3, 0x6d,
0x8d, 0x1b, 0x7b, 0xaf, 0xcd, 0x71, 0x42, 0x1e, 0x0a, 0xa8, 0x4a, 0x9b, 0x09, 0x1e, 0xd5, 0xf3, 0x9e, 0xe0, 0x82, 0x87, 0xe3, 0x30, 0x98, 0x32, 0xce, 0x32, 0x25, 0xa9, 0x25, 0x54, 0x28, 0xd8,
0xb4, 0x99, 0xe0, 0x48, 0x51, 0x0f, 0x35, 0x2a, 0xf4, 0xd0, 0xc7, 0xb0, 0x26, 0x34, 0x8e, 0xbc, 0xd3, 0xc9, 0x30, 0x99, 0xf1, 0xe1, 0x98, 0x4d, 0x32, 0x26, 0x0d, 0x9a, 0xe7, 0x97, 0x50, 0x1c,
0x9b, 0x83, 0x82, 0x98, 0x9c, 0xd3, 0xcb, 0xfc, 0x44, 0xb6, 0x66, 0x25, 0xe0, 0x59, 0xf0, 0x7d, 0x37, 0x0d, 0x9e, 0xd9, 0xe3, 0xa4, 0x3c, 0x94, 0x50, 0x9d, 0xa3, 0x93, 0x3c, 0x6a, 0x16, 0x39,
0x11, 0x04, 0x3b, 0x6e, 0x09, 0x67, 0x63, 0xd9, 0x75, 0xb4, 0xc6, 0x8a, 0xbc, 0x7d, 0x09, 0xe7, 0x3a, 0xc9, 0x91, 0xb2, 0x1e, 0x5a, 0xac, 0xd1, 0x43, 0xef, 0xc3, 0x96, 0xd4, 0x38, 0xea, 0x6e,
0x63, 0xbd, 0xd7, 0xf6, 0xd8, 0x96, 0x1c, 0x5b, 0xc0, 0x71, 0x17, 0xda, 0x87, 0x34, 0x4e, 0xd4, 0x0e, 0x4b, 0x62, 0x72, 0x4e, 0x2f, 0x3a, 0xa5, 0xb8, 0x66, 0x2d, 0xe0, 0x79, 0xf8, 0x7d, 0x19,
0xa1, 0xcc, 0x43, 0x47, 0x34, 0xe5, 0x5b, 0xcd, 0x15, 0xb8, 0xcc, 0xa5, 0xe8, 0x79, 0x9c, 0xc4, 0x71, 0x7b, 0x7e, 0x05, 0xc7, 0xb1, 0x78, 0x1d, 0x9d, 0xb1, 0xf2, 0x91, 0xa0, 0x82, 0x8b, 0xb1,
0x61, 0x3c, 0x9a, 0x1e, 0x4e, 0x8e, 0xb2, 0x61, 0x1a, 0x24, 0xcc, 0xdd, 0xc5, 0xff, 0xe8, 0xc0, 0xc1, 0x33, 0x77, 0x6c, 0x5b, 0x8d, 0x2d, 0xe1, 0xb4, 0x07, 0x9d, 0x43, 0x9e, 0xa4, 0xfa, 0x50,
0xb2, 0xd5, 0x2b, 0x23, 0xf4, 0x9f, 0x15, 0x22, 0xad, 0xd3, 0xeb, 0x42, 0xf0, 0x96, 0x0c, 0x75, 0x56, 0xa0, 0x2b, 0x9b, 0xea, 0x61, 0xe8, 0x0a, 0x5c, 0x16, 0x52, 0xf4, 0x38, 0x49, 0x93, 0x28,
0x28, 0x06, 0x8a, 0x7c, 0xc5, 0x0b, 0x99, 0x71, 0xdf, 0x85, 0x05, 0xb5, 0x32, 0xf5, 0xa1, 0x90, 0x99, 0xcc, 0x0f, 0x67, 0x47, 0xf9, 0x28, 0x0b, 0x53, 0xf4, 0xad, 0xe9, 0x3f, 0x78, 0xb0, 0xe1,
0xc2, 0x5e, 0x59, 0x0a, 0xe5, 0xf7, 0xf3, 0xf2, 0x03, 0x45, 0xe2, 0x17, 0x84, 0x2b, 0x48, 0x7c, 0xf4, 0xaa, 0x74, 0xc0, 0xff, 0x97, 0x22, 0x6d, 0x72, 0xf9, 0x52, 0xf0, 0xd6, 0x2d, 0x75, 0x28,
0xbe, 0x47, 0x15, 0xad, 0xf5, 0xd5, 0xf7, 0xa6, 0xfb, 0xa9, 0x56, 0x30, 0xd4, 0x60, 0x86, 0x7f, 0x07, 0xca, 0xe4, 0xc8, 0xe7, 0x2a, 0xbd, 0x7f, 0x07, 0x56, 0xf5, 0xca, 0xf4, 0x87, 0x52, 0x0a,
0xc7, 0x01, 0xc8, 0x57, 0xc7, 0x04, 0x23, 0x57, 0xe9, 0x0e, 0x4f, 0x56, 0x1a, 0xea, 0xfb, 0x06, 0xfb, 0x55, 0x29, 0x54, 0xdf, 0xaf, 0xa8, 0x0f, 0x34, 0x89, 0x5f, 0x90, 0x7e, 0x27, 0x1b, 0x8b,
0x74, 0x74, 0xf2, 0x37, 0xb7, 0x12, 0x6d, 0x85, 0x31, 0x0f, 0xe5, 0x16, 0x2c, 0x8c, 0xc2, 0xf8, 0x3d, 0xea, 0xd0, 0x70, 0xa0, 0xbf, 0xb7, 0x7d, 0x5d, 0xbd, 0x82, 0x91, 0x01, 0x73, 0xfa, 0x3b,
0x88, 0xdb, 0x5c, 0xfe, 0x2c, 0x98, 0xc9, 0x17, 0xab, 0x79, 0x01, 0x3f, 0x91, 0x68, 0x6e, 0x52, 0x1e, 0x40, 0xb1, 0x3a, 0x14, 0x8c, 0x42, 0xa5, 0x7b, 0x22, 0x33, 0x6a, 0xa9, 0xef, 0xeb, 0xd0,
0xea, 0x86, 0x49, 0xc1, 0xbf, 0x5b, 0xd3, 0x69, 0xc9, 0x7c, 0xcf, 0xe7, 0xde, 0x32, 0xb4, 0x53, 0x35, 0x99, 0xe6, 0xc2, 0x4a, 0x74, 0x34, 0x86, 0x1e, 0xca, 0x3b, 0xb0, 0x3a, 0x89, 0x92, 0x23,
0x52, 0x8e, 0xe7, 0x64, 0x01, 0x79, 0x52, 0xe2, 0xe0, 0xbd, 0x41, 0xda, 0x7d, 0x98, 0x4f, 0x85, 0x61, 0x73, 0xc5, 0x1b, 0x64, 0xae, 0x9e, 0xc7, 0x56, 0x24, 0xfc, 0x50, 0xa1, 0x85, 0x49, 0x69,
0xf6, 0x51, 0xaa, 0xa9, 0xfe, 0x0e, 0xd5, 0xd4, 0x4d, 0x2d, 0xbb, 0xf3, 0x33, 0xb0, 0xe8, 0xf9, 0x5a, 0x26, 0x85, 0xfe, 0x6e, 0xc3, 0xe4, 0x40, 0x8b, 0x3d, 0x9f, 0x7b, 0xcb, 0xc8, 0x6e, 0x45,
0xa7, 0x24, 0xa5, 0x01, 0x77, 0xc2, 0xb9, 0xd1, 0x17, 0x0a, 0x75, 0xc1, 0xc0, 0xb9, 0x2d, 0xbe, 0x39, 0x9e, 0x93, 0x72, 0x14, 0x19, 0x90, 0x83, 0x57, 0x46, 0x84, 0xb7, 0x61, 0x25, 0x93, 0xda,
0x05, 0x0b, 0xf2, 0x95, 0x50, 0x8f, 0x94, 0xc5, 0x1f, 0x39, 0xcc, 0x06, 0xe2, 0x3f, 0x57, 0x19, 0x47, 0xab, 0xa6, 0xe6, 0x4b, 0x54, 0x53, 0x2f, 0x73, 0xec, 0xce, 0xff, 0x83, 0xb5, 0x60, 0x7c,
0x50, 0xfb, 0x0c, 0xcf, 0xe7, 0x88, 0xb9, 0xbb, 0x5a, 0x61, 0x77, 0x5f, 0x95, 0xd9, 0x48, 0x5f, 0xca, 0x32, 0x1e, 0x0a, 0x8f, 0x5f, 0x18, 0x7d, 0xa9, 0x50, 0x57, 0x2d, 0x5c, 0xd8, 0xe2, 0x77,
0x79, 0xfa, 0x32, 0x2f, 0x2c, 0x40, 0x99, 0x3d, 0xb6, 0x59, 0x5a, 0xbf, 0x08, 0x4b, 0xf1, 0x16, 0x60, 0x55, 0x3d, 0x49, 0x9a, 0x91, 0xaa, 0xd2, 0xa4, 0x80, 0x71, 0x20, 0xfd, 0x33, 0x9d, 0x6e,
0x2c, 0x1c, 0x12, 0xba, 0xcb, 0x4e, 0x50, 0x29, 0xc6, 0x2b, 0xd0, 0x8a, 0xc8, 0xd9, 0x40, 0x1c, 0x75, 0xcf, 0xf0, 0x7c, 0x8e, 0xd8, 0xbb, 0x6b, 0x94, 0x76, 0xf7, 0x55, 0x95, 0xfa, 0x1c, 0xeb,
0xb1, 0x30, 0xe3, 0xcd, 0x88, 0x9c, 0xf1, 0x31, 0x18, 0xc1, 0x62, 0x3e, 0x5e, 0xde, 0xba, 0x3f, 0xb0, 0x42, 0x25, 0xa1, 0x25, 0xa8, 0x52, 0xd5, 0x2e, 0x4b, 0x9b, 0xaf, 0xc3, 0x52, 0x7a, 0x13,
0x9e, 0x81, 0xb9, 0x4f, 0xa3, 0xd3, 0x38, 0x18, 0xf2, 0xfc, 0xe2, 0x98, 0x8c, 0x63, 0xf5, 0xde, 0x56, 0x0f, 0x19, 0xbf, 0x83, 0x27, 0xa8, 0x15, 0xe3, 0x15, 0x68, 0xc7, 0xec, 0x6c, 0x28, 0x8f,
0xcf, 0x7e, 0x33, 0xaf, 0x80, 0x3f, 0x65, 0x25, 0x54, 0x26, 0xfe, 0x54, 0x93, 0x59, 0xc8, 0x34, 0x58, 0x9a, 0xf1, 0x56, 0xcc, 0xce, 0xc4, 0x18, 0x4a, 0x60, 0xad, 0x18, 0xaf, 0x6e, 0xdd, 0x8f,
0xaf, 0x71, 0x11, 0xd2, 0x66, 0x20, 0xcc, 0xc7, 0x4c, 0xcd, 0xb2, 0x1d, 0xd9, 0xca, 0x0b, 0x26, 0x16, 0x60, 0xf9, 0x93, 0xf8, 0x34, 0x09, 0x47, 0x22, 0x99, 0x39, 0x65, 0xd3, 0x44, 0x17, 0x17,
0x1a, 0x46, 0xc1, 0x04, 0xcf, 0x46, 0x8b, 0x57, 0x3a, 0x7e, 0x24, 0x4d, 0x57, 0x35, 0xb9, 0x2f, 0xe0, 0x6f, 0xf4, 0x0a, 0xc4, 0xbb, 0x59, 0xca, 0x55, 0x96, 0x51, 0x37, 0xd1, 0x42, 0x66, 0x45,
0x9c, 0x12, 0x11, 0xf5, 0x72, 0x5b, 0x3b, 0x27, 0x7d, 0x61, 0x13, 0x64, 0xf6, 0x58, 0x7c, 0x20, 0x41, 0x8d, 0x94, 0x36, 0x0b, 0x41, 0x1f, 0x33, 0xb3, 0x6b, 0x84, 0x54, 0xab, 0xa8, 0xce, 0x58,
0xc6, 0x08, 0x7d, 0x65, 0x42, 0xcc, 0x3f, 0x29, 0x56, 0xfe, 0xb4, 0x84, 0x98, 0x14, 0x60, 0xa6, 0xb4, 0xaa, 0x33, 0x44, 0xea, 0x5b, 0x3e, 0x09, 0x8a, 0x23, 0x69, 0xf9, 0xba, 0x29, 0x7c, 0xe1,
0xd4, 0x7c, 0xa2, 0x75, 0x8f, 0xd8, 0x03, 0x88, 0x1a, 0x9e, 0x22, 0x6e, 0x78, 0xd2, 0xe2, 0xb5, 0x8c, 0xc9, 0x10, 0x5b, 0xd8, 0xda, 0x65, 0xe5, 0x0b, 0xdb, 0x20, 0xda, 0x63, 0xf9, 0x81, 0x1c,
0x51, 0xb6, 0xb8, 0x1f, 0xe3, 0x85, 0xe1, 0x91, 0x37, 0x7c, 0x35, 0xe0, 0xce, 0x53, 0x47, 0x64, 0x23, 0xf5, 0x95, 0x0d, 0xa1, 0x7f, 0x52, 0x2e, 0x33, 0x6a, 0x4b, 0x31, 0x29, 0xc1, 0xa8, 0xd4,
0x2e, 0x2c, 0x90, 0xad, 0x7a, 0x18, 0xd2, 0xd3, 0x81, 0x24, 0xd1, 0x15, 0x8f, 0x83, 0x06, 0x84, 0xc6, 0xcc, 0xe8, 0x1e, 0xb9, 0x07, 0x90, 0x05, 0x43, 0x65, 0xdc, 0xf2, 0xa4, 0xe5, 0xd3, 0xa6,
0xbf, 0x00, 0xb4, 0xeb, 0xfb, 0xf2, 0x84, 0x74, 0x9c, 0x91, 0xf3, 0xd6, 0xb1, 0x78, 0x5b, 0xb1, 0x6a, 0x09, 0x3f, 0x26, 0x88, 0xa2, 0xa3, 0x60, 0xf4, 0x74, 0x28, 0x9c, 0xa7, 0xae, 0x4c, 0x93,
0xc7, 0x5a, 0xe5, 0x1e, 0xf1, 0x63, 0x68, 0x1f, 0x18, 0x65, 0x54, 0xfc, 0x30, 0x55, 0x01, 0x95, 0x38, 0x20, 0xae, 0x7a, 0x14, 0xf1, 0xd3, 0xa1, 0x22, 0xd1, 0x93, 0x2f, 0x91, 0x16, 0x44, 0xbf,
0x14, 0x00, 0x03, 0x31, 0x26, 0xac, 0x99, 0x13, 0xe2, 0x9f, 0x03, 0xb4, 0x1f, 0x64, 0x54, 0xaf, 0x00, 0x72, 0x67, 0x3c, 0x56, 0x27, 0x64, 0xe2, 0x8c, 0x82, 0xb7, 0x9e, 0xc3, 0xdb, 0x9a, 0x3d,
0x4f, 0x47, 0x80, 0x3a, 0xdf, 0x65, 0x44, 0x80, 0x12, 0xe3, 0x11, 0xe0, 0xae, 0x78, 0xc1, 0x2c, 0x36, 0x6a, 0xf7, 0x48, 0x1f, 0x40, 0xe7, 0xc0, 0xaa, 0xd9, 0x12, 0x87, 0xa9, 0xab, 0xb5, 0x94,
0x6e, 0x6c, 0x13, 0x9a, 0x81, 0x80, 0x94, 0x2e, 0x9f, 0x97, 0x97, 0x40, 0x8d, 0xd4, 0xfd, 0xcc, 0x00, 0x58, 0x88, 0x35, 0x61, 0xc3, 0x9e, 0x90, 0xfe, 0x1c, 0x90, 0xfd, 0x30, 0xe7, 0x66, 0x7d,
0x29, 0x91, 0xa0, 0x65, 0x2a, 0x7e, 0xe8, 0xc0, 0x9c, 0xdc, 0x1a, 0x33, 0xa9, 0x56, 0x01, 0x99, 0x26, 0xdc, 0x34, 0xc9, 0x35, 0x2b, 0xdc, 0x54, 0x98, 0x08, 0x37, 0xef, 0xc8, 0xe7, 0xd2, 0xf2,
0xd8, 0x98, 0x85, 0x55, 0x17, 0xf0, 0x94, 0xa5, 0x6e, 0xa6, 0x4a, 0xea, 0x10, 0xd4, 0x13, 0x8f, 0xc6, 0x6e, 0x40, 0x2b, 0x94, 0x90, 0xd6, 0xe5, 0x2b, 0xea, 0x12, 0xe8, 0x91, 0xa6, 0x1f, 0x9d,
0x9e, 0x70, 0x2f, 0xbc, 0xe5, 0xf2, 0xdf, 0x2a, 0xda, 0x6a, 0xe8, 0x68, 0x4b, 0xbd, 0xd6, 0xca, 0x12, 0x05, 0x3a, 0xa6, 0xe2, 0x87, 0x1e, 0x2c, 0xab, 0xad, 0xa1, 0x49, 0x75, 0xaa, 0xd5, 0xe4,
0x45, 0xe9, 0x87, 0xc4, 0x07, 0xe2, 0xb5, 0x36, 0x87, 0x73, 0x1e, 0xc8, 0x05, 0x16, 0x79, 0x20, 0xc6, 0x1c, 0xac, 0xbe, 0x5a, 0xa8, 0x2a, 0x75, 0x0b, 0x75, 0x52, 0x47, 0xa0, 0x99, 0x06, 0xfc,
0x87, 0xba, 0xba, 0x1f, 0xf7, 0xa1, 0xf7, 0x88, 0x84, 0x84, 0x92, 0xdd, 0x30, 0x2c, 0xd2, 0xbf, 0x44, 0x78, 0xe1, 0x6d, 0x5f, 0xfc, 0xd6, 0xd1, 0xd6, 0xa2, 0x89, 0xb6, 0xf4, 0xd3, 0xb0, 0x5a,
0x02, 0x97, 0x2b, 0xfa, 0xe4, 0xbd, 0x7f, 0x02, 0x4b, 0x8f, 0xc8, 0xd1, 0x64, 0xb4, 0x4f, 0x4e, 0x94, 0x79, 0xb5, 0xbc, 0x2b, 0x9f, 0x86, 0x0b, 0xb8, 0xe0, 0x81, 0x5a, 0x60, 0x99, 0x07, 0x6a,
0xf3, 0x17, 0x01, 0x04, 0xf5, 0xec, 0x24, 0x3e, 0x93, 0xe7, 0xc5, 0x7f, 0xa3, 0x0f, 0x00, 0x42, 0xa8, 0x6f, 0xfa, 0xe9, 0x00, 0xfa, 0xf7, 0x59, 0xc4, 0x38, 0xbb, 0x13, 0x45, 0x65, 0xfa, 0x57,
0x36, 0x66, 0x90, 0x25, 0x64, 0xa8, 0xaa, 0x4f, 0x38, 0x72, 0x98, 0x90, 0x21, 0xfe, 0x18, 0x90, 0xe0, 0x72, 0x4d, 0x9f, 0xba, 0xf7, 0x0f, 0x61, 0xfd, 0x3e, 0x3b, 0x9a, 0x4d, 0xf6, 0xd9, 0x69,
0x49, 0x47, 0x6e, 0x81, 0xdd, 0xc6, 0xc9, 0xd1, 0x20, 0x9b, 0x66, 0x94, 0x8c, 0x95, 0x22, 0x32, 0xf1, 0xfc, 0x40, 0xa0, 0x99, 0x9f, 0x24, 0x67, 0xea, 0xbc, 0xc4, 0x6f, 0xf2, 0x06, 0x40, 0x84,
0x21, 0x7c, 0x0b, 0x3a, 0x07, 0xde, 0xd4, 0x25, 0x5f, 0xca, 0xba, 0x3c, 0x16, 0xd4, 0x79, 0x53, 0x63, 0x86, 0x79, 0xca, 0x46, 0xba, 0xd4, 0x45, 0x20, 0x87, 0x29, 0x1b, 0xd1, 0xf7, 0x81, 0xd8,
0x26, 0x9e, 0x3a, 0xa8, 0xe3, 0xdd, 0xf8, 0xef, 0x6a, 0x30, 0x2b, 0x46, 0x32, 0xaa, 0x3e, 0xc9, 0x74, 0xd4, 0x16, 0xf0, 0x36, 0xce, 0x8e, 0x86, 0xf9, 0x3c, 0xe7, 0x6c, 0xaa, 0x15, 0x91, 0x0d,
0x68, 0x10, 0x89, 0x8c, 0xba, 0xa4, 0x6a, 0x40, 0xa5, 0xf3, 0xae, 0x55, 0x9c, 0xb7, 0x74, 0xb3, 0xd1, 0x77, 0xa0, 0x7b, 0x10, 0xcc, 0x7d, 0xf6, 0xa5, 0x2a, 0x02, 0xc4, 0xa0, 0x2e, 0x98, 0xa3,
0xd4, 0x4b, 0xbd, 0x3c, 0x58, 0x0b, 0xe3, 0x31, 0x6b, 0x30, 0x26, 0xa2, 0xec, 0xb2, 0x2e, 0x63, 0x78, 0x9a, 0xa0, 0x4e, 0x74, 0xd3, 0xbf, 0x6d, 0xc0, 0x92, 0x1c, 0x89, 0x54, 0xc7, 0x2c, 0xe7,
0x56, 0x05, 0x14, 0xa2, 0xe7, 0xfc, 0xce, 0x8b, 0xf5, 0x29, 0x41, 0x94, 0xa6, 0xc5, 0x84, 0x2a, 0x61, 0x2c, 0xd3, 0xf7, 0x8a, 0xaa, 0x05, 0x55, 0xce, 0xbb, 0x51, 0x73, 0xde, 0xca, 0xcd, 0xd2,
0x35, 0xcb, 0x9c, 0x28, 0xc4, 0x2b, 0x69, 0x96, 0x92, 0x06, 0x69, 0x5e, 0x40, 0x83, 0x08, 0xdf, 0x65, 0x01, 0xea, 0x60, 0x1d, 0x4c, 0xc4, 0xac, 0xe1, 0x94, 0xc9, 0x1a, 0xcf, 0xa6, 0x8a, 0x59,
0xcb, 0xd2, 0x20, 0x08, 0x16, 0x9f, 0x10, 0xe2, 0x92, 0x24, 0x4e, 0x75, 0x71, 0xe3, 0x1f, 0x39, 0x35, 0x50, 0x8a, 0x9e, 0x8b, 0x3b, 0x2f, 0xd7, 0xa7, 0x05, 0x51, 0x99, 0x16, 0x1b, 0xaa, 0xd5,
0xb0, 0x28, 0xad, 0x8a, 0xee, 0x43, 0x37, 0x2c, 0x13, 0xe4, 0x54, 0x65, 0x5a, 0x6f, 0x42, 0x97, 0x2c, 0xcb, 0xb2, 0xea, 0xaf, 0xa2, 0x59, 0x2a, 0x1a, 0xa4, 0xf5, 0x1a, 0x1a, 0x44, 0xfa, 0x5e,
0x07, 0x61, 0x2c, 0xc2, 0xe2, 0x11, 0x97, 0xcc, 0x4b, 0x58, 0x20, 0x5b, 0x93, 0x4a, 0x08, 0x8e, 0x8e, 0x06, 0x21, 0xb0, 0xf6, 0x90, 0x31, 0x9f, 0xa5, 0x49, 0x66, 0x2a, 0x29, 0xff, 0xc8, 0x83,
0x83, 0x50, 0x32, 0xd8, 0x84, 0x98, 0xb9, 0x54, 0x41, 0x1a, 0x67, 0xaf, 0xe3, 0xea, 0x36, 0x3e, 0x35, 0x65, 0x55, 0x4c, 0x1f, 0xb9, 0xee, 0x98, 0x20, 0xaf, 0x2e, 0xad, 0xfb, 0x16, 0xf4, 0x44,
0x80, 0x25, 0x63, 0xbd, 0x52, 0xa0, 0xee, 0x83, 0x7a, 0x50, 0x14, 0x69, 0x06, 0x71, 0x2f, 0xd6, 0x10, 0x86, 0x11, 0x96, 0x88, 0xb8, 0x54, 0x5e, 0xc2, 0x01, 0x71, 0x4d, 0x3a, 0xfb, 0x38, 0x0d,
0x6d, 0x03, 0x99, 0x7f, 0x66, 0x0d, 0xc6, 0x7f, 0xe3, 0x70, 0x16, 0x48, 0x3f, 0x4c, 0x97, 0x13, 0x23, 0xc5, 0x60, 0x1b, 0x42, 0x73, 0xa9, 0x83, 0x34, 0xc1, 0x5e, 0xcf, 0x37, 0x6d, 0x7a, 0x00,
0xcd, 0x0a, 0xd7, 0x48, 0x48, 0xfb, 0xde, 0x25, 0x57, 0xb6, 0xd1, 0x37, 0x2e, 0xe8, 0xdd, 0xe8, 0xeb, 0xd6, 0x7a, 0x95, 0x40, 0xdd, 0x06, 0xfd, 0x7a, 0x29, 0xd3, 0x0c, 0xf2, 0x5e, 0x5c, 0x72,
0x87, 0xbb, 0x73, 0x78, 0x33, 0x53, 0xc5, 0x9b, 0x77, 0xec, 0xfc, 0xc1, 0x1c, 0x34, 0xb2, 0x61, 0x0d, 0x64, 0xf1, 0x99, 0x33, 0x98, 0xfe, 0xb5, 0x27, 0x58, 0xa0, 0xfc, 0x30, 0x53, 0xbb, 0xb4,
0x9c, 0x10, 0xbc, 0xcc, 0x59, 0xa0, 0xd6, 0x2b, 0x58, 0xb0, 0xf3, 0xaf, 0x0e, 0xcc, 0x8b, 0xa4, 0x24, 0x5d, 0x23, 0x29, 0xed, 0x7b, 0x17, 0x7c, 0xd5, 0x26, 0xdf, 0x78, 0x4d, 0xef, 0xc6, 0xbc,
0x99, 0x28, 0x6f, 0x26, 0x29, 0x62, 0xf1, 0x97, 0x51, 0x35, 0x8d, 0xb4, 0xfb, 0x59, 0xae, 0xbe, 0x12, 0x9e, 0xc3, 0x9b, 0x85, 0x3a, 0xde, 0xbc, 0x64, 0xe7, 0x77, 0x97, 0x61, 0x31, 0x1f, 0x25,
0xee, 0x5f, 0xa9, 0xec, 0x53, 0xbe, 0xf7, 0x0f, 0x7e, 0xf4, 0xef, 0xbf, 0x57, 0x5b, 0xc5, 0x8b, 0x29, 0xa3, 0x1b, 0x82, 0x05, 0x7a, 0xbd, 0x92, 0x05, 0xbb, 0xff, 0xe2, 0xc1, 0x8a, 0x4c, 0xd0,
0xdb, 0xa7, 0x77, 0xb6, 0xb9, 0x8a, 0x23, 0x67, 0x7c, 0xc4, 0x3d, 0x67, 0x93, 0xcd, 0x62, 0x16, 0xc9, 0x5a, 0x6a, 0x96, 0x11, 0x8c, 0xbf, 0xac, 0x12, 0x6d, 0x62, 0xdc, 0xcf, 0x6a, 0xa9, 0xf7,
0x54, 0xeb, 0x59, 0x2a, 0x0a, 0xb3, 0xf5, 0x2c, 0x95, 0x15, 0xd8, 0xd6, 0x2c, 0x13, 0x3e, 0x42, 0xe0, 0x4a, 0x6d, 0x9f, 0xf6, 0xbd, 0x7f, 0xf0, 0xe3, 0x7f, 0xfb, 0xbd, 0xc6, 0x45, 0xba, 0xb6,
0xcf, 0xb2, 0xf3, 0x17, 0x57, 0xa0, 0xa5, 0x03, 0x45, 0xf4, 0x3d, 0xe8, 0x5a, 0x09, 0x42, 0xa4, 0x73, 0xfa, 0xde, 0x8e, 0x50, 0x71, 0xec, 0x4c, 0x8c, 0xf8, 0xd0, 0xbb, 0x81, 0xb3, 0xd8, 0xd5,
0x08, 0x57, 0x65, 0x1c, 0xfb, 0x57, 0xab, 0x3b, 0xe5, 0xb4, 0xd7, 0xf8, 0xb4, 0x3d, 0xb4, 0xc6, 0xdb, 0x66, 0x96, 0x9a, 0x2a, 0x70, 0x33, 0x4b, 0x6d, 0xb9, 0xb7, 0x33, 0xcb, 0x4c, 0x8c, 0x30,
0xa6, 0x95, 0x19, 0xc0, 0x6d, 0x9e, 0x38, 0x15, 0x05, 0x04, 0xaf, 0x60, 0xde, 0x4e, 0x20, 0xa2, 0xb3, 0xec, 0xfe, 0xf9, 0x15, 0x68, 0x9b, 0x40, 0x91, 0x7c, 0x0f, 0x7a, 0x4e, 0x32, 0x92, 0x68,
0xab, 0xf6, 0x69, 0x17, 0x66, 0xfb, 0xe0, 0x9c, 0x5e, 0x39, 0xdd, 0x55, 0x3e, 0xdd, 0x1a, 0x5a, 0xc2, 0x75, 0xe9, 0xcd, 0xc1, 0xd5, 0xfa, 0x4e, 0x35, 0xed, 0x9b, 0x62, 0xda, 0x3e, 0xd9, 0xc2,
0x31, 0xa7, 0xd3, 0x01, 0x1c, 0xe1, 0x25, 0x1f, 0x66, 0x45, 0x36, 0x52, 0xf4, 0xaa, 0x2b, 0xb5, 0x69, 0x55, 0x06, 0x70, 0x47, 0x64, 0x69, 0x65, 0xb5, 0xc2, 0x53, 0x58, 0x71, 0x13, 0x88, 0xe4,
0xfb, 0x97, 0xcb, 0xd5, 0xd7, 0xb2, 0x5c, 0x1b, 0xf7, 0xf8, 0x54, 0x08, 0x71, 0x86, 0x9a, 0x05, 0xaa, 0x7b, 0xda, 0xa5, 0xd9, 0xde, 0x38, 0xa7, 0x57, 0x4d, 0x77, 0x55, 0x4c, 0xb7, 0x45, 0x36,
0xd9, 0xe8, 0xbb, 0xd0, 0xd2, 0xf5, 0x9c, 0x68, 0xdd, 0x28, 0xa2, 0x35, 0x8b, 0x4c, 0xfb, 0xbd, 0xed, 0xe9, 0x4c, 0x00, 0xc7, 0x44, 0x7d, 0x89, 0x5d, 0xfe, 0x4d, 0x34, 0xbd, 0xfa, 0xb2, 0xf0,
0x72, 0x47, 0xd5, 0x51, 0x99, 0x94, 0x99, 0x40, 0xec, 0xc3, 0xaa, 0xb4, 0xb8, 0x47, 0xe4, 0xc7, 0xc1, 0xe5, 0x6a, 0xa9, 0xb7, 0xaa, 0x0d, 0xa7, 0x7d, 0x31, 0x15, 0x21, 0x82, 0xa1, 0x76, 0xf5,
0xd9, 0x49, 0x45, 0x1d, 0xf9, 0x6d, 0x07, 0xdd, 0x87, 0xa6, 0x2a, 0x93, 0x45, 0x6b, 0xd5, 0xe5, 0x37, 0xf9, 0x2e, 0xb4, 0x4d, 0xf1, 0x28, 0xb9, 0x64, 0x55, 0xec, 0xda, 0x15, 0xad, 0x83, 0x7e,
0xbe, 0xfd, 0xf5, 0x12, 0x2e, 0xf5, 0xc2, 0x2e, 0x40, 0x5e, 0xd1, 0x89, 0x7a, 0xe7, 0x15, 0x9e, 0xb5, 0xa3, 0xee, 0xa8, 0x6c, 0xca, 0x28, 0x10, 0xfb, 0x70, 0x51, 0x59, 0xdc, 0x23, 0xf6, 0x93,
0x6a, 0x26, 0x56, 0x94, 0x7f, 0x8e, 0x78, 0x41, 0xab, 0x5d, 0x30, 0x8a, 0xbe, 0x92, 0x8f, 0xaf, 0xec, 0xa4, 0xa6, 0x68, 0xfd, 0x96, 0x47, 0x6e, 0x43, 0x4b, 0xd7, 0xe4, 0x92, 0xad, 0xfa, 0xda,
0x2c, 0x25, 0x7d, 0x07, 0x41, 0xbc, 0xc6, 0x79, 0xb7, 0x88, 0xe6, 0x19, 0xef, 0x22, 0x72, 0xa6, 0xe2, 0xc1, 0xa5, 0x0a, 0xae, 0xf4, 0xc2, 0x1d, 0x80, 0xa2, 0x7c, 0x94, 0xf4, 0xcf, 0xab, 0x72,
0x8a, 0x9f, 0x1e, 0x41, 0xdb, 0xa8, 0x12, 0x45, 0x8a, 0x42, 0xb9, 0xc2, 0xb4, 0xdf, 0xaf, 0xea, 0x35, 0x4c, 0xac, 0xa9, 0x35, 0x9d, 0x88, 0xea, 0x59, 0xb7, 0x3a, 0x95, 0x7c, 0xa5, 0x18, 0x5f,
0x92, 0xcb, 0xfd, 0x25, 0xe8, 0x5a, 0xe5, 0x9e, 0xfa, 0x66, 0x54, 0x15, 0x93, 0xea, 0x9b, 0x51, 0x5b, 0xb7, 0xfa, 0x12, 0x82, 0x74, 0x4b, 0xf0, 0x6e, 0x8d, 0xac, 0x20, 0xef, 0x62, 0x76, 0xa6,
0x5d, 0x21, 0xfa, 0x1d, 0x68, 0x1b, 0xc5, 0x99, 0xc8, 0x78, 0x9c, 0x2e, 0x14, 0x5f, 0xea, 0x15, 0x2b, 0xad, 0xee, 0x43, 0xc7, 0x2a, 0x49, 0x25, 0x9a, 0x42, 0xb5, 0x9c, 0x75, 0x30, 0xa8, 0xeb,
0x55, 0xd4, 0x72, 0xe2, 0x15, 0xbe, 0xdf, 0x79, 0xdc, 0x62, 0xfb, 0xe5, 0x15, 0x40, 0x4c, 0x48, 0x52, 0xcb, 0xfd, 0x25, 0xe8, 0x39, 0xb5, 0xa5, 0xe6, 0x66, 0xd4, 0x55, 0xae, 0x9a, 0x9b, 0x51,
0xbe, 0x07, 0xf3, 0x76, 0x51, 0xa6, 0xbe, 0x55, 0x95, 0xe5, 0x9d, 0xfa, 0x56, 0x9d, 0x53, 0xc9, 0x5f, 0x8e, 0xfa, 0x1d, 0xe8, 0x58, 0x95, 0xa0, 0xc4, 0x7a, 0x09, 0x2f, 0x55, 0x7a, 0x9a, 0x15,
0x29, 0x05, 0x72, 0x73, 0x59, 0x4f, 0xb2, 0xfd, 0x46, 0xa6, 0x49, 0xdf, 0xa2, 0x6f, 0x33, 0xd5, 0xd5, 0x14, 0x8e, 0xd2, 0x4d, 0xb1, 0xdf, 0x15, 0xda, 0xc6, 0xfd, 0x8a, 0x72, 0x23, 0x14, 0x92,
0x21, 0x4b, 0xb2, 0x50, 0x5e, 0xa4, 0x6a, 0x17, 0x6e, 0x69, 0x69, 0x2f, 0x55, 0x6f, 0xe1, 0x25, 0xef, 0xc1, 0x8a, 0x5b, 0x01, 0x6a, 0x6e, 0x55, 0x6d, 0x2d, 0xa9, 0xb9, 0x55, 0xe7, 0x94, 0x8d,
0x4e, 0xbc, 0x8d, 0xf2, 0x1d, 0xa0, 0xcf, 0x60, 0x4e, 0x96, 0x66, 0xa1, 0xd5, 0x5c, 0xaa, 0x8d, 0x2a, 0x81, 0xbc, 0xb1, 0x61, 0x26, 0xd9, 0x79, 0xae, 0xd2, 0xa4, 0x2f, 0xc8, 0xb7, 0x51, 0x75,
0xa4, 0x52, 0x7f, 0xad, 0x08, 0x4b, 0x62, 0xcb, 0x9c, 0x58, 0x17, 0xb5, 0x19, 0xb1, 0x11, 0xa1, 0xa8, 0xfa, 0x2f, 0x52, 0x54, 0xc4, 0xba, 0x55, 0x62, 0x46, 0xda, 0x2b, 0xa5, 0x62, 0x74, 0x5d,
0x01, 0xa3, 0x11, 0xc2, 0x82, 0xfd, 0xa8, 0x94, 0x69, 0x76, 0x54, 0x3e, 0x67, 0x6b, 0x76, 0x54, 0x10, 0xef, 0x90, 0x62, 0x07, 0xe4, 0x53, 0x58, 0x56, 0x75, 0x60, 0xe4, 0x62, 0x21, 0xd5, 0x56,
0xbf, 0x50, 0xd9, 0x4a, 0x46, 0x29, 0x97, 0x6d, 0x55, 0x7b, 0xf0, 0xab, 0xd0, 0x31, 0xeb, 0x00, 0x52, 0x69, 0xb0, 0x55, 0x86, 0x15, 0xb1, 0x0d, 0x41, 0xac, 0x47, 0x3a, 0x48, 0x6c, 0xc2, 0x78,
0xb5, 0xc6, 0xae, 0xa8, 0x19, 0xd4, 0x1a, 0xbb, 0xaa, 0x70, 0x50, 0x1d, 0x2d, 0xea, 0x98, 0xd3, 0x88, 0x34, 0x22, 0x58, 0x75, 0x5f, 0xb0, 0x72, 0xc3, 0x8e, 0xda, 0xb7, 0x73, 0xc3, 0x8e, 0xfa,
0xa0, 0xef, 0xc0, 0x82, 0xf1, 0xfa, 0x79, 0x38, 0x8d, 0x86, 0x5a, 0x74, 0xca, 0x65, 0x26, 0xfd, 0xe7, 0x30, 0x57, 0xc9, 0x68, 0xe5, 0xb2, 0xa3, 0x0b, 0x1d, 0x7e, 0x15, 0xba, 0x76, 0xd1, 0xa1,
0x2a, 0xd3, 0x89, 0xd7, 0x39, 0xe1, 0x25, 0x6c, 0x11, 0x66, 0x62, 0xf3, 0x10, 0xda, 0xe6, 0xcb, 0xd1, 0xd8, 0x35, 0x05, 0x8a, 0x46, 0x63, 0xd7, 0x55, 0x29, 0xea, 0xa3, 0x25, 0x5d, 0x7b, 0x1a,
0xea, 0x3b, 0xe8, 0xae, 0x1b, 0x5d, 0x66, 0xd5, 0xc6, 0x6d, 0x07, 0xfd, 0x81, 0x03, 0x1d, 0xb3, 0xf2, 0x1d, 0x58, 0xb5, 0x9e, 0x5a, 0x0f, 0xe7, 0xf1, 0xc8, 0x88, 0x4e, 0xb5, 0xa6, 0x65, 0x50,
0x80, 0x09, 0x59, 0x79, 0x99, 0x02, 0x9d, 0x9e, 0xd9, 0x67, 0x12, 0xc2, 0xcf, 0xf8, 0x22, 0xf7, 0x67, 0x3a, 0xe9, 0x25, 0x41, 0x78, 0x9d, 0x3a, 0x84, 0x51, 0x6c, 0xee, 0x41, 0xc7, 0x7e, 0xc6,
0x36, 0x9f, 0x58, 0x4c, 0x7e, 0x63, 0xb9, 0x44, 0x5b, 0xe6, 0x3f, 0x50, 0xbc, 0x2d, 0x76, 0x9a, 0x7d, 0x09, 0xdd, 0x4b, 0x56, 0x97, 0x5d, 0x22, 0x72, 0xcb, 0x23, 0x7f, 0xe0, 0x41, 0xd7, 0xae,
0x65, 0x38, 0x6f, 0x6f, 0x3b, 0xe8, 0x9e, 0xf8, 0x37, 0x19, 0x15, 0x9e, 0x20, 0x43, 0xad, 0x15, 0x96, 0x22, 0x4e, 0x5e, 0xa6, 0x44, 0xa7, 0x6f, 0xf7, 0xd9, 0x84, 0xe8, 0x23, 0xb1, 0xc8, 0xbd,
0xd9, 0x65, 0xfe, 0xef, 0xc9, 0x86, 0x73, 0xdb, 0x41, 0xbf, 0x26, 0xfe, 0x67, 0x42, 0x7e, 0xcb, 0x1b, 0x0f, 0x1d, 0x26, 0x3f, 0x77, 0x5c, 0xa2, 0x9b, 0xf6, 0x7f, 0x6b, 0xbc, 0x28, 0x77, 0xda,
0xb9, 0x7e, 0xd1, 0xef, 0xf1, 0x4d, 0xbe, 0x93, 0x6b, 0xf8, 0xb2, 0xb5, 0x93, 0xa2, 0x5e, 0x3f, 0x35, 0x3f, 0x2f, 0x6e, 0x79, 0xe4, 0x43, 0xf9, 0x3f, 0x39, 0x3a, 0x3c, 0x21, 0x96, 0x5a, 0x2b,
0x00, 0xc8, 0x63, 0x4d, 0x54, 0x08, 0xbc, 0xb4, 0xc6, 0x2b, 0x87, 0xa3, 0xf6, 0x69, 0xaa, 0xf8, 0xb3, 0xcb, 0xfe, 0x47, 0x97, 0x6d, 0xef, 0x96, 0x47, 0x7e, 0x4d, 0xfe, 0x83, 0x86, 0xfa, 0x56,
0x4c, 0x28, 0x81, 0x8e, 0x11, 0xe5, 0x65, 0xfa, 0x38, 0xcb, 0x31, 0x63, 0xbf, 0x5f, 0xd5, 0x25, 0x70, 0xfd, 0x75, 0xbf, 0xa7, 0x6f, 0x89, 0x9d, 0xbc, 0x49, 0x2f, 0x3b, 0x3b, 0x29, 0xeb, 0xf5,
0xe9, 0x7f, 0x95, 0xd3, 0xff, 0x00, 0x5d, 0x31, 0xe9, 0x6f, 0xbf, 0x31, 0x63, 0xcc, 0xb7, 0xe8, 0x03, 0x80, 0x22, 0xd6, 0x24, 0xa5, 0xc0, 0xcb, 0x68, 0xbc, 0x6a, 0x38, 0xea, 0x9e, 0xa6, 0x8e,
0x0b, 0xe8, 0xee, 0xc7, 0xf1, 0xab, 0x49, 0xa2, 0xd3, 0x19, 0x76, 0xd4, 0xc4, 0xe2, 0xdc, 0x7e, 0xcf, 0xa4, 0x12, 0xe8, 0x5a, 0x51, 0x5e, 0x6e, 0x8e, 0xb3, 0x1a, 0x33, 0x0e, 0x06, 0x75, 0x5d,
0x61, 0x53, 0xf8, 0x06, 0xa7, 0x7c, 0x05, 0x5d, 0xb6, 0x29, 0xe7, 0x91, 0xef, 0x5b, 0xe4, 0xc1, 0x8a, 0xfe, 0x57, 0x05, 0xfd, 0x37, 0xc8, 0x15, 0x9b, 0xfe, 0xce, 0x73, 0x3b, 0xc6, 0x7c, 0x41,
0x92, 0xb6, 0x76, 0x7a, 0x23, 0x7d, 0x9b, 0x8e, 0x19, 0x80, 0x96, 0xe6, 0xb0, 0xfc, 0x0f, 0x3d, 0xbe, 0x80, 0xde, 0x7e, 0x92, 0x3c, 0x9d, 0xa5, 0x26, 0x9d, 0xe1, 0x46, 0x4d, 0x18, 0xe7, 0x0e,
0x47, 0xa6, 0x68, 0xde, 0x76, 0xd0, 0x01, 0x74, 0x1e, 0x91, 0x61, 0xec, 0x13, 0x19, 0xe8, 0x2c, 0x4a, 0x9b, 0xa2, 0xd7, 0x05, 0xe5, 0x2b, 0xe4, 0xb2, 0x4b, 0xb9, 0x88, 0x7c, 0x5f, 0x90, 0x00,
0xe7, 0x2b, 0xd7, 0x11, 0x52, 0xbf, 0x6b, 0x81, 0xb6, 0x06, 0x48, 0xbc, 0x69, 0x4a, 0xbe, 0xdc, 0xd6, 0x8d, 0xb5, 0x33, 0x1b, 0x19, 0xb8, 0x74, 0xec, 0x00, 0xb4, 0x32, 0x87, 0xe3, 0x7f, 0x98,
0x7e, 0x23, 0x43, 0xa8, 0xb7, 0x4a, 0x03, 0xa8, 0xb0, 0xcf, 0xd2, 0x00, 0x85, 0x38, 0xd1, 0xd2, 0x39, 0x72, 0x4d, 0xf3, 0x96, 0x47, 0x0e, 0xa0, 0x7b, 0x9f, 0x8d, 0x92, 0x31, 0x53, 0x81, 0xce,
0x00, 0xa5, 0x38, 0xd1, 0xd2, 0x00, 0x2a, 0xec, 0x44, 0x21, 0x8b, 0x1e, 0x0b, 0xa1, 0xa5, 0xb6, 0x46, 0xb1, 0x72, 0x13, 0x21, 0x0d, 0x7a, 0x0e, 0xe8, 0x6a, 0x80, 0x34, 0x98, 0x67, 0xec, 0xcb,
0x99, 0xe7, 0x05, 0xa4, 0xfd, 0xeb, 0xe7, 0x0f, 0xb0, 0x67, 0xdb, 0xb4, 0x67, 0x3b, 0x84, 0xee, 0x9d, 0xe7, 0x2a, 0x84, 0x7a, 0xa1, 0x35, 0x80, 0x0e, 0xfb, 0x1c, 0x0d, 0x50, 0x8a, 0x13, 0x1d,
0x23, 0x22, 0x98, 0x25, 0xde, 0x19, 0xfa, 0xb6, 0x4a, 0x31, 0xdf, 0x24, 0x8a, 0xea, 0x86, 0xf7, 0x0d, 0x50, 0x89, 0x13, 0x1d, 0x0d, 0xa0, 0xc3, 0x4e, 0x12, 0x61, 0xf4, 0x58, 0x0a, 0x2d, 0x8d,
0xd9, 0x0a, 0x9e, 0x27, 0xf9, 0xd1, 0x77, 0xa1, 0xfd, 0x94, 0x50, 0xf5, 0xb0, 0xa0, 0x3d, 0x8f, 0xcd, 0x3c, 0x2f, 0x20, 0x1d, 0x5c, 0x3b, 0x7f, 0x80, 0x3b, 0xdb, 0x0d, 0x77, 0xb6, 0x43, 0xe8,
0xc2, 0x4b, 0x43, 0xbf, 0xe2, 0x5d, 0x02, 0x5f, 0xe7, 0xd4, 0xfa, 0xa8, 0xa7, 0xa9, 0x6d, 0x13, 0xdd, 0x67, 0x92, 0x59, 0xf2, 0x9d, 0x61, 0xe0, 0xaa, 0x14, 0xfb, 0x4d, 0xa2, 0xac, 0x6e, 0x44,
0x7f, 0x44, 0xc4, 0xe5, 0x1f, 0x04, 0xfe, 0x5b, 0xf4, 0xcb, 0x9c, 0xb8, 0x7e, 0x8b, 0x5c, 0x33, 0x9f, 0xab, 0xe0, 0x45, 0x92, 0x9f, 0x7c, 0x17, 0x3a, 0x1f, 0x33, 0xae, 0x1f, 0x16, 0x8c, 0xe7,
0xf2, 0xd1, 0x26, 0xf1, 0x85, 0x02, 0x5e, 0x45, 0x39, 0x8a, 0x7d, 0x62, 0x98, 0xba, 0x08, 0xda, 0x51, 0x7a, 0x69, 0x18, 0xd4, 0xbc, 0x4b, 0xd0, 0x6b, 0x82, 0xda, 0x80, 0xf4, 0x0d, 0xb5, 0x1d,
0xc6, 0xc3, 0xb3, 0xbe, 0x50, 0xe5, 0xd7, 0x6c, 0x7d, 0xa1, 0x2a, 0xde, 0xa9, 0xf1, 0x06, 0x9f, 0x36, 0x9e, 0x30, 0x79, 0xf9, 0x87, 0xe1, 0xf8, 0x05, 0xf9, 0x65, 0x41, 0xdc, 0xbc, 0x45, 0x6e,
0x07, 0xa3, 0xeb, 0xf9, 0x3c, 0xe2, 0x6d, 0x3a, 0x9f, 0x69, 0xfb, 0x8d, 0x37, 0xa6, 0x6f, 0xd1, 0x59, 0xf9, 0x68, 0x9b, 0xf8, 0x6a, 0x09, 0xaf, 0xa3, 0x1c, 0x27, 0x63, 0x66, 0x99, 0xba, 0x18,
0x4b, 0x5e, 0xb5, 0x6c, 0x3e, 0x9e, 0xe4, 0x9e, 0x4f, 0xf1, 0x9d, 0x45, 0x33, 0xcb, 0xe8, 0xb2, 0x3a, 0xd6, 0xc3, 0xb3, 0xb9, 0x50, 0xd5, 0xd7, 0x6c, 0x73, 0xa1, 0x6a, 0xde, 0xa9, 0xe9, 0xb6,
0xbd, 0x21, 0x31, 0x15, 0xb7, 0x88, 0xdf, 0x00, 0x38, 0xa4, 0x71, 0xf2, 0xc8, 0x23, 0xe3, 0x38, 0x98, 0x87, 0x92, 0x6b, 0xc5, 0x3c, 0xf2, 0x6d, 0xba, 0x98, 0x69, 0xe7, 0x79, 0x30, 0xe5, 0x2f,
0xca, 0x35, 0x59, 0xfe, 0x40, 0x90, 0x6b, 0x32, 0xe3, 0x95, 0x00, 0xbd, 0x34, 0x7c, 0x4f, 0xeb, 0xc8, 0x13, 0x51, 0x22, 0x6d, 0x3f, 0x9e, 0x14, 0x9e, 0x4f, 0xf9, 0x9d, 0xc5, 0x30, 0xcb, 0xea,
0xed, 0x49, 0x09, 0xd7, 0xb9, 0x6f, 0x08, 0x9a, 0x21, 0x15, 0xef, 0x08, 0xca, 0x0d, 0x15, 0xc9, 0x72, 0xbd, 0x21, 0x39, 0x95, 0xb0, 0x88, 0xdf, 0x00, 0x38, 0xe4, 0x49, 0x7a, 0x3f, 0x60, 0xd3,
0x51, 0xc3, 0x0d, 0xb5, 0xb2, 0xab, 0x86, 0x1b, 0x6a, 0x67, 0x51, 0x99, 0x1b, 0x9a, 0x67, 0x41, 0x24, 0x2e, 0x34, 0x59, 0xf1, 0x40, 0x50, 0x68, 0x32, 0xeb, 0x95, 0x80, 0x3c, 0xb1, 0x7c, 0x4f,
0xb4, 0x1b, 0x5a, 0x4a, 0xb0, 0x68, 0x1d, 0x5a, 0x91, 0x32, 0x39, 0x80, 0x56, 0x1e, 0x8a, 0xab, 0xe7, 0xed, 0x49, 0x0b, 0xd7, 0xb9, 0x6f, 0x08, 0x86, 0x21, 0x35, 0xef, 0x08, 0xda, 0x0d, 0x95,
0x89, 0x8a, 0x81, 0xbb, 0x36, 0x56, 0xa5, 0x08, 0x19, 0x2f, 0x72, 0x3e, 0x03, 0x6a, 0x32, 0x3e, 0xc9, 0x51, 0xcb, 0x0d, 0x75, 0xb2, 0xab, 0x96, 0x1b, 0xea, 0x66, 0x51, 0xd1, 0x0d, 0x2d, 0xb2,
0xf3, 0x87, 0xf7, 0xe7, 0x00, 0x62, 0x77, 0x4f, 0x58, 0xcb, 0x20, 0x69, 0x05, 0xc2, 0x26, 0x49, 0x20, 0xc6, 0x0d, 0xad, 0x24, 0x58, 0x8c, 0x0e, 0xad, 0x49, 0x99, 0x1c, 0x40, 0xbb, 0x08, 0xc5,
0x3b, 0xe2, 0x54, 0x9e, 0x0c, 0xd6, 0x24, 0xef, 0x39, 0x9b, 0x47, 0xb3, 0xfc, 0x7f, 0x7c, 0xbf, 0xf5, 0x44, 0xe5, 0xc0, 0xdd, 0x18, 0xab, 0x4a, 0x84, 0x4c, 0xd7, 0x04, 0x9f, 0x81, 0xb4, 0x90,
0xfe, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x2f, 0x33, 0x18, 0x15, 0x3c, 0x00, 0x00, 0xcf, 0xe2, 0xe1, 0xfd, 0x31, 0x80, 0xdc, 0xdd, 0x43, 0x6c, 0x59, 0x24, 0x9d, 0x40, 0xd8, 0x26,
0xe9, 0x46, 0x9c, 0xda, 0x93, 0xa1, 0x86, 0xe4, 0x87, 0xde, 0x8d, 0xa3, 0x25, 0xf1, 0x0f, 0xc5,
0x5f, 0xff, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x16, 0xda, 0x18, 0x82, 0x3c, 0x00, 0x00,
} }

@ -564,10 +564,18 @@ func RegisterWalletUnlockerHandlerFromEndpoint(ctx context.Context, mux *runtime
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux". // RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
client := NewWalletUnlockerClient(conn) return RegisterWalletUnlockerHandlerClient(ctx, mux, NewWalletUnlockerClient(conn))
}
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "WalletUnlockerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WalletUnlockerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WalletUnlockerClient" to call the correct interceptors.
func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WalletUnlockerClient) error {
mux.Handle("POST", pattern_WalletUnlocker_CreateWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_CreateWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -596,7 +604,7 @@ func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, c
}) })
mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -667,10 +675,18 @@ func RegisterLightningHandlerFromEndpoint(ctx context.Context, mux *runtime.Serv
// RegisterLightningHandler registers the http handlers for service Lightning to "mux". // RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
client := NewLightningClient(conn) return RegisterLightningHandlerClient(ctx, mux, NewLightningClient(conn))
}
// RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "LightningClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LightningClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "LightningClient" to call the correct interceptors.
func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LightningClient) error {
mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -699,7 +715,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -728,7 +744,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -757,7 +773,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -786,7 +802,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -815,7 +831,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -844,7 +860,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -873,7 +889,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -902,7 +918,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -931,7 +947,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -960,7 +976,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -989,7 +1005,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1018,7 +1034,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1047,7 +1063,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1076,7 +1092,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1105,7 +1121,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1134,7 +1150,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1163,7 +1179,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1192,7 +1208,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1221,7 +1237,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1250,7 +1266,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1279,7 +1295,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1308,7 +1324,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1337,7 +1353,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1366,7 +1382,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1395,7 +1411,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1424,7 +1440,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1453,7 +1469,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_UpdateFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_UpdateFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {

@ -64,7 +64,7 @@ message UnlockWalletResponse {}
service Lightning { service Lightning {
/** lncli: `walletbalance` /** lncli: `walletbalance`
WalletBalance returns the sum of all confirmed unspent outputs under control WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
by the wallet. This method can be modified by having the request specify by the wallet. This method can be modified by having the request specify
only witness outputs should be factored into the final output sum. only witness outputs should be factored into the final output sum.
*/ */
@ -995,7 +995,13 @@ message WalletBalanceRequest {
} }
message WalletBalanceResponse { message WalletBalanceResponse {
/// The balance of the wallet /// The balance of the wallet
int64 balance = 1 [json_name = "balance"]; int64 total_balance = 1 [json_name = "total_balance"];
/// The confirmed balance of a wallet(with >= 1 confirmations)
int64 confirmed_balance = 2 [json_name = "confirmed_balance"];
/// The unconfirmed balance of a wallet(with 0 confirmations)
int64 unconfirmed_balance = 3 [json_name = "unconfirmed_balance"];
} }
message ChannelBalanceRequest { message ChannelBalanceRequest {

@ -17,7 +17,7 @@
"paths": { "paths": {
"/v1/balance/blockchain": { "/v1/balance/blockchain": {
"get": { "get": {
"summary": "* lncli: `walletbalance`\nWalletBalance returns the sum of all confirmed unspent outputs under control\nby the wallet. This method can be modified by having the request specify\nonly witness outputs should be factored into the final output sum.", "summary": "* lncli: `walletbalance`\nWalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control\nby the wallet. This method can be modified by having the request specify\nonly witness outputs should be factored into the final output sum.",
"operationId": "WalletBalance", "operationId": "WalletBalance",
"responses": { "responses": {
"200": { "200": {
@ -2057,10 +2057,20 @@
"lnrpcWalletBalanceResponse": { "lnrpcWalletBalanceResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
"balance": { "total_balance": {
"type": "string", "type": "string",
"format": "int64", "format": "int64",
"title": "/ The balance of the wallet" "title": "/ The balance of the wallet"
},
"confirmed_balance": {
"type": "string",
"format": "int64",
"title": "/ The confirmed balance of a wallet(with \u003e= 1 confirmations)"
},
"unconfirmed_balance": {
"type": "string",
"format": "int64",
"title": "/ The unconfirmed balance of a wallet(with 0 confirmations)"
} }
} }
} }

@ -868,8 +868,8 @@ out:
return err return err
} }
if aliceResp.Balance == expectedBalance && if aliceResp.ConfirmedBalance == expectedBalance &&
bobResp.Balance == expectedBalance { bobResp.ConfirmedBalance == expectedBalance {
break out break out
} }
case <-balanceTimeout: case <-balanceTimeout:
@ -1494,7 +1494,7 @@ func (n *networkHarness) SendCoins(ctx context.Context, amt btcutil.Amount,
return err return err
} }
if currentBal.Balance == initialBalance.Balance+int64(amt) { if currentBal.ConfirmedBalance == initialBalance.ConfirmedBalance+int64(amt) {
return nil return nil
} }
case <-balanceTimeout: case <-balanceTimeout:

@ -1175,10 +1175,10 @@ func (r *rpcServer) ListPeers(ctx context.Context,
return resp, nil return resp, nil
} }
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all
// confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
// TODO(roasbeef): split into total and confirmed/unconfirmed
// TODO(roasbeef): add async hooks into wallet balance changes // TODO(roasbeef): add async hooks into wallet balance changes
func (r *rpcServer) WalletBalance(ctx context.Context, func (r *rpcServer) WalletBalance(ctx context.Context,
in *lnrpc.WalletBalanceRequest) (*lnrpc.WalletBalanceResponse, error) { in *lnrpc.WalletBalanceRequest) (*lnrpc.WalletBalanceResponse, error) {
@ -1191,15 +1191,27 @@ func (r *rpcServer) WalletBalance(ctx context.Context,
} }
} }
balance, err := r.server.cc.wallet.ConfirmedBalance(1, in.WitnessOnly) // Get total balance, from txs that have >= 0 confirmations.
totalBal, err := r.server.cc.wallet.ConfirmedBalance(0, in.WitnessOnly)
if err != nil { if err != nil {
return nil, err return nil, err
} }
rpcsLog.Debugf("[walletbalance] balance=%v", balance) // Get confirmed balance, from txs that have >= 1 confirmations.
confirmedBal, err := r.server.cc.wallet.ConfirmedBalance(1, in.WitnessOnly)
if err != nil {
return nil, err
}
// Get uncomfirmed balance, from txs with 0 confirmations.
unconfirmedBal := totalBal - confirmedBal
rpcsLog.Debugf("[walletbalance] Total balance=%v", totalBal)
return &lnrpc.WalletBalanceResponse{ return &lnrpc.WalletBalanceResponse{
Balance: int64(balance), TotalBalance: int64(totalBal),
ConfirmedBalance: int64(confirmedBal),
UnconfirmedBalance: int64(unconfirmedBal),
}, nil }, nil
} }