From fbd599a2cbe193c42c77010bb9738f525899b060 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:40:29 -0800 Subject: [PATCH 1/9] multi: rename Payment.PaymentPreimage to Payment.Preimage Preliminary step to exposing PaymentPreimage() as a method that can be shared between legacy payments and mutli-path payments. --- channeldb/payments.go | 8 ++++---- routing/control_tower.go | 2 +- rpcserver.go | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/channeldb/payments.go b/channeldb/payments.go index d576c65c..ddf80ed0 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -239,11 +239,11 @@ type Payment struct { // NOTE: Can be nil if no attempt is yet made. Attempt *PaymentAttemptInfo - // PaymentPreimage is the preimage of a successful payment. This serves - // as a proof of payment. It will only be non-nil for settled payments. + // Preimage is the preimage of a successful payment. This serves as a + // proof of payment. It will only be non-nil for settled payments. // // NOTE: Can be nil if payment is not settled. - PaymentPreimage *lntypes.Preimage + Preimage *lntypes.Preimage // Failure is a failure reason code indicating the reason the payment // failed. It is only non-nil for failed payments. @@ -363,7 +363,7 @@ func fetchPayment(bucket *bbolt.Bucket) (*Payment, error) { if b != nil { var preimg lntypes.Preimage copy(preimg[:], b[:]) - p.PaymentPreimage = &preimg + p.Preimage = &preimg } // Get failure reason if available. diff --git a/routing/control_tower.go b/routing/control_tower.go index 0bf08476..9cd63a95 100644 --- a/routing/control_tower.go +++ b/routing/control_tower.go @@ -214,7 +214,7 @@ func (p *controlTower) SubscribePayment(paymentHash lntypes.Hash) ( // immediately. case channeldb.StatusSucceeded: event = *createSuccessResult( - &payment.Attempt.Route, *payment.PaymentPreimage, + &payment.Attempt.Route, *payment.Preimage, ) // Payment already failed. It is not necessary to register as a diff --git a/rpcserver.go b/rpcserver.go index 828ce7cf..157a714a 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -4348,9 +4348,8 @@ func (r *rpcServer) ListPayments(ctx context.Context, continue } - // If a payment attempt has been made we can fetch the route. - // Otherwise we'll just populate the RPC response with an empty - // one. + // Fetch the payment's route, which will be empty if an attempt + // has not been made. var route route.Route if payment.Attempt != nil { route = payment.Attempt.Route @@ -4360,10 +4359,11 @@ func (r *rpcServer) ListPayments(ctx context.Context, path[i] = hex.EncodeToString(hop.PubKeyBytes[:]) } - // If this payment is settled, the preimage will be available. + // Fetch the preimage if the payment was successful, otherwise a + // zero-value preimage will be used. var preimage lntypes.Preimage - if payment.PaymentPreimage != nil { - preimage = *payment.PaymentPreimage + if payment.Preimage != nil { + preimage = *payment.Preimage } msatValue := int64(payment.Info.Value) From 9e019407fbce0808ed93995b05a80f7efd292233 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:40:44 -0800 Subject: [PATCH 2/9] routing/control_tower: fix PaymentResult godocs --- routing/control_tower.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routing/control_tower.go b/routing/control_tower.go index 9cd63a95..812af4e5 100644 --- a/routing/control_tower.go +++ b/routing/control_tower.go @@ -56,12 +56,12 @@ type PaymentResult struct { // for successful payments. Route *route.Route - // PaymentPreimage is the preimage of a successful payment. This serves - // as a proof of payment. It is only set for successful payments. + // Preimage is the preimage of a successful payment. This serves as a + // proof of payment. It is only set for successful payments. Preimage lntypes.Preimage - // Failure is a failure reason code indicating the reason the payment - // failed. It is only set for failed payments. + // FailureReason is a failure reason code indicating the reason the + // payment failed. It is only set for failed payments. FailureReason channeldb.FailureReason } From 77602451b8b8b74f8a42cb878b4003f79a23d637 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:41:08 -0800 Subject: [PATCH 3/9] channeldb: add MPPayment from FetchPayments --- channeldb/mp_payment.go | 105 ++++++++++++++++++++++++++++++++++++++++ channeldb/payments.go | 71 +++++++++++++++++++++++++-- rpcserver.go | 31 +++++++----- 3 files changed, 189 insertions(+), 18 deletions(-) create mode 100644 channeldb/mp_payment.go diff --git a/channeldb/mp_payment.go b/channeldb/mp_payment.go new file mode 100644 index 00000000..9a26cdbd --- /dev/null +++ b/channeldb/mp_payment.go @@ -0,0 +1,105 @@ +package channeldb + +import ( + "time" + + "github.com/btcsuite/btcd/btcec" + "github.com/lightningnetwork/lnd/lntypes" + "github.com/lightningnetwork/lnd/lnwire" + "github.com/lightningnetwork/lnd/routing/route" +) + +// MPPaymentCreationInfo is the information necessary to have ready when +// initiating a payment, moving it into state InFlight. +type MPPaymentCreationInfo struct { + // PaymentHash is the hash this payment is paying to. + PaymentHash lntypes.Hash + + // Value is the amount we are paying. + Value lnwire.MilliSatoshi + + // CreatingTime is the time at which this payment was started. + CreationTime time.Time + + // PaymentRequest is the full payment request, if any. + PaymentRequest []byte +} + +// HTLCAttempt contains information about a specific HTLC attempt for a given +// payment. This information is used by the router to handle any errors coming +// back after an attempt is made, and to query the switch about the status of a +// payment. For settled payment this will be the information for the succeeding +// payment attempt. +type HTLCAttempt struct { + // PaymentID is the unique ID used for this attempt. + PaymentID uint64 + + // SessionKey is the ephemeral key used for this payment attempt. + SessionKey *btcec.PrivateKey + + // Route is the route attempted to send the HTLC. + Route route.Route + + // AttemptTime is the time at which this HTLC was attempted. + AttemptTime time.Time + + // Settle is the preimage of a successful payment. This serves as a + // proof of payment. It will only be non-nil for settled payments. + // + // NOTE: Can be nil if payment is not settled. + Settle *HTLCSettleInfo + + // Fail is a failure reason code indicating the reason the payment + // failed. It is only non-nil for failed payments. + // + // NOTE: Can be nil if payment is not failed. + Failure *HTLCFailInfo +} + +// HTLCSettleInfo encapsulates the information that augments an HTLCAttempt in +// the event that the HTLC is successful. +type HTLCSettleInfo struct { + // Preimage is the preimage of a successful HTLC. This serves as a proof + // of payment. + Preimage lntypes.Preimage + + // SettleTime is the time at which this HTLC was settled. + SettleTime time.Time +} + +// HTLCFailInfo encapsulates the information that augments an HTLCAttempt in the +// event that the HTLC fails. +type HTLCFailInfo struct { + // FailTime is the time at which this HTLC was failed. + FailTime time.Time +} + +// MPPayment is a wrapper around a payment's MPPaymentCreationInfo and +// HTLCAttempts. All payments will have the MPPPaymentCreationInfo set, any +// HTLCs made in attempts to be completed will populated in the HTLCs slice. +// Each populated HTLCAttempt represents an attempted HTLC, each of which may +// have the associated Settle or Fail struct populated if the HTLC is no longer +// in-flight. +type MPPayment struct { + // sequenceNum is a unique identifier used to sort the payments in + // order of creation. + sequenceNum uint64 + + // Info holds all static information about this payment, and is + // populated when the payment is initiated. + Info *MPPaymentCreationInfo + + // HTLCs holds the information about individual HTLCs that we send in + // order to make the payment. + HTLCs []HTLCAttempt + + // FailureReason is the failure reason code indicating the reason the + // payment failed. + // + // NOTE: Will only be set once the daemon has given up on the payment + // altogether. + FailureReason *FailureReason + + // Status is the current PaymentStatus of this payment. + Status PaymentStatus +} diff --git a/channeldb/payments.go b/channeldb/payments.go index ddf80ed0..afe5e1dc 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -252,9 +252,70 @@ type Payment struct { Failure *FailureReason } +// ToMPPayment converts a legacy payment into an MPPayment. +func (p *Payment) ToMPPayment() *MPPayment { + var ( + htlcs []HTLCAttempt + reason *FailureReason + settle *HTLCSettleInfo + failure *HTLCFailInfo + ) + + // Promote the payment failure to a proper fail struct, if it exists. + if p.Failure != nil { + // NOTE: FailTime is not set for legacy payments. + failure = &HTLCFailInfo{} + reason = p.Failure + } + + // Promote the payment preimage to proper settle struct, if it exists. + if p.Preimage != nil { + // NOTE: SettleTime is not set for legacy payments. + settle = &HTLCSettleInfo{ + Preimage: *p.Preimage, + } + } + + // Either a settle or a failure may be set, but not both. + if settle != nil && failure != nil { + panic("htlc attempt has both settle and failure info") + } + + // Populate a single HTLC on the MPPayment if an attempt exists on the + // legacy payment. If none exists we will leave the attempt info blank + // since we cannot recover it. + if p.Attempt != nil { + // NOTE: AttemptTime is not set for legacy payments. + htlcs = []HTLCAttempt{ + { + PaymentID: p.Attempt.PaymentID, + SessionKey: p.Attempt.SessionKey, + Route: p.Attempt.Route, + Settle: settle, + Failure: failure, + }, + } + } + + return &MPPayment{ + sequenceNum: p.sequenceNum, + Info: &MPPaymentCreationInfo{ + PaymentHash: p.Info.PaymentHash, + Value: p.Info.Value, + CreationTime: p.Info.CreationDate, + PaymentRequest: p.Info.PaymentRequest, + }, + HTLCs: htlcs, + FailureReason: reason, + Status: p.Status, + } +} + // FetchPayments returns all sent payments found in the DB. -func (db *DB) FetchPayments() ([]*Payment, error) { - var payments []*Payment +// +// nolint: dupl +func (db *DB) FetchPayments() ([]*MPPayment, error) { + var payments []*MPPayment err := db.View(func(tx *bbolt.Tx) error { paymentsBucket := tx.Bucket(paymentsRootBucket) @@ -276,7 +337,7 @@ func (db *DB) FetchPayments() ([]*Payment, error) { return err } - payments = append(payments, p) + payments = append(payments, p.ToMPPayment()) // For older versions of lnd, duplicate payments to a // payment has was possible. These will be found in a @@ -301,7 +362,7 @@ func (db *DB) FetchPayments() ([]*Payment, error) { return err } - payments = append(payments, p) + payments = append(payments, p.ToMPPayment()) return nil }) }) @@ -473,7 +534,7 @@ func deserializePaymentCreationInfo(r io.Reader) (*PaymentCreationInfo, error) { reqLen := uint32(byteOrder.Uint32(scratch[:4])) payReq := make([]byte, reqLen) if reqLen > 0 { - if _, err := io.ReadFull(r, payReq[:]); err != nil { + if _, err := io.ReadFull(r, payReq); err != nil { return nil, err } } diff --git a/rpcserver.go b/rpcserver.go index 157a714a..6c770b78 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -4348,24 +4348,29 @@ func (r *rpcServer) ListPayments(ctx context.Context, continue } - // Fetch the payment's route, which will be empty if an attempt - // has not been made. - var route route.Route - if payment.Attempt != nil { - route = payment.Attempt.Route + // Fetch the payment's route and preimage. If no HTLC was + // successful, an empty route and preimage will be used. + var ( + route route.Route + preimage lntypes.Preimage + ) + for _, htlc := range payment.HTLCs { + // Display the last route attempted. + route = htlc.Route + + // If any of the htlcs have settled, extract a valid + // preimage. + if htlc.Settle != nil { + preimage = htlc.Settle.Preimage + } } + + // Encode the hops from the successful route, if any. path := make([]string, len(route.Hops)) for i, hop := range route.Hops { path[i] = hex.EncodeToString(hop.PubKeyBytes[:]) } - // Fetch the preimage if the payment was successful, otherwise a - // zero-value preimage will be used. - var preimage lntypes.Preimage - if payment.Preimage != nil { - preimage = *payment.Preimage - } - msatValue := int64(payment.Info.Value) satValue := int64(payment.Info.Value.ToSatoshis()) @@ -4380,7 +4385,7 @@ func (r *rpcServer) ListPayments(ctx context.Context, Value: satValue, ValueMsat: msatValue, ValueSat: satValue, - CreationDate: payment.Info.CreationDate.Unix(), + CreationDate: payment.Info.CreationTime.Unix(), Path: path, Fee: int64(route.TotalFees().ToSatoshis()), FeeSat: int64(route.TotalFees().ToSatoshis()), From d1f245e791acfa3f2c8b07b5d4cd756fac5be535 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:41:27 -0800 Subject: [PATCH 4/9] lnrpc: expose new MPP fields on list payments --- lnrpc/rpc.pb.go | 1298 ++++++++++++++++++++++------------------ lnrpc/rpc.proto | 37 +- lnrpc/rpc.swagger.json | 48 +- 3 files changed, 791 insertions(+), 592 deletions(-) diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index 9582a274..99a6294a 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -251,6 +251,34 @@ func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor_77a6da22d6a3feb1, []int{103, 0} } +type HTLCAttempt_HTLCStatus int32 + +const ( + HTLCAttempt_IN_FLIGHT HTLCAttempt_HTLCStatus = 0 + HTLCAttempt_SUCCEEDED HTLCAttempt_HTLCStatus = 1 + HTLCAttempt_FAILED HTLCAttempt_HTLCStatus = 2 +) + +var HTLCAttempt_HTLCStatus_name = map[int32]string{ + 0: "IN_FLIGHT", + 1: "SUCCEEDED", + 2: "FAILED", +} + +var HTLCAttempt_HTLCStatus_value = map[string]int32{ + "IN_FLIGHT": 0, + "SUCCEEDED": 1, + "FAILED": 2, +} + +func (x HTLCAttempt_HTLCStatus) String() string { + return proto.EnumName(HTLCAttempt_HTLCStatus_name, int32(x)) +} + +func (HTLCAttempt_HTLCStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{104, 0} +} + type GenSeedRequest struct { //* //aezeed_passphrase is an optional user provided passphrase that will be used @@ -7657,10 +7685,10 @@ type Payment struct { PaymentHash string `protobuf:"bytes,1,opt,name=payment_hash,proto3" json:"payment_hash,omitempty"` /// Deprecated, use value_sat or value_msat. Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` // Deprecated: Do not use. - /// The date of this payment - CreationDate int64 `protobuf:"varint,3,opt,name=creation_date,proto3" json:"creation_date,omitempty"` - /// The path this payment took - Path []string `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"` + /// Deprecated, use creation_time_ns + CreationDate int64 `protobuf:"varint,3,opt,name=creation_date,proto3" json:"creation_date,omitempty"` // Deprecated: Do not use. + /// The path this payment took. + Path []string `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"` // Deprecated: Do not use. /// Deprecated, use fee_sat or fee_msat. Fee int64 `protobuf:"varint,5,opt,name=fee,proto3" json:"fee,omitempty"` // Deprecated: Do not use. /// The payment preimage @@ -7676,10 +7704,14 @@ type Payment struct { /// The fee paid for this payment in satoshis FeeSat int64 `protobuf:"varint,11,opt,name=fee_sat,proto3" json:"fee_sat,omitempty"` /// The fee paid for this payment in milli-satoshis - FeeMsat int64 `protobuf:"varint,12,opt,name=fee_msat,proto3" json:"fee_msat,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + FeeMsat int64 `protobuf:"varint,12,opt,name=fee_msat,proto3" json:"fee_msat,omitempty"` + /// The time in UNIX nanoseconds at which the payment was created. + CreationTimeNs int64 `protobuf:"varint,13,opt,name=creation_time_ns,proto3" json:"creation_time_ns,omitempty"` + /// The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. + Htlcs []*HTLCAttempt `protobuf:"bytes,14,rep,name=htlcs,proto3" json:"htlcs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Payment) Reset() { *m = Payment{} } @@ -7722,6 +7754,7 @@ func (m *Payment) GetValue() int64 { return 0 } +// Deprecated: Do not use. func (m *Payment) GetCreationDate() int64 { if m != nil { return m.CreationDate @@ -7729,6 +7762,7 @@ func (m *Payment) GetCreationDate() int64 { return 0 } +// Deprecated: Do not use. func (m *Payment) GetPath() []string { if m != nil { return m.Path @@ -7793,6 +7827,89 @@ func (m *Payment) GetFeeMsat() int64 { return 0 } +func (m *Payment) GetCreationTimeNs() int64 { + if m != nil { + return m.CreationTimeNs + } + return 0 +} + +func (m *Payment) GetHtlcs() []*HTLCAttempt { + if m != nil { + return m.Htlcs + } + return nil +} + +type HTLCAttempt struct { + /// The status of the HTLC. + Status HTLCAttempt_HTLCStatus `protobuf:"varint,1,opt,name=status,proto3,enum=lnrpc.HTLCAttempt_HTLCStatus" json:"status,omitempty"` + /// The route taken by this HTLC. + Route *Route `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"` + /// The time in UNIX nanonseconds at which this HTLC was sent. + AttemptTimeNs int64 `protobuf:"varint,3,opt,name=attempt_time_ns,proto3" json:"attempt_time_ns,omitempty"` + //* + //The time in UNIX nanonseconds at which this HTLC was settled or failed. + //This value will not be set if the HTLC is still IN_FLIGHT. + ResolveTimeNs int64 `protobuf:"varint,4,opt,name=resolve_time_ns,proto3" json:"resolve_time_ns,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HTLCAttempt) Reset() { *m = HTLCAttempt{} } +func (m *HTLCAttempt) String() string { return proto.CompactTextString(m) } +func (*HTLCAttempt) ProtoMessage() {} +func (*HTLCAttempt) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{104} +} + +func (m *HTLCAttempt) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HTLCAttempt.Unmarshal(m, b) +} +func (m *HTLCAttempt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HTLCAttempt.Marshal(b, m, deterministic) +} +func (m *HTLCAttempt) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTLCAttempt.Merge(m, src) +} +func (m *HTLCAttempt) XXX_Size() int { + return xxx_messageInfo_HTLCAttempt.Size(m) +} +func (m *HTLCAttempt) XXX_DiscardUnknown() { + xxx_messageInfo_HTLCAttempt.DiscardUnknown(m) +} + +var xxx_messageInfo_HTLCAttempt proto.InternalMessageInfo + +func (m *HTLCAttempt) GetStatus() HTLCAttempt_HTLCStatus { + if m != nil { + return m.Status + } + return HTLCAttempt_IN_FLIGHT +} + +func (m *HTLCAttempt) GetRoute() *Route { + if m != nil { + return m.Route + } + return nil +} + +func (m *HTLCAttempt) GetAttemptTimeNs() int64 { + if m != nil { + return m.AttemptTimeNs + } + return 0 +} + +func (m *HTLCAttempt) GetResolveTimeNs() int64 { + if m != nil { + return m.ResolveTimeNs + } + return 0 +} + type ListPaymentsRequest struct { //* //If true, then return payments that have not yet fully completed. This means @@ -7808,7 +7925,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*ListPaymentsRequest) ProtoMessage() {} func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{104} + return fileDescriptor_77a6da22d6a3feb1, []int{105} } func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error { @@ -7848,7 +7965,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*ListPaymentsResponse) ProtoMessage() {} func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{105} + return fileDescriptor_77a6da22d6a3feb1, []int{106} } func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error { @@ -7886,7 +8003,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsRequest) ProtoMessage() {} func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{106} + return fileDescriptor_77a6da22d6a3feb1, []int{107} } func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error { @@ -7917,7 +8034,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{107} + return fileDescriptor_77a6da22d6a3feb1, []int{108} } func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error { @@ -7949,7 +8066,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} } func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) } func (*AbandonChannelRequest) ProtoMessage() {} func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{108} + return fileDescriptor_77a6da22d6a3feb1, []int{109} } func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error { @@ -7987,7 +8104,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{} func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) } func (*AbandonChannelResponse) ProtoMessage() {} func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{109} + return fileDescriptor_77a6da22d6a3feb1, []int{110} } func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error { @@ -8020,7 +8137,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (*DebugLevelRequest) ProtoMessage() {} func (*DebugLevelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{110} + return fileDescriptor_77a6da22d6a3feb1, []int{111} } func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error { @@ -8066,7 +8183,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (*DebugLevelResponse) ProtoMessage() {} func (*DebugLevelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{111} + return fileDescriptor_77a6da22d6a3feb1, []int{112} } func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error { @@ -8106,7 +8223,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} } func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (*PayReqString) ProtoMessage() {} func (*PayReqString) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{112} + return fileDescriptor_77a6da22d6a3feb1, []int{113} } func (m *PayReqString) XXX_Unmarshal(b []byte) error { @@ -8154,7 +8271,7 @@ func (m *PayReq) Reset() { *m = PayReq{} } func (m *PayReq) String() string { return proto.CompactTextString(m) } func (*PayReq) ProtoMessage() {} func (*PayReq) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{113} + return fileDescriptor_77a6da22d6a3feb1, []int{114} } func (m *PayReq) XXX_Unmarshal(b []byte) error { @@ -8255,7 +8372,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (*FeeReportRequest) ProtoMessage() {} func (*FeeReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{114} + return fileDescriptor_77a6da22d6a3feb1, []int{115} } func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error { @@ -8294,7 +8411,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (*ChannelFeeReport) ProtoMessage() {} func (*ChannelFeeReport) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{115} + return fileDescriptor_77a6da22d6a3feb1, []int{116} } func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error { @@ -8361,7 +8478,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (*FeeReportResponse) ProtoMessage() {} func (*FeeReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{116} + return fileDescriptor_77a6da22d6a3feb1, []int{117} } func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error { @@ -8432,7 +8549,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateRequest) ProtoMessage() {} func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{117} + return fileDescriptor_77a6da22d6a3feb1, []int{118} } func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error { @@ -8536,7 +8653,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateResponse) ProtoMessage() {} func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{118} + return fileDescriptor_77a6da22d6a3feb1, []int{119} } func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error { @@ -8575,7 +8692,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryRequest) ProtoMessage() {} func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{119} + return fileDescriptor_77a6da22d6a3feb1, []int{120} } func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error { @@ -8652,7 +8769,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (*ForwardingEvent) ProtoMessage() {} func (*ForwardingEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{120} + return fileDescriptor_77a6da22d6a3feb1, []int{121} } func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error { @@ -8750,7 +8867,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryResponse) ProtoMessage() {} func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{121} + return fileDescriptor_77a6da22d6a3feb1, []int{122} } func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error { @@ -8797,7 +8914,7 @@ func (m *ExportChannelBackupRequest) Reset() { *m = ExportChannelBackupR func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) } func (*ExportChannelBackupRequest) ProtoMessage() {} func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{122} + return fileDescriptor_77a6da22d6a3feb1, []int{123} } func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error { @@ -8844,7 +8961,7 @@ func (m *ChannelBackup) Reset() { *m = ChannelBackup{} } func (m *ChannelBackup) String() string { return proto.CompactTextString(m) } func (*ChannelBackup) ProtoMessage() {} func (*ChannelBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{123} + return fileDescriptor_77a6da22d6a3feb1, []int{124} } func (m *ChannelBackup) XXX_Unmarshal(b []byte) error { @@ -8898,7 +9015,7 @@ func (m *MultiChanBackup) Reset() { *m = MultiChanBackup{} } func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) } func (*MultiChanBackup) ProtoMessage() {} func (*MultiChanBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{124} + return fileDescriptor_77a6da22d6a3feb1, []int{125} } func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error { @@ -8943,7 +9060,7 @@ func (m *ChanBackupExportRequest) Reset() { *m = ChanBackupExportRequest func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) } func (*ChanBackupExportRequest) ProtoMessage() {} func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{125} + return fileDescriptor_77a6da22d6a3feb1, []int{126} } func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error { @@ -8982,7 +9099,7 @@ func (m *ChanBackupSnapshot) Reset() { *m = ChanBackupSnapshot{} } func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) } func (*ChanBackupSnapshot) ProtoMessage() {} func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{126} + return fileDescriptor_77a6da22d6a3feb1, []int{127} } func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error { @@ -9030,7 +9147,7 @@ func (m *ChannelBackups) Reset() { *m = ChannelBackups{} } func (m *ChannelBackups) String() string { return proto.CompactTextString(m) } func (*ChannelBackups) ProtoMessage() {} func (*ChannelBackups) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{127} + return fileDescriptor_77a6da22d6a3feb1, []int{128} } func (m *ChannelBackups) XXX_Unmarshal(b []byte) error { @@ -9072,7 +9189,7 @@ func (m *RestoreChanBackupRequest) Reset() { *m = RestoreChanBackupReque func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) } func (*RestoreChanBackupRequest) ProtoMessage() {} func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{128} + return fileDescriptor_77a6da22d6a3feb1, []int{129} } func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error { @@ -9148,7 +9265,7 @@ func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} } func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) } func (*RestoreBackupResponse) ProtoMessage() {} func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{129} + return fileDescriptor_77a6da22d6a3feb1, []int{130} } func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error { @@ -9179,7 +9296,7 @@ func (m *ChannelBackupSubscription) Reset() { *m = ChannelBackupSubscrip func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) } func (*ChannelBackupSubscription) ProtoMessage() {} func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{130} + return fileDescriptor_77a6da22d6a3feb1, []int{131} } func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error { @@ -9210,7 +9327,7 @@ func (m *VerifyChanBackupResponse) Reset() { *m = VerifyChanBackupRespon func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) } func (*VerifyChanBackupResponse) ProtoMessage() {} func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{131} + return fileDescriptor_77a6da22d6a3feb1, []int{132} } func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error { @@ -9245,7 +9362,7 @@ func (m *MacaroonPermission) Reset() { *m = MacaroonPermission{} } func (m *MacaroonPermission) String() string { return proto.CompactTextString(m) } func (*MacaroonPermission) ProtoMessage() {} func (*MacaroonPermission) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{132} + return fileDescriptor_77a6da22d6a3feb1, []int{133} } func (m *MacaroonPermission) XXX_Unmarshal(b []byte) error { @@ -9292,7 +9409,7 @@ func (m *BakeMacaroonRequest) Reset() { *m = BakeMacaroonRequest{} } func (m *BakeMacaroonRequest) String() string { return proto.CompactTextString(m) } func (*BakeMacaroonRequest) ProtoMessage() {} func (*BakeMacaroonRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{133} + return fileDescriptor_77a6da22d6a3feb1, []int{134} } func (m *BakeMacaroonRequest) XXX_Unmarshal(b []byte) error { @@ -9332,7 +9449,7 @@ func (m *BakeMacaroonResponse) Reset() { *m = BakeMacaroonResponse{} } func (m *BakeMacaroonResponse) String() string { return proto.CompactTextString(m) } func (*BakeMacaroonResponse) ProtoMessage() {} func (*BakeMacaroonResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{134} + return fileDescriptor_77a6da22d6a3feb1, []int{135} } func (m *BakeMacaroonResponse) XXX_Unmarshal(b []byte) error { @@ -9368,6 +9485,7 @@ func init() { proto.RegisterEnum("lnrpc.ChannelEventUpdate_UpdateType", ChannelEventUpdate_UpdateType_name, ChannelEventUpdate_UpdateType_value) proto.RegisterEnum("lnrpc.Invoice_InvoiceState", Invoice_InvoiceState_name, Invoice_InvoiceState_value) proto.RegisterEnum("lnrpc.Payment_PaymentStatus", Payment_PaymentStatus_name, Payment_PaymentStatus_value) + proto.RegisterEnum("lnrpc.HTLCAttempt_HTLCStatus", HTLCAttempt_HTLCStatus_name, HTLCAttempt_HTLCStatus_value) proto.RegisterType((*GenSeedRequest)(nil), "lnrpc.GenSeedRequest") proto.RegisterType((*GenSeedResponse)(nil), "lnrpc.GenSeedResponse") proto.RegisterType((*InitWalletRequest)(nil), "lnrpc.InitWalletRequest") @@ -9480,6 +9598,7 @@ func init() { proto.RegisterType((*ListInvoiceResponse)(nil), "lnrpc.ListInvoiceResponse") proto.RegisterType((*InvoiceSubscription)(nil), "lnrpc.InvoiceSubscription") proto.RegisterType((*Payment)(nil), "lnrpc.Payment") + proto.RegisterType((*HTLCAttempt)(nil), "lnrpc.HTLCAttempt") proto.RegisterType((*ListPaymentsRequest)(nil), "lnrpc.ListPaymentsRequest") proto.RegisterType((*ListPaymentsResponse)(nil), "lnrpc.ListPaymentsResponse") proto.RegisterType((*DeleteAllPaymentsRequest)(nil), "lnrpc.DeleteAllPaymentsRequest") @@ -9516,553 +9635,560 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 8735 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5d, 0x6c, 0x1c, 0x5b, - 0xb6, 0x56, 0xaa, 0x7f, 0xec, 0xee, 0xd5, 0x6d, 0xbb, 0xbd, 0xed, 0xd8, 0x9d, 0x3e, 0x39, 0x39, - 0x39, 0x35, 0xb9, 0x49, 0x26, 0x73, 0x26, 0xc9, 0xf1, 0xcc, 0x1c, 0xce, 0x3d, 0xe1, 0x72, 0x71, - 0x6c, 0x27, 0xce, 0x1c, 0xc7, 0xf1, 0x94, 0x93, 0x09, 0x33, 0x73, 0xaf, 0x7a, 0xca, 0xdd, 0xdb, - 0x76, 0x4d, 0xba, 0xab, 0x7a, 0xaa, 0xaa, 0x9d, 0x78, 0x0e, 0x07, 0x09, 0x84, 0x10, 0xe2, 0x05, - 0x0d, 0x08, 0x09, 0x10, 0xe8, 0x4a, 0x73, 0x91, 0xb8, 0x57, 0x3c, 0xc0, 0x0b, 0xd2, 0x05, 0xdd, - 0x37, 0x84, 0x90, 0x90, 0x10, 0x0f, 0x3c, 0x20, 0xf1, 0xc0, 0x08, 0x81, 0x84, 0xae, 0x78, 0x43, - 0xe2, 0x1d, 0xad, 0xb5, 0x7f, 0x6a, 0xef, 0xaa, 0xea, 0x38, 0x67, 0x66, 0xe0, 0xc9, 0xbd, 0xbf, - 0xb5, 0x6b, 0xff, 0xae, 0xb5, 0xf6, 0xda, 0x6b, 0xaf, 0xbd, 0x0d, 0xcd, 0x78, 0x32, 0xb8, 0x3b, - 0x89, 0xa3, 0x34, 0x62, 0xf5, 0x51, 0x18, 0x4f, 0x06, 0xbd, 0xab, 0x27, 0x51, 0x74, 0x32, 0xe2, - 0xf7, 0xfc, 0x49, 0x70, 0xcf, 0x0f, 0xc3, 0x28, 0xf5, 0xd3, 0x20, 0x0a, 0x13, 0x91, 0xc9, 0xfd, - 0x31, 0x2c, 0x3e, 0xe6, 0xe1, 0x21, 0xe7, 0x43, 0x8f, 0xff, 0x74, 0xca, 0x93, 0x94, 0x7d, 0x03, - 0x96, 0x7d, 0xfe, 0x33, 0xce, 0x87, 0xfd, 0x89, 0x9f, 0x24, 0x93, 0xd3, 0xd8, 0x4f, 0x78, 0xd7, - 0xb9, 0xee, 0xdc, 0x6e, 0x7b, 0x1d, 0x41, 0x38, 0xd0, 0x38, 0xfb, 0x10, 0xda, 0x09, 0x66, 0xe5, - 0x61, 0x1a, 0x47, 0x93, 0xf3, 0x6e, 0x85, 0xf2, 0xb5, 0x10, 0xdb, 0x11, 0x90, 0x3b, 0x82, 0x25, - 0x5d, 0x43, 0x32, 0x89, 0xc2, 0x84, 0xb3, 0xfb, 0xb0, 0x3a, 0x08, 0x26, 0xa7, 0x3c, 0xee, 0xd3, - 0xc7, 0xe3, 0x90, 0x8f, 0xa3, 0x30, 0x18, 0x74, 0x9d, 0xeb, 0xd5, 0xdb, 0x4d, 0x8f, 0x09, 0x1a, - 0x7e, 0xf1, 0x54, 0x52, 0xd8, 0x2d, 0x58, 0xe2, 0xa1, 0xc0, 0xf9, 0x90, 0xbe, 0x92, 0x55, 0x2d, - 0x66, 0x30, 0x7e, 0xe0, 0xfe, 0xcd, 0x0a, 0x2c, 0x3f, 0x09, 0x83, 0xf4, 0xa5, 0x3f, 0x1a, 0xf1, - 0x54, 0xf5, 0xe9, 0x16, 0x2c, 0xbd, 0x26, 0x80, 0xfa, 0xf4, 0x3a, 0x8a, 0x87, 0xb2, 0x47, 0x8b, - 0x02, 0x3e, 0x90, 0xe8, 0xcc, 0x96, 0x55, 0x66, 0xb6, 0xac, 0x74, 0xb8, 0xaa, 0x33, 0x86, 0xeb, - 0x16, 0x2c, 0xc5, 0x7c, 0x10, 0x9d, 0xf1, 0xf8, 0xbc, 0xff, 0x3a, 0x08, 0x87, 0xd1, 0xeb, 0x6e, - 0xed, 0xba, 0x73, 0xbb, 0xee, 0x2d, 0x2a, 0xf8, 0x25, 0xa1, 0xec, 0x21, 0x2c, 0x0d, 0x4e, 0xfd, - 0x30, 0xe4, 0xa3, 0xfe, 0x91, 0x3f, 0x78, 0x35, 0x9d, 0x24, 0xdd, 0xfa, 0x75, 0xe7, 0x76, 0x6b, - 0xe3, 0xca, 0x5d, 0x9a, 0xd5, 0xbb, 0x5b, 0xa7, 0x7e, 0xf8, 0x90, 0x28, 0x87, 0xa1, 0x3f, 0x49, - 0x4e, 0xa3, 0xd4, 0x5b, 0x94, 0x5f, 0x08, 0x38, 0x71, 0x57, 0x81, 0x99, 0x23, 0x21, 0xc6, 0xde, - 0xfd, 0x67, 0x0e, 0xac, 0xbc, 0x08, 0x47, 0xd1, 0xe0, 0xd5, 0xaf, 0x38, 0x44, 0x25, 0x7d, 0xa8, - 0xbc, 0x6b, 0x1f, 0xaa, 0x5f, 0xb5, 0x0f, 0x6b, 0xb0, 0x6a, 0x37, 0x56, 0xf6, 0x82, 0xc3, 0x65, - 0xfc, 0xfa, 0x84, 0xab, 0x66, 0xa9, 0x6e, 0x7c, 0x1d, 0x3a, 0x83, 0x69, 0x1c, 0xf3, 0xb0, 0xd0, - 0x8f, 0x25, 0x89, 0xeb, 0x8e, 0x7c, 0x08, 0xed, 0x90, 0xbf, 0xce, 0xb2, 0x49, 0xde, 0x0d, 0xf9, - 0x6b, 0x95, 0xc5, 0xed, 0xc2, 0x5a, 0xbe, 0x1a, 0xd9, 0x80, 0xff, 0xe6, 0x40, 0xed, 0x45, 0xfa, - 0x26, 0x62, 0x77, 0xa1, 0x96, 0x9e, 0x4f, 0x84, 0x84, 0x2c, 0x6e, 0x30, 0xd9, 0xb5, 0xcd, 0xe1, - 0x30, 0xe6, 0x49, 0xf2, 0xfc, 0x7c, 0xc2, 0xbd, 0xb6, 0x2f, 0x12, 0x7d, 0xcc, 0xc7, 0xba, 0x30, - 0x2f, 0xd3, 0x54, 0x61, 0xd3, 0x53, 0x49, 0x76, 0x0d, 0xc0, 0x1f, 0x47, 0xd3, 0x30, 0xed, 0x27, - 0x7e, 0x4a, 0x43, 0x55, 0xf5, 0x0c, 0x84, 0x5d, 0x85, 0xe6, 0xe4, 0x55, 0x3f, 0x19, 0xc4, 0xc1, - 0x24, 0x25, 0xb6, 0x69, 0x7a, 0x19, 0xc0, 0xbe, 0x01, 0x8d, 0x68, 0x9a, 0x4e, 0xa2, 0x20, 0x4c, - 0x25, 0xab, 0x2c, 0xc9, 0xb6, 0x3c, 0x9b, 0xa6, 0x07, 0x08, 0x7b, 0x3a, 0x03, 0xbb, 0x01, 0x0b, - 0x83, 0x28, 0x3c, 0x0e, 0xe2, 0xb1, 0x50, 0x06, 0xdd, 0x39, 0xaa, 0xcd, 0x06, 0xdd, 0x7f, 0x55, - 0x81, 0xd6, 0xf3, 0xd8, 0x0f, 0x13, 0x7f, 0x80, 0x00, 0x36, 0x3d, 0x7d, 0xd3, 0x3f, 0xf5, 0x93, - 0x53, 0xea, 0x6d, 0xd3, 0x53, 0x49, 0xb6, 0x06, 0x73, 0xa2, 0xa1, 0xd4, 0xa7, 0xaa, 0x27, 0x53, - 0xec, 0x23, 0x58, 0x0e, 0xa7, 0xe3, 0xbe, 0x5d, 0x57, 0x95, 0xb8, 0xa5, 0x48, 0xc0, 0x01, 0x38, - 0xc2, 0xb9, 0x16, 0x55, 0x88, 0x1e, 0x1a, 0x08, 0x73, 0xa1, 0x2d, 0x53, 0x3c, 0x38, 0x39, 0x15, - 0xdd, 0xac, 0x7b, 0x16, 0x86, 0x65, 0xa4, 0xc1, 0x98, 0xf7, 0x93, 0xd4, 0x1f, 0x4f, 0x64, 0xb7, - 0x0c, 0x84, 0xe8, 0x51, 0xea, 0x8f, 0xfa, 0xc7, 0x9c, 0x27, 0xdd, 0x79, 0x49, 0xd7, 0x08, 0xbb, - 0x09, 0x8b, 0x43, 0x9e, 0xa4, 0x7d, 0x39, 0x29, 0x3c, 0xe9, 0x36, 0x48, 0xf4, 0x73, 0x28, 0x96, - 0x13, 0xfb, 0xaf, 0xfb, 0x38, 0x00, 0xfc, 0x4d, 0xb7, 0x29, 0xda, 0x9a, 0x21, 0xc8, 0x39, 0x8f, - 0x79, 0x6a, 0x8c, 0x5e, 0x22, 0x39, 0xd4, 0xdd, 0x03, 0x66, 0xc0, 0xdb, 0x3c, 0xf5, 0x83, 0x51, - 0xc2, 0x3e, 0x81, 0x76, 0x6a, 0x64, 0x26, 0x55, 0xd8, 0xd2, 0xec, 0x64, 0x7c, 0xe0, 0x59, 0xf9, - 0xdc, 0x53, 0x68, 0x3c, 0xe2, 0x7c, 0x2f, 0x18, 0x07, 0x29, 0x5b, 0x83, 0xfa, 0x71, 0xf0, 0x86, - 0x0b, 0x86, 0xaf, 0xee, 0x5e, 0xf2, 0x44, 0x92, 0x7d, 0x00, 0x40, 0x3f, 0xfa, 0x63, 0xcd, 0x58, - 0xbb, 0x97, 0xbc, 0x26, 0x61, 0x4f, 0x91, 0xb3, 0x7a, 0x30, 0x3f, 0xe1, 0xf1, 0x80, 0xab, 0xf9, - 0xdb, 0xbd, 0xe4, 0x29, 0xe0, 0xe1, 0x3c, 0xd4, 0x47, 0x58, 0xba, 0xfb, 0x27, 0x35, 0x68, 0x1d, - 0xf2, 0x50, 0x4b, 0x1a, 0x83, 0x1a, 0x8e, 0x89, 0x94, 0x2e, 0xfa, 0xcd, 0xbe, 0x06, 0x2d, 0x1a, - 0xa7, 0x24, 0x8d, 0x83, 0xf0, 0x44, 0x30, 0xf8, 0xc3, 0x4a, 0xd7, 0xf1, 0x00, 0xe1, 0x43, 0x42, - 0x59, 0x07, 0xaa, 0xfe, 0x58, 0x31, 0x38, 0xfe, 0x64, 0x57, 0xa0, 0xe1, 0x8f, 0x53, 0xd1, 0xbc, - 0x36, 0xc1, 0xf3, 0xfe, 0x38, 0xa5, 0xa6, 0x7d, 0x08, 0xed, 0x89, 0x7f, 0x3e, 0x46, 0x79, 0xd6, - 0x5c, 0xd1, 0xf6, 0x5a, 0x12, 0xdb, 0x45, 0xb6, 0xd8, 0x80, 0x15, 0x33, 0x8b, 0xaa, 0xbc, 0xae, - 0x2b, 0x5f, 0x36, 0x72, 0xcb, 0x36, 0xdc, 0x82, 0x25, 0xf5, 0x4d, 0x2c, 0xfa, 0x43, 0xbc, 0xd2, - 0xf4, 0x16, 0x25, 0xac, 0x7a, 0x79, 0x1b, 0x3a, 0xc7, 0x41, 0xe8, 0x8f, 0xfa, 0x83, 0x51, 0x7a, - 0xd6, 0x1f, 0xf2, 0x51, 0xea, 0x13, 0xd7, 0xd4, 0xbd, 0x45, 0xc2, 0xb7, 0x46, 0xe9, 0xd9, 0x36, - 0xa2, 0xec, 0x23, 0x68, 0x1e, 0x73, 0xde, 0xa7, 0xc1, 0xea, 0x36, 0x2c, 0x09, 0x54, 0x33, 0xe4, - 0x35, 0x8e, 0xd5, 0x5c, 0x7d, 0x04, 0x9d, 0x68, 0x9a, 0x9e, 0x44, 0x41, 0x78, 0xd2, 0x47, 0x9d, - 0xd7, 0x0f, 0x86, 0xc4, 0x45, 0xb5, 0x87, 0x95, 0xfb, 0x8e, 0xb7, 0xa8, 0x68, 0xa8, 0x7d, 0x9e, - 0x0c, 0xd9, 0x4d, 0x58, 0x1a, 0xf9, 0x49, 0xda, 0x3f, 0x8d, 0x26, 0xfd, 0xc9, 0xf4, 0xe8, 0x15, - 0x3f, 0xef, 0x2e, 0xd0, 0x40, 0x2c, 0x20, 0xbc, 0x1b, 0x4d, 0x0e, 0x08, 0x64, 0xef, 0x03, 0x50, - 0x3b, 0x45, 0x23, 0xe0, 0xba, 0x73, 0x7b, 0xc1, 0x6b, 0x22, 0x22, 0x2a, 0xfd, 0x0c, 0x1a, 0x34, - 0x3d, 0xe9, 0xe8, 0xac, 0xdb, 0x22, 0x06, 0xfb, 0x40, 0xb6, 0xd0, 0x98, 0xd8, 0xbb, 0xdb, 0x3c, - 0x49, 0x9f, 0x8f, 0xce, 0x70, 0xfd, 0x3e, 0xf7, 0xe6, 0x87, 0x22, 0xd5, 0xfb, 0x0c, 0xda, 0x26, - 0x01, 0x67, 0x11, 0x9b, 0x81, 0xb3, 0x5f, 0xf3, 0xf0, 0x27, 0x5b, 0x85, 0xfa, 0x99, 0x3f, 0x9a, - 0x72, 0xa9, 0x48, 0x45, 0xe2, 0xb3, 0xca, 0xa7, 0x8e, 0xfb, 0x27, 0x0e, 0xb4, 0x45, 0x0d, 0xd2, - 0x00, 0xb8, 0x01, 0x0b, 0x6a, 0xf8, 0x79, 0x1c, 0x47, 0xb1, 0xd4, 0x27, 0x36, 0xc8, 0xee, 0x40, - 0x47, 0x01, 0x93, 0x98, 0x07, 0x63, 0xff, 0x44, 0x95, 0x5d, 0xc0, 0xd9, 0x46, 0x56, 0x62, 0x1c, - 0x4d, 0x53, 0x2e, 0x97, 0x9a, 0xb6, 0xec, 0x9f, 0x87, 0x98, 0x67, 0x67, 0x41, 0x7d, 0x52, 0xc2, - 0x5b, 0x16, 0xe6, 0xfe, 0x3d, 0x07, 0x18, 0x36, 0xfd, 0x79, 0x24, 0x8a, 0x90, 0x6c, 0x91, 0x67, - 0x4b, 0xe7, 0x9d, 0xd9, 0xb2, 0xf2, 0x36, 0xb6, 0x74, 0xa1, 0x2e, 0x5a, 0x5f, 0x2b, 0x69, 0xbd, - 0x20, 0x7d, 0xb7, 0xd6, 0xa8, 0x76, 0x6a, 0xee, 0x7f, 0xa9, 0xc2, 0xea, 0x96, 0x58, 0x2b, 0x37, - 0x07, 0x03, 0x3e, 0xd1, 0x0c, 0xfb, 0x01, 0xb4, 0xc2, 0x68, 0xc8, 0x15, 0x9b, 0x88, 0x86, 0x01, - 0x42, 0x06, 0x8f, 0x9c, 0xfa, 0x41, 0x28, 0x1a, 0x2e, 0xc6, 0xb3, 0x49, 0x08, 0x35, 0xfb, 0x26, - 0x2c, 0x4d, 0x78, 0x38, 0x34, 0xf9, 0x52, 0x58, 0x33, 0x0b, 0x12, 0x96, 0x2c, 0xf9, 0x01, 0xb4, - 0x8e, 0xa7, 0x22, 0x1f, 0x4a, 0x73, 0x8d, 0xf8, 0x00, 0x24, 0xb4, 0x29, 0x84, 0x7a, 0x32, 0x4d, - 0x4e, 0x89, 0x5a, 0x27, 0xea, 0x3c, 0xa6, 0x91, 0xf4, 0x3e, 0xc0, 0x70, 0x9a, 0xa4, 0x92, 0x4d, - 0xe7, 0x88, 0xd8, 0x44, 0x44, 0xb0, 0xe9, 0x37, 0x61, 0x65, 0xec, 0xbf, 0xe9, 0x13, 0xff, 0xf4, - 0x83, 0xb0, 0x7f, 0x3c, 0x22, 0x75, 0x3f, 0x4f, 0xf9, 0x3a, 0x63, 0xff, 0xcd, 0xf7, 0x91, 0xf2, - 0x24, 0x7c, 0x44, 0x38, 0xca, 0xb2, 0xb2, 0x33, 0x62, 0x9e, 0xf0, 0xf8, 0x8c, 0x93, 0xf8, 0xd5, - 0xb4, 0x31, 0xe1, 0x09, 0x14, 0x5b, 0x34, 0xc6, 0x7e, 0xa7, 0xa3, 0x81, 0x90, 0x35, 0x6f, 0x7e, - 0x1c, 0x84, 0xbb, 0xe9, 0x68, 0xc0, 0xae, 0x02, 0xa0, 0xf0, 0x4e, 0x78, 0xdc, 0x7f, 0xf5, 0x9a, - 0x04, 0xa7, 0x46, 0xc2, 0x7a, 0xc0, 0xe3, 0xcf, 0x5f, 0xb3, 0xf7, 0xa0, 0x39, 0x48, 0x48, 0xfa, - 0xfd, 0xf3, 0x6e, 0x8b, 0xa4, 0xaa, 0x31, 0x48, 0x50, 0xee, 0xfd, 0x73, 0xf6, 0x11, 0x30, 0x6c, - 0xad, 0x4f, 0xb3, 0xc0, 0x87, 0x54, 0x7c, 0x42, 0x6a, 0x6c, 0x81, 0x1a, 0xbb, 0x29, 0x09, 0x58, - 0x4f, 0xc2, 0xbe, 0x06, 0x0b, 0xaa, 0xb1, 0xc7, 0x23, 0xff, 0x24, 0x21, 0x39, 0x5e, 0xf0, 0xda, - 0x12, 0x7c, 0x84, 0x98, 0xfb, 0x52, 0x58, 0x37, 0xc6, 0xdc, 0x4a, 0xb9, 0xc1, 0x75, 0x96, 0x10, - 0x9a, 0xd7, 0x86, 0x27, 0x53, 0x65, 0x93, 0x56, 0x29, 0x99, 0x34, 0xf7, 0x17, 0x0e, 0xb4, 0x65, - 0xc9, 0x64, 0x12, 0xb0, 0xfb, 0xc0, 0xd4, 0x2c, 0xa6, 0x6f, 0x82, 0x61, 0xff, 0xe8, 0x3c, 0xe5, - 0x89, 0x60, 0x9a, 0xdd, 0x4b, 0x5e, 0x09, 0x0d, 0x15, 0x97, 0x85, 0x26, 0x69, 0x2c, 0x78, 0x7a, - 0xf7, 0x92, 0x57, 0xa0, 0xa0, 0x88, 0xa1, 0xd1, 0x31, 0x4d, 0xfb, 0x41, 0x38, 0xe4, 0x6f, 0x88, - 0x95, 0x16, 0x3c, 0x0b, 0x7b, 0xb8, 0x08, 0x6d, 0xf3, 0x3b, 0xf7, 0x27, 0xd0, 0x50, 0x26, 0x0b, - 0x2d, 0xd7, 0xb9, 0x76, 0x79, 0x06, 0xc2, 0x7a, 0xd0, 0xb0, 0x5b, 0xe1, 0x35, 0xbe, 0x4a, 0xdd, - 0xee, 0x5f, 0x80, 0xce, 0x1e, 0x32, 0x51, 0x88, 0x4c, 0x2b, 0xed, 0xb0, 0x35, 0x98, 0x33, 0x84, - 0xa7, 0xe9, 0xc9, 0x14, 0x2e, 0x78, 0xa7, 0x51, 0x92, 0xca, 0x7a, 0xe8, 0xb7, 0xfb, 0xef, 0x1c, - 0x60, 0x3b, 0x49, 0x1a, 0x8c, 0xfd, 0x94, 0x3f, 0xe2, 0x5a, 0x3d, 0x3c, 0x83, 0x36, 0x96, 0xf6, - 0x3c, 0xda, 0x14, 0x56, 0x91, 0x58, 0xcd, 0xbf, 0x21, 0xc5, 0xb9, 0xf8, 0xc1, 0x5d, 0x33, 0xb7, - 0x50, 0xbc, 0x56, 0x01, 0x28, 0x6d, 0xa9, 0x1f, 0x9f, 0xf0, 0x94, 0x4c, 0x26, 0x69, 0x70, 0x83, - 0x80, 0xb6, 0xa2, 0xf0, 0xb8, 0xf7, 0xbb, 0xb0, 0x5c, 0x28, 0xc3, 0xd4, 0xd1, 0xcd, 0x12, 0x1d, - 0x5d, 0x35, 0x75, 0xf4, 0x00, 0x56, 0xac, 0x76, 0x49, 0x8e, 0xeb, 0xc2, 0x3c, 0x0a, 0x06, 0xae, - 0xcc, 0x8e, 0x58, 0x99, 0x65, 0x92, 0x6d, 0xc0, 0xea, 0x31, 0xe7, 0xb1, 0x9f, 0x52, 0x92, 0x44, - 0x07, 0xe7, 0x44, 0x96, 0x5c, 0x4a, 0x73, 0xff, 0xbb, 0x03, 0x4b, 0xa8, 0x4d, 0x9f, 0xfa, 0xe1, - 0xb9, 0x1a, 0xab, 0xbd, 0xd2, 0xb1, 0xba, 0x6d, 0x2c, 0x4c, 0x46, 0xee, 0xaf, 0x3a, 0x50, 0xd5, - 0xfc, 0x40, 0xb1, 0xeb, 0xd0, 0xb6, 0x9a, 0x5b, 0x17, 0x26, 0x60, 0xe2, 0xa7, 0x07, 0x3c, 0x7e, - 0x78, 0x9e, 0xf2, 0x5f, 0x7f, 0x28, 0x6f, 0x42, 0x27, 0x6b, 0xb6, 0x1c, 0x47, 0x06, 0x35, 0x64, - 0x4c, 0x59, 0x00, 0xfd, 0x76, 0xff, 0x91, 0x23, 0x32, 0x6e, 0x45, 0x81, 0x36, 0x0f, 0x31, 0x23, - 0x5a, 0x99, 0x2a, 0x23, 0xfe, 0x9e, 0x69, 0x5e, 0xff, 0xfa, 0x9d, 0x45, 0x9d, 0x98, 0xf0, 0x70, - 0xd8, 0xf7, 0x47, 0x23, 0x52, 0xc4, 0x0d, 0x6f, 0x1e, 0xd3, 0x9b, 0xa3, 0x91, 0x7b, 0x0b, 0x96, - 0x8d, 0xd6, 0xbd, 0xa5, 0x1f, 0xfb, 0xc0, 0xf6, 0x82, 0x24, 0x7d, 0x11, 0x26, 0x13, 0xc3, 0x72, - 0x7a, 0x0f, 0x9a, 0xa8, 0x6d, 0xb1, 0x65, 0x42, 0x72, 0xeb, 0x1e, 0xaa, 0x5f, 0x6c, 0x57, 0x42, - 0x44, 0xff, 0x8d, 0x24, 0x56, 0x24, 0xd1, 0x7f, 0x43, 0x44, 0xf7, 0x53, 0x58, 0xb1, 0xca, 0x93, - 0x55, 0x7f, 0x08, 0xf5, 0x69, 0xfa, 0x26, 0x52, 0xb6, 0x71, 0x4b, 0x72, 0x08, 0xee, 0xc2, 0x3c, - 0x41, 0x71, 0x1f, 0xc0, 0xf2, 0x3e, 0x7f, 0x2d, 0x05, 0x59, 0x35, 0xe4, 0xe6, 0x85, 0x3b, 0x34, - 0xa2, 0xbb, 0x77, 0x81, 0x99, 0x1f, 0x67, 0x02, 0xa0, 0xf6, 0x6b, 0x8e, 0xb5, 0x5f, 0x73, 0x6f, - 0x02, 0x3b, 0x0c, 0x4e, 0xc2, 0xa7, 0x3c, 0x49, 0xfc, 0x13, 0x2d, 0xfa, 0x1d, 0xa8, 0x8e, 0x93, - 0x13, 0xa9, 0xaa, 0xf0, 0xa7, 0xfb, 0x2d, 0x58, 0xb1, 0xf2, 0xc9, 0x82, 0xaf, 0x42, 0x33, 0x09, - 0x4e, 0x42, 0x3f, 0x9d, 0xc6, 0x5c, 0x16, 0x9d, 0x01, 0xee, 0x23, 0x58, 0xfd, 0x3e, 0x8f, 0x83, - 0xe3, 0xf3, 0x8b, 0x8a, 0xb7, 0xcb, 0xa9, 0xe4, 0xcb, 0xd9, 0x81, 0xcb, 0xb9, 0x72, 0x64, 0xf5, - 0x82, 0x7d, 0xe5, 0x4c, 0x36, 0x3c, 0x91, 0x30, 0x74, 0x5f, 0xc5, 0xd4, 0x7d, 0xee, 0x0b, 0x60, - 0x5b, 0x51, 0x18, 0xf2, 0x41, 0x7a, 0xc0, 0x79, 0x9c, 0xb9, 0x8a, 0x32, 0x5e, 0x6d, 0x6d, 0xac, - 0xcb, 0x91, 0xcd, 0x2b, 0x54, 0xc9, 0xc4, 0x0c, 0x6a, 0x13, 0x1e, 0x8f, 0xa9, 0xe0, 0x86, 0x47, - 0xbf, 0xdd, 0xcb, 0xb0, 0x62, 0x15, 0x2b, 0x37, 0xd7, 0x1f, 0xc3, 0xe5, 0xed, 0x20, 0x19, 0x14, - 0x2b, 0xec, 0xc2, 0xfc, 0x64, 0x7a, 0xd4, 0xcf, 0x24, 0x51, 0x25, 0x71, 0xbf, 0x95, 0xff, 0x44, - 0x16, 0xf6, 0x37, 0x1c, 0xa8, 0xed, 0x3e, 0xdf, 0xdb, 0xc2, 0xb5, 0x22, 0x08, 0x07, 0xd1, 0x18, - 0xad, 0x30, 0xd1, 0x69, 0x9d, 0x9e, 0x29, 0x61, 0x57, 0xa1, 0x49, 0xc6, 0x1b, 0x6e, 0x31, 0xa5, - 0x1d, 0x94, 0x01, 0xb8, 0xbd, 0xe5, 0x6f, 0x26, 0x41, 0x4c, 0xfb, 0x57, 0xb5, 0x2b, 0xad, 0xd1, - 0x32, 0x53, 0x24, 0xb8, 0xbf, 0x98, 0x87, 0x79, 0xb9, 0xf8, 0x8a, 0x85, 0x3c, 0x0d, 0xce, 0x78, - 0xb6, 0x90, 0x63, 0x0a, 0x0d, 0xe3, 0x98, 0x8f, 0xa3, 0x54, 0xdb, 0x6f, 0x62, 0x1a, 0x6c, 0x90, - 0xb6, 0xef, 0xd2, 0x88, 0x10, 0x1b, 0xfe, 0xaa, 0xc8, 0x65, 0x81, 0xec, 0x2a, 0xcc, 0x2b, 0x63, - 0xa0, 0xa6, 0x77, 0x16, 0x0a, 0xc2, 0xd1, 0x18, 0xf8, 0x13, 0x7f, 0x10, 0xa4, 0xe7, 0x52, 0x2d, - 0xe8, 0x34, 0x96, 0x3f, 0x8a, 0x06, 0xfe, 0xa8, 0x7f, 0xe4, 0x8f, 0xfc, 0x70, 0xc0, 0x95, 0x7b, - 0xc0, 0x02, 0x71, 0xab, 0x2c, 0x9b, 0xa5, 0xb2, 0x89, 0xed, 0x74, 0x0e, 0xc5, 0x35, 0x7c, 0x10, - 0x8d, 0xc7, 0x41, 0x8a, 0x3b, 0x6c, 0x32, 0xcd, 0xaa, 0x9e, 0x81, 0x08, 0x67, 0x04, 0xa5, 0x5e, - 0x8b, 0x11, 0x6c, 0x2a, 0x67, 0x84, 0x01, 0x62, 0x29, 0x39, 0x0b, 0xad, 0xea, 0x19, 0x08, 0xce, - 0xc5, 0x34, 0x4c, 0x78, 0x9a, 0x8e, 0xf8, 0x50, 0x37, 0xa8, 0x45, 0xd9, 0x8a, 0x04, 0x76, 0x1f, - 0x56, 0xc4, 0xa6, 0x3f, 0xf1, 0xd3, 0x28, 0x39, 0x0d, 0x92, 0x7e, 0x82, 0xbb, 0x5f, 0xb1, 0xf9, - 0x2c, 0x23, 0xb1, 0x4f, 0x61, 0x3d, 0x07, 0xc7, 0x7c, 0xc0, 0x83, 0x33, 0x3e, 0x24, 0x13, 0xae, - 0xea, 0xcd, 0x22, 0xb3, 0xeb, 0xd0, 0x0a, 0xa7, 0xe3, 0xfe, 0x74, 0x32, 0xf4, 0xd1, 0x88, 0x59, - 0x24, 0xe3, 0xd2, 0x84, 0xd8, 0xc7, 0xa0, 0xec, 0x34, 0x69, 0x3d, 0x2e, 0x59, 0x1a, 0x0e, 0xb9, - 0xd7, 0xb3, 0x73, 0x20, 0x63, 0x66, 0x26, 0x69, 0x47, 0x6e, 0xf4, 0x14, 0x40, 0x72, 0x12, 0x07, - 0x67, 0x7e, 0xca, 0xbb, 0xcb, 0x42, 0xa9, 0xcb, 0x24, 0x7e, 0x17, 0x84, 0x41, 0x1a, 0xf8, 0x69, - 0x14, 0x77, 0x19, 0xd1, 0x32, 0x00, 0x07, 0x91, 0xf8, 0x23, 0x49, 0xfd, 0x74, 0x9a, 0x48, 0x0b, - 0x75, 0x85, 0x98, 0xab, 0x48, 0x60, 0x9f, 0xc0, 0x9a, 0xe0, 0x08, 0x22, 0x49, 0xdb, 0x9b, 0x4c, - 0x85, 0x55, 0x1a, 0x91, 0x19, 0x54, 0x1c, 0x4a, 0xc9, 0x22, 0x85, 0x0f, 0x2f, 0x8b, 0xa1, 0x9c, - 0x41, 0xc6, 0xf6, 0x61, 0x0b, 0x82, 0x41, 0x5f, 0xe6, 0x40, 0x11, 0x59, 0xa3, 0x5e, 0x14, 0x09, - 0xc8, 0xe2, 0xa3, 0xe0, 0x98, 0xa7, 0xc1, 0x98, 0x77, 0xd7, 0x05, 0x8b, 0xab, 0x34, 0x0a, 0xe0, - 0x74, 0x42, 0x94, 0xae, 0x10, 0x78, 0x91, 0x72, 0xff, 0xc0, 0x11, 0x8b, 0x8f, 0x14, 0xd4, 0xc4, - 0xd8, 0x56, 0x09, 0x11, 0xed, 0x47, 0xe1, 0xe8, 0x5c, 0x4a, 0x2d, 0x08, 0xe8, 0x59, 0x38, 0x3a, - 0x47, 0xc3, 0x3e, 0x08, 0xcd, 0x2c, 0x42, 0xcf, 0xb5, 0x15, 0x48, 0x99, 0x3e, 0x80, 0xd6, 0x64, - 0x7a, 0x34, 0x0a, 0x06, 0x22, 0x4b, 0x55, 0x94, 0x22, 0x20, 0xca, 0x80, 0xfb, 0x4a, 0x31, 0x53, - 0x22, 0x47, 0x8d, 0x72, 0xb4, 0x24, 0x86, 0x59, 0xdc, 0x87, 0xb0, 0x6a, 0x37, 0x50, 0x2a, 0xf4, - 0x3b, 0xd0, 0x90, 0xf2, 0x9f, 0xc8, 0xcd, 0xfd, 0xa2, 0xe1, 0x67, 0xc5, 0x6d, 0x90, 0xa6, 0xbb, - 0xff, 0xba, 0x06, 0x2b, 0x12, 0xdd, 0x1a, 0x45, 0x09, 0x3f, 0x9c, 0x8e, 0xc7, 0x7e, 0x5c, 0xa2, - 0x58, 0x9c, 0x0b, 0x14, 0x4b, 0xa5, 0xa8, 0x58, 0xae, 0x59, 0xfb, 0x4b, 0xa1, 0x99, 0x0c, 0x84, - 0xdd, 0x86, 0xa5, 0xc1, 0x28, 0x4a, 0x84, 0xb9, 0x6f, 0xba, 0xfa, 0xf2, 0x70, 0x51, 0x19, 0xd6, - 0xcb, 0x94, 0xa1, 0xa9, 0xc8, 0xe6, 0x72, 0x8a, 0xcc, 0x85, 0x36, 0x16, 0xca, 0x95, 0x6e, 0x9e, - 0x97, 0x9b, 0x2d, 0x03, 0xc3, 0xf6, 0xe4, 0xd5, 0x86, 0xd0, 0x51, 0x4b, 0x65, 0x4a, 0x23, 0x18, - 0x73, 0xd2, 0xfd, 0x46, 0xee, 0xa6, 0x54, 0x1a, 0x45, 0x12, 0x7b, 0x04, 0x20, 0xea, 0x22, 0x03, - 0x04, 0xc8, 0x00, 0xb9, 0x69, 0xcf, 0x8a, 0x39, 0xfe, 0x77, 0x31, 0x31, 0x8d, 0x39, 0x19, 0x25, - 0xc6, 0x97, 0xee, 0xdf, 0x72, 0xa0, 0x65, 0xd0, 0xd8, 0x65, 0x58, 0xde, 0x7a, 0xf6, 0xec, 0x60, - 0xc7, 0xdb, 0x7c, 0xfe, 0xe4, 0xfb, 0x3b, 0xfd, 0xad, 0xbd, 0x67, 0x87, 0x3b, 0x9d, 0x4b, 0x08, - 0xef, 0x3d, 0xdb, 0xda, 0xdc, 0xeb, 0x3f, 0x7a, 0xe6, 0x6d, 0x29, 0xd8, 0x61, 0x6b, 0xc0, 0xbc, - 0x9d, 0xa7, 0xcf, 0x9e, 0xef, 0x58, 0x78, 0x85, 0x75, 0xa0, 0xfd, 0xd0, 0xdb, 0xd9, 0xdc, 0xda, - 0x95, 0x48, 0x95, 0xad, 0x42, 0xe7, 0xd1, 0x8b, 0xfd, 0xed, 0x27, 0xfb, 0x8f, 0xfb, 0x5b, 0x9b, - 0xfb, 0x5b, 0x3b, 0x7b, 0x3b, 0xdb, 0x9d, 0x1a, 0x5b, 0x80, 0xe6, 0xe6, 0xc3, 0xcd, 0xfd, 0xed, - 0x67, 0xfb, 0x3b, 0xdb, 0x9d, 0xba, 0xfb, 0x5f, 0x1d, 0xb8, 0x4c, 0xad, 0x1e, 0xe6, 0x85, 0xe4, - 0x3a, 0xb4, 0x06, 0x51, 0x34, 0x41, 0xc3, 0x3f, 0x5b, 0xda, 0x4c, 0x08, 0x05, 0x40, 0x28, 0x85, - 0xe3, 0x28, 0x1e, 0x70, 0x29, 0x23, 0x40, 0xd0, 0x23, 0x44, 0x50, 0x00, 0xe4, 0xf4, 0x8a, 0x1c, - 0x42, 0x44, 0x5a, 0x02, 0x13, 0x59, 0xd6, 0x60, 0xee, 0x28, 0xe6, 0xfe, 0xe0, 0x54, 0x4a, 0x87, - 0x4c, 0xb1, 0xaf, 0x67, 0x3b, 0xd3, 0x01, 0x8e, 0xfe, 0x88, 0x0f, 0x89, 0x63, 0x1a, 0xde, 0x92, - 0xc4, 0xb7, 0x24, 0x8c, 0x5a, 0xd0, 0x3f, 0xf2, 0xc3, 0x61, 0x14, 0xf2, 0xa1, 0x34, 0x7b, 0x33, - 0xc0, 0x3d, 0x80, 0xb5, 0x7c, 0xff, 0xa4, 0x8c, 0x7d, 0x62, 0xc8, 0x98, 0xb0, 0x42, 0x7b, 0xb3, - 0x67, 0xd3, 0x90, 0xb7, 0x5f, 0x56, 0xa0, 0x86, 0x46, 0xc9, 0x6c, 0x03, 0xc6, 0xb4, 0x33, 0xab, - 0x85, 0x73, 0x01, 0xda, 0xec, 0x8a, 0x25, 0x4a, 0x3a, 0x5a, 0x32, 0x24, 0xa3, 0xc7, 0x7c, 0x70, - 0x26, 0x5d, 0x2d, 0x06, 0x82, 0x02, 0x82, 0x9b, 0x00, 0xfa, 0x5a, 0x0a, 0x88, 0x4a, 0x2b, 0x1a, - 0x7d, 0x39, 0x9f, 0xd1, 0xe8, 0xbb, 0x2e, 0xcc, 0x07, 0xe1, 0x51, 0x34, 0x0d, 0x87, 0x24, 0x10, - 0x0d, 0x4f, 0x25, 0xe9, 0x24, 0x82, 0x04, 0x15, 0xf5, 0xa7, 0x60, 0xff, 0x0c, 0x60, 0x1b, 0xd0, - 0x4c, 0xce, 0xc3, 0x81, 0xc9, 0xf3, 0xab, 0x72, 0x94, 0x70, 0x0c, 0xee, 0x1e, 0x9e, 0x87, 0x03, - 0xe2, 0xf0, 0x2c, 0x9b, 0xfb, 0xbb, 0xd0, 0x50, 0x30, 0xb2, 0xe5, 0x8b, 0xfd, 0xcf, 0xf7, 0x9f, - 0xbd, 0xdc, 0xef, 0x1f, 0xfe, 0x60, 0x7f, 0xab, 0x73, 0x89, 0x2d, 0x41, 0x6b, 0x73, 0x8b, 0x38, - 0x9d, 0x00, 0x07, 0xb3, 0x1c, 0x6c, 0x1e, 0x1e, 0x6a, 0xa4, 0xe2, 0x32, 0xdc, 0xc8, 0x27, 0x64, - 0xf9, 0x69, 0x4f, 0xfb, 0x27, 0xb0, 0x6c, 0x60, 0xd9, 0x2e, 0x62, 0x82, 0x40, 0x6e, 0x17, 0x41, - 0x26, 0xa3, 0xa0, 0xb8, 0x1d, 0x58, 0x7c, 0xcc, 0xd3, 0x27, 0xe1, 0x71, 0xa4, 0x4a, 0xfa, 0x9f, - 0x35, 0x58, 0xd2, 0x90, 0x2c, 0xe8, 0x36, 0x2c, 0x05, 0x43, 0x1e, 0xa6, 0x41, 0x7a, 0xde, 0xb7, - 0xfc, 0x05, 0x79, 0x18, 0x4d, 0x6d, 0x7f, 0x14, 0xf8, 0xea, 0xc0, 0x47, 0x24, 0x70, 0xff, 0x8c, - 0x36, 0x80, 0xe9, 0xb7, 0x21, 0xbe, 0x12, 0x6e, 0x8a, 0x52, 0x1a, 0x6a, 0x20, 0xc4, 0xe5, 0x32, - 0xa3, 0x3f, 0x11, 0x26, 0x67, 0x19, 0x09, 0xa7, 0x4a, 0x94, 0x84, 0x5d, 0xae, 0x0b, 0x3b, 0x41, - 0x03, 0x85, 0x13, 0x95, 0x39, 0xa1, 0x1f, 0xf3, 0x27, 0x2a, 0xc6, 0xa9, 0x4c, 0xa3, 0x70, 0x2a, - 0x83, 0xfa, 0xf3, 0x3c, 0x1c, 0xf0, 0x61, 0x3f, 0x8d, 0xfa, 0xa4, 0xe7, 0x89, 0x25, 0x1a, 0x5e, - 0x1e, 0xc6, 0x75, 0x23, 0xe5, 0x49, 0x1a, 0x72, 0xe1, 0x9a, 0x6e, 0x90, 0x17, 0x54, 0x41, 0xb8, - 0x3f, 0x98, 0xc6, 0x41, 0xd2, 0x6d, 0xd3, 0x79, 0x0b, 0xfd, 0x66, 0xdf, 0x86, 0xcb, 0x47, 0x3c, - 0x49, 0xfb, 0xa7, 0xdc, 0x1f, 0xf2, 0x98, 0xd8, 0x4b, 0x1c, 0xec, 0x08, 0x93, 0xab, 0x9c, 0x88, - 0x8c, 0x7b, 0xc6, 0xe3, 0x24, 0x88, 0x42, 0x32, 0xb6, 0x9a, 0x9e, 0x4a, 0x62, 0x79, 0xd8, 0x79, - 0xbd, 0x50, 0xeb, 0x11, 0x5c, 0xa2, 0x8e, 0x97, 0x13, 0xd9, 0x0d, 0x98, 0xa3, 0x0e, 0x24, 0xdd, - 0x0e, 0xf1, 0x4c, 0x3b, 0x93, 0xf9, 0x20, 0xf4, 0x24, 0x0d, 0x67, 0x79, 0x10, 0x8d, 0xa2, 0x98, - 0x2c, 0xae, 0xa6, 0x27, 0x12, 0xf6, 0xe8, 0x9c, 0xc4, 0xfe, 0xe4, 0x54, 0x5a, 0x5d, 0x79, 0xf8, - 0xbb, 0xb5, 0x46, 0xab, 0xd3, 0x76, 0xff, 0x1c, 0xd4, 0xa9, 0x58, 0x2a, 0x8e, 0x06, 0xd3, 0x91, - 0xc5, 0x11, 0xda, 0x85, 0xf9, 0x90, 0xa7, 0xaf, 0xa3, 0xf8, 0x95, 0x3a, 0x3d, 0x94, 0x49, 0xf7, - 0x67, 0xb4, 0x43, 0xd3, 0xa7, 0x69, 0x2f, 0xc8, 0xb4, 0xc4, 0x7d, 0xb6, 0x98, 0xaa, 0xe4, 0xd4, - 0x97, 0x9b, 0xc6, 0x06, 0x01, 0x87, 0xa7, 0x3e, 0xea, 0x5a, 0x6b, 0xf6, 0xc5, 0x3e, 0xbc, 0x45, - 0xd8, 0xae, 0x98, 0xfc, 0x1b, 0xb0, 0xa8, 0xce, 0xe9, 0x92, 0xfe, 0x88, 0x1f, 0xa7, 0xca, 0x8b, - 0x16, 0x4e, 0xc7, 0xb4, 0x59, 0xdf, 0xe3, 0xc7, 0xa9, 0xbb, 0x0f, 0xcb, 0x52, 0xff, 0x3d, 0x9b, - 0x70, 0x55, 0xf5, 0x6f, 0x97, 0xd9, 0x12, 0xad, 0x8d, 0x15, 0x5b, 0x61, 0x8a, 0x93, 0x49, 0x3b, - 0xa7, 0xeb, 0x01, 0x33, 0xf5, 0xa9, 0x2c, 0x50, 0x2e, 0xe6, 0xca, 0x4f, 0x28, 0xbb, 0x63, 0x61, - 0x38, 0x3e, 0xc9, 0x74, 0x30, 0x50, 0xa7, 0xab, 0x0d, 0x4f, 0x25, 0xdd, 0x3f, 0x72, 0x60, 0x85, - 0x4a, 0x53, 0xd6, 0x90, 0x5c, 0xb3, 0x3e, 0xfd, 0x0a, 0xcd, 0x54, 0x5e, 0x5a, 0xe1, 0x9b, 0x5c, - 0x85, 0xba, 0xb9, 0x8a, 0x89, 0xc4, 0x57, 0xf7, 0xc9, 0xd4, 0xf2, 0x3e, 0x19, 0xf7, 0xef, 0x3b, - 0xb0, 0x2c, 0x16, 0x12, 0xb2, 0xb6, 0x65, 0xf7, 0xff, 0x3c, 0x2c, 0x08, 0x8b, 0x40, 0x6a, 0x05, - 0xd9, 0xd0, 0x4c, 0xb5, 0x12, 0x2a, 0x32, 0xef, 0x5e, 0xf2, 0xec, 0xcc, 0xec, 0x01, 0x59, 0x65, - 0x61, 0x9f, 0xd0, 0x92, 0x73, 0x78, 0x7b, 0xac, 0x77, 0x2f, 0x79, 0x46, 0xf6, 0x87, 0x0d, 0x34, - 0x96, 0x11, 0x77, 0x1f, 0xc3, 0x82, 0x55, 0x91, 0xe5, 0x0f, 0x6a, 0x0b, 0x7f, 0x50, 0xc1, 0xf1, - 0x5a, 0x29, 0x71, 0xbc, 0xfe, 0xcb, 0x2a, 0x30, 0x64, 0x96, 0xdc, 0x6c, 0x5c, 0xb7, 0x4f, 0x2f, - 0xd4, 0x91, 0x7c, 0x06, 0xb1, 0x0d, 0x60, 0x46, 0x52, 0x9d, 0xaa, 0x54, 0xf5, 0xa9, 0x4a, 0x09, - 0x15, 0x55, 0xad, 0xb4, 0x3a, 0xf4, 0x89, 0x05, 0xed, 0xf5, 0xc5, 0xd0, 0x97, 0xd2, 0x70, 0x65, - 0xa4, 0xe3, 0x0b, 0xdc, 0x95, 0xc8, 0xfd, 0xb1, 0x4a, 0xe7, 0xe7, 0x78, 0xee, 0xc2, 0x39, 0x9e, - 0x2f, 0xf8, 0xdd, 0x8c, 0x1d, 0x5a, 0xc3, 0xde, 0xa1, 0xdd, 0x80, 0x05, 0x75, 0x4a, 0x21, 0x4e, - 0x44, 0xe5, 0x76, 0xd8, 0x02, 0xd9, 0x1d, 0xe8, 0xa8, 0x4d, 0x92, 0xde, 0x06, 0x8a, 0xf3, 0xbe, - 0x02, 0x8e, 0x6b, 0x40, 0xe6, 0x89, 0x6b, 0x51, 0x63, 0x33, 0x80, 0xf6, 0x54, 0xc8, 0x25, 0xfd, - 0x69, 0x28, 0x8f, 0xe3, 0xf9, 0x90, 0x36, 0xc2, 0xb8, 0xa7, 0xca, 0x13, 0xdc, 0xbf, 0xe3, 0x40, - 0x07, 0xe7, 0xcd, 0x62, 0xcd, 0xcf, 0x80, 0x24, 0xe3, 0x1d, 0x39, 0xd3, 0xca, 0xcb, 0x3e, 0x85, - 0x26, 0xa5, 0xa3, 0x09, 0x0f, 0x25, 0x5f, 0x76, 0x6d, 0xbe, 0xcc, 0x74, 0xca, 0xee, 0x25, 0x2f, - 0xcb, 0x6c, 0x70, 0xe5, 0x7f, 0x74, 0xa0, 0x25, 0x6b, 0xf9, 0x95, 0x3d, 0x3d, 0x3d, 0x23, 0x7e, - 0x42, 0x18, 0x60, 0x59, 0xb8, 0xc4, 0x6d, 0x58, 0x1a, 0xfb, 0xe9, 0x34, 0xc6, 0x35, 0xdd, 0xf2, - 0xf2, 0xe4, 0x61, 0x5c, 0xa0, 0x49, 0x7d, 0x26, 0xfd, 0x34, 0x18, 0xf5, 0x15, 0x55, 0x46, 0x2a, - 0x94, 0x91, 0x50, 0x8b, 0x24, 0xa9, 0x7f, 0xc2, 0xe5, 0xda, 0x2b, 0x12, 0x6e, 0x17, 0xd6, 0x0e, - 0xb2, 0x93, 0x1b, 0xc3, 0xc6, 0x76, 0xff, 0xf9, 0x02, 0xac, 0x17, 0x48, 0x3a, 0xae, 0x4a, 0xba, - 0x2e, 0x46, 0xc1, 0xf8, 0x28, 0xd2, 0x1b, 0x14, 0xc7, 0xf4, 0x6a, 0x58, 0x24, 0x76, 0x02, 0x97, - 0x95, 0x91, 0x81, 0x63, 0x9a, 0x2d, 0x88, 0x15, 0x5a, 0xe9, 0x3e, 0xb6, 0xa7, 0x30, 0x5f, 0xa1, - 0xc2, 0x4d, 0x41, 0x2e, 0x2f, 0x8f, 0x9d, 0x42, 0x57, 0x5b, 0x33, 0x52, 0x61, 0x1b, 0x16, 0x0f, - 0xd6, 0xf5, 0xd1, 0x05, 0x75, 0x59, 0x26, 0xb9, 0x37, 0xb3, 0x34, 0x76, 0x0e, 0xd7, 0x14, 0x8d, - 0x34, 0x72, 0xb1, 0xbe, 0xda, 0x3b, 0xf5, 0x8d, 0x36, 0x1b, 0x76, 0xa5, 0x17, 0x14, 0xcc, 0x7e, - 0x02, 0x6b, 0xaf, 0xfd, 0x20, 0x55, 0xcd, 0x32, 0xec, 0x8b, 0x3a, 0x55, 0xb9, 0x71, 0x41, 0x95, - 0x2f, 0xc5, 0xc7, 0xd6, 0x32, 0x35, 0xa3, 0xc4, 0xde, 0x9f, 0x56, 0x60, 0xd1, 0x2e, 0x07, 0xd9, - 0x54, 0xca, 0xbe, 0xd2, 0x81, 0xca, 0x22, 0xcd, 0xc1, 0xc5, 0x7d, 0x7e, 0xa5, 0x6c, 0x9f, 0x6f, - 0xee, 0xac, 0xab, 0x17, 0xb9, 0x08, 0x6b, 0xef, 0xe6, 0x22, 0xac, 0x97, 0xba, 0x08, 0x67, 0x7b, - 0x92, 0xe6, 0x7e, 0x55, 0x4f, 0xd2, 0xfc, 0x5b, 0x3d, 0x49, 0xbd, 0xff, 0xe3, 0x00, 0x2b, 0x72, - 0x2f, 0x7b, 0x2c, 0x5c, 0x1b, 0x21, 0x1f, 0x49, 0x25, 0xf6, 0xcd, 0x77, 0x93, 0x00, 0x35, 0x5b, - 0xea, 0x6b, 0x14, 0x45, 0x33, 0xb8, 0xc9, 0x34, 0xb1, 0x16, 0xbc, 0x32, 0x52, 0xce, 0x4d, 0x5a, - 0xbb, 0xd8, 0x4d, 0x5a, 0xbf, 0xd8, 0x4d, 0x3a, 0x97, 0x77, 0x93, 0xf6, 0xfe, 0xba, 0x03, 0x2b, - 0x25, 0x6c, 0xf6, 0x9b, 0xeb, 0x38, 0x32, 0x86, 0xa5, 0x7d, 0x2a, 0x92, 0x31, 0x4c, 0xb0, 0xf7, - 0x97, 0x61, 0xc1, 0x12, 0xad, 0xdf, 0x5c, 0xfd, 0x79, 0x2b, 0x51, 0x70, 0xb6, 0x85, 0xf5, 0xfe, - 0x57, 0x05, 0x58, 0x51, 0xbc, 0xff, 0xbf, 0xb6, 0xa1, 0x38, 0x4e, 0xd5, 0x92, 0x71, 0xfa, 0x7f, - 0xba, 0xf2, 0x7c, 0x04, 0xcb, 0x32, 0x62, 0xd3, 0x70, 0x66, 0x09, 0x8e, 0x29, 0x12, 0xd0, 0x4e, - 0xb6, 0x7d, 0xd4, 0x0d, 0x2b, 0x42, 0xcd, 0x58, 0x7e, 0x73, 0xae, 0x6a, 0xb7, 0x07, 0x5d, 0x39, - 0x42, 0x3b, 0x67, 0x3c, 0x4c, 0x0f, 0xa7, 0x47, 0x22, 0x64, 0x31, 0x88, 0x42, 0x32, 0x03, 0x4d, - 0xa2, 0x34, 0x28, 0xbe, 0x0d, 0x6d, 0x73, 0xf9, 0x90, 0xd3, 0x91, 0xf3, 0x67, 0xa2, 0x29, 0x61, - 0xe6, 0x62, 0xdb, 0xb0, 0x48, 0x4a, 0x72, 0xa8, 0xbf, 0xab, 0xd0, 0x77, 0x6f, 0xf1, 0xd1, 0xec, - 0x5e, 0xf2, 0x72, 0xdf, 0xb0, 0xdf, 0x81, 0x45, 0x7b, 0x03, 0x28, 0xad, 0x92, 0xb2, 0x1d, 0x01, - 0x7e, 0x6e, 0x67, 0x66, 0x9b, 0xd0, 0xc9, 0xef, 0x20, 0x65, 0x34, 0xcf, 0x8c, 0x02, 0x0a, 0xd9, - 0xd9, 0xa7, 0xf2, 0xc0, 0xb2, 0x4e, 0xbe, 0x93, 0x1b, 0xf6, 0x67, 0xc6, 0x30, 0xdd, 0x15, 0x7f, - 0x8c, 0x23, 0xcc, 0xdf, 0x03, 0xc8, 0x30, 0xd6, 0x81, 0xf6, 0xb3, 0x83, 0x9d, 0xfd, 0xfe, 0xd6, - 0xee, 0xe6, 0xfe, 0xfe, 0xce, 0x5e, 0xe7, 0x12, 0x63, 0xb0, 0x48, 0xae, 0xbe, 0x6d, 0x8d, 0x39, - 0x88, 0x49, 0xe7, 0x8a, 0xc2, 0x2a, 0x6c, 0x15, 0x3a, 0x4f, 0xf6, 0x73, 0x68, 0xf5, 0x61, 0x53, - 0xcb, 0x87, 0xbb, 0x06, 0xab, 0x22, 0x22, 0xf7, 0xa1, 0x60, 0x0f, 0x65, 0x9d, 0xfc, 0x63, 0x07, - 0x2e, 0xe7, 0x08, 0x59, 0xc8, 0x97, 0x30, 0x40, 0x6c, 0xab, 0xc4, 0x06, 0xe9, 0x00, 0x42, 0xd9, - 0x9a, 0x39, 0x0d, 0x52, 0x24, 0x20, 0xcf, 0x1b, 0xb6, 0x69, 0x4e, 0x92, 0xca, 0x48, 0xee, 0xba, - 0x8e, 0xac, 0xc9, 0x35, 0xfc, 0x58, 0x44, 0xfa, 0x9a, 0x84, 0xec, 0x00, 0xd8, 0x6e, 0xb2, 0x4a, - 0xe2, 0xb6, 0xc2, 0x32, 0x76, 0xec, 0xf6, 0x96, 0xd2, 0xdc, 0x7f, 0x5b, 0x05, 0xf6, 0xbd, 0x29, - 0x8f, 0xcf, 0x29, 0xa6, 0x4b, 0x7b, 0x4e, 0xd7, 0xf3, 0x7e, 0xc1, 0xb9, 0xc9, 0xf4, 0xe8, 0x73, - 0x7e, 0xae, 0x82, 0x25, 0x2b, 0xef, 0x14, 0x2c, 0x59, 0x16, 0xac, 0x58, 0xbb, 0x38, 0x58, 0xb1, - 0x7e, 0x51, 0xb0, 0xe2, 0xd7, 0x60, 0x21, 0x38, 0x09, 0x23, 0x54, 0x07, 0x68, 0x42, 0x24, 0xdd, - 0xb9, 0xeb, 0x55, 0xdc, 0x7a, 0x4b, 0x70, 0x1f, 0x31, 0xf6, 0x20, 0xcb, 0xc4, 0x87, 0x27, 0x14, - 0x5c, 0x6b, 0x2a, 0x88, 0x9d, 0xe1, 0x09, 0xdf, 0x8b, 0x06, 0x7e, 0x1a, 0xc5, 0xb4, 0x4f, 0x53, - 0x1f, 0x23, 0x9e, 0xb0, 0x1b, 0xb0, 0x98, 0x44, 0x53, 0x34, 0xaa, 0xd4, 0x30, 0x08, 0x47, 0x53, - 0x5b, 0xa0, 0x07, 0x62, 0x30, 0xee, 0xc2, 0xca, 0x34, 0xe1, 0xfd, 0x71, 0x90, 0x24, 0xb8, 0x70, - 0x0e, 0xa2, 0x30, 0x8d, 0xa3, 0x91, 0x74, 0x37, 0x2d, 0x4f, 0x13, 0xfe, 0x54, 0x50, 0xb6, 0x04, - 0x81, 0x7d, 0x3b, 0x6b, 0xd2, 0xc4, 0x0f, 0xe2, 0xa4, 0x0b, 0xd4, 0x24, 0xd5, 0x53, 0x6c, 0xf7, - 0x81, 0x1f, 0xc4, 0xba, 0x2d, 0x98, 0x48, 0x72, 0x41, 0x94, 0xad, 0x5c, 0x10, 0xa5, 0x8c, 0xbf, - 0xbb, 0x0b, 0x0d, 0xf5, 0x39, 0xee, 0x81, 0x8f, 0xe3, 0x68, 0xac, 0xf6, 0xc0, 0xf8, 0x9b, 0x2d, - 0x42, 0x25, 0x8d, 0xe4, 0xfe, 0xb5, 0x92, 0x46, 0xee, 0xef, 0x43, 0xcb, 0x18, 0x01, 0xf6, 0xa1, - 0xd8, 0x8e, 0xa3, 0xad, 0x25, 0x37, 0xcf, 0xe2, 0x14, 0xa5, 0x29, 0xd1, 0x27, 0x43, 0xf6, 0x0d, - 0x58, 0x1e, 0x06, 0x31, 0xa7, 0x38, 0xdf, 0x7e, 0xcc, 0xcf, 0x78, 0x9c, 0x28, 0x57, 0x43, 0x47, - 0x13, 0x3c, 0x81, 0xbb, 0x7d, 0x58, 0xb1, 0xb8, 0x4a, 0x0b, 0xdd, 0x1c, 0x05, 0x0d, 0x2a, 0x6f, - 0xa7, 0x1d, 0x50, 0x28, 0x69, 0xb8, 0x5c, 0x49, 0x2f, 0x49, 0x7f, 0x12, 0x47, 0x47, 0x54, 0x89, - 0xe3, 0x59, 0x98, 0xfb, 0xcb, 0x0a, 0x54, 0x77, 0xa3, 0x89, 0x79, 0xf6, 0xe3, 0x14, 0xcf, 0x7e, - 0xa4, 0x5d, 0xd9, 0xd7, 0x66, 0xa3, 0x5c, 0xfc, 0x2d, 0x90, 0xdd, 0x81, 0x45, 0xe4, 0xe0, 0x34, - 0x42, 0x3b, 0xfa, 0xb5, 0x1f, 0x8b, 0x08, 0xc3, 0x2a, 0xb1, 0x45, 0x8e, 0xc2, 0x56, 0xa1, 0xaa, - 0xcd, 0x21, 0xca, 0x80, 0x49, 0xdc, 0xc4, 0xd1, 0xf9, 0xfa, 0xb9, 0x74, 0x69, 0xca, 0x14, 0x2a, - 0x04, 0xfb, 0x7b, 0x21, 0x26, 0x62, 0x51, 0x2b, 0x23, 0xa1, 0x8d, 0x8b, 0x82, 0x30, 0xce, 0x4c, - 0x46, 0x9d, 0x36, 0x9d, 0xf5, 0x0d, 0xdb, 0x59, 0x7f, 0x1d, 0x5a, 0xe9, 0xe8, 0xac, 0x3f, 0xf1, - 0xcf, 0x47, 0x91, 0x3f, 0x94, 0x0c, 0x68, 0x42, 0xec, 0x3e, 0xc0, 0x78, 0x32, 0xe9, 0xe3, 0x3a, - 0x1a, 0x0f, 0x69, 0x67, 0xde, 0xda, 0xe8, 0xc8, 0xd1, 0x7f, 0x7a, 0x70, 0xe0, 0x11, 0xee, 0x19, - 0x79, 0xdc, 0x97, 0xd0, 0xd4, 0x04, 0x33, 0x34, 0x95, 0x22, 0x2c, 0x5a, 0x76, 0x68, 0x2a, 0x05, - 0x54, 0xdc, 0x84, 0x45, 0xa1, 0x3c, 0xb5, 0x3a, 0x10, 0xa7, 0xe2, 0x39, 0xd4, 0xfd, 0x33, 0x07, - 0xea, 0x34, 0xe1, 0x68, 0x4d, 0x08, 0x9a, 0x3e, 0xab, 0xa2, 0x49, 0x5c, 0xf0, 0xf2, 0x30, 0x73, - 0xad, 0x30, 0xf9, 0x8a, 0x1e, 0x7d, 0x33, 0x54, 0xfe, 0x3a, 0x34, 0x75, 0x4d, 0xc6, 0x0c, 0x66, - 0x20, 0xbb, 0x06, 0xb5, 0xd3, 0x68, 0xa2, 0x36, 0x5c, 0xa0, 0x8e, 0xb3, 0xa3, 0x89, 0x47, 0x78, - 0xd6, 0x1e, 0x2c, 0x4f, 0x74, 0x41, 0x18, 0xb5, 0x79, 0xb8, 0xa4, 0xaf, 0x73, 0xa5, 0x7d, 0x7d, - 0x01, 0x4b, 0x28, 0x96, 0x86, 0xef, 0x7e, 0xb6, 0x6a, 0xfd, 0x3a, 0xae, 0xd4, 0x83, 0xd1, 0x74, - 0xc8, 0xcd, 0x6d, 0x2f, 0xf9, 0x66, 0x25, 0xae, 0x0c, 0x3e, 0xf7, 0x5f, 0x38, 0x42, 0xdc, 0xb1, - 0x5c, 0x76, 0x1b, 0x6a, 0xa8, 0x05, 0x73, 0x5e, 0x0e, 0x1d, 0xf5, 0x82, 0xf9, 0x3c, 0xca, 0x81, - 0xb3, 0x48, 0xde, 0x53, 0xb3, 0x74, 0xe1, 0x3b, 0xcd, 0xf6, 0x8c, 0xba, 0x67, 0xb9, 0xad, 0x56, - 0x0e, 0x65, 0x77, 0x8d, 0xa3, 0xa7, 0x9a, 0xa5, 0x59, 0x95, 0x61, 0x30, 0x3c, 0xe1, 0xc6, 0x91, - 0xd3, 0x1f, 0x3b, 0xb0, 0x60, 0xb5, 0x09, 0x99, 0x96, 0x82, 0xc8, 0x85, 0xd3, 0x44, 0xce, 0xbc, - 0x09, 0x99, 0x0c, 0x5f, 0xb1, 0x19, 0x5e, 0x1f, 0x61, 0x54, 0xcd, 0x23, 0x8c, 0xfb, 0xd0, 0xcc, - 0xee, 0x49, 0xd8, 0x8d, 0xc2, 0x1a, 0x55, 0xfc, 0x4f, 0x96, 0x29, 0x73, 0x92, 0xd7, 0x0d, 0x27, - 0xb9, 0xfb, 0x00, 0x5a, 0x46, 0x7e, 0xd3, 0xc9, 0xed, 0x58, 0x4e, 0x6e, 0x1d, 0x1c, 0x57, 0xc9, - 0x82, 0xe3, 0xdc, 0x9f, 0x57, 0x60, 0x01, 0xd9, 0x3b, 0x08, 0x4f, 0x0e, 0xa2, 0x51, 0x30, 0x38, - 0x27, 0xb6, 0x52, 0x9c, 0x2c, 0x57, 0x41, 0xc5, 0xe6, 0x36, 0x8c, 0xd2, 0xaf, 0x23, 0x82, 0x85, - 0xaa, 0xd2, 0x69, 0xd4, 0x65, 0xa8, 0x09, 0x8e, 0xfc, 0x84, 0x1b, 0x17, 0x27, 0x3c, 0x1b, 0x44, - 0x8d, 0x83, 0x00, 0x85, 0x3a, 0x8e, 0x83, 0xd1, 0x28, 0x10, 0x79, 0xc5, 0xf6, 0xad, 0x8c, 0x84, - 0x75, 0x0e, 0x83, 0xc4, 0x3f, 0xca, 0x8e, 0x27, 0x75, 0x9a, 0x7c, 0x7f, 0xfe, 0x1b, 0xc3, 0xf7, - 0x27, 0x62, 0xa3, 0x6d, 0x30, 0x3f, 0x91, 0xf3, 0x85, 0x89, 0x74, 0xff, 0x4d, 0x05, 0x5a, 0x06, - 0x5b, 0xa0, 0x38, 0x97, 0x2e, 0x37, 0x06, 0x2a, 0xcf, 0xed, 0x43, 0xcb, 0x21, 0x60, 0x20, 0xec, - 0x86, 0x5d, 0x2b, 0x9d, 0x03, 0x90, 0xc0, 0x5b, 0x2c, 0x74, 0x15, 0x9a, 0xc8, 0xfa, 0x1f, 0x93, - 0xf7, 0x41, 0x5e, 0x52, 0xd2, 0x80, 0xa2, 0x6e, 0x10, 0xb5, 0x9e, 0x51, 0x09, 0x78, 0xeb, 0x49, - 0xfe, 0xa7, 0xd0, 0x96, 0xc5, 0xd0, 0x1c, 0x53, 0xa7, 0x33, 0xe1, 0xb3, 0xe6, 0xdf, 0xb3, 0x72, - 0xaa, 0x2f, 0x37, 0xd4, 0x97, 0x8d, 0x8b, 0xbe, 0x54, 0x39, 0xdd, 0xc7, 0x3a, 0x48, 0xe2, 0x71, - 0xec, 0x4f, 0x4e, 0x95, 0x42, 0xb9, 0x0f, 0x2b, 0x4a, 0x6f, 0x4c, 0x43, 0x3f, 0x0c, 0xa3, 0x69, - 0x38, 0xe0, 0x2a, 0x8e, 0xae, 0x8c, 0xe4, 0x0e, 0x75, 0xd4, 0x35, 0x15, 0xc4, 0xee, 0x40, 0x5d, - 0xd8, 0x51, 0x62, 0x55, 0x2e, 0x57, 0x21, 0x22, 0x0b, 0xbb, 0x0d, 0x75, 0x61, 0x4e, 0x55, 0x66, - 0x0a, 0xbd, 0xc8, 0xe0, 0xde, 0x85, 0x25, 0x0a, 0xf3, 0x36, 0x74, 0xdf, 0x7b, 0x65, 0xab, 0xf5, - 0xdc, 0x40, 0x04, 0x83, 0xaf, 0x02, 0xdb, 0x17, 0x72, 0x65, 0x1e, 0x75, 0xfe, 0x59, 0x15, 0x5a, - 0x06, 0x8c, 0xfa, 0x89, 0xce, 0xa7, 0xfa, 0xc3, 0xc0, 0x1f, 0xf3, 0x94, 0xc7, 0x52, 0x96, 0x72, - 0x28, 0xe6, 0xf3, 0xcf, 0x4e, 0xfa, 0xd1, 0x34, 0xed, 0x0f, 0xf9, 0x49, 0xcc, 0xb9, 0x34, 0x23, - 0x72, 0x28, 0xe6, 0x43, 0x6e, 0x36, 0xf2, 0x89, 0x13, 0xa5, 0x1c, 0xaa, 0x0e, 0x2e, 0xc5, 0x38, - 0xd5, 0xb2, 0x83, 0x4b, 0x31, 0x2a, 0x79, 0xcd, 0x5a, 0x2f, 0xd1, 0xac, 0x9f, 0xc0, 0x9a, 0xd0, - 0xa1, 0x52, 0x7b, 0xf4, 0x73, 0xcc, 0x35, 0x83, 0xca, 0xee, 0x40, 0x07, 0xdb, 0xac, 0x44, 0x23, - 0x09, 0x7e, 0x26, 0x64, 0xcc, 0xf1, 0x0a, 0x38, 0xe6, 0x25, 0x4f, 0xba, 0x99, 0x57, 0x44, 0x8f, - 0x14, 0x70, 0xca, 0xeb, 0xbf, 0xb1, 0xf3, 0x36, 0x65, 0xde, 0x1c, 0xce, 0x3e, 0x85, 0xf5, 0x31, - 0x1f, 0x06, 0xbe, 0x5d, 0x44, 0x3f, 0x5b, 0xe4, 0x67, 0x91, 0xb1, 0x16, 0x1c, 0x85, 0x9f, 0x45, - 0xe3, 0xa3, 0x40, 0x2c, 0x6c, 0xc2, 0xe7, 0x5f, 0xf3, 0x0a, 0xb8, 0xbb, 0x00, 0xad, 0xc3, 0x34, - 0x9a, 0xa8, 0xa9, 0x5f, 0x84, 0xb6, 0x48, 0xca, 0xc8, 0xc9, 0xf7, 0xe0, 0x0a, 0xf1, 0xeb, 0xf3, - 0x68, 0x12, 0x8d, 0xa2, 0x93, 0x73, 0x6b, 0xe7, 0xfe, 0x1f, 0x1c, 0x58, 0xb1, 0xa8, 0xd9, 0xd6, - 0x9d, 0xdc, 0x8c, 0x2a, 0xdc, 0x4d, 0xb0, 0xf8, 0xb2, 0xb1, 0x2c, 0x88, 0x8c, 0xe2, 0x54, 0xe7, - 0x85, 0x8c, 0x80, 0xdb, 0xcc, 0xee, 0x70, 0xa8, 0x0f, 0x05, 0xbf, 0x77, 0x8b, 0xfc, 0x2e, 0xbf, - 0x57, 0xb7, 0x3b, 0x54, 0x11, 0xbf, 0x23, 0x63, 0x7d, 0x86, 0xb2, 0xd3, 0x55, 0x3b, 0x3e, 0xc3, - 0xf4, 0xf4, 0xa8, 0x16, 0x0c, 0x34, 0x98, 0xb8, 0xbf, 0x70, 0x00, 0xb2, 0xd6, 0x51, 0x84, 0x88, - 0x5e, 0xda, 0xc4, 0xbd, 0x64, 0x63, 0x19, 0xfb, 0x10, 0xda, 0xfa, 0x90, 0x3f, 0x5b, 0x2d, 0x5b, - 0x0a, 0x43, 0xeb, 0xe2, 0x16, 0x2c, 0x9d, 0x8c, 0xa2, 0x23, 0xb2, 0x62, 0x28, 0x14, 0x37, 0x91, - 0xf1, 0xa3, 0x8b, 0x02, 0x7e, 0x24, 0xd1, 0x6c, 0x69, 0xad, 0x99, 0x4b, 0x6b, 0xf9, 0x42, 0xf9, - 0xf3, 0x8a, 0x3e, 0x69, 0xcd, 0x46, 0xe2, 0xad, 0x52, 0xce, 0x36, 0x0a, 0x6a, 0x7d, 0xc6, 0xe1, - 0x26, 0x6d, 0x3d, 0x0e, 0x2e, 0x74, 0xfc, 0x3e, 0x80, 0xc5, 0x58, 0xe8, 0x4c, 0xa5, 0x50, 0x6b, - 0x6f, 0x51, 0xa8, 0x0b, 0xb1, 0xb5, 0x32, 0x7f, 0x1d, 0x3a, 0xfe, 0xf0, 0x8c, 0xc7, 0x69, 0x40, - 0x8e, 0x30, 0x32, 0xa3, 0x44, 0x07, 0x97, 0x0c, 0x9c, 0xac, 0x95, 0x5b, 0xb0, 0x24, 0xa3, 0x79, - 0x75, 0x4e, 0x79, 0x43, 0x2f, 0x83, 0x31, 0xa3, 0xfb, 0x4f, 0xd5, 0xc1, 0xae, 0x3d, 0xbb, 0x6f, - 0x1f, 0x15, 0xb3, 0x87, 0x95, 0x5c, 0x0f, 0xbf, 0x26, 0x0f, 0x5a, 0x87, 0xca, 0xe3, 0x56, 0x35, - 0xa2, 0xc6, 0x86, 0xf2, 0x60, 0xdc, 0x1e, 0xd6, 0xda, 0xbb, 0x0c, 0xab, 0xfb, 0x9f, 0x1d, 0x98, - 0xdf, 0x8d, 0x26, 0xbb, 0x38, 0xc4, 0x68, 0xe3, 0xa0, 0x98, 0xe8, 0x50, 0x7a, 0x95, 0xbc, 0x20, - 0xba, 0xae, 0xd4, 0x2a, 0x59, 0xc8, 0x5b, 0x25, 0x7f, 0x11, 0xde, 0x23, 0x9f, 0x6f, 0x1c, 0x4d, - 0xa2, 0x18, 0xc5, 0xd5, 0x1f, 0x09, 0x13, 0x24, 0x0a, 0xd3, 0x53, 0xa5, 0x4e, 0xdf, 0x96, 0x85, - 0x1c, 0x31, 0xb8, 0x09, 0x16, 0x1b, 0x2b, 0x69, 0x45, 0x09, 0x2d, 0x5b, 0x24, 0xb8, 0xbf, 0x0d, - 0x4d, 0xda, 0x61, 0x50, 0xd7, 0x3e, 0x82, 0xe6, 0x69, 0x34, 0xe9, 0x9f, 0x06, 0x61, 0xaa, 0xc4, - 0x7f, 0x31, 0x33, 0xfd, 0x77, 0x69, 0x50, 0x74, 0x06, 0xf7, 0x97, 0x73, 0x30, 0xff, 0x24, 0x3c, - 0x8b, 0x82, 0x01, 0x1d, 0x26, 0x8f, 0xf9, 0x38, 0x52, 0x97, 0x0b, 0xf0, 0x37, 0x0e, 0x07, 0x45, - 0xd2, 0x4e, 0x04, 0xf3, 0xb6, 0x45, 0xd0, 0x88, 0x84, 0xe8, 0x1a, 0x6e, 0x76, 0x39, 0x50, 0x08, - 0x98, 0x81, 0xe0, 0x46, 0x31, 0x36, 0x2f, 0xf7, 0xc9, 0x54, 0x76, 0x79, 0xa3, 0x6e, 0x5c, 0xde, - 0xc0, 0xd2, 0xc4, 0xa5, 0x33, 0x1a, 0x59, 0x11, 0x32, 0x6a, 0x20, 0xd8, 0x16, 0x19, 0x13, 0x28, - 0x82, 0xc6, 0x44, 0x5b, 0x24, 0x44, 0x9b, 0xdf, 0x98, 0x0b, 0x9f, 0xbe, 0x36, 0xcc, 0x70, 0xf3, - 0x6b, 0x82, 0x68, 0xbc, 0x89, 0x0f, 0x44, 0x1e, 0xb1, 0x58, 0x98, 0x10, 0x9a, 0xaf, 0xf9, 0xbb, - 0xa9, 0xe2, 0x7e, 0x71, 0x1e, 0x46, 0x5d, 0x3f, 0xe4, 0x5a, 0x25, 0x8b, 0x7e, 0x82, 0xb8, 0x20, - 0x99, 0xc7, 0x8d, 0x2d, 0xb3, 0x08, 0x8a, 0x56, 0x5b, 0x66, 0x64, 0x28, 0x7f, 0x34, 0x3a, 0xf2, - 0x07, 0xaf, 0xc4, 0x56, 0xb3, 0x2d, 0x8e, 0x82, 0x2c, 0x90, 0x22, 0xfb, 0xb2, 0x59, 0xa7, 0xf0, - 0x9b, 0x9a, 0x67, 0x42, 0x6c, 0x03, 0x5a, 0xe4, 0x4e, 0x90, 0xf3, 0xbe, 0x48, 0xf3, 0xde, 0x31, - 0xfd, 0x0d, 0x34, 0xf3, 0x66, 0x26, 0xf3, 0x10, 0x7c, 0xa9, 0x10, 0xa6, 0xec, 0x0f, 0x87, 0x32, - 0x7e, 0xa0, 0x23, 0x2e, 0x08, 0x6a, 0x80, 0x1c, 0x16, 0x62, 0xc0, 0x44, 0x86, 0x65, 0xca, 0x60, - 0x61, 0xec, 0x9a, 0x70, 0x93, 0x4d, 0xfc, 0x60, 0x48, 0x11, 0x37, 0x62, 0x73, 0xaa, 0x31, 0x2c, - 0x43, 0xfd, 0xa6, 0x65, 0x75, 0x85, 0x46, 0xc5, 0xc2, 0x70, 0x6c, 0x74, 0x7a, 0x9c, 0xc5, 0x35, - 0xdb, 0x20, 0xfb, 0x98, 0x4e, 0x70, 0x53, 0x4e, 0xc1, 0xcb, 0x8b, 0x1b, 0xef, 0xc9, 0x3e, 0x4b, - 0xa6, 0x56, 0x7f, 0x0f, 0x31, 0x8b, 0x27, 0x72, 0xa2, 0x51, 0x27, 0x9c, 0xe8, 0x6b, 0x96, 0x51, - 0x27, 0xb3, 0x92, 0x13, 0x5d, 0x64, 0x70, 0x37, 0xa1, 0x6d, 0x16, 0xc0, 0x1a, 0x50, 0x7b, 0x76, - 0xb0, 0xb3, 0xdf, 0xb9, 0xc4, 0x5a, 0x30, 0x7f, 0xb8, 0xf3, 0xfc, 0xf9, 0xde, 0xce, 0x76, 0xc7, - 0x61, 0x6d, 0x68, 0xe8, 0x80, 0xcd, 0x0a, 0xa6, 0x36, 0xb7, 0xb6, 0x76, 0x0e, 0x9e, 0xef, 0x6c, - 0x77, 0xaa, 0xee, 0x1f, 0x55, 0xa0, 0x65, 0x94, 0x7c, 0x81, 0x0b, 0xe7, 0x1a, 0x00, 0xed, 0x34, - 0xb2, 0xd0, 0x8d, 0x9a, 0x67, 0x20, 0xa8, 0x39, 0xf5, 0x1e, 0xbc, 0x2a, 0xee, 0x49, 0xaa, 0x34, - 0x8d, 0x17, 0x5d, 0x48, 0x34, 0xcf, 0x2a, 0xea, 0x9e, 0x0d, 0x22, 0x2f, 0x49, 0x80, 0xe2, 0x07, - 0x85, 0x04, 0x9a, 0x10, 0xce, 0x4d, 0xcc, 0x93, 0x68, 0x74, 0xc6, 0x45, 0x16, 0x61, 0xaf, 0x59, - 0x18, 0xd6, 0x25, 0x55, 0x90, 0x11, 0xdb, 0x5b, 0xf7, 0x6c, 0x90, 0x7d, 0x53, 0xcd, 0x4d, 0x83, - 0xe6, 0x66, 0xbd, 0x38, 0xd0, 0xe6, 0xbc, 0xb8, 0x29, 0xb0, 0xcd, 0xe1, 0x50, 0x52, 0xcd, 0x5b, - 0x97, 0xb1, 0x79, 0xcd, 0x57, 0x29, 0x91, 0x12, 0x41, 0xad, 0x94, 0x0b, 0xea, 0x5b, 0xd9, 0xd9, - 0x7d, 0x02, 0xad, 0x03, 0xe3, 0xe2, 0xb0, 0x8b, 0x3a, 0x4d, 0x5d, 0x19, 0x16, 0xba, 0x50, 0xf8, - 0x5e, 0x32, 0xd4, 0x68, 0x52, 0xc5, 0x6c, 0x92, 0xfb, 0x4f, 0x1c, 0x71, 0x17, 0x4b, 0x77, 0x41, - 0xd4, 0xef, 0x42, 0x5b, 0x7b, 0xa3, 0xb3, 0xf0, 0x75, 0x0b, 0xc3, 0x3c, 0xd4, 0x9c, 0x7e, 0x74, - 0x7c, 0x9c, 0x70, 0x15, 0x68, 0x6a, 0x61, 0xca, 0xb8, 0x44, 0x73, 0x35, 0x10, 0x35, 0x24, 0x32, - 0xe0, 0xb4, 0x80, 0x23, 0xa3, 0x48, 0xaf, 0xa5, 0x0a, 0xb1, 0xd5, 0x69, 0x1d, 0x65, 0x9f, 0x1f, - 0xe9, 0x3b, 0xd0, 0xd0, 0xe5, 0xda, 0x2b, 0x87, 0xca, 0xa9, 0xe9, 0xb8, 0x42, 0xd1, 0xc6, 0xd3, - 0x6a, 0xb4, 0xe0, 0xd7, 0x22, 0x81, 0xdd, 0x05, 0x76, 0x1c, 0xc4, 0xf9, 0xec, 0x82, 0x81, 0x4b, - 0x28, 0xee, 0x4b, 0x58, 0x51, 0x72, 0x67, 0x58, 0xbd, 0xf6, 0x44, 0x3a, 0x17, 0xe9, 0xa5, 0x4a, - 0x51, 0x2f, 0xb9, 0xbf, 0xac, 0xc2, 0xbc, 0x9c, 0xed, 0xc2, 0x05, 0x74, 0xb1, 0xee, 0x59, 0x18, - 0xeb, 0x5a, 0xd7, 0x0c, 0x89, 0x11, 0xe4, 0x6a, 0x55, 0x58, 0x6f, 0xaa, 0x65, 0xeb, 0x0d, 0x83, - 0xda, 0xc4, 0x4f, 0x4f, 0xc9, 0x3d, 0xd3, 0xf4, 0xe8, 0xb7, 0x72, 0xaa, 0xd6, 0x6d, 0xa7, 0x6a, - 0xd9, 0x75, 0x7b, 0x61, 0x72, 0x15, 0xaf, 0xdb, 0x5f, 0x85, 0xa6, 0x58, 0x17, 0x33, 0xbf, 0x69, - 0x06, 0xe4, 0xd6, 0xd1, 0x46, 0x61, 0x1d, 0x7d, 0xf7, 0x15, 0xee, 0xdb, 0x30, 0x27, 0xae, 0x9c, - 0xc8, 0x40, 0xe2, 0xab, 0xea, 0xb8, 0x51, 0xe4, 0x53, 0x7f, 0x45, 0x34, 0x92, 0x27, 0xf3, 0x9a, - 0x97, 0x56, 0x5b, 0xf6, 0xa5, 0x55, 0xd3, 0xdd, 0xdb, 0xb6, 0xdd, 0xbd, 0xee, 0x23, 0x58, 0xb0, - 0x8a, 0x43, 0x0d, 0x2b, 0x03, 0x91, 0x3b, 0x97, 0xd8, 0x02, 0x34, 0x9f, 0xec, 0xf7, 0x1f, 0xed, - 0x3d, 0x79, 0xbc, 0xfb, 0xbc, 0xe3, 0x60, 0xf2, 0xf0, 0xc5, 0xd6, 0xd6, 0xce, 0xce, 0x36, 0x69, - 0x5c, 0x80, 0xb9, 0x47, 0x9b, 0x4f, 0xf6, 0x48, 0xdf, 0x6e, 0x0b, 0xde, 0x96, 0x65, 0xe9, 0x23, - 0x9e, 0x6f, 0x02, 0x53, 0xbe, 0x01, 0x0a, 0x46, 0x9a, 0x8c, 0x78, 0xaa, 0x62, 0xe4, 0x97, 0x25, - 0xe5, 0x89, 0x26, 0xa8, 0x6b, 0x1e, 0x59, 0x29, 0x99, 0x88, 0xc8, 0x41, 0xca, 0x8b, 0x88, 0xcc, - 0xea, 0x69, 0xba, 0xdb, 0x83, 0xee, 0x36, 0xc7, 0xd2, 0x36, 0x47, 0xa3, 0x5c, 0x73, 0x70, 0x73, - 0x57, 0x42, 0x93, 0x3b, 0xbf, 0xef, 0xc1, 0xe5, 0x4d, 0x11, 0x0e, 0xff, 0x9b, 0x8a, 0x96, 0x74, - 0xbb, 0xb0, 0x96, 0x2f, 0x52, 0x56, 0xf6, 0x08, 0x96, 0xb7, 0xf9, 0xd1, 0xf4, 0x64, 0x8f, 0x9f, - 0x65, 0x15, 0x31, 0xa8, 0x25, 0xa7, 0xd1, 0x6b, 0x39, 0x3e, 0xf4, 0x9b, 0xbd, 0x0f, 0x30, 0xc2, - 0x3c, 0xfd, 0x64, 0xc2, 0x07, 0xea, 0xaa, 0x23, 0x21, 0x87, 0x13, 0x3e, 0x70, 0x3f, 0x01, 0x66, - 0x96, 0x23, 0xc7, 0x0b, 0xed, 0xad, 0xe9, 0x51, 0x3f, 0x39, 0x4f, 0x52, 0x3e, 0x56, 0x77, 0x38, - 0x4d, 0xc8, 0xbd, 0x05, 0xed, 0x03, 0xff, 0xdc, 0xe3, 0x3f, 0x95, 0x8f, 0x30, 0xac, 0xc3, 0xfc, - 0xc4, 0x3f, 0x47, 0x16, 0xd4, 0x0e, 0x63, 0x22, 0xbb, 0xff, 0xbb, 0x02, 0x73, 0x22, 0x27, 0x96, - 0x3a, 0xe4, 0x49, 0x1a, 0x84, 0x24, 0x69, 0xaa, 0x54, 0x03, 0x2a, 0xc8, 0x76, 0xa5, 0x44, 0xb6, - 0xa5, 0x17, 0x43, 0x5d, 0x19, 0x93, 0x02, 0x6c, 0x61, 0x28, 0x69, 0x59, 0xd8, 0xb3, 0x70, 0x2b, - 0x66, 0x40, 0xee, 0x20, 0x24, 0xb3, 0xea, 0x44, 0xfb, 0x94, 0xda, 0x92, 0x62, 0x6c, 0x42, 0xa5, - 0xb6, 0xe3, 0xbc, 0x90, 0xf6, 0x82, 0xed, 0x58, 0xb0, 0x11, 0x1b, 0xef, 0x60, 0x23, 0x0a, 0xd7, - 0xc6, 0xdb, 0x6c, 0x44, 0x78, 0x07, 0x1b, 0xd1, 0x65, 0xd0, 0xa1, 0xfb, 0xe8, 0xb8, 0x4b, 0x51, - 0xbc, 0xfb, 0x0f, 0x1c, 0xe8, 0x48, 0x2e, 0xd2, 0x34, 0x75, 0xa4, 0xf6, 0xb6, 0x8b, 0x4b, 0x37, - 0x60, 0x81, 0xf6, 0x48, 0x5a, 0x05, 0xc8, 0xe3, 0x29, 0x0b, 0xc4, 0x7e, 0xa8, 0x80, 0x99, 0x71, - 0x30, 0x92, 0x93, 0x62, 0x42, 0x4a, 0x8b, 0xc4, 0xbe, 0x0c, 0xdf, 0x75, 0x3c, 0x9d, 0x76, 0xff, - 0xd4, 0x81, 0x65, 0xa3, 0xc1, 0x92, 0x0b, 0x1f, 0x40, 0x5b, 0x3f, 0xfb, 0xc0, 0xf5, 0xe2, 0xb6, - 0x6e, 0x8b, 0x4d, 0xf6, 0x99, 0x95, 0x99, 0x26, 0xd3, 0x3f, 0xa7, 0x06, 0x26, 0xd3, 0xb1, 0x5c, - 0x55, 0x4c, 0x08, 0x19, 0xe9, 0x35, 0xe7, 0xaf, 0x74, 0x16, 0xb1, 0xae, 0x59, 0x18, 0xf9, 0x96, - 0x71, 0x6f, 0xa7, 0x33, 0xd5, 0xa4, 0x6f, 0xd9, 0x04, 0xdd, 0xbf, 0x5a, 0x81, 0x15, 0xb1, 0x59, - 0x97, 0x4e, 0x12, 0x7d, 0xf3, 0x76, 0x4e, 0xf8, 0x2d, 0x84, 0x44, 0xee, 0x5e, 0xf2, 0x64, 0x9a, - 0x7d, 0xe7, 0x1d, 0x1d, 0x0c, 0x3a, 0xa6, 0x78, 0xc6, 0x5c, 0x54, 0xcb, 0xe6, 0xe2, 0x2d, 0x23, - 0x5d, 0xe6, 0xe6, 0xaf, 0x97, 0xbb, 0xf9, 0xdf, 0xc9, 0xad, 0xfe, 0x70, 0x1e, 0xea, 0xc9, 0x20, - 0x9a, 0x70, 0x77, 0x0d, 0x56, 0xed, 0x21, 0x90, 0x8a, 0xea, 0x17, 0x0e, 0x74, 0x1f, 0x89, 0xc3, - 0xc3, 0x20, 0x3c, 0xd9, 0x0d, 0x92, 0x34, 0x8a, 0xf5, 0x33, 0x06, 0xd7, 0x00, 0x92, 0xd4, 0x8f, - 0xa5, 0x51, 0x2b, 0x4c, 0x03, 0x03, 0xc1, 0x9e, 0xf0, 0x70, 0x28, 0xa8, 0x62, 0x06, 0x75, 0xba, - 0x60, 0x7a, 0x49, 0x87, 0x83, 0x65, 0xc0, 0xdc, 0x14, 0x91, 0xf8, 0xd8, 0x64, 0x7e, 0x46, 0xda, - 0x5f, 0xec, 0xe2, 0x73, 0xa8, 0xfb, 0x07, 0x15, 0x58, 0xca, 0x1a, 0x49, 0xd1, 0x22, 0xb6, 0x0e, - 0x91, 0x56, 0x4b, 0xa6, 0x43, 0xe4, 0xe1, 0x40, 0x3f, 0x40, 0x33, 0xc6, 0xf0, 0x39, 0x18, 0x28, - 0xbb, 0x01, 0x2d, 0x95, 0x8a, 0xa6, 0xa9, 0x71, 0x9f, 0xd8, 0x84, 0x45, 0x6c, 0x2d, 0x1a, 0x52, - 0xd2, 0x28, 0x94, 0x29, 0xba, 0xdb, 0x34, 0x4e, 0xe9, 0x4b, 0x31, 0xf2, 0x2a, 0xc9, 0x3a, 0xc2, - 0x12, 0x11, 0x4f, 0xbb, 0x90, 0x15, 0x62, 0xae, 0xd0, 0x0d, 0xfd, 0x0e, 0x8b, 0x96, 0x4c, 0x51, - 0x62, 0x16, 0x18, 0x5d, 0xf3, 0x4c, 0x48, 0xed, 0xea, 0xa2, 0xa9, 0x71, 0x22, 0x5a, 0xf3, 0x2c, - 0xcc, 0xfd, 0xdb, 0x0e, 0x5c, 0x29, 0x99, 0x46, 0x29, 0xa9, 0xdb, 0xb0, 0x7c, 0xac, 0x89, 0x6a, - 0xa8, 0x85, 0xb8, 0xae, 0xa9, 0x08, 0x09, 0x7b, 0x78, 0xbd, 0xe2, 0x07, 0xda, 0x38, 0x15, 0x93, - 0x67, 0xc5, 0xc1, 0x17, 0x09, 0xee, 0x01, 0xf4, 0x76, 0xde, 0xa0, 0xe0, 0x6f, 0x99, 0xaf, 0xdf, - 0x29, 0xce, 0xda, 0x28, 0x28, 0xb6, 0x8b, 0x5d, 0x4d, 0xc7, 0xb0, 0x60, 0x95, 0xc5, 0xbe, 0xf5, - 0xae, 0x85, 0x98, 0x32, 0x7a, 0x5d, 0xce, 0xba, 0x78, 0xbe, 0x4f, 0x45, 0xe3, 0x1b, 0x90, 0x7b, - 0x06, 0x4b, 0x4f, 0xa7, 0xa3, 0x34, 0xc8, 0x9e, 0xf2, 0x63, 0xdf, 0x91, 0x1f, 0x51, 0x11, 0x6a, - 0xe8, 0x4a, 0xab, 0x32, 0xf3, 0xe1, 0x88, 0x8d, 0xb1, 0xa4, 0x7e, 0xb1, 0xc6, 0x22, 0xc1, 0xbd, - 0x02, 0xeb, 0x59, 0x95, 0x62, 0xec, 0xd4, 0xe2, 0xf0, 0x87, 0x8e, 0x08, 0x29, 0xb3, 0x5f, 0x16, - 0x64, 0x8f, 0x61, 0x25, 0x09, 0xc2, 0x93, 0x11, 0x37, 0xcb, 0x49, 0xe4, 0x48, 0x5c, 0xb6, 0x9b, - 0x27, 0x5f, 0x1f, 0xf4, 0xca, 0xbe, 0x40, 0x06, 0x29, 0x6f, 0x68, 0xc6, 0x20, 0xb9, 0x21, 0x29, - 0xeb, 0xc0, 0x77, 0x61, 0xd1, 0xae, 0x8c, 0x7d, 0x2a, 0x83, 0xe8, 0xb3, 0x96, 0x99, 0x67, 0x43, - 0x36, 0x67, 0x58, 0x39, 0xdd, 0x9f, 0x3b, 0xd0, 0xf5, 0x38, 0xb2, 0x31, 0x37, 0x2a, 0x95, 0xdc, - 0xf3, 0xa0, 0x50, 0xec, 0xec, 0x0e, 0xeb, 0xe0, 0x7c, 0xd5, 0xd7, 0xbb, 0x33, 0x27, 0x65, 0xf7, - 0x52, 0x49, 0xaf, 0x1e, 0x36, 0x60, 0x4e, 0xf6, 0x6f, 0x1d, 0x2e, 0xcb, 0x26, 0xa9, 0xe6, 0x64, - 0x87, 0x0a, 0x56, 0xa5, 0xd6, 0xa1, 0x42, 0x0f, 0xba, 0xe2, 0xb5, 0x0a, 0xb3, 0x1f, 0xf2, 0xc3, - 0x6d, 0x60, 0x4f, 0xfd, 0x81, 0x1f, 0x47, 0x51, 0x78, 0xc0, 0x63, 0x19, 0x03, 0x44, 0x06, 0x10, - 0xf9, 0xdc, 0x95, 0xad, 0x26, 0x52, 0xea, 0x81, 0x85, 0x28, 0x54, 0x0f, 0x59, 0x88, 0x94, 0xeb, - 0xc1, 0xca, 0x43, 0xff, 0x15, 0x57, 0x25, 0x65, 0xa3, 0xd4, 0x9a, 0xe8, 0x42, 0xd5, 0xd8, 0xab, - 0xfb, 0x31, 0xc5, 0x6a, 0x3d, 0x33, 0xb7, 0xbb, 0x01, 0xab, 0x76, 0x99, 0x52, 0x95, 0xf4, 0xa0, - 0x31, 0x96, 0x98, 0x6c, 0x9d, 0x4e, 0xdf, 0xf9, 0x12, 0x5a, 0xc6, 0x0b, 0x24, 0x6c, 0x1d, 0x56, - 0x5e, 0x3e, 0x79, 0xbe, 0xbf, 0x73, 0x78, 0xd8, 0x3f, 0x78, 0xf1, 0xf0, 0xf3, 0x9d, 0x1f, 0xf4, - 0x77, 0x37, 0x0f, 0x77, 0x3b, 0x97, 0xd8, 0x1a, 0xb0, 0xfd, 0x9d, 0xc3, 0xe7, 0x3b, 0xdb, 0x16, - 0xee, 0xb0, 0x6b, 0xd0, 0x7b, 0xb1, 0xff, 0xe2, 0x70, 0x67, 0xbb, 0x5f, 0xf6, 0x5d, 0x85, 0xbd, - 0x0f, 0x57, 0x24, 0xbd, 0xe4, 0xf3, 0xea, 0x9d, 0x07, 0xd0, 0xc9, 0xfb, 0x40, 0x2c, 0xaf, 0xd1, - 0xdb, 0xdc, 0x4b, 0x1b, 0x3f, 0xaf, 0xc2, 0xa2, 0x08, 0xf2, 0x13, 0x6f, 0x73, 0xf2, 0x98, 0x3d, - 0x85, 0x79, 0xf9, 0xc8, 0x2b, 0x53, 0xac, 0x65, 0x3f, 0x2b, 0xdb, 0x5b, 0xcb, 0xc3, 0x72, 0x5a, - 0x57, 0xfe, 0xda, 0x7f, 0xfa, 0x1f, 0x7f, 0xb7, 0xb2, 0xc0, 0x5a, 0xf7, 0xce, 0x3e, 0xbe, 0x77, - 0xc2, 0xc3, 0x04, 0xcb, 0xf8, 0x3d, 0x80, 0xec, 0xe9, 0x52, 0xd6, 0xd5, 0x3e, 0x80, 0xdc, 0xbb, - 0xae, 0xbd, 0x2b, 0x25, 0x14, 0x59, 0xee, 0x15, 0x2a, 0x77, 0xc5, 0x5d, 0xc4, 0x72, 0x83, 0x30, - 0x48, 0xc5, 0x33, 0xa6, 0x9f, 0x39, 0x77, 0xd8, 0x10, 0xda, 0xe6, 0xa3, 0xa2, 0x4c, 0x9d, 0x11, - 0x95, 0x3c, 0x8b, 0xda, 0x7b, 0xaf, 0x94, 0xa6, 0x78, 0x99, 0xea, 0xb8, 0xec, 0x76, 0xb0, 0x8e, - 0x29, 0xe5, 0xc8, 0x6a, 0x19, 0x09, 0x09, 0xcf, 0xde, 0x0e, 0x65, 0x57, 0x0d, 0xa1, 0x2b, 0xbc, - 0x5c, 0xda, 0x7b, 0x7f, 0x06, 0x55, 0xd6, 0xf5, 0x3e, 0xd5, 0xb5, 0xee, 0x32, 0xac, 0x6b, 0x40, - 0x79, 0xd4, 0xcb, 0xa5, 0x9f, 0x39, 0x77, 0x36, 0xfe, 0xfd, 0x2d, 0x68, 0xea, 0xf3, 0x63, 0xf6, - 0x13, 0x58, 0xb0, 0xa2, 0x30, 0x99, 0xea, 0x46, 0x59, 0xd0, 0x66, 0xef, 0x6a, 0x39, 0x51, 0x56, - 0x7c, 0x8d, 0x2a, 0xee, 0xb2, 0x35, 0xac, 0x58, 0x86, 0x31, 0xde, 0xa3, 0x78, 0x62, 0x71, 0x25, - 0xf1, 0x95, 0xa1, 0xc9, 0x44, 0x65, 0x57, 0xf3, 0xca, 0xc5, 0xaa, 0xed, 0xfd, 0x19, 0x54, 0x59, - 0xdd, 0x55, 0xaa, 0x6e, 0x8d, 0xad, 0x9a, 0xd5, 0xe9, 0x33, 0x5d, 0x4e, 0xf7, 0x70, 0xcd, 0x67, - 0x35, 0xd9, 0xfb, 0x9a, 0xb1, 0xca, 0x9e, 0xdb, 0xd4, 0x2c, 0x52, 0x7c, 0x73, 0xd3, 0xed, 0x52, - 0x55, 0x8c, 0xd1, 0xf4, 0x99, 0xaf, 0x6a, 0xb2, 0x23, 0x68, 0x19, 0x8f, 0x61, 0xb1, 0x2b, 0x33, - 0x1f, 0xee, 0xea, 0xf5, 0xca, 0x48, 0x65, 0x5d, 0x31, 0xcb, 0xbf, 0x87, 0x86, 0xce, 0x8f, 0xa0, - 0xa9, 0x9f, 0x57, 0x62, 0xeb, 0xc6, 0x73, 0x57, 0xe6, 0x73, 0x50, 0xbd, 0x6e, 0x91, 0x50, 0xc6, - 0x7c, 0x66, 0xe9, 0xc8, 0x7c, 0x2f, 0xa1, 0x65, 0x3c, 0xa1, 0xa4, 0x3b, 0x50, 0x7c, 0xa6, 0x49, - 0x77, 0xa0, 0xe4, 0xc5, 0x25, 0x77, 0x99, 0xaa, 0x68, 0xb1, 0x26, 0xf1, 0x77, 0xfa, 0x26, 0x4a, - 0xd8, 0x1e, 0x5c, 0x96, 0x1a, 0xfb, 0x88, 0x7f, 0x95, 0x69, 0x28, 0x79, 0xc9, 0xf4, 0xbe, 0xc3, - 0x1e, 0x40, 0x43, 0xbd, 0x94, 0xc5, 0xd6, 0xca, 0x5f, 0xfc, 0xea, 0xad, 0x17, 0x70, 0xa9, 0x5e, - 0x7f, 0x00, 0x90, 0xbd, 0xd7, 0xa4, 0x95, 0x44, 0xe1, 0xfd, 0x27, 0xcd, 0x01, 0xc5, 0xc7, 0x9d, - 0xdc, 0x35, 0xea, 0x60, 0x87, 0x91, 0x92, 0x08, 0xf9, 0x6b, 0x75, 0xe5, 0xfe, 0xc7, 0xd0, 0x32, - 0x9e, 0x6c, 0xd2, 0xc3, 0x57, 0x7c, 0xee, 0x49, 0x0f, 0x5f, 0xc9, 0x0b, 0x4f, 0x6e, 0x8f, 0x4a, - 0x5f, 0x75, 0x97, 0xb0, 0xf4, 0x24, 0x38, 0x09, 0xc7, 0x22, 0x03, 0x4e, 0xd0, 0x29, 0x2c, 0x58, - 0xef, 0x32, 0x69, 0x09, 0x2d, 0x7b, 0xf5, 0x49, 0x4b, 0x68, 0xe9, 0x53, 0x4e, 0x8a, 0xcf, 0xdc, - 0x65, 0xac, 0xe7, 0x8c, 0xb2, 0x18, 0x35, 0xfd, 0x10, 0x5a, 0xc6, 0x1b, 0x4b, 0xba, 0x2f, 0xc5, - 0xe7, 0x9c, 0x74, 0x5f, 0xca, 0x9e, 0x64, 0x5a, 0xa5, 0x3a, 0x16, 0x5d, 0x62, 0x05, 0xba, 0x3c, - 0x8e, 0x65, 0xff, 0x04, 0x16, 0xed, 0x57, 0x97, 0xb4, 0xec, 0x97, 0xbe, 0xdf, 0xa4, 0x65, 0x7f, - 0xc6, 0x53, 0x4d, 0x92, 0xa5, 0xef, 0xac, 0xe8, 0x4a, 0xee, 0x7d, 0x21, 0x23, 0xd0, 0xbe, 0x64, - 0xdf, 0x43, 0x05, 0x27, 0x6f, 0xf3, 0xb3, 0x75, 0x83, 0x6b, 0xcd, 0x3b, 0xff, 0x5a, 0x5e, 0x0a, - 0x17, 0xff, 0x6d, 0x66, 0x16, 0xd7, 0xdf, 0x69, 0xd5, 0xa2, 0x5b, 0xfd, 0xc6, 0xaa, 0x65, 0x5e, - 0xfc, 0x37, 0x56, 0x2d, 0xeb, 0xf2, 0x7f, 0x7e, 0xd5, 0x4a, 0x03, 0x2c, 0x23, 0x84, 0xa5, 0xdc, - 0x4d, 0x11, 0x2d, 0x15, 0xe5, 0x97, 0xf9, 0x7a, 0xd7, 0xde, 0x7e, 0xc1, 0xc4, 0xd6, 0x20, 0x4a, - 0x09, 0xde, 0x53, 0x57, 0x27, 0x7f, 0x1f, 0xda, 0xe6, 0x4b, 0x30, 0xcc, 0x14, 0xe5, 0x7c, 0x4d, - 0xef, 0x95, 0xd2, 0xec, 0xc9, 0x65, 0x6d, 0xb3, 0x1a, 0xf6, 0x7d, 0x58, 0xd3, 0xa2, 0x6e, 0x5e, - 0x3e, 0x48, 0xd8, 0x07, 0x25, 0x57, 0x12, 0x4c, 0x3b, 0xae, 0x77, 0x65, 0xe6, 0x9d, 0x85, 0xfb, - 0x0e, 0x32, 0x8d, 0xfd, 0xbc, 0x46, 0xb6, 0x60, 0x94, 0xbd, 0x2a, 0x92, 0x2d, 0x18, 0xa5, 0x6f, - 0x72, 0x28, 0xa6, 0x61, 0x2b, 0xd6, 0x18, 0x89, 0xc3, 0x7a, 0xf6, 0x43, 0x58, 0x32, 0xae, 0x77, - 0x1d, 0x9e, 0x87, 0x03, 0x2d, 0x00, 0xc5, 0xdb, 0xc7, 0xbd, 0xb2, 0x5d, 0x8a, 0xbb, 0x4e, 0xe5, - 0x2f, 0xbb, 0xd6, 0xe0, 0x20, 0xf3, 0x6f, 0x41, 0xcb, 0xbc, 0x3a, 0xf6, 0x96, 0x72, 0xd7, 0x0d, - 0x92, 0x79, 0x71, 0xf6, 0xbe, 0xc3, 0x0e, 0x44, 0xd0, 0x96, 0x7e, 0xea, 0x33, 0x8a, 0xf3, 0xcb, - 0xa7, 0xfd, 0x04, 0xa8, 0x9e, 0xc8, 0xb2, 0xc7, 0x5f, 0x6f, 0x3b, 0xf7, 0x1d, 0xf6, 0x0f, 0x1d, - 0x68, 0x5b, 0x57, 0xbb, 0xac, 0x10, 0x98, 0x5c, 0xcb, 0xba, 0x26, 0xcd, 0x6c, 0x9a, 0xeb, 0x51, - 0xb7, 0xf7, 0xee, 0x7c, 0xd7, 0x1a, 0xd6, 0x2f, 0x2c, 0x87, 0xda, 0xdd, 0xfc, 0x7b, 0x9f, 0x5f, - 0xe6, 0x33, 0x98, 0x77, 0xbe, 0xbf, 0xbc, 0xef, 0xb0, 0x3f, 0x76, 0x60, 0xd1, 0x76, 0x03, 0xeb, - 0xee, 0x96, 0x3a, 0x9c, 0xf5, 0xe4, 0xcf, 0xf0, 0x1d, 0xff, 0x90, 0x5a, 0xf9, 0xfc, 0x8e, 0x67, - 0xb5, 0x52, 0x3e, 0xe5, 0xf2, 0xeb, 0xb5, 0x96, 0x7d, 0x26, 0xde, 0xbb, 0x56, 0x87, 0x35, 0xac, - 0xf8, 0x54, 0xb2, 0x66, 0x18, 0xf3, 0x71, 0x63, 0x9a, 0x84, 0x1f, 0x8b, 0x77, 0x2e, 0xd5, 0x79, - 0x02, 0xf2, 0xdd, 0xbb, 0x7e, 0xef, 0xde, 0xa0, 0x3e, 0x5d, 0x73, 0xaf, 0x58, 0x7d, 0xca, 0xaf, - 0xf0, 0x9b, 0xa2, 0x75, 0xf2, 0x5d, 0xe2, 0x6c, 0x89, 0x2a, 0xbc, 0x55, 0x3c, 0xbb, 0x91, 0x63, - 0xd1, 0x48, 0x99, 0xdd, 0x12, 0x8e, 0x77, 0x2c, 0xc6, 0xbd, 0x43, 0x6d, 0xbd, 0xe1, 0x7e, 0x30, - 0xb3, 0xad, 0xf7, 0xc8, 0x99, 0x8b, 0x2d, 0x3e, 0x00, 0xc8, 0x0e, 0x57, 0x59, 0xee, 0x60, 0x4f, - 0xab, 0x8c, 0xe2, 0xf9, 0xab, 0x2d, 0x81, 0xea, 0xfc, 0x0f, 0x4b, 0xfc, 0x91, 0x50, 0x80, 0x4f, - 0xd4, 0x91, 0xa0, 0x69, 0xe6, 0xd8, 0x27, 0xa0, 0x96, 0x99, 0x93, 0x2f, 0xdf, 0x52, 0x7f, 0xfa, - 0x7c, 0xf1, 0x05, 0x2c, 0xec, 0x45, 0xd1, 0xab, 0xe9, 0x44, 0x47, 0xa7, 0xd8, 0xe7, 0x2c, 0xbb, - 0x7e, 0x72, 0xda, 0xcb, 0xf5, 0xc2, 0xbd, 0x4e, 0x45, 0xf5, 0x58, 0xd7, 0x28, 0xea, 0xde, 0x17, - 0xd9, 0xc1, 0xed, 0x97, 0xcc, 0x87, 0x65, 0xad, 0x55, 0x75, 0xc3, 0x7b, 0x76, 0x31, 0x96, 0x2e, - 0xcd, 0x57, 0x61, 0xd9, 0xe3, 0xaa, 0xb5, 0xf7, 0x12, 0x55, 0x26, 0xe9, 0x94, 0xf6, 0x36, 0x1f, - 0xd0, 0xed, 0x14, 0x3a, 0xac, 0x58, 0xc9, 0x1a, 0xae, 0x4f, 0x39, 0x7a, 0x0b, 0x16, 0x68, 0xaf, - 0x34, 0x13, 0xff, 0x3c, 0xe6, 0x3f, 0xbd, 0xf7, 0x85, 0x3c, 0x06, 0xf9, 0x52, 0xad, 0x34, 0xea, - 0x9c, 0xc8, 0x5a, 0x69, 0x72, 0x07, 0x4b, 0xd6, 0x4a, 0x53, 0x38, 0x58, 0xb2, 0x86, 0x5a, 0x9d, - 0x53, 0xb1, 0x11, 0x2c, 0x17, 0xce, 0xa2, 0xf4, 0x22, 0x33, 0xeb, 0x04, 0xab, 0x77, 0x7d, 0x76, - 0x06, 0xbb, 0xb6, 0x3b, 0x76, 0x6d, 0x87, 0xb0, 0xb0, 0xcd, 0xc5, 0x60, 0x89, 0x70, 0xdc, 0xdc, - 0xfd, 0x40, 0x33, 0xd8, 0x37, 0xbf, 0x24, 0x10, 0xcd, 0x36, 0x25, 0x28, 0x0e, 0x96, 0xfd, 0x08, - 0x5a, 0x8f, 0x79, 0xaa, 0xe2, 0x6f, 0xb5, 0x31, 0x9b, 0x0b, 0xc8, 0xed, 0x95, 0x84, 0xef, 0xda, - 0x3c, 0x43, 0xa5, 0xdd, 0xe3, 0xc3, 0x13, 0x2e, 0x94, 0x53, 0x3f, 0x18, 0x7e, 0xc9, 0xfe, 0x12, - 0x15, 0xae, 0x2f, 0x20, 0xac, 0x19, 0xc1, 0x94, 0x66, 0xe1, 0x4b, 0x39, 0xbc, 0xac, 0xe4, 0x30, - 0x1a, 0x72, 0xc3, 0xa8, 0x0a, 0xa1, 0x65, 0xdc, 0x1b, 0xd2, 0x02, 0x54, 0xbc, 0xa1, 0xa6, 0x05, - 0xa8, 0xe4, 0x9a, 0x91, 0x7b, 0x9b, 0xea, 0x71, 0xd9, 0xf5, 0xac, 0x1e, 0x71, 0xb5, 0x28, 0xab, - 0xe9, 0xde, 0x17, 0xfe, 0x38, 0xfd, 0x92, 0xbd, 0xa4, 0xa7, 0x95, 0xcc, 0xf8, 0xe2, 0xcc, 0x3a, - 0xcf, 0x87, 0x22, 0xeb, 0xc1, 0x32, 0x48, 0xb6, 0xc5, 0x2e, 0xaa, 0x22, 0xdb, 0xeb, 0x3b, 0x00, - 0x87, 0x69, 0x34, 0xd9, 0xf6, 0xf9, 0x38, 0x0a, 0x33, 0x5d, 0x9b, 0x45, 0xb7, 0x66, 0xfa, 0xcb, - 0x08, 0x71, 0x65, 0x2f, 0x8d, 0xed, 0x8c, 0x15, 0xa2, 0xad, 0x98, 0x6b, 0x66, 0x00, 0xac, 0x1e, - 0x90, 0x92, 0x20, 0xd8, 0xfb, 0x0e, 0xdb, 0x04, 0xc8, 0x0e, 0x23, 0xf5, 0xe6, 0xa4, 0x70, 0xce, - 0xa9, 0xd5, 0x5e, 0xc9, 0xc9, 0xe5, 0x01, 0x34, 0xb3, 0xd3, 0xad, 0xf5, 0xec, 0x76, 0x9e, 0x75, - 0x16, 0xa6, 0x57, 0xf0, 0xc2, 0x99, 0x93, 0xdb, 0xa1, 0xa1, 0x02, 0xd6, 0xc0, 0xa1, 0xa2, 0x83, - 0xa4, 0x00, 0x56, 0x44, 0x03, 0xb5, 0x81, 0x43, 0x51, 0x99, 0xaa, 0x27, 0x25, 0xe7, 0x3e, 0x5a, - 0x9a, 0x4b, 0x0f, 0x44, 0x2c, 0x1f, 0x0b, 0x72, 0xab, 0x88, 0x08, 0x45, 0xd5, 0x3c, 0x86, 0xe5, - 0x82, 0x8f, 0x5d, 0x8b, 0xf4, 0xac, 0x43, 0x14, 0x2d, 0xd2, 0x33, 0xdd, 0xf3, 0xee, 0x65, 0xaa, - 0x72, 0xc9, 0x05, 0xda, 0x53, 0xbd, 0x0e, 0xd2, 0xc1, 0x29, 0x56, 0xf7, 0x87, 0x0e, 0xac, 0x94, - 0xb8, 0xd0, 0xd9, 0x87, 0x6a, 0x7b, 0x3e, 0xd3, 0xbd, 0xde, 0x2b, 0xf5, 0xb0, 0xba, 0x87, 0x54, - 0xcf, 0x53, 0xf6, 0xb9, 0xb5, 0xb0, 0x09, 0xe7, 0xa6, 0x94, 0xcc, 0xb7, 0x1a, 0x15, 0xa5, 0x16, - 0xc5, 0x4f, 0x61, 0x5d, 0x34, 0x64, 0x73, 0x34, 0xca, 0x79, 0x7f, 0xaf, 0x15, 0xfe, 0x27, 0x8e, - 0xe5, 0xd5, 0xee, 0xcd, 0xfe, 0x9f, 0x39, 0x33, 0x0c, 0x60, 0xd1, 0x54, 0x36, 0x85, 0x4e, 0xde, - 0xa3, 0xca, 0x66, 0x97, 0xd5, 0xfb, 0xc0, 0xda, 0x68, 0x96, 0x78, 0x61, 0x7f, 0x8b, 0x2a, 0xfb, - 0xc0, 0xed, 0x95, 0x8d, 0x8b, 0xd8, 0x7b, 0xe2, 0x7c, 0xfc, 0x15, 0xed, 0xfe, 0xcd, 0xf5, 0x53, - 0x55, 0x30, 0xcb, 0x5f, 0xad, 0xb7, 0xba, 0xe5, 0xde, 0xe3, 0x9b, 0x54, 0xfd, 0x75, 0xf7, 0xbd, - 0xb2, 0xea, 0x63, 0xf1, 0x89, 0xd8, 0xf4, 0xae, 0xe7, 0xe5, 0x5a, 0xb5, 0xe0, 0x7a, 0xd9, 0x7c, - 0xcf, 0xdc, 0xbd, 0xe4, 0xc6, 0xfa, 0x12, 0xd9, 0x76, 0x6d, 0xd3, 0xdd, 0xab, 0xc5, 0xa7, 0xc4, - 0xaf, 0xac, 0xc5, 0xa7, 0xcc, 0x3f, 0x6c, 0xdb, 0x35, 0xca, 0x33, 0xfc, 0x99, 0x73, 0xe7, 0xe1, - 0xad, 0x1f, 0xfe, 0xd6, 0x49, 0x90, 0x9e, 0x4e, 0x8f, 0xee, 0x0e, 0xa2, 0xf1, 0xbd, 0x91, 0x72, - 0xeb, 0xc9, 0x9b, 0x0a, 0xf7, 0x46, 0xe1, 0xf0, 0x1e, 0x15, 0x7b, 0x34, 0x47, 0xff, 0xc4, 0xeb, - 0x5b, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x73, 0xd9, 0x4f, 0x40, 0xf6, 0x6b, 0x00, 0x00, + // 8836 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5f, 0x6c, 0x1c, 0x5b, + 0x9a, 0x97, 0xab, 0xbb, 0x6d, 0x77, 0x7f, 0xdd, 0xb6, 0xdb, 0xc7, 0x8e, 0xdd, 0xe9, 0x9b, 0x9b, + 0x9b, 0x5b, 0x93, 0x4d, 0x32, 0x99, 0x3b, 0x4e, 0xae, 0x77, 0xe6, 0x72, 0xf7, 0x86, 0x65, 0x71, + 0x6c, 0x27, 0xce, 0x5c, 0xc7, 0xf1, 0x94, 0x93, 0x09, 0x33, 0xb3, 0xab, 0x9e, 0x72, 0xf7, 0xb1, + 0x5d, 0x93, 0xee, 0xaa, 0x9e, 0xaa, 0x6a, 0x27, 0x9e, 0xcb, 0x45, 0x02, 0x21, 0x84, 0x78, 0x41, + 0x03, 0x42, 0x02, 0x04, 0x5a, 0x69, 0x16, 0x89, 0x5d, 0xf1, 0x00, 0x2f, 0x48, 0x0b, 0x5a, 0x9e, + 0x10, 0x42, 0x42, 0x42, 0x3c, 0xf0, 0x80, 0xc4, 0x03, 0x23, 0x04, 0x12, 0x5a, 0xf1, 0x86, 0xe0, + 0x1d, 0x7d, 0xdf, 0xf9, 0x53, 0xe7, 0x54, 0x55, 0xc7, 0xb9, 0x33, 0x03, 0x4f, 0xee, 0xf3, 0x3b, + 0xa7, 0xce, 0xdf, 0xef, 0xfb, 0xce, 0x77, 0xbe, 0xef, 0x3b, 0xc7, 0xd0, 0x88, 0xc7, 0xfd, 0x8d, + 0x71, 0x1c, 0xa5, 0x11, 0x9b, 0x1d, 0x86, 0xf1, 0xb8, 0xdf, 0xbd, 0x76, 0x1a, 0x45, 0xa7, 0x43, + 0x7e, 0xcf, 0x1f, 0x07, 0xf7, 0xfc, 0x30, 0x8c, 0x52, 0x3f, 0x0d, 0xa2, 0x30, 0x11, 0x85, 0xdc, + 0x1f, 0xc1, 0xe2, 0x63, 0x1e, 0x1e, 0x71, 0x3e, 0xf0, 0xf8, 0x4f, 0x26, 0x3c, 0x49, 0xd9, 0x37, + 0x60, 0xd9, 0xe7, 0x3f, 0xe5, 0x7c, 0xd0, 0x1b, 0xfb, 0x49, 0x32, 0x3e, 0x8b, 0xfd, 0x84, 0x77, + 0x9c, 0x1b, 0xce, 0x9d, 0x96, 0xd7, 0x16, 0x19, 0x87, 0x1a, 0x67, 0x1f, 0x42, 0x2b, 0xc1, 0xa2, + 0x3c, 0x4c, 0xe3, 0x68, 0x7c, 0xd1, 0xa9, 0x50, 0xb9, 0x26, 0x62, 0xbb, 0x02, 0x72, 0x87, 0xb0, + 0xa4, 0x5b, 0x48, 0xc6, 0x51, 0x98, 0x70, 0x76, 0x1f, 0x56, 0xfb, 0xc1, 0xf8, 0x8c, 0xc7, 0x3d, + 0xfa, 0x78, 0x14, 0xf2, 0x51, 0x14, 0x06, 0xfd, 0x8e, 0x73, 0xa3, 0x7a, 0xa7, 0xe1, 0x31, 0x91, + 0x87, 0x5f, 0x3c, 0x95, 0x39, 0xec, 0x36, 0x2c, 0xf1, 0x50, 0xe0, 0x7c, 0x40, 0x5f, 0xc9, 0xa6, + 0x16, 0x33, 0x18, 0x3f, 0x70, 0xff, 0x7a, 0x05, 0x96, 0x9f, 0x84, 0x41, 0xfa, 0xd2, 0x1f, 0x0e, + 0x79, 0xaa, 0xc6, 0x74, 0x1b, 0x96, 0x5e, 0x13, 0x40, 0x63, 0x7a, 0x1d, 0xc5, 0x03, 0x39, 0xa2, + 0x45, 0x01, 0x1f, 0x4a, 0x74, 0x6a, 0xcf, 0x2a, 0x53, 0x7b, 0x56, 0x3a, 0x5d, 0xd5, 0x29, 0xd3, + 0x75, 0x1b, 0x96, 0x62, 0xde, 0x8f, 0xce, 0x79, 0x7c, 0xd1, 0x7b, 0x1d, 0x84, 0x83, 0xe8, 0x75, + 0xa7, 0x76, 0xc3, 0xb9, 0x33, 0xeb, 0x2d, 0x2a, 0xf8, 0x25, 0xa1, 0xec, 0x21, 0x2c, 0xf5, 0xcf, + 0xfc, 0x30, 0xe4, 0xc3, 0xde, 0xb1, 0xdf, 0x7f, 0x35, 0x19, 0x27, 0x9d, 0xd9, 0x1b, 0xce, 0x9d, + 0xe6, 0xe6, 0xd5, 0x0d, 0x5a, 0xd5, 0x8d, 0xed, 0x33, 0x3f, 0x7c, 0x48, 0x39, 0x47, 0xa1, 0x3f, + 0x4e, 0xce, 0xa2, 0xd4, 0x5b, 0x94, 0x5f, 0x08, 0x38, 0x71, 0x57, 0x81, 0x99, 0x33, 0x21, 0xe6, + 0xde, 0xfd, 0x27, 0x0e, 0xac, 0xbc, 0x08, 0x87, 0x51, 0xff, 0xd5, 0x2f, 0x39, 0x45, 0x25, 0x63, + 0xa8, 0xbc, 0xeb, 0x18, 0xaa, 0x5f, 0x75, 0x0c, 0x6b, 0xb0, 0x6a, 0x77, 0x56, 0x8e, 0x82, 0xc3, + 0x15, 0xfc, 0xfa, 0x94, 0xab, 0x6e, 0xa9, 0x61, 0x7c, 0x1d, 0xda, 0xfd, 0x49, 0x1c, 0xf3, 0xb0, + 0x30, 0x8e, 0x25, 0x89, 0xeb, 0x81, 0x7c, 0x08, 0xad, 0x90, 0xbf, 0xce, 0x8a, 0x49, 0xda, 0x0d, + 0xf9, 0x6b, 0x55, 0xc4, 0xed, 0xc0, 0x5a, 0xbe, 0x19, 0xd9, 0x81, 0xff, 0xea, 0x40, 0xed, 0x45, + 0xfa, 0x26, 0x62, 0x1b, 0x50, 0x4b, 0x2f, 0xc6, 0x82, 0x43, 0x16, 0x37, 0x99, 0x1c, 0xda, 0xd6, + 0x60, 0x10, 0xf3, 0x24, 0x79, 0x7e, 0x31, 0xe6, 0x5e, 0xcb, 0x17, 0x89, 0x1e, 0x96, 0x63, 0x1d, + 0x98, 0x97, 0x69, 0x6a, 0xb0, 0xe1, 0xa9, 0x24, 0xbb, 0x0e, 0xe0, 0x8f, 0xa2, 0x49, 0x98, 0xf6, + 0x12, 0x3f, 0xa5, 0xa9, 0xaa, 0x7a, 0x06, 0xc2, 0xae, 0x41, 0x63, 0xfc, 0xaa, 0x97, 0xf4, 0xe3, + 0x60, 0x9c, 0x12, 0xd9, 0x34, 0xbc, 0x0c, 0x60, 0xdf, 0x80, 0x7a, 0x34, 0x49, 0xc7, 0x51, 0x10, + 0xa6, 0x92, 0x54, 0x96, 0x64, 0x5f, 0x9e, 0x4d, 0xd2, 0x43, 0x84, 0x3d, 0x5d, 0x80, 0xdd, 0x84, + 0x85, 0x7e, 0x14, 0x9e, 0x04, 0xf1, 0x48, 0x08, 0x83, 0xce, 0x1c, 0xb5, 0x66, 0x83, 0xee, 0xbf, + 0xa8, 0x40, 0xf3, 0x79, 0xec, 0x87, 0x89, 0xdf, 0x47, 0x00, 0xbb, 0x9e, 0xbe, 0xe9, 0x9d, 0xf9, + 0xc9, 0x19, 0x8d, 0xb6, 0xe1, 0xa9, 0x24, 0x5b, 0x83, 0x39, 0xd1, 0x51, 0x1a, 0x53, 0xd5, 0x93, + 0x29, 0xf6, 0x11, 0x2c, 0x87, 0x93, 0x51, 0xcf, 0x6e, 0xab, 0x4a, 0xd4, 0x52, 0xcc, 0xc0, 0x09, + 0x38, 0xc6, 0xb5, 0x16, 0x4d, 0x88, 0x11, 0x1a, 0x08, 0x73, 0xa1, 0x25, 0x53, 0x3c, 0x38, 0x3d, + 0x13, 0xc3, 0x9c, 0xf5, 0x2c, 0x0c, 0xeb, 0x48, 0x83, 0x11, 0xef, 0x25, 0xa9, 0x3f, 0x1a, 0xcb, + 0x61, 0x19, 0x08, 0xe5, 0x47, 0xa9, 0x3f, 0xec, 0x9d, 0x70, 0x9e, 0x74, 0xe6, 0x65, 0xbe, 0x46, + 0xd8, 0x2d, 0x58, 0x1c, 0xf0, 0x24, 0xed, 0xc9, 0x45, 0xe1, 0x49, 0xa7, 0x4e, 0xac, 0x9f, 0x43, + 0xb1, 0x9e, 0xd8, 0x7f, 0xdd, 0xc3, 0x09, 0xe0, 0x6f, 0x3a, 0x0d, 0xd1, 0xd7, 0x0c, 0x41, 0xca, + 0x79, 0xcc, 0x53, 0x63, 0xf6, 0x12, 0x49, 0xa1, 0xee, 0x3e, 0x30, 0x03, 0xde, 0xe1, 0xa9, 0x1f, + 0x0c, 0x13, 0xf6, 0x09, 0xb4, 0x52, 0xa3, 0x30, 0x89, 0xc2, 0xa6, 0x26, 0x27, 0xe3, 0x03, 0xcf, + 0x2a, 0xe7, 0x9e, 0x41, 0xfd, 0x11, 0xe7, 0xfb, 0xc1, 0x28, 0x48, 0xd9, 0x1a, 0xcc, 0x9e, 0x04, + 0x6f, 0xb8, 0x20, 0xf8, 0xea, 0xde, 0x8c, 0x27, 0x92, 0xec, 0x03, 0x00, 0xfa, 0xd1, 0x1b, 0x69, + 0xc2, 0xda, 0x9b, 0xf1, 0x1a, 0x84, 0x3d, 0x45, 0xca, 0xea, 0xc2, 0xfc, 0x98, 0xc7, 0x7d, 0xae, + 0xd6, 0x6f, 0x6f, 0xc6, 0x53, 0xc0, 0xc3, 0x79, 0x98, 0x1d, 0x62, 0xed, 0xee, 0x1f, 0xd7, 0xa0, + 0x79, 0xc4, 0x43, 0xcd, 0x69, 0x0c, 0x6a, 0x38, 0x27, 0x92, 0xbb, 0xe8, 0x37, 0xfb, 0x1a, 0x34, + 0x69, 0x9e, 0x92, 0x34, 0x0e, 0xc2, 0x53, 0x41, 0xe0, 0x0f, 0x2b, 0x1d, 0xc7, 0x03, 0x84, 0x8f, + 0x08, 0x65, 0x6d, 0xa8, 0xfa, 0x23, 0x45, 0xe0, 0xf8, 0x93, 0x5d, 0x85, 0xba, 0x3f, 0x4a, 0x45, + 0xf7, 0x5a, 0x04, 0xcf, 0xfb, 0xa3, 0x94, 0xba, 0xf6, 0x21, 0xb4, 0xc6, 0xfe, 0xc5, 0x08, 0xf9, + 0x59, 0x53, 0x45, 0xcb, 0x6b, 0x4a, 0x6c, 0x0f, 0xc9, 0x62, 0x13, 0x56, 0xcc, 0x22, 0xaa, 0xf1, + 0x59, 0xdd, 0xf8, 0xb2, 0x51, 0x5a, 0xf6, 0xe1, 0x36, 0x2c, 0xa9, 0x6f, 0x62, 0x31, 0x1e, 0xa2, + 0x95, 0x86, 0xb7, 0x28, 0x61, 0x35, 0xca, 0x3b, 0xd0, 0x3e, 0x09, 0x42, 0x7f, 0xd8, 0xeb, 0x0f, + 0xd3, 0xf3, 0xde, 0x80, 0x0f, 0x53, 0x9f, 0xa8, 0x66, 0xd6, 0x5b, 0x24, 0x7c, 0x7b, 0x98, 0x9e, + 0xef, 0x20, 0xca, 0x3e, 0x82, 0xc6, 0x09, 0xe7, 0x3d, 0x9a, 0xac, 0x4e, 0xdd, 0xe2, 0x40, 0xb5, + 0x42, 0x5e, 0xfd, 0x44, 0xad, 0xd5, 0x47, 0xd0, 0x8e, 0x26, 0xe9, 0x69, 0x14, 0x84, 0xa7, 0x3d, + 0x94, 0x79, 0xbd, 0x60, 0x40, 0x54, 0x54, 0x7b, 0x58, 0xb9, 0xef, 0x78, 0x8b, 0x2a, 0x0f, 0xa5, + 0xcf, 0x93, 0x01, 0xbb, 0x05, 0x4b, 0x43, 0x3f, 0x49, 0x7b, 0x67, 0xd1, 0xb8, 0x37, 0x9e, 0x1c, + 0xbf, 0xe2, 0x17, 0x9d, 0x05, 0x9a, 0x88, 0x05, 0x84, 0xf7, 0xa2, 0xf1, 0x21, 0x81, 0xec, 0x7d, + 0x00, 0xea, 0xa7, 0xe8, 0x04, 0xdc, 0x70, 0xee, 0x2c, 0x78, 0x0d, 0x44, 0x44, 0xa3, 0x9f, 0x41, + 0x9d, 0x96, 0x27, 0x1d, 0x9e, 0x77, 0x9a, 0x44, 0x60, 0x1f, 0xc8, 0x1e, 0x1a, 0x0b, 0xbb, 0xb1, + 0xc3, 0x93, 0xf4, 0xf9, 0xf0, 0x1c, 0xf7, 0xef, 0x0b, 0x6f, 0x7e, 0x20, 0x52, 0xdd, 0xcf, 0xa0, + 0x65, 0x66, 0xe0, 0x2a, 0x62, 0x37, 0x70, 0xf5, 0x6b, 0x1e, 0xfe, 0x64, 0xab, 0x30, 0x7b, 0xee, + 0x0f, 0x27, 0x5c, 0x0a, 0x52, 0x91, 0xf8, 0xac, 0xf2, 0xa9, 0xe3, 0xfe, 0xb1, 0x03, 0x2d, 0xd1, + 0x82, 0x54, 0x00, 0x6e, 0xc2, 0x82, 0x9a, 0x7e, 0x1e, 0xc7, 0x51, 0x2c, 0xe5, 0x89, 0x0d, 0xb2, + 0xbb, 0xd0, 0x56, 0xc0, 0x38, 0xe6, 0xc1, 0xc8, 0x3f, 0x55, 0x75, 0x17, 0x70, 0xb6, 0x99, 0xd5, + 0x18, 0x47, 0x93, 0x94, 0xcb, 0xad, 0xa6, 0x25, 0xc7, 0xe7, 0x21, 0xe6, 0xd9, 0x45, 0x50, 0x9e, + 0x94, 0xd0, 0x96, 0x85, 0xb9, 0x7f, 0xc7, 0x01, 0x86, 0x5d, 0x7f, 0x1e, 0x89, 0x2a, 0x24, 0x59, + 0xe4, 0xc9, 0xd2, 0x79, 0x67, 0xb2, 0xac, 0xbc, 0x8d, 0x2c, 0x5d, 0x98, 0x15, 0xbd, 0xaf, 0x95, + 0xf4, 0x5e, 0x64, 0x7d, 0xa7, 0x56, 0xaf, 0xb6, 0x6b, 0xee, 0x7f, 0xae, 0xc2, 0xea, 0xb6, 0xd8, + 0x2b, 0xb7, 0xfa, 0x7d, 0x3e, 0xd6, 0x04, 0xfb, 0x01, 0x34, 0xc3, 0x68, 0xc0, 0x15, 0x99, 0x88, + 0x8e, 0x01, 0x42, 0x06, 0x8d, 0x9c, 0xf9, 0x41, 0x28, 0x3a, 0x2e, 0xe6, 0xb3, 0x41, 0x08, 0x75, + 0xfb, 0x16, 0x2c, 0x8d, 0x79, 0x38, 0x30, 0xe9, 0x52, 0x68, 0x33, 0x0b, 0x12, 0x96, 0x24, 0xf9, + 0x01, 0x34, 0x4f, 0x26, 0xa2, 0x1c, 0x72, 0x73, 0x8d, 0xe8, 0x00, 0x24, 0xb4, 0x25, 0x98, 0x7a, + 0x3c, 0x49, 0xce, 0x28, 0x77, 0x96, 0x72, 0xe7, 0x31, 0x8d, 0x59, 0xef, 0x03, 0x0c, 0x26, 0x49, + 0x2a, 0xc9, 0x74, 0x8e, 0x32, 0x1b, 0x88, 0x08, 0x32, 0xfd, 0x26, 0xac, 0x8c, 0xfc, 0x37, 0x3d, + 0xa2, 0x9f, 0x5e, 0x10, 0xf6, 0x4e, 0x86, 0x24, 0xee, 0xe7, 0xa9, 0x5c, 0x7b, 0xe4, 0xbf, 0xf9, + 0x1e, 0xe6, 0x3c, 0x09, 0x1f, 0x11, 0x8e, 0xbc, 0xac, 0xf4, 0x8c, 0x98, 0x27, 0x3c, 0x3e, 0xe7, + 0xc4, 0x7e, 0x35, 0xad, 0x4c, 0x78, 0x02, 0xc5, 0x1e, 0x8d, 0x70, 0xdc, 0xe9, 0xb0, 0x2f, 0x78, + 0xcd, 0x9b, 0x1f, 0x05, 0xe1, 0x5e, 0x3a, 0xec, 0xb3, 0x6b, 0x00, 0xc8, 0xbc, 0x63, 0x1e, 0xf7, + 0x5e, 0xbd, 0x26, 0xc6, 0xa9, 0x11, 0xb3, 0x1e, 0xf2, 0xf8, 0xf3, 0xd7, 0xec, 0x3d, 0x68, 0xf4, + 0x13, 0xe2, 0x7e, 0xff, 0xa2, 0xd3, 0x24, 0xae, 0xaa, 0xf7, 0x13, 0xe4, 0x7b, 0xff, 0x82, 0x7d, + 0x04, 0x0c, 0x7b, 0xeb, 0xd3, 0x2a, 0xf0, 0x01, 0x55, 0x9f, 0x90, 0x18, 0x5b, 0xa0, 0xce, 0x6e, + 0xc9, 0x0c, 0x6c, 0x27, 0x61, 0x5f, 0x83, 0x05, 0xd5, 0xd9, 0x93, 0xa1, 0x7f, 0x9a, 0x10, 0x1f, + 0x2f, 0x78, 0x2d, 0x09, 0x3e, 0x42, 0xcc, 0x7d, 0x29, 0xb4, 0x1b, 0x63, 0x6d, 0x25, 0xdf, 0xe0, + 0x3e, 0x4b, 0x08, 0xad, 0x6b, 0xdd, 0x93, 0xa9, 0xb2, 0x45, 0xab, 0x94, 0x2c, 0x9a, 0xfb, 0x73, + 0x07, 0x5a, 0xb2, 0x66, 0x52, 0x09, 0xd8, 0x7d, 0x60, 0x6a, 0x15, 0xd3, 0x37, 0xc1, 0xa0, 0x77, + 0x7c, 0x91, 0xf2, 0x44, 0x10, 0xcd, 0xde, 0x8c, 0x57, 0x92, 0x87, 0x82, 0xcb, 0x42, 0x93, 0x34, + 0x16, 0x34, 0xbd, 0x37, 0xe3, 0x15, 0x72, 0x90, 0xc5, 0x50, 0xe9, 0x98, 0xa4, 0xbd, 0x20, 0x1c, + 0xf0, 0x37, 0x44, 0x4a, 0x0b, 0x9e, 0x85, 0x3d, 0x5c, 0x84, 0x96, 0xf9, 0x9d, 0xfb, 0x63, 0xa8, + 0x2b, 0x95, 0x85, 0xb6, 0xeb, 0x5c, 0xbf, 0x3c, 0x03, 0x61, 0x5d, 0xa8, 0xdb, 0xbd, 0xf0, 0xea, + 0x5f, 0xa5, 0x6d, 0xf7, 0xcf, 0x41, 0x7b, 0x1f, 0x89, 0x28, 0x44, 0xa2, 0x95, 0x7a, 0xd8, 0x1a, + 0xcc, 0x19, 0xcc, 0xd3, 0xf0, 0x64, 0x0a, 0x37, 0xbc, 0xb3, 0x28, 0x49, 0x65, 0x3b, 0xf4, 0xdb, + 0xfd, 0xb7, 0x0e, 0xb0, 0xdd, 0x24, 0x0d, 0x46, 0x7e, 0xca, 0x1f, 0x71, 0x2d, 0x1e, 0x9e, 0x41, + 0x0b, 0x6b, 0x7b, 0x1e, 0x6d, 0x09, 0xad, 0x48, 0xec, 0xe6, 0xdf, 0x90, 0xec, 0x5c, 0xfc, 0x60, + 0xc3, 0x2c, 0x2d, 0x04, 0xaf, 0x55, 0x01, 0x72, 0x5b, 0xea, 0xc7, 0xa7, 0x3c, 0x25, 0x95, 0x49, + 0x2a, 0xdc, 0x20, 0xa0, 0xed, 0x28, 0x3c, 0xe9, 0xfe, 0x0e, 0x2c, 0x17, 0xea, 0x30, 0x65, 0x74, + 0xa3, 0x44, 0x46, 0x57, 0x4d, 0x19, 0xdd, 0x87, 0x15, 0xab, 0x5f, 0x92, 0xe2, 0x3a, 0x30, 0x8f, + 0x8c, 0x81, 0x3b, 0xb3, 0x23, 0x76, 0x66, 0x99, 0x64, 0x9b, 0xb0, 0x7a, 0xc2, 0x79, 0xec, 0xa7, + 0x94, 0x24, 0xd6, 0xc1, 0x35, 0x91, 0x35, 0x97, 0xe6, 0xb9, 0xff, 0xcd, 0x81, 0x25, 0x94, 0xa6, + 0x4f, 0xfd, 0xf0, 0x42, 0xcd, 0xd5, 0x7e, 0xe9, 0x5c, 0xdd, 0x31, 0x36, 0x26, 0xa3, 0xf4, 0x57, + 0x9d, 0xa8, 0x6a, 0x7e, 0xa2, 0xd8, 0x0d, 0x68, 0x59, 0xdd, 0x9d, 0x15, 0x2a, 0x60, 0xe2, 0xa7, + 0x87, 0x3c, 0x7e, 0x78, 0x91, 0xf2, 0x5f, 0x7d, 0x2a, 0x6f, 0x41, 0x3b, 0xeb, 0xb6, 0x9c, 0x47, + 0x06, 0x35, 0x24, 0x4c, 0x59, 0x01, 0xfd, 0x76, 0xff, 0x81, 0x23, 0x0a, 0x6e, 0x47, 0x81, 0x56, + 0x0f, 0xb1, 0x20, 0x6a, 0x99, 0xaa, 0x20, 0xfe, 0x9e, 0xaa, 0x5e, 0xff, 0xea, 0x83, 0x45, 0x99, + 0x98, 0xf0, 0x70, 0xd0, 0xf3, 0x87, 0x43, 0x12, 0xc4, 0x75, 0x6f, 0x1e, 0xd3, 0x5b, 0xc3, 0xa1, + 0x7b, 0x1b, 0x96, 0x8d, 0xde, 0xbd, 0x65, 0x1c, 0x07, 0xc0, 0xf6, 0x83, 0x24, 0x7d, 0x11, 0x26, + 0x63, 0x43, 0x73, 0x7a, 0x0f, 0x1a, 0x28, 0x6d, 0xb1, 0x67, 0x82, 0x73, 0x67, 0x3d, 0x14, 0xbf, + 0xd8, 0xaf, 0x84, 0x32, 0xfd, 0x37, 0x32, 0xb3, 0x22, 0x33, 0xfd, 0x37, 0x94, 0xe9, 0x7e, 0x0a, + 0x2b, 0x56, 0x7d, 0xb2, 0xe9, 0x0f, 0x61, 0x76, 0x92, 0xbe, 0x89, 0x94, 0x6e, 0xdc, 0x94, 0x14, + 0x82, 0xa7, 0x30, 0x4f, 0xe4, 0xb8, 0x0f, 0x60, 0xf9, 0x80, 0xbf, 0x96, 0x8c, 0xac, 0x3a, 0x72, + 0xeb, 0xd2, 0x13, 0x1a, 0xe5, 0xbb, 0x1b, 0xc0, 0xcc, 0x8f, 0x33, 0x06, 0x50, 0xe7, 0x35, 0xc7, + 0x3a, 0xaf, 0xb9, 0xb7, 0x80, 0x1d, 0x05, 0xa7, 0xe1, 0x53, 0x9e, 0x24, 0xfe, 0xa9, 0x66, 0xfd, + 0x36, 0x54, 0x47, 0xc9, 0xa9, 0x14, 0x55, 0xf8, 0xd3, 0xfd, 0x4d, 0x58, 0xb1, 0xca, 0xc9, 0x8a, + 0xaf, 0x41, 0x23, 0x09, 0x4e, 0x43, 0x3f, 0x9d, 0xc4, 0x5c, 0x56, 0x9d, 0x01, 0xee, 0x23, 0x58, + 0xfd, 0x1e, 0x8f, 0x83, 0x93, 0x8b, 0xcb, 0xaa, 0xb7, 0xeb, 0xa9, 0xe4, 0xeb, 0xd9, 0x85, 0x2b, + 0xb9, 0x7a, 0x64, 0xf3, 0x82, 0x7c, 0xe5, 0x4a, 0xd6, 0x3d, 0x91, 0x30, 0x64, 0x5f, 0xc5, 0x94, + 0x7d, 0xee, 0x0b, 0x60, 0xdb, 0x51, 0x18, 0xf2, 0x7e, 0x7a, 0xc8, 0x79, 0x9c, 0x99, 0x8a, 0x32, + 0x5a, 0x6d, 0x6e, 0xae, 0xcb, 0x99, 0xcd, 0x0b, 0x54, 0x49, 0xc4, 0x0c, 0x6a, 0x63, 0x1e, 0x8f, + 0xa8, 0xe2, 0xba, 0x47, 0xbf, 0xdd, 0x2b, 0xb0, 0x62, 0x55, 0x2b, 0x0f, 0xd7, 0x1f, 0xc3, 0x95, + 0x9d, 0x20, 0xe9, 0x17, 0x1b, 0xec, 0xc0, 0xfc, 0x78, 0x72, 0xdc, 0xcb, 0x38, 0x51, 0x25, 0xf1, + 0xbc, 0x95, 0xff, 0x44, 0x56, 0xf6, 0xd7, 0x1c, 0xa8, 0xed, 0x3d, 0xdf, 0xdf, 0xc6, 0xbd, 0x22, + 0x08, 0xfb, 0xd1, 0x08, 0xb5, 0x30, 0x31, 0x68, 0x9d, 0x9e, 0xca, 0x61, 0xd7, 0xa0, 0x41, 0xca, + 0x1b, 0x1e, 0x31, 0xa5, 0x1e, 0x94, 0x01, 0x78, 0xbc, 0xe5, 0x6f, 0xc6, 0x41, 0x4c, 0xe7, 0x57, + 0x75, 0x2a, 0xad, 0xd1, 0x36, 0x53, 0xcc, 0x70, 0x7f, 0x3e, 0x0f, 0xf3, 0x72, 0xf3, 0x15, 0x1b, + 0x79, 0x1a, 0x9c, 0xf3, 0x6c, 0x23, 0xc7, 0x14, 0x2a, 0xc6, 0x31, 0x1f, 0x45, 0xa9, 0xd6, 0xdf, + 0xc4, 0x32, 0xd8, 0x20, 0x1d, 0xdf, 0xa5, 0x12, 0x21, 0x0e, 0xfc, 0x55, 0x51, 0xca, 0x02, 0xd9, + 0x35, 0x98, 0x57, 0xca, 0x40, 0x4d, 0x9f, 0x2c, 0x14, 0x84, 0xb3, 0xd1, 0xf7, 0xc7, 0x7e, 0x3f, + 0x48, 0x2f, 0xa4, 0x58, 0xd0, 0x69, 0xac, 0x7f, 0x18, 0xf5, 0xfd, 0x61, 0xef, 0xd8, 0x1f, 0xfa, + 0x61, 0x9f, 0x2b, 0xf3, 0x80, 0x05, 0xe2, 0x51, 0x59, 0x76, 0x4b, 0x15, 0x13, 0xc7, 0xe9, 0x1c, + 0x8a, 0x7b, 0x78, 0x3f, 0x1a, 0x8d, 0x82, 0x14, 0x4f, 0xd8, 0xa4, 0x9a, 0x55, 0x3d, 0x03, 0x11, + 0xc6, 0x08, 0x4a, 0xbd, 0x16, 0x33, 0xd8, 0x50, 0xc6, 0x08, 0x03, 0xc4, 0x5a, 0x72, 0x1a, 0x5a, + 0xd5, 0x33, 0x10, 0x5c, 0x8b, 0x49, 0x98, 0xf0, 0x34, 0x1d, 0xf2, 0x81, 0xee, 0x50, 0x93, 0x8a, + 0x15, 0x33, 0xd8, 0x7d, 0x58, 0x11, 0x87, 0xfe, 0xc4, 0x4f, 0xa3, 0xe4, 0x2c, 0x48, 0x7a, 0x09, + 0x9e, 0x7e, 0xc5, 0xe1, 0xb3, 0x2c, 0x8b, 0x7d, 0x0a, 0xeb, 0x39, 0x38, 0xe6, 0x7d, 0x1e, 0x9c, + 0xf3, 0x01, 0xa9, 0x70, 0x55, 0x6f, 0x5a, 0x36, 0xbb, 0x01, 0xcd, 0x70, 0x32, 0xea, 0x4d, 0xc6, + 0x03, 0x1f, 0x95, 0x98, 0x45, 0x52, 0x2e, 0x4d, 0x88, 0x7d, 0x0c, 0x4a, 0x4f, 0x93, 0xda, 0xe3, + 0x92, 0x25, 0xe1, 0x90, 0x7a, 0x3d, 0xbb, 0x04, 0x12, 0x66, 0xa6, 0x92, 0xb6, 0xe5, 0x41, 0x4f, + 0x01, 0xc4, 0x27, 0x71, 0x70, 0xee, 0xa7, 0xbc, 0xb3, 0x2c, 0x84, 0xba, 0x4c, 0xe2, 0x77, 0x41, + 0x18, 0xa4, 0x81, 0x9f, 0x46, 0x71, 0x87, 0x51, 0x5e, 0x06, 0xe0, 0x24, 0x12, 0x7d, 0x24, 0xa9, + 0x9f, 0x4e, 0x12, 0xa9, 0xa1, 0xae, 0x10, 0x71, 0x15, 0x33, 0xd8, 0x27, 0xb0, 0x26, 0x28, 0x82, + 0xb2, 0xa4, 0xee, 0x4d, 0xaa, 0xc2, 0x2a, 0xcd, 0xc8, 0x94, 0x5c, 0x9c, 0x4a, 0x49, 0x22, 0x85, + 0x0f, 0xaf, 0x88, 0xa9, 0x9c, 0x92, 0x8d, 0xfd, 0xc3, 0x1e, 0x04, 0xfd, 0x9e, 0x2c, 0x81, 0x2c, + 0xb2, 0x46, 0xa3, 0x28, 0x66, 0x20, 0x89, 0x0f, 0x83, 0x13, 0x9e, 0x06, 0x23, 0xde, 0x59, 0x17, + 0x24, 0xae, 0xd2, 0xc8, 0x80, 0x93, 0x31, 0xe5, 0x74, 0x04, 0xc3, 0x8b, 0x94, 0xfb, 0xfb, 0x8e, + 0xd8, 0x7c, 0x24, 0xa3, 0x26, 0xc6, 0xb1, 0x4a, 0xb0, 0x68, 0x2f, 0x0a, 0x87, 0x17, 0x92, 0x6b, + 0x41, 0x40, 0xcf, 0xc2, 0xe1, 0x05, 0x2a, 0xf6, 0x41, 0x68, 0x16, 0x11, 0x72, 0xae, 0xa5, 0x40, + 0x2a, 0xf4, 0x01, 0x34, 0xc7, 0x93, 0xe3, 0x61, 0xd0, 0x17, 0x45, 0xaa, 0xa2, 0x16, 0x01, 0x51, + 0x01, 0x3c, 0x57, 0x8a, 0x95, 0x12, 0x25, 0x6a, 0x54, 0xa2, 0x29, 0x31, 0x2c, 0xe2, 0x3e, 0x84, + 0x55, 0xbb, 0x83, 0x52, 0xa0, 0xdf, 0x85, 0xba, 0xe4, 0xff, 0x44, 0x1e, 0xee, 0x17, 0x0d, 0x3b, + 0x2b, 0x1e, 0x83, 0x74, 0xbe, 0xfb, 0x2f, 0x6b, 0xb0, 0x22, 0xd1, 0xed, 0x61, 0x94, 0xf0, 0xa3, + 0xc9, 0x68, 0xe4, 0xc7, 0x25, 0x82, 0xc5, 0xb9, 0x44, 0xb0, 0x54, 0x8a, 0x82, 0xe5, 0xba, 0x75, + 0xbe, 0x14, 0x92, 0xc9, 0x40, 0xd8, 0x1d, 0x58, 0xea, 0x0f, 0xa3, 0x44, 0xa8, 0xfb, 0xa6, 0xa9, + 0x2f, 0x0f, 0x17, 0x85, 0xe1, 0x6c, 0x99, 0x30, 0x34, 0x05, 0xd9, 0x5c, 0x4e, 0x90, 0xb9, 0xd0, + 0xc2, 0x4a, 0xb9, 0x92, 0xcd, 0xf3, 0xf2, 0xb0, 0x65, 0x60, 0xd8, 0x9f, 0xbc, 0xd8, 0x10, 0x32, + 0x6a, 0xa9, 0x4c, 0x68, 0x04, 0x23, 0x4e, 0xb2, 0xdf, 0x28, 0xdd, 0x90, 0x42, 0xa3, 0x98, 0xc5, + 0x1e, 0x01, 0x88, 0xb6, 0x48, 0x01, 0x01, 0x52, 0x40, 0x6e, 0xd9, 0xab, 0x62, 0xce, 0xff, 0x06, + 0x26, 0x26, 0x31, 0x27, 0xa5, 0xc4, 0xf8, 0xd2, 0xfd, 0x1b, 0x0e, 0x34, 0x8d, 0x3c, 0x76, 0x05, + 0x96, 0xb7, 0x9f, 0x3d, 0x3b, 0xdc, 0xf5, 0xb6, 0x9e, 0x3f, 0xf9, 0xde, 0x6e, 0x6f, 0x7b, 0xff, + 0xd9, 0xd1, 0x6e, 0x7b, 0x06, 0xe1, 0xfd, 0x67, 0xdb, 0x5b, 0xfb, 0xbd, 0x47, 0xcf, 0xbc, 0x6d, + 0x05, 0x3b, 0x6c, 0x0d, 0x98, 0xb7, 0xfb, 0xf4, 0xd9, 0xf3, 0x5d, 0x0b, 0xaf, 0xb0, 0x36, 0xb4, + 0x1e, 0x7a, 0xbb, 0x5b, 0xdb, 0x7b, 0x12, 0xa9, 0xb2, 0x55, 0x68, 0x3f, 0x7a, 0x71, 0xb0, 0xf3, + 0xe4, 0xe0, 0x71, 0x6f, 0x7b, 0xeb, 0x60, 0x7b, 0x77, 0x7f, 0x77, 0xa7, 0x5d, 0x63, 0x0b, 0xd0, + 0xd8, 0x7a, 0xb8, 0x75, 0xb0, 0xf3, 0xec, 0x60, 0x77, 0xa7, 0x3d, 0xeb, 0xfe, 0x17, 0x07, 0xae, + 0x50, 0xaf, 0x07, 0x79, 0x26, 0xb9, 0x01, 0xcd, 0x7e, 0x14, 0x8d, 0x51, 0xf1, 0xcf, 0xb6, 0x36, + 0x13, 0x42, 0x06, 0x10, 0x42, 0xe1, 0x24, 0x8a, 0xfb, 0x5c, 0xf2, 0x08, 0x10, 0xf4, 0x08, 0x11, + 0x64, 0x00, 0xb9, 0xbc, 0xa2, 0x84, 0x60, 0x91, 0xa6, 0xc0, 0x44, 0x91, 0x35, 0x98, 0x3b, 0x8e, + 0xb9, 0xdf, 0x3f, 0x93, 0xdc, 0x21, 0x53, 0xec, 0xeb, 0xd9, 0xc9, 0xb4, 0x8f, 0xb3, 0x3f, 0xe4, + 0x03, 0xa2, 0x98, 0xba, 0xb7, 0x24, 0xf1, 0x6d, 0x09, 0xa3, 0x14, 0xf4, 0x8f, 0xfd, 0x70, 0x10, + 0x85, 0x7c, 0x20, 0xd5, 0xde, 0x0c, 0x70, 0x0f, 0x61, 0x2d, 0x3f, 0x3e, 0xc9, 0x63, 0x9f, 0x18, + 0x3c, 0x26, 0xb4, 0xd0, 0xee, 0xf4, 0xd5, 0x34, 0xf8, 0xed, 0x17, 0x15, 0xa8, 0xa1, 0x52, 0x32, + 0x5d, 0x81, 0x31, 0xf5, 0xcc, 0x6a, 0xc1, 0x2f, 0x40, 0x87, 0x5d, 0xb1, 0x45, 0x49, 0x43, 0x4b, + 0x86, 0x64, 0xf9, 0x31, 0xef, 0x9f, 0x4b, 0x53, 0x8b, 0x81, 0x20, 0x83, 0xe0, 0x21, 0x80, 0xbe, + 0x96, 0x0c, 0xa2, 0xd2, 0x2a, 0x8f, 0xbe, 0x9c, 0xcf, 0xf2, 0xe8, 0xbb, 0x0e, 0xcc, 0x07, 0xe1, + 0x71, 0x34, 0x09, 0x07, 0xc4, 0x10, 0x75, 0x4f, 0x25, 0xc9, 0x13, 0x41, 0x8c, 0x8a, 0xf2, 0x53, + 0x90, 0x7f, 0x06, 0xb0, 0x4d, 0x68, 0x24, 0x17, 0x61, 0xdf, 0xa4, 0xf9, 0x55, 0x39, 0x4b, 0x38, + 0x07, 0x1b, 0x47, 0x17, 0x61, 0x9f, 0x28, 0x3c, 0x2b, 0xe6, 0xfe, 0x0e, 0xd4, 0x15, 0x8c, 0x64, + 0xf9, 0xe2, 0xe0, 0xf3, 0x83, 0x67, 0x2f, 0x0f, 0x7a, 0x47, 0xdf, 0x3f, 0xd8, 0x6e, 0xcf, 0xb0, + 0x25, 0x68, 0x6e, 0x6d, 0x13, 0xa5, 0x13, 0xe0, 0x60, 0x91, 0xc3, 0xad, 0xa3, 0x23, 0x8d, 0x54, + 0x5c, 0x86, 0x07, 0xf9, 0x84, 0x34, 0x3f, 0x6d, 0x69, 0xff, 0x04, 0x96, 0x0d, 0x2c, 0x3b, 0x45, + 0x8c, 0x11, 0xc8, 0x9d, 0x22, 0x48, 0x65, 0x14, 0x39, 0x6e, 0x1b, 0x16, 0x1f, 0xf3, 0xf4, 0x49, + 0x78, 0x12, 0xa9, 0x9a, 0xfe, 0x47, 0x0d, 0x96, 0x34, 0x24, 0x2b, 0xba, 0x03, 0x4b, 0xc1, 0x80, + 0x87, 0x69, 0x90, 0x5e, 0xf4, 0x2c, 0x7b, 0x41, 0x1e, 0x46, 0x55, 0xdb, 0x1f, 0x06, 0xbe, 0x72, + 0xf8, 0x88, 0x04, 0x9e, 0x9f, 0x51, 0x07, 0x30, 0xed, 0x36, 0x44, 0x57, 0xc2, 0x4c, 0x51, 0x9a, + 0x87, 0x12, 0x08, 0x71, 0xb9, 0xcd, 0xe8, 0x4f, 0x84, 0xca, 0x59, 0x96, 0x85, 0x4b, 0x25, 0x6a, + 0xc2, 0x21, 0xcf, 0x0a, 0x3d, 0x41, 0x03, 0x05, 0x8f, 0xca, 0x9c, 0x90, 0x8f, 0x79, 0x8f, 0x8a, + 0xe1, 0x95, 0xa9, 0x17, 0xbc, 0x32, 0x28, 0x3f, 0x2f, 0xc2, 0x3e, 0x1f, 0xf4, 0xd2, 0xa8, 0x47, + 0x72, 0x9e, 0x48, 0xa2, 0xee, 0xe5, 0x61, 0xdc, 0x37, 0x52, 0x9e, 0xa4, 0x21, 0x17, 0xa6, 0xe9, + 0x3a, 0x59, 0x41, 0x15, 0x84, 0xe7, 0x83, 0x49, 0x1c, 0x24, 0x9d, 0x16, 0xf9, 0x5b, 0xe8, 0x37, + 0xfb, 0x16, 0x5c, 0x39, 0xe6, 0x49, 0xda, 0x3b, 0xe3, 0xfe, 0x80, 0xc7, 0x44, 0x5e, 0xc2, 0xb1, + 0x23, 0x54, 0xae, 0xf2, 0x4c, 0x24, 0xdc, 0x73, 0x1e, 0x27, 0x41, 0x14, 0x92, 0xb2, 0xd5, 0xf0, + 0x54, 0x12, 0xeb, 0xc3, 0xc1, 0xeb, 0x8d, 0x5a, 0xcf, 0xe0, 0x12, 0x0d, 0xbc, 0x3c, 0x93, 0xdd, + 0x84, 0x39, 0x1a, 0x40, 0xd2, 0x69, 0x13, 0xcd, 0xb4, 0x32, 0x9e, 0x0f, 0x42, 0x4f, 0xe6, 0xe1, + 0x2a, 0xf7, 0xa3, 0x61, 0x14, 0x93, 0xc6, 0xd5, 0xf0, 0x44, 0xc2, 0x9e, 0x9d, 0xd3, 0xd8, 0x1f, + 0x9f, 0x49, 0xad, 0x2b, 0x0f, 0x7f, 0xa7, 0x56, 0x6f, 0xb6, 0x5b, 0xee, 0x9f, 0x81, 0x59, 0xaa, + 0x96, 0xaa, 0xa3, 0xc9, 0x74, 0x64, 0x75, 0x84, 0x76, 0x60, 0x3e, 0xe4, 0xe9, 0xeb, 0x28, 0x7e, + 0xa5, 0xbc, 0x87, 0x32, 0xe9, 0xfe, 0x94, 0x4e, 0x68, 0xda, 0x9b, 0xf6, 0x82, 0x54, 0x4b, 0x3c, + 0x67, 0x8b, 0xa5, 0x4a, 0xce, 0x7c, 0x79, 0x68, 0xac, 0x13, 0x70, 0x74, 0xe6, 0xa3, 0xac, 0xb5, + 0x56, 0x5f, 0x9c, 0xc3, 0x9b, 0x84, 0xed, 0x89, 0xc5, 0xbf, 0x09, 0x8b, 0xca, 0x4f, 0x97, 0xf4, + 0x86, 0xfc, 0x24, 0x55, 0x56, 0xb4, 0x70, 0x32, 0xa2, 0xc3, 0xfa, 0x3e, 0x3f, 0x49, 0xdd, 0x03, + 0x58, 0x96, 0xf2, 0xef, 0xd9, 0x98, 0xab, 0xa6, 0x7f, 0xab, 0x4c, 0x97, 0x68, 0x6e, 0xae, 0xd8, + 0x02, 0x53, 0x78, 0x26, 0xed, 0x92, 0xae, 0x07, 0xcc, 0x94, 0xa7, 0xb2, 0x42, 0xb9, 0x99, 0x2b, + 0x3b, 0xa1, 0x1c, 0x8e, 0x85, 0xe1, 0xfc, 0x24, 0x93, 0x7e, 0x5f, 0x79, 0x57, 0xeb, 0x9e, 0x4a, + 0xba, 0x7f, 0xe8, 0xc0, 0x0a, 0xd5, 0xa6, 0xb4, 0x21, 0xb9, 0x67, 0x7d, 0xfa, 0x15, 0xba, 0xa9, + 0xac, 0xb4, 0xc2, 0x36, 0xb9, 0x0a, 0xb3, 0xe6, 0x2e, 0x26, 0x12, 0x5f, 0xdd, 0x26, 0x53, 0xcb, + 0xdb, 0x64, 0xdc, 0xbf, 0xeb, 0xc0, 0xb2, 0xd8, 0x48, 0x48, 0xdb, 0x96, 0xc3, 0xff, 0xb3, 0xb0, + 0x20, 0x34, 0x02, 0x29, 0x15, 0x64, 0x47, 0x33, 0xd1, 0x4a, 0xa8, 0x28, 0xbc, 0x37, 0xe3, 0xd9, + 0x85, 0xd9, 0x03, 0xd2, 0xca, 0xc2, 0x1e, 0xa1, 0x25, 0x7e, 0x78, 0x7b, 0xae, 0xf7, 0x66, 0x3c, + 0xa3, 0xf8, 0xc3, 0x3a, 0x2a, 0xcb, 0x88, 0xbb, 0x8f, 0x61, 0xc1, 0x6a, 0xc8, 0xb2, 0x07, 0xb5, + 0x84, 0x3d, 0xa8, 0x60, 0x78, 0xad, 0x94, 0x18, 0x5e, 0xff, 0x79, 0x15, 0x18, 0x12, 0x4b, 0x6e, + 0x35, 0x6e, 0xd8, 0xde, 0x0b, 0xe5, 0x92, 0xcf, 0x20, 0xb6, 0x09, 0xcc, 0x48, 0x2a, 0xaf, 0x4a, + 0x55, 0x7b, 0x55, 0x4a, 0x72, 0x51, 0xd4, 0x4a, 0xad, 0x43, 0x7b, 0x2c, 0xe8, 0xac, 0x2f, 0xa6, + 0xbe, 0x34, 0x0f, 0x77, 0x46, 0x72, 0x5f, 0xe0, 0xa9, 0x44, 0x9e, 0x8f, 0x55, 0x3a, 0xbf, 0xc6, + 0x73, 0x97, 0xae, 0xf1, 0x7c, 0xc1, 0xee, 0x66, 0x9c, 0xd0, 0xea, 0xf6, 0x09, 0xed, 0x26, 0x2c, + 0x28, 0x2f, 0x85, 0xf0, 0x88, 0xca, 0xe3, 0xb0, 0x05, 0xb2, 0xbb, 0xd0, 0x56, 0x87, 0x24, 0x7d, + 0x0c, 0x14, 0xfe, 0xbe, 0x02, 0x8e, 0x7b, 0x40, 0x66, 0x89, 0x6b, 0x52, 0x67, 0x33, 0x80, 0xce, + 0x54, 0x48, 0x25, 0xbd, 0x49, 0x28, 0xdd, 0xf1, 0x7c, 0x40, 0x07, 0x61, 0x3c, 0x53, 0xe5, 0x33, + 0xdc, 0xbf, 0xe5, 0x40, 0x1b, 0xd7, 0xcd, 0x22, 0xcd, 0xcf, 0x80, 0x38, 0xe3, 0x1d, 0x29, 0xd3, + 0x2a, 0xcb, 0x3e, 0x85, 0x06, 0xa5, 0xa3, 0x31, 0x0f, 0x25, 0x5d, 0x76, 0x6c, 0xba, 0xcc, 0x64, + 0xca, 0xde, 0x8c, 0x97, 0x15, 0x36, 0xa8, 0xf2, 0x3f, 0x38, 0xd0, 0x94, 0xad, 0xfc, 0xd2, 0x96, + 0x9e, 0xae, 0x11, 0x3f, 0x21, 0x14, 0xb0, 0x2c, 0x5c, 0xe2, 0x0e, 0x2c, 0x8d, 0xfc, 0x74, 0x12, + 0xe3, 0x9e, 0x6e, 0x59, 0x79, 0xf2, 0x30, 0x6e, 0xd0, 0x24, 0x3e, 0x93, 0x5e, 0x1a, 0x0c, 0x7b, + 0x2a, 0x57, 0x46, 0x2a, 0x94, 0x65, 0xa1, 0x14, 0x49, 0x52, 0xff, 0x94, 0xcb, 0xbd, 0x57, 0x24, + 0xdc, 0x0e, 0xac, 0x1d, 0x66, 0x9e, 0x1b, 0x43, 0xc7, 0x76, 0xff, 0xe9, 0x02, 0xac, 0x17, 0xb2, + 0x74, 0x5c, 0x95, 0x34, 0x5d, 0x0c, 0x83, 0xd1, 0x71, 0xa4, 0x0f, 0x28, 0x8e, 0x69, 0xd5, 0xb0, + 0xb2, 0xd8, 0x29, 0x5c, 0x51, 0x4a, 0x06, 0xce, 0x69, 0xb6, 0x21, 0x56, 0x68, 0xa7, 0xfb, 0xd8, + 0x5e, 0xc2, 0x7c, 0x83, 0x0a, 0x37, 0x19, 0xb9, 0xbc, 0x3e, 0x76, 0x06, 0x1d, 0xad, 0xcd, 0x48, + 0x81, 0x6d, 0x68, 0x3c, 0xd8, 0xd6, 0x47, 0x97, 0xb4, 0x65, 0xa9, 0xe4, 0xde, 0xd4, 0xda, 0xd8, + 0x05, 0x5c, 0x57, 0x79, 0x24, 0x91, 0x8b, 0xed, 0xd5, 0xde, 0x69, 0x6c, 0x74, 0xd8, 0xb0, 0x1b, + 0xbd, 0xa4, 0x62, 0xf6, 0x63, 0x58, 0x7b, 0xed, 0x07, 0xa9, 0xea, 0x96, 0xa1, 0x5f, 0xcc, 0x52, + 0x93, 0x9b, 0x97, 0x34, 0xf9, 0x52, 0x7c, 0x6c, 0x6d, 0x53, 0x53, 0x6a, 0xec, 0xfe, 0x49, 0x05, + 0x16, 0xed, 0x7a, 0x90, 0x4c, 0x25, 0xef, 0x2b, 0x19, 0xa8, 0x34, 0xd2, 0x1c, 0x5c, 0x3c, 0xe7, + 0x57, 0xca, 0xce, 0xf9, 0xe6, 0xc9, 0xba, 0x7a, 0x99, 0x89, 0xb0, 0xf6, 0x6e, 0x26, 0xc2, 0xd9, + 0x52, 0x13, 0xe1, 0x74, 0x4b, 0xd2, 0xdc, 0x2f, 0x6b, 0x49, 0x9a, 0x7f, 0xab, 0x25, 0xa9, 0xfb, + 0x7f, 0x1c, 0x60, 0x45, 0xea, 0x65, 0x8f, 0x85, 0x69, 0x23, 0xe4, 0x43, 0x29, 0xc4, 0xbe, 0xf9, + 0x6e, 0x1c, 0xa0, 0x56, 0x4b, 0x7d, 0x8d, 0xac, 0x68, 0x06, 0x37, 0x99, 0x2a, 0xd6, 0x82, 0x57, + 0x96, 0x95, 0x33, 0x93, 0xd6, 0x2e, 0x37, 0x93, 0xce, 0x5e, 0x6e, 0x26, 0x9d, 0xcb, 0x9b, 0x49, + 0xbb, 0x7f, 0xd5, 0x81, 0x95, 0x12, 0x32, 0xfb, 0xf5, 0x0d, 0x1c, 0x09, 0xc3, 0x92, 0x3e, 0x15, + 0x49, 0x18, 0x26, 0xd8, 0xfd, 0x8b, 0xb0, 0x60, 0xb1, 0xd6, 0xaf, 0xaf, 0xfd, 0xbc, 0x96, 0x28, + 0x28, 0xdb, 0xc2, 0xba, 0xff, 0xb3, 0x02, 0xac, 0xc8, 0xde, 0xff, 0x5f, 0xfb, 0x50, 0x9c, 0xa7, + 0x6a, 0xc9, 0x3c, 0xfd, 0x3f, 0xdd, 0x79, 0x3e, 0x82, 0x65, 0x19, 0xb1, 0x69, 0x18, 0xb3, 0x04, + 0xc5, 0x14, 0x33, 0x50, 0x4f, 0xb6, 0x6d, 0xd4, 0x75, 0x2b, 0x42, 0xcd, 0xd8, 0x7e, 0x73, 0xa6, + 0x6a, 0xb7, 0x0b, 0x1d, 0x39, 0x43, 0xbb, 0xe7, 0x3c, 0x4c, 0x8f, 0x26, 0xc7, 0x22, 0x64, 0x31, + 0x88, 0x42, 0x52, 0x03, 0xcd, 0x4c, 0xa9, 0x50, 0x7c, 0x0b, 0x5a, 0xe6, 0xf6, 0x21, 0x97, 0x23, + 0x67, 0xcf, 0x44, 0x55, 0xc2, 0x2c, 0xc5, 0x76, 0x60, 0x91, 0x84, 0xe4, 0x40, 0x7f, 0x57, 0xa1, + 0xef, 0xde, 0x62, 0xa3, 0xd9, 0x9b, 0xf1, 0x72, 0xdf, 0xb0, 0xdf, 0x86, 0x45, 0xfb, 0x00, 0x28, + 0xb5, 0x92, 0xb2, 0x13, 0x01, 0x7e, 0x6e, 0x17, 0x66, 0x5b, 0xd0, 0xce, 0x9f, 0x20, 0x65, 0x34, + 0xcf, 0x94, 0x0a, 0x0a, 0xc5, 0xd9, 0xa7, 0xd2, 0x61, 0x39, 0x4b, 0xb6, 0x93, 0x9b, 0xf6, 0x67, + 0xc6, 0x34, 0x6d, 0x88, 0x3f, 0x86, 0x0b, 0xf3, 0x77, 0x01, 0x32, 0x8c, 0xb5, 0xa1, 0xf5, 0xec, + 0x70, 0xf7, 0xa0, 0xb7, 0xbd, 0xb7, 0x75, 0x70, 0xb0, 0xbb, 0xdf, 0x9e, 0x61, 0x0c, 0x16, 0xc9, + 0xd4, 0xb7, 0xa3, 0x31, 0x07, 0x31, 0x69, 0x5c, 0x51, 0x58, 0x85, 0xad, 0x42, 0xfb, 0xc9, 0x41, + 0x0e, 0xad, 0x3e, 0x6c, 0x68, 0xfe, 0x70, 0xd7, 0x60, 0x55, 0x44, 0xe4, 0x3e, 0x14, 0xe4, 0xa1, + 0xb4, 0x93, 0x7f, 0xe8, 0xc0, 0x95, 0x5c, 0x46, 0x16, 0xf2, 0x25, 0x14, 0x10, 0x5b, 0x2b, 0xb1, + 0x41, 0x72, 0x40, 0x28, 0x5d, 0x33, 0x27, 0x41, 0x8a, 0x19, 0x48, 0xf3, 0x86, 0x6e, 0x9a, 0xe3, + 0xa4, 0xb2, 0x2c, 0x77, 0x5d, 0x47, 0xd6, 0xe4, 0x3a, 0x7e, 0x22, 0x22, 0x7d, 0xcd, 0x8c, 0xcc, + 0x01, 0x6c, 0x77, 0x59, 0x25, 0xf1, 0x58, 0x61, 0x29, 0x3b, 0x76, 0x7f, 0x4b, 0xf3, 0xdc, 0x7f, + 0x53, 0x05, 0xf6, 0xdd, 0x09, 0x8f, 0x2f, 0x28, 0xa6, 0x4b, 0x5b, 0x4e, 0xd7, 0xf3, 0x76, 0xc1, + 0xb9, 0xf1, 0xe4, 0xf8, 0x73, 0x7e, 0xa1, 0x82, 0x25, 0x2b, 0xef, 0x14, 0x2c, 0x59, 0x16, 0xac, + 0x58, 0xbb, 0x3c, 0x58, 0x71, 0xf6, 0xb2, 0x60, 0xc5, 0xaf, 0xc1, 0x42, 0x70, 0x1a, 0x46, 0x28, + 0x0e, 0x50, 0x85, 0x48, 0x3a, 0x73, 0x37, 0xaa, 0x78, 0xf4, 0x96, 0xe0, 0x01, 0x62, 0xec, 0x41, + 0x56, 0x88, 0x0f, 0x4e, 0x29, 0xb8, 0xd6, 0x14, 0x10, 0xbb, 0x83, 0x53, 0xbe, 0x1f, 0xf5, 0xfd, + 0x34, 0x8a, 0xe9, 0x9c, 0xa6, 0x3e, 0x46, 0x3c, 0x61, 0x37, 0x61, 0x31, 0x89, 0x26, 0xa8, 0x54, + 0xa9, 0x69, 0x10, 0x86, 0xa6, 0x96, 0x40, 0x0f, 0xc5, 0x64, 0x6c, 0xc0, 0xca, 0x24, 0xe1, 0xbd, + 0x51, 0x90, 0x24, 0xb8, 0x71, 0xf6, 0xa3, 0x30, 0x8d, 0xa3, 0xa1, 0x34, 0x37, 0x2d, 0x4f, 0x12, + 0xfe, 0x54, 0xe4, 0x6c, 0x8b, 0x0c, 0xf6, 0xad, 0xac, 0x4b, 0x63, 0x3f, 0x88, 0x93, 0x0e, 0x50, + 0x97, 0xd4, 0x48, 0xb1, 0xdf, 0x87, 0x7e, 0x10, 0xeb, 0xbe, 0x60, 0x22, 0xc9, 0x05, 0x51, 0x36, + 0x73, 0x41, 0x94, 0x32, 0xfe, 0x6e, 0x03, 0xea, 0xea, 0x73, 0x3c, 0x03, 0x9f, 0xc4, 0xd1, 0x48, + 0x9d, 0x81, 0xf1, 0x37, 0x5b, 0x84, 0x4a, 0x1a, 0xc9, 0xf3, 0x6b, 0x25, 0x8d, 0xdc, 0xdf, 0x83, + 0xa6, 0x31, 0x03, 0xec, 0x43, 0x71, 0x1c, 0x47, 0x5d, 0x4b, 0x1e, 0x9e, 0x85, 0x17, 0xa5, 0x21, + 0xd1, 0x27, 0x03, 0xf6, 0x0d, 0x58, 0x1e, 0x04, 0x31, 0xa7, 0x38, 0xdf, 0x5e, 0xcc, 0xcf, 0x79, + 0x9c, 0x28, 0x53, 0x43, 0x5b, 0x67, 0x78, 0x02, 0x77, 0x7b, 0xb0, 0x62, 0x51, 0x95, 0x66, 0xba, + 0x39, 0x0a, 0x1a, 0x54, 0xd6, 0x4e, 0x3b, 0xa0, 0x50, 0xe6, 0xe1, 0x76, 0x25, 0xad, 0x24, 0xbd, + 0x71, 0x1c, 0x1d, 0x53, 0x23, 0x8e, 0x67, 0x61, 0xee, 0x2f, 0x2a, 0x50, 0xdd, 0x8b, 0xc6, 0xa6, + 0xef, 0xc7, 0x29, 0xfa, 0x7e, 0xa4, 0x5e, 0xd9, 0xd3, 0x6a, 0xa3, 0xdc, 0xfc, 0x2d, 0x90, 0xdd, + 0x85, 0x45, 0xa4, 0xe0, 0x34, 0x42, 0x3d, 0xfa, 0xb5, 0x1f, 0x8b, 0x08, 0xc3, 0x2a, 0x91, 0x45, + 0x2e, 0x87, 0xad, 0x42, 0x55, 0xab, 0x43, 0x54, 0x00, 0x93, 0x78, 0x88, 0x23, 0xff, 0xfa, 0x85, + 0x34, 0x69, 0xca, 0x14, 0x0a, 0x04, 0xfb, 0x7b, 0xc1, 0x26, 0x62, 0x53, 0x2b, 0xcb, 0x42, 0x1d, + 0x17, 0x19, 0x61, 0x94, 0xa9, 0x8c, 0x3a, 0x6d, 0x1a, 0xeb, 0xeb, 0xb6, 0xb1, 0xfe, 0x06, 0x34, + 0xd3, 0xe1, 0x79, 0x6f, 0xec, 0x5f, 0x0c, 0x23, 0x7f, 0x20, 0x09, 0xd0, 0x84, 0xd8, 0x7d, 0x80, + 0xd1, 0x78, 0xdc, 0xc3, 0x7d, 0x34, 0x1e, 0xd0, 0xc9, 0xbc, 0xb9, 0xd9, 0x96, 0xb3, 0xff, 0xf4, + 0xf0, 0xd0, 0x23, 0xdc, 0x33, 0xca, 0xb8, 0x2f, 0xa1, 0xa1, 0x33, 0xcc, 0xd0, 0x54, 0x8a, 0xb0, + 0x68, 0xda, 0xa1, 0xa9, 0x14, 0x50, 0x71, 0x0b, 0x16, 0x85, 0xf0, 0xd4, 0xe2, 0x40, 0x78, 0xc5, + 0x73, 0xa8, 0xfb, 0xa7, 0x0e, 0xcc, 0xd2, 0x82, 0xa3, 0x36, 0x21, 0xf2, 0xb4, 0xaf, 0x8a, 0x16, + 0x71, 0xc1, 0xcb, 0xc3, 0xcc, 0xb5, 0xc2, 0xe4, 0x2b, 0x7a, 0xf6, 0xcd, 0x50, 0xf9, 0x1b, 0xd0, + 0xd0, 0x2d, 0x19, 0x2b, 0x98, 0x81, 0xec, 0x3a, 0xd4, 0xce, 0xa2, 0xb1, 0x3a, 0x70, 0x81, 0x72, + 0x67, 0x47, 0x63, 0x8f, 0xf0, 0xac, 0x3f, 0x58, 0x9f, 0x18, 0x82, 0x50, 0x6a, 0xf3, 0x70, 0xc9, + 0x58, 0xe7, 0x4a, 0xc7, 0xfa, 0x02, 0x96, 0x90, 0x2d, 0x0d, 0xdb, 0xfd, 0x74, 0xd1, 0xfa, 0x75, + 0xdc, 0xa9, 0xfb, 0xc3, 0xc9, 0x80, 0x9b, 0xc7, 0x5e, 0xb2, 0xcd, 0x4a, 0x5c, 0x29, 0x7c, 0xee, + 0x3f, 0x73, 0x04, 0xbb, 0x63, 0xbd, 0xec, 0x0e, 0xd4, 0x50, 0x0a, 0xe6, 0xac, 0x1c, 0x3a, 0xea, + 0x05, 0xcb, 0x79, 0x54, 0x02, 0x57, 0x91, 0xac, 0xa7, 0x66, 0xed, 0xc2, 0x76, 0x9a, 0x9d, 0x19, + 0xf5, 0xc8, 0x72, 0x47, 0xad, 0x1c, 0xca, 0x36, 0x0c, 0xd7, 0x53, 0xcd, 0x92, 0xac, 0x4a, 0x31, + 0x18, 0x9c, 0x72, 0xc3, 0xe5, 0xf4, 0x47, 0x0e, 0x2c, 0x58, 0x7d, 0x42, 0xa2, 0xa5, 0x20, 0x72, + 0x61, 0x34, 0x91, 0x2b, 0x6f, 0x42, 0x26, 0xc1, 0x57, 0x6c, 0x82, 0xd7, 0x2e, 0x8c, 0xaa, 0xe9, + 0xc2, 0xb8, 0x0f, 0x8d, 0xec, 0x9e, 0x84, 0xdd, 0x29, 0x6c, 0x51, 0xc5, 0xff, 0x64, 0x85, 0x32, + 0x23, 0xf9, 0xac, 0x61, 0x24, 0x77, 0x1f, 0x40, 0xd3, 0x28, 0x6f, 0x1a, 0xb9, 0x1d, 0xcb, 0xc8, + 0xad, 0x83, 0xe3, 0x2a, 0x59, 0x70, 0x9c, 0xfb, 0xb3, 0x0a, 0x2c, 0x20, 0x79, 0x07, 0xe1, 0xe9, + 0x61, 0x34, 0x0c, 0xfa, 0x17, 0x44, 0x56, 0x8a, 0x92, 0xe5, 0x2e, 0xa8, 0xc8, 0xdc, 0x86, 0x91, + 0xfb, 0x75, 0x44, 0xb0, 0x10, 0x55, 0x3a, 0x8d, 0xb2, 0x0c, 0x25, 0xc1, 0xb1, 0x9f, 0x70, 0xe3, + 0xe2, 0x84, 0x67, 0x83, 0x28, 0x71, 0x10, 0xa0, 0x50, 0xc7, 0x51, 0x30, 0x1c, 0x06, 0xa2, 0xac, + 0x38, 0xbe, 0x95, 0x65, 0x61, 0x9b, 0x83, 0x20, 0xf1, 0x8f, 0x33, 0xf7, 0xa4, 0x4e, 0x93, 0xed, + 0xcf, 0x7f, 0x63, 0xd8, 0xfe, 0x44, 0x6c, 0xb4, 0x0d, 0xe6, 0x17, 0x72, 0xbe, 0xb0, 0x90, 0xee, + 0xbf, 0xae, 0x40, 0xd3, 0x20, 0x0b, 0x64, 0xe7, 0xd2, 0xed, 0xc6, 0x40, 0xa5, 0xdf, 0x3e, 0xb4, + 0x0c, 0x02, 0x06, 0xc2, 0x6e, 0xda, 0xad, 0x92, 0x1f, 0x80, 0x18, 0xde, 0x22, 0xa1, 0x6b, 0xd0, + 0x40, 0xd2, 0xff, 0x98, 0xac, 0x0f, 0xf2, 0x92, 0x92, 0x06, 0x54, 0xee, 0x26, 0xe5, 0xce, 0x66, + 0xb9, 0x04, 0xbc, 0xd5, 0x93, 0xff, 0x29, 0xb4, 0x64, 0x35, 0xb4, 0xc6, 0x34, 0xe8, 0x8c, 0xf9, + 0xac, 0xf5, 0xf7, 0xac, 0x92, 0xea, 0xcb, 0x4d, 0xf5, 0x65, 0xfd, 0xb2, 0x2f, 0x55, 0x49, 0xf7, + 0xb1, 0x0e, 0x92, 0x78, 0x1c, 0xfb, 0xe3, 0x33, 0x25, 0x50, 0xee, 0xc3, 0x8a, 0x92, 0x1b, 0x93, + 0xd0, 0x0f, 0xc3, 0x68, 0x12, 0xf6, 0xb9, 0x8a, 0xa3, 0x2b, 0xcb, 0x72, 0x07, 0x3a, 0xea, 0x9a, + 0x2a, 0x62, 0x77, 0x61, 0x56, 0xe8, 0x51, 0x62, 0x57, 0x2e, 0x17, 0x21, 0xa2, 0x08, 0xbb, 0x03, + 0xb3, 0x42, 0x9d, 0xaa, 0x4c, 0x65, 0x7a, 0x51, 0xc0, 0xdd, 0x80, 0x25, 0x0a, 0xf3, 0x36, 0x64, + 0xdf, 0x7b, 0x65, 0xbb, 0xf5, 0x5c, 0x5f, 0x04, 0x83, 0xaf, 0x02, 0x3b, 0x10, 0x7c, 0x65, 0xba, + 0x3a, 0xff, 0xb4, 0x0a, 0x4d, 0x03, 0x46, 0xf9, 0x44, 0xfe, 0xa9, 0xde, 0x20, 0xf0, 0x47, 0x3c, + 0xe5, 0xb1, 0xe4, 0xa5, 0x1c, 0x8a, 0xe5, 0xfc, 0xf3, 0xd3, 0x5e, 0x34, 0x49, 0x7b, 0x03, 0x7e, + 0x1a, 0x73, 0x2e, 0xd5, 0x88, 0x1c, 0x8a, 0xe5, 0x90, 0x9a, 0x8d, 0x72, 0xc2, 0xa3, 0x94, 0x43, + 0x95, 0xe3, 0x52, 0xcc, 0x53, 0x2d, 0x73, 0x5c, 0x8a, 0x59, 0xc9, 0x4b, 0xd6, 0xd9, 0x12, 0xc9, + 0xfa, 0x09, 0xac, 0x09, 0x19, 0x2a, 0xa5, 0x47, 0x2f, 0x47, 0x5c, 0x53, 0x72, 0xd9, 0x5d, 0x68, + 0x63, 0x9f, 0x15, 0x6b, 0x24, 0xc1, 0x4f, 0x05, 0x8f, 0x39, 0x5e, 0x01, 0xc7, 0xb2, 0x64, 0x49, + 0x37, 0xcb, 0x8a, 0xe8, 0x91, 0x02, 0x4e, 0x65, 0xfd, 0x37, 0x76, 0xd9, 0x86, 0x2c, 0x9b, 0xc3, + 0xd9, 0xa7, 0xb0, 0x3e, 0xe2, 0x83, 0xc0, 0xb7, 0xab, 0xe8, 0x65, 0x9b, 0xfc, 0xb4, 0x6c, 0x6c, + 0x05, 0x67, 0xe1, 0xa7, 0xd1, 0xe8, 0x38, 0x10, 0x1b, 0x9b, 0xb0, 0xf9, 0xd7, 0xbc, 0x02, 0xee, + 0x2e, 0x40, 0xf3, 0x28, 0x8d, 0xc6, 0x6a, 0xe9, 0x17, 0xa1, 0x25, 0x92, 0x32, 0x72, 0xf2, 0x3d, + 0xb8, 0x4a, 0xf4, 0xfa, 0x3c, 0x1a, 0x47, 0xc3, 0xe8, 0xf4, 0xc2, 0x3a, 0xb9, 0xff, 0x7b, 0x07, + 0x56, 0xac, 0xdc, 0xec, 0xe8, 0x4e, 0x66, 0x46, 0x15, 0xee, 0x26, 0x48, 0x7c, 0xd9, 0xd8, 0x16, + 0x44, 0x41, 0xe1, 0xd5, 0x79, 0x21, 0x23, 0xe0, 0xb6, 0xb2, 0x3b, 0x1c, 0xea, 0x43, 0x41, 0xef, + 0x9d, 0x22, 0xbd, 0xcb, 0xef, 0xd5, 0xed, 0x0e, 0x55, 0xc5, 0x6f, 0xcb, 0x58, 0x9f, 0x81, 0x1c, + 0x74, 0xd5, 0x8e, 0xcf, 0x30, 0x2d, 0x3d, 0xaa, 0x07, 0x7d, 0x0d, 0x26, 0xee, 0xcf, 0x1d, 0x80, + 0xac, 0x77, 0x14, 0x21, 0xa2, 0xb7, 0x36, 0x71, 0x2f, 0xd9, 0xd8, 0xc6, 0x3e, 0x84, 0x96, 0x76, + 0xf2, 0x67, 0xbb, 0x65, 0x53, 0x61, 0xa8, 0x5d, 0xdc, 0x86, 0xa5, 0xd3, 0x61, 0x74, 0x4c, 0x5a, + 0x0c, 0x85, 0xe2, 0x26, 0x32, 0x7e, 0x74, 0x51, 0xc0, 0x8f, 0x24, 0x9a, 0x6d, 0xad, 0x35, 0x73, + 0x6b, 0x2d, 0xdf, 0x28, 0x7f, 0x56, 0xd1, 0x9e, 0xd6, 0x6c, 0x26, 0xde, 0xca, 0xe5, 0x6c, 0xb3, + 0x20, 0xd6, 0xa7, 0x38, 0x37, 0xe9, 0xe8, 0x71, 0x78, 0xa9, 0xe1, 0xf7, 0x01, 0x2c, 0xc6, 0x42, + 0x66, 0x2a, 0x81, 0x5a, 0x7b, 0x8b, 0x40, 0x5d, 0x88, 0xad, 0x9d, 0xf9, 0xeb, 0xd0, 0xf6, 0x07, + 0xe7, 0x3c, 0x4e, 0x03, 0x32, 0x84, 0x91, 0x1a, 0x25, 0x06, 0xb8, 0x64, 0xe0, 0xa4, 0xad, 0xdc, + 0x86, 0x25, 0x19, 0xcd, 0xab, 0x4b, 0xca, 0x1b, 0x7a, 0x19, 0x8c, 0x05, 0xdd, 0x7f, 0xac, 0x1c, + 0xbb, 0xf6, 0xea, 0xbe, 0x7d, 0x56, 0xcc, 0x11, 0x56, 0x72, 0x23, 0xfc, 0x9a, 0x74, 0xb4, 0x0e, + 0x94, 0xc5, 0xad, 0x6a, 0x44, 0x8d, 0x0d, 0xa4, 0x63, 0xdc, 0x9e, 0xd6, 0xda, 0xbb, 0x4c, 0xab, + 0xfb, 0x9f, 0x1c, 0x98, 0xdf, 0x8b, 0xc6, 0x7b, 0x38, 0xc5, 0xa8, 0xe3, 0x20, 0x9b, 0xe8, 0x50, + 0x7a, 0x95, 0xbc, 0x24, 0xba, 0xae, 0x54, 0x2b, 0x59, 0xc8, 0x6b, 0x25, 0x7f, 0x1e, 0xde, 0x23, + 0x9b, 0x6f, 0x1c, 0x8d, 0xa3, 0x18, 0xd9, 0xd5, 0x1f, 0x0a, 0x15, 0x24, 0x0a, 0xd3, 0x33, 0x25, + 0x4e, 0xdf, 0x56, 0x84, 0x0c, 0x31, 0x78, 0x08, 0x16, 0x07, 0x2b, 0xa9, 0x45, 0x09, 0x29, 0x5b, + 0xcc, 0x70, 0x7f, 0x0b, 0x1a, 0x74, 0xc2, 0xa0, 0xa1, 0x7d, 0x04, 0x8d, 0xb3, 0x68, 0xdc, 0x3b, + 0x0b, 0xc2, 0x54, 0xb1, 0xff, 0x62, 0xa6, 0xfa, 0xef, 0xd1, 0xa4, 0xe8, 0x02, 0xee, 0x2f, 0xe6, + 0x60, 0xfe, 0x49, 0x78, 0x1e, 0x05, 0x7d, 0x72, 0x26, 0x8f, 0xf8, 0x28, 0x52, 0x97, 0x0b, 0xf0, + 0x37, 0x4e, 0x07, 0x45, 0xd2, 0x8e, 0x05, 0xf1, 0xb6, 0x44, 0xd0, 0x88, 0x84, 0xe8, 0x1a, 0x6e, + 0x76, 0x39, 0x50, 0x30, 0x98, 0x81, 0xe0, 0x41, 0x31, 0x36, 0x2f, 0xf7, 0xc9, 0x54, 0x76, 0x79, + 0x63, 0xd6, 0xb8, 0xbc, 0x81, 0xb5, 0x89, 0x4b, 0x67, 0x34, 0xb3, 0x22, 0x64, 0xd4, 0x40, 0xb0, + 0x2f, 0x32, 0x26, 0x50, 0x04, 0x8d, 0x89, 0xbe, 0x48, 0x88, 0x0e, 0xbf, 0x31, 0x17, 0x36, 0x7d, + 0xad, 0x98, 0xe1, 0xe1, 0xd7, 0x04, 0x51, 0x79, 0x13, 0x1f, 0x88, 0x32, 0x62, 0xb3, 0x30, 0x21, + 0x54, 0x5f, 0xf3, 0x77, 0x53, 0xc5, 0xfd, 0xe2, 0x3c, 0x8c, 0xb2, 0x7e, 0xc0, 0xb5, 0x48, 0x16, + 0xe3, 0x04, 0x71, 0x41, 0x32, 0x8f, 0x1b, 0x47, 0x66, 0x11, 0x14, 0xad, 0x8e, 0xcc, 0x48, 0x50, + 0xfe, 0x70, 0x78, 0xec, 0xf7, 0x5f, 0x89, 0xa3, 0x66, 0x4b, 0xb8, 0x82, 0x2c, 0x90, 0x22, 0xfb, + 0xb2, 0x55, 0xa7, 0xf0, 0x9b, 0x9a, 0x67, 0x42, 0x6c, 0x13, 0x9a, 0x64, 0x4e, 0x90, 0xeb, 0xbe, + 0x48, 0xeb, 0xde, 0x36, 0xed, 0x0d, 0xb4, 0xf2, 0x66, 0x21, 0xd3, 0x09, 0xbe, 0x54, 0x08, 0x53, + 0xf6, 0x07, 0x03, 0x19, 0x3f, 0xd0, 0x16, 0x17, 0x04, 0x35, 0x40, 0x06, 0x0b, 0x31, 0x61, 0xa2, + 0xc0, 0x32, 0x15, 0xb0, 0x30, 0x76, 0x5d, 0x98, 0xc9, 0xc6, 0x7e, 0x30, 0xa0, 0x88, 0x1b, 0x71, + 0x38, 0xd5, 0x18, 0xd6, 0xa1, 0x7e, 0xd3, 0xb6, 0xba, 0x42, 0xb3, 0x62, 0x61, 0x38, 0x37, 0x3a, + 0x3d, 0xca, 0xe2, 0x9a, 0x6d, 0x90, 0x7d, 0x4c, 0x1e, 0xdc, 0x94, 0x53, 0xf0, 0xf2, 0xe2, 0xe6, + 0x7b, 0x72, 0xcc, 0x92, 0xa8, 0xd5, 0xdf, 0x23, 0x2c, 0xe2, 0x89, 0x92, 0xa8, 0xd4, 0x09, 0x23, + 0xfa, 0x9a, 0xa5, 0xd4, 0xc9, 0xa2, 0x64, 0x44, 0x17, 0x05, 0xdc, 0x2d, 0x68, 0x99, 0x15, 0xb0, + 0x3a, 0xd4, 0x9e, 0x1d, 0xee, 0x1e, 0xb4, 0x67, 0x58, 0x13, 0xe6, 0x8f, 0x76, 0x9f, 0x3f, 0xdf, + 0xdf, 0xdd, 0x69, 0x3b, 0xac, 0x05, 0x75, 0x1d, 0xb0, 0x59, 0xc1, 0xd4, 0xd6, 0xf6, 0xf6, 0xee, + 0xe1, 0xf3, 0xdd, 0x9d, 0x76, 0xd5, 0xfd, 0xc3, 0x0a, 0x34, 0x8d, 0x9a, 0x2f, 0x31, 0xe1, 0x5c, + 0x07, 0xa0, 0x93, 0x46, 0x16, 0xba, 0x51, 0xf3, 0x0c, 0x04, 0x25, 0xa7, 0x3e, 0x83, 0x57, 0xc5, + 0x3d, 0x49, 0x95, 0xa6, 0xf9, 0xa2, 0x0b, 0x89, 0xa6, 0xaf, 0x62, 0xd6, 0xb3, 0x41, 0xa4, 0x25, + 0x09, 0x50, 0xfc, 0xa0, 0xe0, 0x40, 0x13, 0xc2, 0xb5, 0x89, 0x79, 0x12, 0x0d, 0xcf, 0xb9, 0x28, + 0x22, 0xf4, 0x35, 0x0b, 0xc3, 0xb6, 0xa4, 0x08, 0x32, 0x62, 0x7b, 0x67, 0x3d, 0x1b, 0x64, 0xdf, + 0x54, 0x6b, 0x53, 0xa7, 0xb5, 0x59, 0x2f, 0x4e, 0xb4, 0xb9, 0x2e, 0x6e, 0x0a, 0x6c, 0x6b, 0x30, + 0x90, 0xb9, 0xe6, 0xad, 0xcb, 0xd8, 0xbc, 0xe6, 0xab, 0x84, 0x48, 0x09, 0xa3, 0x56, 0xca, 0x19, + 0xf5, 0xad, 0xe4, 0xec, 0x3e, 0x81, 0xe6, 0xa1, 0x71, 0x71, 0xd8, 0x45, 0x99, 0xa6, 0xae, 0x0c, + 0x0b, 0x59, 0x28, 0x6c, 0x2f, 0x19, 0x6a, 0x74, 0xa9, 0x62, 0x76, 0xc9, 0xfd, 0x47, 0x8e, 0xb8, + 0x8b, 0xa5, 0x87, 0x20, 0xda, 0x77, 0xa1, 0xa5, 0xad, 0xd1, 0x59, 0xf8, 0xba, 0x85, 0x61, 0x19, + 0xea, 0x4e, 0x2f, 0x3a, 0x39, 0x49, 0xb8, 0x0a, 0x34, 0xb5, 0x30, 0xa5, 0x5c, 0xa2, 0xba, 0x1a, + 0x88, 0x16, 0x12, 0x19, 0x70, 0x5a, 0xc0, 0x91, 0x50, 0xa4, 0xd5, 0x52, 0x85, 0xd8, 0xea, 0xb4, + 0x8e, 0xb2, 0xcf, 0xcf, 0xf4, 0x5d, 0xa8, 0xeb, 0x7a, 0xed, 0x9d, 0x43, 0x95, 0xd4, 0xf9, 0xb8, + 0x43, 0xd1, 0xc1, 0xd3, 0xea, 0xb4, 0xa0, 0xd7, 0x62, 0x06, 0xdb, 0x00, 0x76, 0x12, 0xc4, 0xf9, + 0xe2, 0x82, 0x80, 0x4b, 0x72, 0xdc, 0x97, 0xb0, 0xa2, 0xf8, 0xce, 0xd0, 0x7a, 0xed, 0x85, 0x74, + 0x2e, 0x93, 0x4b, 0x95, 0xa2, 0x5c, 0x72, 0xff, 0x55, 0x0d, 0xe6, 0xe5, 0x6a, 0x17, 0x2e, 0xa0, + 0x8b, 0x7d, 0xcf, 0xc2, 0x58, 0xc7, 0xba, 0x66, 0x48, 0x84, 0x20, 0x77, 0xab, 0x3b, 0xf9, 0xfd, + 0x26, 0xb3, 0xc1, 0xe5, 0xf6, 0x9c, 0x35, 0xa8, 0x8d, 0xfd, 0xf4, 0x8c, 0x4c, 0x34, 0x82, 0x96, + 0x28, 0xad, 0x8c, 0xab, 0xb3, 0xb6, 0x71, 0xb5, 0xec, 0xda, 0xbd, 0x50, 0xbd, 0x8a, 0xd7, 0xee, + 0xaf, 0x41, 0x43, 0xec, 0x8f, 0x99, 0xfd, 0x34, 0x03, 0x72, 0xfb, 0x69, 0xbd, 0xb0, 0x9f, 0xbe, + 0xfb, 0x4e, 0xf7, 0x2d, 0x98, 0x13, 0x57, 0x4f, 0x64, 0x40, 0xf1, 0x35, 0xe5, 0x76, 0x14, 0xe5, + 0xd4, 0x5f, 0x11, 0x95, 0xe4, 0xc9, 0xb2, 0xe6, 0xe5, 0xd5, 0xa6, 0x7d, 0x79, 0xd5, 0x34, 0xfb, + 0xb6, 0x72, 0x66, 0xdf, 0xbb, 0xd0, 0xd6, 0xd3, 0x47, 0x06, 0xa3, 0x30, 0x91, 0xf1, 0xa6, 0x05, + 0x3c, 0x13, 0xe4, 0x8b, 0x96, 0x20, 0x47, 0xc1, 0xb2, 0x95, 0xa6, 0x7c, 0x34, 0x4e, 0x95, 0x20, + 0x7f, 0x04, 0x0b, 0x56, 0x27, 0x51, 0x7e, 0xcb, 0x30, 0xe7, 0xf6, 0x0c, 0x5b, 0x80, 0xc6, 0x93, + 0x83, 0xde, 0xa3, 0xfd, 0x27, 0x8f, 0xf7, 0x9e, 0xb7, 0x1d, 0x4c, 0x1e, 0xbd, 0xd8, 0xde, 0xde, + 0xdd, 0xdd, 0x21, 0x79, 0x0e, 0x30, 0xf7, 0x68, 0xeb, 0xc9, 0x3e, 0x49, 0xf3, 0xff, 0xed, 0x40, + 0xd3, 0xa8, 0x9e, 0x7d, 0x5b, 0xcf, 0x8c, 0xb8, 0xdf, 0xf8, 0x7e, 0xb1, 0x0b, 0x1b, 0x4a, 0xce, + 0x19, 0x53, 0xa3, 0x5f, 0x1a, 0xa8, 0x4c, 0x7d, 0x69, 0x00, 0x97, 0xc7, 0x17, 0x35, 0xe8, 0x79, + 0x10, 0xa7, 0x81, 0x3c, 0x2c, 0x22, 0x4f, 0x32, 0xe1, 0x8c, 0x25, 0x85, 0x05, 0x2c, 0x0f, 0xbb, + 0x9f, 0x00, 0x64, 0xbd, 0xb1, 0x87, 0x3d, 0x63, 0x0f, 0xdb, 0x31, 0x86, 0x5d, 0x71, 0x77, 0x84, + 0xc0, 0x90, 0x53, 0xa8, 0xfd, 0x66, 0xdf, 0x04, 0xa6, 0x0c, 0x2e, 0x14, 0xe1, 0x35, 0x1e, 0xf2, + 0x54, 0x5d, 0x3c, 0x58, 0x96, 0x39, 0x4f, 0x74, 0x86, 0xba, 0x3b, 0x93, 0xd5, 0x92, 0xc9, 0x1d, + 0x49, 0x71, 0x79, 0xb9, 0x23, 0x8b, 0x7a, 0x3a, 0xdf, 0xed, 0x42, 0x67, 0x87, 0x63, 0x6d, 0x5b, + 0xc3, 0x61, 0xae, 0x3b, 0x78, 0x62, 0x2e, 0xc9, 0x93, 0xc7, 0xe9, 0xef, 0xc2, 0x95, 0x2d, 0x71, + 0xc7, 0xe0, 0xd7, 0x15, 0x82, 0xea, 0x76, 0x60, 0x2d, 0x5f, 0xa5, 0x6c, 0xec, 0x11, 0x2c, 0xef, + 0xf0, 0xe3, 0xc9, 0xe9, 0x3e, 0x3f, 0xcf, 0x1a, 0x62, 0x50, 0x4b, 0xce, 0xa2, 0xd7, 0x72, 0x7e, + 0xe8, 0x37, 0x7b, 0x1f, 0x60, 0x88, 0x65, 0x7a, 0xc9, 0x98, 0xf7, 0xd5, 0xfd, 0x51, 0x42, 0x8e, + 0xc6, 0xbc, 0xef, 0x7e, 0x02, 0xcc, 0xac, 0x47, 0xce, 0x17, 0x2a, 0xb1, 0x93, 0xe3, 0x5e, 0x72, + 0x91, 0xa4, 0x7c, 0xa4, 0x2e, 0xc6, 0x9a, 0x90, 0x7b, 0x1b, 0x5a, 0x87, 0xfe, 0x85, 0xc7, 0x7f, + 0x22, 0x5f, 0xb6, 0x58, 0x87, 0xf9, 0xb1, 0x7f, 0x81, 0xfc, 0xac, 0xad, 0xf0, 0x94, 0xed, 0xfe, + 0xaf, 0x0a, 0xcc, 0x89, 0x92, 0x58, 0xeb, 0x80, 0x27, 0x69, 0x10, 0x12, 0x8f, 0xa9, 0x5a, 0x0d, + 0xa8, 0x20, 0x30, 0x2b, 0x25, 0x02, 0x53, 0x9a, 0x86, 0xd4, 0x3d, 0x3c, 0x49, 0xb2, 0x16, 0x86, + 0x62, 0x2b, 0x8b, 0x25, 0x17, 0x94, 0x9a, 0x01, 0x39, 0xef, 0x52, 0xa6, 0x2a, 0x8b, 0xfe, 0xa9, + 0xbd, 0x40, 0xca, 0x44, 0x13, 0x2a, 0x55, 0xc8, 0xe7, 0x85, 0xe8, 0x2c, 0x28, 0xe4, 0x05, 0xc5, + 0xbb, 0xfe, 0x0e, 0x8a, 0xb7, 0xb0, 0x17, 0xbd, 0x4d, 0xf1, 0x86, 0x77, 0x50, 0xbc, 0x5d, 0x06, + 0x6d, 0xba, 0xe4, 0x8f, 0x47, 0x3f, 0x45, 0xbb, 0x7f, 0xcf, 0x81, 0xb6, 0xa4, 0x22, 0x9d, 0xa7, + 0xfc, 0x94, 0x6f, 0xbb, 0x0d, 0x76, 0x13, 0x16, 0xe8, 0xe0, 0xa9, 0xe5, 0xa9, 0xf4, 0xf9, 0x59, + 0x20, 0x8e, 0x43, 0x45, 0x21, 0x8d, 0x82, 0xa1, 0x5c, 0x14, 0x13, 0x52, 0x22, 0x39, 0xf6, 0x65, + 0x4c, 0xb4, 0xe3, 0xe9, 0xb4, 0xfb, 0x27, 0x0e, 0x2c, 0x1b, 0x1d, 0x96, 0x54, 0xf8, 0x00, 0x5a, + 0xfa, 0x2d, 0x0d, 0xae, 0x35, 0x86, 0x75, 0x9b, 0x6d, 0xb2, 0xcf, 0xac, 0xc2, 0xb4, 0x98, 0xfe, + 0x05, 0x75, 0x30, 0x99, 0x8c, 0xe4, 0x56, 0x6d, 0x42, 0x48, 0x48, 0xaf, 0x39, 0x7f, 0xa5, 0x8b, + 0x08, 0x65, 0xc1, 0xc2, 0xc8, 0x60, 0x8f, 0x07, 0x66, 0x5d, 0xa8, 0x26, 0x0d, 0xf6, 0x26, 0xe8, + 0xfe, 0xe5, 0x0a, 0xac, 0x08, 0x0b, 0x88, 0xb4, 0x3c, 0xe9, 0xeb, 0xcc, 0x73, 0xc2, 0x18, 0x24, + 0x38, 0x72, 0x6f, 0xc6, 0x93, 0x69, 0xf6, 0xed, 0x77, 0xb4, 0xda, 0xe8, 0x40, 0xed, 0x29, 0x6b, + 0x51, 0x2d, 0x5b, 0x8b, 0xb7, 0xcc, 0x74, 0x99, 0xef, 0x64, 0xb6, 0xdc, 0x77, 0xf2, 0x4e, 0xbe, + 0x8a, 0x87, 0xf3, 0x30, 0x9b, 0xf4, 0xa3, 0x31, 0x77, 0xd7, 0x60, 0xd5, 0x9e, 0x02, 0x29, 0xa8, + 0x7e, 0xee, 0x40, 0xe7, 0x91, 0xf0, 0xc8, 0x06, 0xe1, 0xe9, 0x5e, 0x90, 0xa4, 0x51, 0xac, 0xdf, + 0x86, 0xb8, 0x0e, 0x90, 0xa4, 0x7e, 0x2c, 0x4f, 0x0a, 0x42, 0xdf, 0x32, 0x10, 0x1c, 0x09, 0x0f, + 0x07, 0x22, 0x57, 0xac, 0xa0, 0x4e, 0x17, 0xf4, 0x59, 0x69, 0xc5, 0xb1, 0xb4, 0xc2, 0x5b, 0xe2, + 0x7a, 0x03, 0x76, 0x99, 0x9f, 0x93, 0xf4, 0x17, 0xa6, 0x91, 0x1c, 0xea, 0xfe, 0x7e, 0x05, 0x96, + 0xb2, 0x4e, 0x52, 0x08, 0x8e, 0x2d, 0x43, 0xa4, 0x2a, 0x98, 0xc9, 0x10, 0xe9, 0x71, 0xe9, 0x05, + 0xa8, 0x1b, 0x1a, 0x86, 0x1c, 0x03, 0x65, 0x37, 0xa1, 0xa9, 0x52, 0xd1, 0x24, 0x35, 0x2e, 0x69, + 0x9b, 0xb0, 0x08, 0x58, 0x46, 0xed, 0x54, 0x6a, 0xda, 0x32, 0x45, 0x17, 0xc6, 0x46, 0x29, 0x7d, + 0x29, 0x66, 0x5e, 0x25, 0x59, 0x5b, 0xa8, 0x75, 0xe2, 0xbd, 0x1c, 0x52, 0xe9, 0x4c, 0x75, 0xa7, + 0xae, 0x1f, 0xb7, 0xd1, 0x9c, 0x29, 0x6a, 0xcc, 0xa2, 0xcd, 0x6b, 0x9e, 0x09, 0xa9, 0xa3, 0x72, + 0x34, 0x31, 0xdc, 0xcc, 0x35, 0xcf, 0xc2, 0xdc, 0xbf, 0xe9, 0xc0, 0xd5, 0x92, 0x65, 0x94, 0x9c, + 0xba, 0x03, 0xcb, 0x27, 0x3a, 0x53, 0x4d, 0xb5, 0x60, 0xd7, 0x35, 0x15, 0x76, 0x62, 0x4f, 0xaf, + 0x57, 0xfc, 0x40, 0x6b, 0xfc, 0x62, 0xf1, 0xac, 0xcb, 0x05, 0xc5, 0x0c, 0xf7, 0x10, 0xba, 0xbb, + 0x6f, 0x90, 0xf1, 0xb7, 0xcd, 0x27, 0x05, 0x15, 0x65, 0x6d, 0x16, 0x04, 0xdb, 0xe5, 0xf6, 0xbb, + 0x13, 0x58, 0xb0, 0xea, 0x62, 0xbf, 0xf9, 0xae, 0x95, 0x98, 0x3c, 0x7a, 0x43, 0xae, 0xba, 0x78, + 0x13, 0x51, 0x5d, 0x71, 0x30, 0x20, 0xf7, 0x1c, 0x96, 0x9e, 0x4e, 0x86, 0x69, 0x90, 0xbd, 0x8f, + 0xc8, 0xbe, 0x2d, 0x3f, 0xa2, 0x2a, 0xd4, 0xd4, 0x95, 0x36, 0x65, 0x96, 0xc3, 0x19, 0x1b, 0x61, + 0x4d, 0xbd, 0x62, 0x8b, 0xc5, 0x0c, 0xf7, 0x2a, 0xac, 0x67, 0x4d, 0x8a, 0xb9, 0x53, 0x9b, 0xc3, + 0x1f, 0x38, 0x22, 0x4e, 0xcf, 0x7e, 0xae, 0x91, 0x3d, 0x86, 0x95, 0x24, 0x08, 0x4f, 0x87, 0xdc, + 0xac, 0x27, 0x91, 0x33, 0x71, 0xc5, 0xee, 0x9e, 0x7c, 0xd2, 0xd1, 0x2b, 0xfb, 0x02, 0x09, 0xa4, + 0xbc, 0xa3, 0x19, 0x81, 0xe4, 0xa6, 0xa4, 0x6c, 0x00, 0xdf, 0x81, 0x45, 0xbb, 0x31, 0xf6, 0xa9, + 0xbc, 0x99, 0x90, 0xf5, 0xcc, 0x74, 0xb8, 0xd9, 0x94, 0x61, 0x95, 0x74, 0x7f, 0xe6, 0x40, 0xc7, + 0xe3, 0x48, 0xc6, 0xdc, 0x68, 0x54, 0x52, 0xcf, 0x83, 0x42, 0xb5, 0xd3, 0x07, 0xac, 0x6f, 0x3c, + 0xa8, 0xb1, 0x6e, 0x4c, 0x5d, 0x94, 0xbd, 0x99, 0x92, 0x51, 0x3d, 0xac, 0xc3, 0x9c, 0x1c, 0xdf, + 0x3a, 0x5c, 0x91, 0x5d, 0x52, 0xdd, 0xc9, 0x3c, 0x35, 0x56, 0xa3, 0x96, 0xa7, 0xa6, 0x0b, 0x1d, + 0xf1, 0x04, 0x88, 0x39, 0x0e, 0xf9, 0xe1, 0x0e, 0xb0, 0xa7, 0x7e, 0xdf, 0x8f, 0xa3, 0x28, 0x3c, + 0xe4, 0xb1, 0x0c, 0xac, 0x22, 0x05, 0x88, 0x1c, 0x19, 0x4a, 0x57, 0x13, 0x29, 0xf5, 0x6a, 0x45, + 0x14, 0xaa, 0xd7, 0x41, 0x44, 0xca, 0xf5, 0x60, 0xe5, 0xa1, 0xff, 0x8a, 0xab, 0x9a, 0xb2, 0x59, + 0x6a, 0x8e, 0x75, 0xa5, 0x6a, 0xee, 0xd5, 0xa5, 0xa3, 0x62, 0xb3, 0x9e, 0x59, 0xda, 0xdd, 0x84, + 0x55, 0xbb, 0x4e, 0x29, 0x4a, 0xba, 0x50, 0x1f, 0x49, 0x4c, 0xf6, 0x4e, 0xa7, 0xef, 0x7e, 0x09, + 0x4d, 0xe3, 0x59, 0x17, 0xb6, 0x0e, 0x2b, 0x2f, 0x9f, 0x3c, 0x3f, 0xd8, 0x3d, 0x3a, 0xea, 0x1d, + 0xbe, 0x78, 0xf8, 0xf9, 0xee, 0xf7, 0x7b, 0x7b, 0x5b, 0x47, 0x7b, 0xed, 0x19, 0xb6, 0x06, 0xec, + 0x60, 0xf7, 0xe8, 0xf9, 0xee, 0x8e, 0x85, 0x3b, 0xec, 0x3a, 0x74, 0x5f, 0x1c, 0xbc, 0x38, 0xda, + 0xdd, 0xe9, 0x95, 0x7d, 0x57, 0x61, 0xef, 0xc3, 0x55, 0x99, 0x5f, 0xf2, 0x79, 0xf5, 0xee, 0x03, + 0x68, 0xe7, 0x0d, 0x4b, 0x96, 0x29, 0xee, 0x6d, 0x36, 0xbb, 0xcd, 0x9f, 0x55, 0x61, 0x51, 0x44, + 0x4e, 0x8a, 0x07, 0x4f, 0x79, 0xcc, 0x9e, 0xc2, 0xbc, 0x7c, 0x39, 0x97, 0x29, 0xd2, 0xb2, 0xdf, + 0xea, 0xed, 0xae, 0xe5, 0x61, 0xb9, 0xac, 0x2b, 0x7f, 0xe5, 0x3f, 0xfe, 0xf7, 0xbf, 0x5d, 0x59, + 0x60, 0xcd, 0x7b, 0xe7, 0x1f, 0xdf, 0x3b, 0xe5, 0x61, 0x82, 0x75, 0xfc, 0x2e, 0x40, 0xf6, 0x1e, + 0x2c, 0xeb, 0x68, 0xc3, 0x4a, 0xee, 0xb1, 0xdc, 0xee, 0xd5, 0x92, 0x1c, 0x59, 0xef, 0x55, 0xaa, + 0x77, 0xc5, 0x5d, 0xc4, 0x7a, 0x83, 0x30, 0x48, 0xc5, 0xdb, 0xb0, 0x9f, 0x39, 0x77, 0xd9, 0x00, + 0x5a, 0xe6, 0x4b, 0xad, 0x4c, 0x39, 0xde, 0x4a, 0xde, 0x9a, 0xed, 0xbe, 0x57, 0x9a, 0xa7, 0x68, + 0x99, 0xda, 0xb8, 0xe2, 0xb6, 0xb1, 0x8d, 0x09, 0x95, 0xc8, 0x5a, 0x19, 0x0a, 0x0e, 0xcf, 0x1e, + 0x64, 0x65, 0xd7, 0x0c, 0xa6, 0x2b, 0x3c, 0x07, 0xdb, 0x7d, 0x7f, 0x4a, 0xae, 0x6c, 0xeb, 0x7d, + 0x6a, 0x6b, 0xdd, 0x65, 0xd8, 0x56, 0x9f, 0xca, 0xa8, 0xe7, 0x60, 0x3f, 0x73, 0xee, 0x6e, 0xfe, + 0xbb, 0xdb, 0xd0, 0xd0, 0x4e, 0x79, 0xf6, 0x63, 0x58, 0xb0, 0x42, 0x5b, 0x99, 0x1a, 0x46, 0x59, + 0x24, 0x6c, 0xf7, 0x5a, 0x79, 0xa6, 0x6c, 0xf8, 0x3a, 0x35, 0xdc, 0x61, 0x6b, 0xd8, 0xb0, 0x8c, + 0x0d, 0xbd, 0x47, 0x41, 0xda, 0xe2, 0x9e, 0xe7, 0x2b, 0x43, 0x92, 0x89, 0xc6, 0xae, 0xe5, 0x85, + 0x8b, 0xd5, 0xda, 0xfb, 0x53, 0x72, 0x65, 0x73, 0xd7, 0xa8, 0xb9, 0x35, 0xb6, 0x6a, 0x36, 0xa7, + 0x1d, 0xe5, 0x9c, 0x2e, 0x37, 0x9b, 0x6f, 0x95, 0xb2, 0xf7, 0x35, 0x61, 0x95, 0xbd, 0x61, 0xaa, + 0x49, 0xa4, 0xf8, 0x90, 0xa9, 0xdb, 0xa1, 0xa6, 0x18, 0xa3, 0xe5, 0x33, 0x9f, 0x2a, 0x65, 0xc7, + 0xd0, 0x34, 0x5e, 0x18, 0x63, 0x57, 0xa7, 0xbe, 0x86, 0xd6, 0xed, 0x96, 0x65, 0x95, 0x0d, 0xc5, + 0xac, 0xff, 0x1e, 0x2a, 0x3a, 0x3f, 0x84, 0x86, 0x7e, 0xb3, 0x8a, 0xad, 0x1b, 0x6f, 0x88, 0x99, + 0x6f, 0x6c, 0x75, 0x3b, 0xc5, 0x8c, 0x32, 0xe2, 0x33, 0x6b, 0x47, 0xe2, 0x7b, 0x09, 0x4d, 0xe3, + 0x5d, 0x2a, 0x3d, 0x80, 0xe2, 0xdb, 0x57, 0x7a, 0x00, 0x25, 0xcf, 0x58, 0xb9, 0xcb, 0xd4, 0x44, + 0x93, 0x35, 0x88, 0xbe, 0xd3, 0x37, 0x51, 0xc2, 0xf6, 0xe1, 0x8a, 0x94, 0xd8, 0xc7, 0xfc, 0xab, + 0x2c, 0x43, 0xc9, 0xf3, 0xb0, 0xf7, 0x1d, 0xf6, 0x00, 0xea, 0xea, 0xf9, 0x31, 0xb6, 0x56, 0xfe, + 0x8c, 0x5a, 0x77, 0xbd, 0x80, 0x4b, 0xf1, 0xfa, 0x7d, 0x80, 0xec, 0x11, 0x2c, 0x2d, 0x24, 0x0a, + 0x8f, 0x6a, 0x69, 0x0a, 0x28, 0xbe, 0x98, 0xe5, 0xae, 0xd1, 0x00, 0xdb, 0x8c, 0x84, 0x44, 0xc8, + 0x5f, 0xab, 0x77, 0x0c, 0x7e, 0x04, 0x4d, 0xe3, 0x1d, 0x2c, 0x3d, 0x7d, 0xc5, 0x37, 0xb4, 0xf4, + 0xf4, 0x95, 0x3c, 0x9b, 0xe5, 0x76, 0xa9, 0xf6, 0x55, 0x77, 0x09, 0x6b, 0x4f, 0x82, 0xd3, 0x70, + 0x24, 0x0a, 0xe0, 0x02, 0x9d, 0xc1, 0x82, 0xf5, 0xd8, 0x95, 0xe6, 0xd0, 0xb2, 0xa7, 0xb4, 0x34, + 0x87, 0x96, 0xbe, 0x8f, 0xa5, 0xe8, 0xcc, 0x5d, 0xc6, 0x76, 0xce, 0xa9, 0x88, 0xd1, 0xd2, 0x0f, + 0xa0, 0x69, 0x3c, 0x5c, 0xa5, 0xc7, 0x52, 0x7c, 0x23, 0x4b, 0x8f, 0xa5, 0xec, 0x9d, 0xab, 0x55, + 0x6a, 0x63, 0xd1, 0x25, 0x52, 0xa0, 0x1b, 0xf9, 0x58, 0xf7, 0x8f, 0x61, 0xd1, 0x7e, 0xca, 0x4a, + 0xf3, 0x7e, 0xe9, 0xa3, 0x58, 0x9a, 0xf7, 0xa7, 0xbc, 0x7f, 0x25, 0x49, 0xfa, 0xee, 0x8a, 0x6e, + 0xe4, 0xde, 0x17, 0x32, 0xac, 0xef, 0x4b, 0xf6, 0x5d, 0x14, 0x70, 0xf2, 0x89, 0x04, 0xb6, 0x6e, + 0x50, 0xad, 0xf9, 0x90, 0x82, 0xe6, 0x97, 0xc2, 0x6b, 0x0a, 0x36, 0x31, 0x8b, 0x37, 0x05, 0x68, + 0xd7, 0xa2, 0xa7, 0x12, 0x8c, 0x5d, 0xcb, 0x7c, 0x4d, 0xc1, 0xd8, 0xb5, 0xac, 0x17, 0x15, 0xf2, + 0xbb, 0x56, 0x1a, 0x60, 0x1d, 0x21, 0x2c, 0xe5, 0xae, 0xdf, 0x68, 0xae, 0x28, 0xbf, 0x21, 0xd9, + 0xbd, 0xfe, 0xf6, 0x5b, 0x3b, 0xb6, 0x04, 0x51, 0x42, 0xf0, 0x9e, 0xba, 0x8f, 0xfa, 0x7b, 0xd0, + 0x32, 0x9f, 0xd7, 0x61, 0x26, 0x2b, 0xe7, 0x5b, 0x7a, 0xaf, 0x34, 0xcf, 0x5e, 0x5c, 0xd6, 0x32, + 0x9b, 0x61, 0xdf, 0x83, 0x35, 0xcd, 0xea, 0xe6, 0x8d, 0x8e, 0x84, 0x7d, 0x50, 0x72, 0xcf, 0xc3, + 0xd4, 0xe3, 0xba, 0x57, 0xa7, 0x5e, 0x04, 0xb9, 0xef, 0x20, 0xd1, 0xd8, 0x6f, 0x96, 0x64, 0x1b, + 0x46, 0xd9, 0x53, 0x2d, 0xd9, 0x86, 0x51, 0xfa, 0xd0, 0x89, 0x22, 0x1a, 0xb6, 0x62, 0xcd, 0x91, + 0x88, 0x80, 0x60, 0x3f, 0x80, 0x25, 0xe3, 0xce, 0xdc, 0xd1, 0x45, 0xd8, 0xd7, 0x0c, 0x50, 0xbc, + 0xd2, 0xdd, 0x2d, 0x3b, 0xa5, 0xb8, 0xeb, 0x54, 0xff, 0xb2, 0x6b, 0x4d, 0x0e, 0x12, 0xff, 0x36, + 0x34, 0xcd, 0xfb, 0x78, 0x6f, 0xa9, 0x77, 0xdd, 0xc8, 0x32, 0x6f, 0x23, 0xdf, 0x77, 0xd8, 0xa1, + 0x88, 0x84, 0xd3, 0xef, 0xa7, 0x46, 0x71, 0x7e, 0xfb, 0xb4, 0xdf, 0x55, 0xd5, 0x0b, 0x59, 0xf6, + 0xa2, 0xee, 0x1d, 0xe7, 0xbe, 0xc3, 0xfe, 0xbe, 0x03, 0x2d, 0xeb, 0xbe, 0x9c, 0x15, 0x57, 0x94, + 0xeb, 0x59, 0xc7, 0xcc, 0x33, 0xbb, 0xe6, 0x7a, 0x34, 0xec, 0xfd, 0xbb, 0xdf, 0xb1, 0xa6, 0xf5, + 0x0b, 0xcb, 0xa0, 0xb6, 0x91, 0x7f, 0x44, 0xf5, 0xcb, 0x7c, 0x01, 0xf3, 0x22, 0xfd, 0x97, 0xf7, + 0x1d, 0xf6, 0x47, 0x0e, 0x2c, 0xda, 0x66, 0x60, 0x3d, 0xdc, 0x52, 0x83, 0xb3, 0x5e, 0xfc, 0x29, + 0xb6, 0xe3, 0x1f, 0x50, 0x2f, 0x9f, 0xdf, 0xf5, 0xac, 0x5e, 0xca, 0xf7, 0x71, 0x7e, 0xb5, 0xde, + 0xb2, 0xcf, 0xc4, 0x23, 0xe2, 0xca, 0x03, 0xc6, 0x8a, 0xef, 0x4f, 0x6b, 0x82, 0x31, 0x5f, 0x8c, + 0xa6, 0x45, 0xf8, 0x91, 0x78, 0x3c, 0x54, 0xb9, 0x51, 0x90, 0xee, 0xde, 0xf5, 0x7b, 0xf7, 0x26, + 0x8d, 0xe9, 0xba, 0x7b, 0xd5, 0x1a, 0x53, 0x7e, 0x87, 0xdf, 0x12, 0xbd, 0x93, 0x8f, 0x3d, 0x67, + 0x5b, 0x54, 0xe1, 0x01, 0xe8, 0xe9, 0x9d, 0x1c, 0x89, 0x4e, 0xca, 0xe2, 0x16, 0x73, 0xbc, 0x63, + 0x35, 0xee, 0x5d, 0xea, 0xeb, 0x4d, 0xf7, 0x83, 0xa9, 0x7d, 0xbd, 0x47, 0xc6, 0x5c, 0xec, 0xf1, + 0x21, 0x40, 0xe6, 0xb1, 0x66, 0x39, 0x6f, 0xa9, 0x16, 0x19, 0x45, 0xa7, 0xb6, 0xcd, 0x81, 0xca, + 0xa9, 0x8a, 0x35, 0xfe, 0x50, 0x08, 0xc0, 0x27, 0xca, 0xcf, 0x6a, 0xaa, 0x39, 0xb6, 0x5b, 0xd9, + 0x52, 0x73, 0xf2, 0xf5, 0x5b, 0xe2, 0x4f, 0x3b, 0x6d, 0x5f, 0xc0, 0xc2, 0x7e, 0x14, 0xbd, 0x9a, + 0x8c, 0x75, 0xc8, 0x8f, 0xed, 0x67, 0xd9, 0xf3, 0x93, 0xb3, 0x6e, 0x6e, 0x14, 0xee, 0x0d, 0xaa, + 0xaa, 0xcb, 0x3a, 0x46, 0x55, 0xf7, 0xbe, 0xc8, 0xbc, 0xe1, 0x5f, 0x32, 0x1f, 0x96, 0xb5, 0x54, + 0xd5, 0x1d, 0xef, 0xda, 0xd5, 0x58, 0xb2, 0x34, 0xdf, 0x84, 0xa5, 0x8f, 0xab, 0xde, 0xde, 0x4b, + 0x54, 0x9d, 0x24, 0x53, 0x5a, 0x3b, 0xbc, 0x4f, 0x57, 0x7e, 0xc8, 0x59, 0xb1, 0x92, 0x75, 0x5c, + 0x7b, 0x39, 0xba, 0x0b, 0x16, 0x68, 0xef, 0x34, 0x63, 0xff, 0x22, 0xe6, 0x3f, 0xb9, 0xf7, 0x85, + 0x74, 0x83, 0x7c, 0xa9, 0x76, 0x1a, 0xe5, 0x27, 0xb2, 0x76, 0x9a, 0x9c, 0x63, 0xc9, 0xda, 0x69, + 0x0a, 0x8e, 0x25, 0x6b, 0xaa, 0x95, 0x9f, 0x8a, 0x0d, 0x61, 0xb9, 0xe0, 0x8b, 0xd2, 0x9b, 0xcc, + 0x34, 0x0f, 0x56, 0xf7, 0xc6, 0xf4, 0x02, 0x76, 0x6b, 0x77, 0xed, 0xd6, 0x8e, 0x60, 0x61, 0x87, + 0x8b, 0xc9, 0x12, 0x31, 0xce, 0xb9, 0x4b, 0x97, 0x66, 0x04, 0x75, 0x7e, 0x4b, 0xa0, 0x3c, 0x5b, + 0x95, 0xa0, 0xe0, 0x62, 0xf6, 0x43, 0x68, 0x3e, 0xe6, 0xa9, 0x0a, 0x6a, 0xd6, 0xca, 0x6c, 0x2e, + 0xca, 0xb9, 0x5b, 0x12, 0x13, 0x6d, 0xd3, 0x0c, 0xd5, 0x76, 0x8f, 0x0f, 0x4e, 0xb9, 0x10, 0x4e, + 0xbd, 0x60, 0xf0, 0x25, 0xfb, 0x0b, 0x54, 0xb9, 0xbe, 0xd5, 0xb1, 0x66, 0x44, 0xa8, 0x9a, 0x95, + 0x2f, 0xe5, 0xf0, 0xb2, 0x9a, 0xc3, 0x68, 0xc0, 0x0d, 0xa5, 0x2a, 0x84, 0xa6, 0x71, 0x19, 0x4b, + 0x33, 0x50, 0xf1, 0xda, 0x9f, 0x66, 0xa0, 0x92, 0xbb, 0x5b, 0xee, 0x1d, 0x6a, 0xc7, 0x65, 0x37, + 0xb2, 0x76, 0xc4, 0x7d, 0xad, 0xac, 0xa5, 0x7b, 0x5f, 0xf8, 0xa3, 0xf4, 0x4b, 0xf6, 0x92, 0xde, + 0xab, 0x32, 0x83, 0xb6, 0x33, 0xed, 0x3c, 0x1f, 0xdf, 0xad, 0x27, 0xcb, 0xc8, 0xb2, 0x35, 0x76, + 0xd1, 0x14, 0xe9, 0x5e, 0xdf, 0x06, 0x38, 0x4a, 0xa3, 0xf1, 0x8e, 0xcf, 0x47, 0x51, 0x98, 0xc9, + 0xda, 0x2c, 0x64, 0x38, 0x93, 0x5f, 0x46, 0xdc, 0x30, 0x7b, 0x69, 0x1c, 0x67, 0xac, 0xb8, 0x77, + 0x45, 0x5c, 0x53, 0xa3, 0x8a, 0xf5, 0x84, 0x94, 0x44, 0x16, 0xdf, 0x77, 0xd8, 0x16, 0x40, 0xe6, + 0x8c, 0xd4, 0x87, 0x93, 0x82, 0x9f, 0x53, 0x8b, 0xbd, 0x12, 0xcf, 0xe5, 0x21, 0x34, 0x32, 0xef, + 0xd6, 0x7a, 0x76, 0xe5, 0xd1, 0xf2, 0x85, 0xe9, 0x1d, 0xbc, 0xe0, 0x73, 0x72, 0xdb, 0x34, 0x55, + 0xc0, 0xea, 0x38, 0x55, 0xe4, 0x48, 0x0a, 0x60, 0x45, 0x74, 0x50, 0x2b, 0x38, 0x14, 0xea, 0xaa, + 0x46, 0x52, 0xe2, 0xf7, 0xd1, 0xdc, 0x5c, 0xea, 0x10, 0xb1, 0x6c, 0x2c, 0x48, 0xad, 0x22, 0xcc, + 0x16, 0x45, 0xf3, 0x08, 0x96, 0x0b, 0x36, 0x76, 0xcd, 0xd2, 0xd3, 0x9c, 0x28, 0x9a, 0xa5, 0xa7, + 0x9a, 0xe7, 0xdd, 0x2b, 0xd4, 0xe4, 0x92, 0x0b, 0x74, 0xa6, 0x7a, 0x1d, 0xa4, 0xfd, 0x33, 0x6c, + 0xee, 0x0f, 0x1c, 0x58, 0x29, 0x31, 0xa1, 0xb3, 0x0f, 0xd5, 0xf1, 0x7c, 0xaa, 0x79, 0xbd, 0x5b, + 0x6a, 0x61, 0x75, 0x8f, 0xa8, 0x9d, 0xa7, 0xec, 0x73, 0x6b, 0x63, 0x13, 0xc6, 0x4d, 0xc9, 0x99, + 0x6f, 0x55, 0x2a, 0x4a, 0x35, 0x8a, 0x9f, 0xc0, 0xba, 0xe8, 0xc8, 0xd6, 0x70, 0x98, 0xb3, 0xfe, + 0x5e, 0x2f, 0xfc, 0xa3, 0x21, 0xcb, 0xaa, 0xdd, 0x9d, 0xfe, 0x8f, 0x88, 0xa6, 0x28, 0xc0, 0xa2, + 0xab, 0x6c, 0x02, 0xed, 0xbc, 0x45, 0x95, 0x4d, 0xaf, 0xab, 0xfb, 0x81, 0x75, 0xd0, 0x2c, 0xb1, + 0xc2, 0xfe, 0x06, 0x35, 0xf6, 0x81, 0xdb, 0x2d, 0x9b, 0x17, 0x71, 0xf6, 0xc4, 0xf5, 0xf8, 0x4b, + 0xda, 0xfc, 0x9b, 0x1b, 0xa7, 0x6a, 0x60, 0x9a, 0xbd, 0x5a, 0x1f, 0x75, 0xcb, 0xad, 0xc7, 0xb7, + 0xa8, 0xf9, 0x1b, 0xee, 0x7b, 0x65, 0xcd, 0xc7, 0xe2, 0x13, 0x71, 0xe8, 0x5d, 0xcf, 0xf3, 0xb5, + 0xea, 0xc1, 0x8d, 0xb2, 0xf5, 0x9e, 0x7a, 0x7a, 0xc9, 0xcd, 0xf5, 0x0c, 0xe9, 0x76, 0x2d, 0xd3, + 0xdc, 0xab, 0xd9, 0xa7, 0xc4, 0xae, 0xac, 0xd9, 0xa7, 0xcc, 0x3e, 0x6c, 0xeb, 0x35, 0xca, 0x32, + 0xfc, 0x99, 0x73, 0xf7, 0xe1, 0xed, 0x1f, 0xfc, 0xc6, 0x69, 0x90, 0x9e, 0x4d, 0x8e, 0x37, 0xfa, + 0xd1, 0xe8, 0xde, 0x50, 0x99, 0xf5, 0xe4, 0xf5, 0x8f, 0x7b, 0xc3, 0x70, 0x70, 0x8f, 0xaa, 0x3d, + 0x9e, 0xa3, 0xff, 0x8c, 0xf6, 0x9b, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x2a, 0xd4, 0x19, + 0x4b, 0x6d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index 116bef58..1d4db503 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -2478,11 +2478,11 @@ message Payment { /// Deprecated, use value_sat or value_msat. int64 value = 2 [json_name = "value", deprecated = true]; - /// The date of this payment - int64 creation_date = 3 [json_name = "creation_date"]; + /// Deprecated, use creation_time_ns + int64 creation_date = 3 [json_name = "creation_date", deprecated = true]; - /// The path this payment took - repeated string path = 4 [ json_name = "path" ]; + /// The path this payment took. + repeated string path = 4 [json_name = "path", deprecated = true]; /// Deprecated, use fee_sat or fee_msat. int64 fee = 5 [json_name = "fee", deprecated = true]; @@ -2514,6 +2514,35 @@ message Payment { /// The fee paid for this payment in milli-satoshis int64 fee_msat = 12 [json_name = "fee_msat"]; + + /// The time in UNIX nanoseconds at which the payment was created. + int64 creation_time_ns = 13 [json_name = "creation_time_ns"]; + + /// The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. + repeated HTLCAttempt htlcs = 14 [json_name = "htlcs"]; +} + +message HTLCAttempt { + enum HTLCStatus { + IN_FLIGHT = 0; + SUCCEEDED = 1; + FAILED = 2; + } + + /// The status of the HTLC. + HTLCStatus status = 1 [json_name = "status"]; + + /// The route taken by this HTLC. + Route route = 2 [json_name = "route"]; + + /// The time in UNIX nanonseconds at which this HTLC was sent. + int64 attempt_time_ns = 3 [json_name = "attempt_time_ns"]; + + /** + The time in UNIX nanonseconds at which this HTLC was settled or failed. + This value will not be set if the HTLC is still IN_FLIGHT. + */ + int64 resolve_time_ns = 4 [json_name = "resolve_time_ns"]; } message ListPaymentsRequest { diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 95b04dfc..7788d2d0 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -1418,6 +1418,15 @@ ], "default": "OPEN_CHANNEL" }, + "HTLCAttemptHTLCStatus": { + "type": "string", + "enum": [ + "IN_FLIGHT", + "SUCCEEDED", + "FAILED" + ], + "default": "IN_FLIGHT" + }, "InvoiceInvoiceState": { "type": "string", "enum": [ @@ -2511,6 +2520,29 @@ } } }, + "lnrpcHTLCAttempt": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/HTLCAttemptHTLCStatus", + "description": "/ The status of the HTLC." + }, + "route": { + "$ref": "#/definitions/lnrpcRoute", + "description": "/ The route taken by this HTLC." + }, + "attempt_time_ns": { + "type": "string", + "format": "int64", + "description": "/ The time in UNIX nanonseconds at which this HTLC was sent." + }, + "resolve_time_ns": { + "type": "string", + "format": "int64", + "description": "*\nThe time in UNIX nanonseconds at which this HTLC was settled or failed.\nThis value will not be set if the HTLC is still IN_FLIGHT." + } + } + }, "lnrpcHop": { "type": "object", "properties": { @@ -3231,14 +3263,14 @@ "creation_date": { "type": "string", "format": "int64", - "title": "/ The date of this payment" + "title": "/ Deprecated, use creation_time_ns" }, "path": { "type": "array", "items": { "type": "string" }, - "title": "/ The path this payment took" + "description": "/ The path this payment took." }, "fee": { "type": "string", @@ -3276,6 +3308,18 @@ "type": "string", "format": "int64", "title": "/ The fee paid for this payment in milli-satoshis" + }, + "creation_time_ns": { + "type": "string", + "format": "int64", + "description": "/ The time in UNIX nanoseconds at which the payment was created." + }, + "htlcs": { + "type": "array", + "items": { + "$ref": "#/definitions/lnrpcHTLCAttempt" + }, + "description": "/ The HTLCs made in attempt to settle the payment [EXPERIMENTAL]." } } }, From 997500b08d536d970c4a14552ac3b0a87112f47e Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:41:44 -0800 Subject: [PATCH 5/9] lnrpc+rpcserver: populate experimental MPP fields in ListPayment rpc --- lnrpc/routerrpc/router_backend.go | 46 +++++++++++++++++++++++++++++++ rpcserver.go | 13 +++++++++ 2 files changed, 59 insertions(+) diff --git a/lnrpc/routerrpc/router_backend.go b/lnrpc/routerrpc/router_backend.go index 9c55881f..7951391f 100644 --- a/lnrpc/routerrpc/router_backend.go +++ b/lnrpc/routerrpc/router_backend.go @@ -12,6 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcutil" + "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" @@ -779,3 +780,48 @@ func UnmarshalMPP(reqMPP *lnrpc.MPPRecord) (*record.MPP, error) { return record.NewMPP(total, addr), nil } + +// MarshalHTLCAttempt constructs an RPC HTLCAttempt from the db representation. +func (r *RouterBackend) MarshalHTLCAttempt( + htlc channeldb.HTLCAttempt) (*lnrpc.HTLCAttempt, error) { + + var ( + status lnrpc.HTLCAttempt_HTLCStatus + resolveTime int64 + ) + + switch { + case htlc.Settle != nil: + status = lnrpc.HTLCAttempt_SUCCEEDED + resolveTime = MarshalTimeNano(htlc.Settle.SettleTime) + + case htlc.Failure != nil: + status = lnrpc.HTLCAttempt_FAILED + resolveTime = MarshalTimeNano(htlc.Failure.FailTime) + + default: + status = lnrpc.HTLCAttempt_IN_FLIGHT + } + + route, err := r.MarshallRoute(&htlc.Route) + if err != nil { + return nil, err + } + + return &lnrpc.HTLCAttempt{ + Status: status, + Route: route, + AttemptTimeNs: MarshalTimeNano(htlc.AttemptTime), + ResolveTimeNs: resolveTime, + }, nil +} + +// MarshalTimeNano converts a time.Time into its nanosecond representation. If +// the time is zero, this method simply returns 0, since calling UnixNano() on a +// zero-valued time is undefined. +func MarshalTimeNano(t time.Time) int64 { + if t.IsZero() { + return 0 + } + return t.UnixNano() +} diff --git a/rpcserver.go b/rpcserver.go index 6c770b78..32c3d7c0 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -4379,13 +4379,25 @@ func (r *rpcServer) ListPayments(ctx context.Context, return nil, err } + htlcs := make([]*lnrpc.HTLCAttempt, 0, len(payment.HTLCs)) + for _, dbHTLC := range payment.HTLCs { + htlc, err := r.routerBackend.MarshalHTLCAttempt(dbHTLC) + if err != nil { + return nil, err + } + + htlcs = append(htlcs, htlc) + } + paymentHash := payment.Info.PaymentHash + creationTimeNS := routerrpc.MarshalTimeNano(payment.Info.CreationTime) paymentsResp.Payments = append(paymentsResp.Payments, &lnrpc.Payment{ PaymentHash: hex.EncodeToString(paymentHash[:]), Value: satValue, ValueMsat: msatValue, ValueSat: satValue, CreationDate: payment.Info.CreationTime.Unix(), + CreationTimeNs: creationTimeNS, Path: path, Fee: int64(route.TotalFees().ToSatoshis()), FeeSat: int64(route.TotalFees().ToSatoshis()), @@ -4393,6 +4405,7 @@ func (r *rpcServer) ListPayments(ctx context.Context, PaymentPreimage: hex.EncodeToString(preimage[:]), PaymentRequest: string(payment.Info.PaymentRequest), Status: status, + Htlcs: htlcs, }) } From e9eabed99c485fa27e06bb37aa378ef2bdf48905 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:41:58 -0800 Subject: [PATCH 6/9] lntest: assert mpp fields in listpayments --- lntest/itest/lnd_test.go | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index 5817e85d..276c2436 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -4737,6 +4737,50 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest, "want: %d, got: %d", i, paymentAmtSat, p.ValueSat) } + + // Assert exactly one htlc was made. + if len(p.Htlcs) != 1 { + t.Fatalf("expected 1 htlc for payment %d, got: %d", + i, len(p.Htlcs)) + } + + // Assert the htlc's route is populated. + htlc := p.Htlcs[0] + if htlc.Route == nil { + t.Fatalf("expected route for payment %d", i) + } + + // Assert the hop has exactly one hop. + if len(htlc.Route.Hops) != 1 { + t.Fatalf("expected 1 hop for payment %d, got: %d", + i, len(htlc.Route.Hops)) + } + + // If this is an MPP test, assert the MPP record's fields are + // properly populated. Otherwise the hop should not have an MPP + // record. + hop := htlc.Route.Hops[0] + if test.mpp { + if hop.MppRecord == nil { + t.Fatalf("expected mpp record for mpp payment") + } + + if hop.MppRecord.TotalAmtMsat != paymentAmtSat*1000 { + t.Fatalf("incorrect mpp total msat for payment %d "+ + "want: %d, got: %d", + i, paymentAmtSat*1000, + hop.MppRecord.TotalAmtMsat) + } + + expAddr := [32]byte{byte(i)} + if !bytes.Equal(hop.MppRecord.PaymentAddr, expAddr[:]) { + t.Fatalf("incorrect mpp payment addr for payment %d "+ + "want: %x, got: %x", + i, expAddr, hop.MppRecord.PaymentAddr) + } + } else if hop.MppRecord != nil { + t.Fatalf("unexpected mpp record for non-mpp payment") + } } // Verify that the invoices's from Dave's PoV have the correct payment From 01cecb1f27566d7dc1a5d1cdc7ab4631867a6747 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:42:21 -0800 Subject: [PATCH 7/9] multi: rename to FailureReasonPaymentDetails Prior name is too long XD --- channeldb/payments.go | 8 ++++---- lnrpc/routerrpc/router_server.go | 2 +- routing/control_tower.go | 2 +- routing/result_interpretation.go | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/channeldb/payments.go b/channeldb/payments.go index afe5e1dc..c1ff79e9 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -101,9 +101,9 @@ const ( // payment. FailureReasonError FailureReason = 2 - // FailureReasonIncorrectPaymentDetails indicates that either the hash - // is unknown or the final cltv delta or amount is incorrect. - FailureReasonIncorrectPaymentDetails FailureReason = 3 + // FailureReasonPaymentDetails indicates that either the hash is unknown + // or the final cltv delta or amount is incorrect. + FailureReasonPaymentDetails FailureReason = 3 // TODO(halseth): cancel state. @@ -120,7 +120,7 @@ func (r FailureReason) String() string { return "no_route" case FailureReasonError: return "error" - case FailureReasonIncorrectPaymentDetails: + case FailureReasonPaymentDetails: return "incorrect_payment_details" } diff --git a/lnrpc/routerrpc/router_server.go b/lnrpc/routerrpc/router_server.go index ac11dcf3..5cf84dbc 100644 --- a/lnrpc/routerrpc/router_server.go +++ b/lnrpc/routerrpc/router_server.go @@ -645,7 +645,7 @@ func marshallFailureReason(reason channeldb.FailureReason) ( case channeldb.FailureReasonError: return PaymentState_FAILED_ERROR, nil - case channeldb.FailureReasonIncorrectPaymentDetails: + case channeldb.FailureReasonPaymentDetails: return PaymentState_FAILED_INCORRECT_PAYMENT_DETAILS, nil } diff --git a/routing/control_tower.go b/routing/control_tower.go index 812af4e5..ee8d75c8 100644 --- a/routing/control_tower.go +++ b/routing/control_tower.go @@ -142,7 +142,7 @@ func createFailedResult(rt *route.Route, // In case of incorrect payment details, set the route. This can be used // for probing and to extract a fee estimate from the route. - if reason == channeldb.FailureReasonIncorrectPaymentDetails { + if reason == channeldb.FailureReasonPaymentDetails { result.Route = rt } diff --git a/routing/result_interpretation.go b/routing/result_interpretation.go index 8f193048..03457619 100644 --- a/routing/result_interpretation.go +++ b/routing/result_interpretation.go @@ -11,7 +11,7 @@ import ( // Instantiate variables to allow taking a reference from the failure reason. var ( reasonError = channeldb.FailureReasonError - reasonIncorrectDetails = channeldb.FailureReasonIncorrectPaymentDetails + reasonIncorrectDetails = channeldb.FailureReasonPaymentDetails ) // pairResult contains the result of the interpretation of a payment attempt for From 68916eb4b7b617a2f6e07b1aa5eaf5b3f5650a11 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 19 Nov 2019 20:42:38 -0800 Subject: [PATCH 8/9] routerrpc: add HTLCAttempts to PaymentStatus --- lnrpc/routerrpc/router.pb.go | 261 ++++++++++++++++++----------------- lnrpc/routerrpc/router.proto | 5 + 2 files changed, 141 insertions(+), 125 deletions(-) diff --git a/lnrpc/routerrpc/router.pb.go b/lnrpc/routerrpc/router.pb.go index 82825712..e8216f17 100644 --- a/lnrpc/routerrpc/router.pb.go +++ b/lnrpc/routerrpc/router.pb.go @@ -422,10 +422,13 @@ type PaymentStatus struct { Preimage []byte `protobuf:"bytes,2,opt,name=preimage,proto3" json:"preimage,omitempty"` //* //The taken route when state is SUCCEEDED. - Route *lnrpc.Route `protobuf:"bytes,3,opt,name=route,proto3" json:"route,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Route *lnrpc.Route `protobuf:"bytes,3,opt,name=route,proto3" json:"route,omitempty"` + //* + //The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. + Htlcs []*lnrpc.HTLCAttempt `protobuf:"bytes,4,rep,name=htlcs,proto3" json:"htlcs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PaymentStatus) Reset() { *m = PaymentStatus{} } @@ -474,6 +477,13 @@ func (m *PaymentStatus) GetRoute() *lnrpc.Route { return nil } +func (m *PaymentStatus) GetHtlcs() []*lnrpc.HTLCAttempt { + if m != nil { + return m.Htlcs + } + return nil +} + type RouteFeeRequest struct { //* //The destination once wishes to obtain a routing fee quote to. @@ -1455,131 +1465,132 @@ func init() { func init() { proto.RegisterFile("routerrpc/router.proto", fileDescriptor_7a0613f69d37b0a5) } var fileDescriptor_7a0613f69d37b0a5 = []byte{ - // 1975 bytes of a gzipped FileDescriptorProto + // 1993 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0x4f, 0x73, 0x1a, 0xc9, 0x15, 0xdf, 0x11, 0x20, 0xe0, 0x01, 0xd2, 0xa8, 0xa5, 0x95, 0xc7, 0x48, 0x5a, 0x6b, 0xc7, 0x8e, 0x57, 0xe5, 0xf2, 0x4a, 0x8e, 0x52, 0xbb, 0xe5, 0xda, 0x43, 0x52, 0x18, 0x86, 0xd5, 0xc8, 0x30, 0xc8, 0x0d, 0x78, 0xd7, 0xd9, 0x43, 0x57, 0x0b, 0x5a, 0x62, 0x4a, 0xc3, 0x0c, 0x3b, 0xd3, 0x38, - 0x56, 0x0e, 0xf9, 0x04, 0xc9, 0x35, 0x5f, 0x21, 0x97, 0xe4, 0x94, 0xef, 0x94, 0x54, 0xe5, 0x9e, - 0x7b, 0xaa, 0xbb, 0x67, 0x60, 0x40, 0x48, 0x9b, 0x93, 0xe8, 0xdf, 0x7b, 0xfd, 0x5e, 0xcf, 0xfb, - 0xf3, 0xeb, 0xd7, 0x82, 0xdd, 0x30, 0x98, 0x72, 0x16, 0x86, 0x93, 0xc1, 0x89, 0xfa, 0x75, 0x3c, - 0x09, 0x03, 0x1e, 0xa0, 0xe2, 0x0c, 0xaf, 0x16, 0xc3, 0xc9, 0x40, 0xa1, 0xe6, 0x7f, 0xb2, 0x80, - 0xba, 0xcc, 0x1f, 0x5e, 0xd0, 0xdb, 0x31, 0xf3, 0x39, 0x66, 0x3f, 0x4f, 0x59, 0xc4, 0x11, 0x82, - 0xec, 0x90, 0x45, 0xdc, 0xd0, 0x0e, 0xb5, 0xa3, 0x32, 0x96, 0xbf, 0x91, 0x0e, 0x19, 0x3a, 0xe6, - 0xc6, 0xda, 0xa1, 0x76, 0x94, 0xc1, 0xe2, 0x27, 0x7a, 0x0c, 0x05, 0x3a, 0xe6, 0x64, 0x1c, 0x51, - 0x6e, 0x94, 0x25, 0x9c, 0xa7, 0x63, 0xde, 0x8e, 0x28, 0x47, 0x5f, 0x42, 0x79, 0xa2, 0x4c, 0x92, - 0x11, 0x8d, 0x46, 0x46, 0x46, 0x1a, 0x2a, 0xc5, 0xd8, 0x19, 0x8d, 0x46, 0xe8, 0x08, 0xf4, 0x2b, - 0xd7, 0xa7, 0x1e, 0x19, 0x78, 0xfc, 0x23, 0x19, 0x32, 0x8f, 0x53, 0x23, 0x7b, 0xa8, 0x1d, 0xe5, - 0xf0, 0x86, 0xc4, 0xeb, 0x1e, 0xff, 0xd8, 0x10, 0x28, 0xfa, 0x0a, 0x36, 0x13, 0x63, 0xa1, 0x3a, - 0xa0, 0x91, 0x3b, 0xd4, 0x8e, 0x8a, 0x78, 0x63, 0xb2, 0x78, 0xec, 0xaf, 0x60, 0x93, 0xbb, 0x63, - 0x16, 0x4c, 0x39, 0x89, 0xd8, 0x20, 0xf0, 0x87, 0x91, 0xb1, 0xae, 0x2c, 0xc6, 0x70, 0x57, 0xa1, - 0xc8, 0x84, 0xca, 0x15, 0x63, 0xc4, 0x73, 0xc7, 0x2e, 0x27, 0xe2, 0xf8, 0x79, 0x79, 0xfc, 0xd2, - 0x15, 0x63, 0x2d, 0x81, 0x75, 0x29, 0x47, 0xcf, 0x60, 0x63, 0xae, 0x23, 0xbf, 0xb1, 0x22, 0x95, - 0xca, 0x89, 0x92, 0xfc, 0xd0, 0x97, 0xa0, 0x07, 0x53, 0x7e, 0x1d, 0xb8, 0xfe, 0x35, 0x19, 0x8c, - 0xa8, 0x4f, 0xdc, 0xa1, 0x51, 0x38, 0xd4, 0x8e, 0xb2, 0x6f, 0xd6, 0x5e, 0x69, 0x78, 0x23, 0x91, - 0xd5, 0x47, 0xd4, 0xb7, 0x87, 0xe8, 0x39, 0x6c, 0x7a, 0x34, 0xe2, 0x64, 0x14, 0x4c, 0xc8, 0x64, - 0x7a, 0x79, 0xc3, 0x6e, 0x8d, 0x0d, 0x19, 0x99, 0x8a, 0x80, 0xcf, 0x82, 0xc9, 0x85, 0x04, 0xd1, - 0x01, 0x80, 0x8c, 0x8a, 0x74, 0x6e, 0x14, 0xe5, 0x37, 0x14, 0x05, 0x22, 0x1d, 0xa3, 0x53, 0x28, - 0xc9, 0x6c, 0x92, 0x91, 0xeb, 0xf3, 0xc8, 0x80, 0xc3, 0xcc, 0x51, 0xe9, 0x54, 0x3f, 0xf6, 0x7c, - 0x91, 0x58, 0x2c, 0x24, 0x67, 0xae, 0xcf, 0x71, 0x5a, 0x09, 0x59, 0x50, 0x10, 0x69, 0x24, 0xdc, - 0xfb, 0x68, 0x94, 0xe4, 0x86, 0x17, 0xc7, 0xb3, 0x92, 0x38, 0xbe, 0x5b, 0x03, 0xc7, 0x0d, 0x16, - 0xf1, 0x9e, 0xf7, 0xd1, 0xf2, 0x79, 0x78, 0x8b, 0xf3, 0x43, 0xb5, 0xaa, 0x7e, 0x07, 0xe5, 0xb4, - 0x40, 0x54, 0x85, 0xf8, 0x0a, 0x51, 0x28, 0x59, 0x2c, 0x7e, 0xa2, 0x1d, 0xc8, 0x7d, 0xa4, 0xde, - 0x94, 0xc9, 0x4a, 0x29, 0x63, 0xb5, 0xf8, 0x6e, 0xed, 0xb5, 0x66, 0xbe, 0x86, 0xed, 0x5e, 0x48, - 0x07, 0x37, 0x4b, 0xc5, 0xb6, 0x5c, 0x2b, 0xda, 0x9d, 0x5a, 0x31, 0xff, 0x04, 0x95, 0x78, 0x53, - 0x97, 0x53, 0x3e, 0x8d, 0xd0, 0xd7, 0x90, 0x8b, 0x38, 0xe5, 0x4c, 0x2a, 0x6f, 0x9c, 0x3e, 0x4a, - 0x7d, 0x4a, 0x4a, 0x91, 0x61, 0xa5, 0x85, 0xaa, 0x50, 0x98, 0x84, 0xcc, 0x1d, 0xd3, 0xeb, 0xe4, - 0x58, 0xb3, 0x35, 0x32, 0x21, 0x27, 0x37, 0xcb, 0x1a, 0x2d, 0x9d, 0x96, 0xd3, 0x61, 0xc4, 0x4a, - 0x64, 0xfe, 0x16, 0x36, 0xe5, 0xba, 0xc9, 0xd8, 0x43, 0x2d, 0xf2, 0x08, 0x44, 0x03, 0xc8, 0x82, - 0x52, 0x6d, 0xb2, 0x4e, 0xc7, 0xa2, 0x96, 0xcc, 0x21, 0xe8, 0xf3, 0xfd, 0xd1, 0x24, 0xf0, 0x23, - 0x26, 0xea, 0x5f, 0x18, 0x17, 0x85, 0x23, 0xea, 0x4c, 0x56, 0x98, 0x26, 0x77, 0x6d, 0xc4, 0x78, - 0x93, 0x31, 0x59, 0x63, 0xcf, 0x55, 0x59, 0x13, 0x2f, 0x18, 0xdc, 0x88, 0x46, 0xa1, 0xb7, 0xb1, - 0xf9, 0x8a, 0x80, 0x5b, 0xc1, 0xe0, 0xa6, 0x21, 0x40, 0xf3, 0x27, 0xd5, 0xcb, 0xbd, 0x40, 0x9d, - 0xfd, 0xff, 0x0e, 0xef, 0x3c, 0x04, 0x6b, 0xf7, 0x87, 0x80, 0xc0, 0xf6, 0x82, 0xf1, 0xf8, 0x2b, - 0xd2, 0x91, 0xd5, 0x96, 0x22, 0xfb, 0x12, 0xf2, 0x57, 0xd4, 0xf5, 0xa6, 0x61, 0x62, 0x18, 0xa5, - 0xd2, 0xd4, 0x54, 0x12, 0x9c, 0xa8, 0x98, 0xff, 0xcd, 0x43, 0x3e, 0x06, 0xd1, 0x29, 0x64, 0x07, - 0xc1, 0x30, 0xc9, 0xee, 0x17, 0x77, 0xb7, 0x25, 0x7f, 0xeb, 0xc1, 0x90, 0x61, 0xa9, 0x8b, 0x7e, - 0x07, 0x1b, 0xa2, 0x01, 0x7d, 0xe6, 0x91, 0xe9, 0x64, 0x48, 0x67, 0x09, 0x35, 0x52, 0xbb, 0xeb, - 0x4a, 0xa1, 0x2f, 0xe5, 0xb8, 0x32, 0x48, 0x2f, 0xd1, 0x1e, 0x14, 0x47, 0xdc, 0x1b, 0xa8, 0x4c, - 0x64, 0x65, 0x41, 0x17, 0x04, 0x20, 0x73, 0x60, 0x42, 0x25, 0xf0, 0xdd, 0xc0, 0x27, 0xd1, 0x88, - 0x92, 0xd3, 0x6f, 0xbe, 0x95, 0x0c, 0x54, 0xc6, 0x25, 0x09, 0x76, 0x47, 0xf4, 0xf4, 0x9b, 0x6f, - 0xd1, 0x13, 0x28, 0xc9, 0xae, 0x65, 0x9f, 0x26, 0x6e, 0x78, 0x2b, 0xa9, 0xa7, 0x82, 0x65, 0x23, - 0x5b, 0x12, 0x11, 0xad, 0x71, 0xe5, 0xd1, 0xeb, 0x48, 0xd2, 0x4d, 0x05, 0xab, 0x05, 0x7a, 0x05, - 0x3b, 0x71, 0x0c, 0x48, 0x14, 0x4c, 0xc3, 0x01, 0x23, 0xae, 0x3f, 0x64, 0x9f, 0x24, 0x8d, 0x54, - 0x30, 0x8a, 0x65, 0x5d, 0x29, 0xb2, 0x85, 0x04, 0xed, 0xc2, 0xfa, 0x88, 0xb9, 0xd7, 0x23, 0x45, - 0x0d, 0x15, 0x1c, 0xaf, 0xcc, 0xbf, 0xe7, 0xa0, 0x94, 0x0a, 0x0c, 0x2a, 0x43, 0x01, 0x5b, 0x5d, - 0x0b, 0xbf, 0xb7, 0x1a, 0xfa, 0x67, 0xe8, 0x08, 0x9e, 0xd9, 0x4e, 0xbd, 0x83, 0xb1, 0x55, 0xef, - 0x91, 0x0e, 0x26, 0x7d, 0xe7, 0xad, 0xd3, 0xf9, 0xc1, 0x21, 0x17, 0xb5, 0x0f, 0x6d, 0xcb, 0xe9, - 0x91, 0x86, 0xd5, 0xab, 0xd9, 0xad, 0xae, 0xae, 0xa1, 0x7d, 0x30, 0xe6, 0x9a, 0x89, 0xb8, 0xd6, - 0xee, 0xf4, 0x9d, 0x9e, 0xbe, 0x86, 0x9e, 0xc0, 0x5e, 0xd3, 0x76, 0x6a, 0x2d, 0x32, 0xd7, 0xa9, - 0xb7, 0x7a, 0xef, 0x89, 0xf5, 0xe3, 0x85, 0x8d, 0x3f, 0xe8, 0x99, 0x55, 0x0a, 0x67, 0xbd, 0x56, - 0x3d, 0xb1, 0x90, 0x45, 0x8f, 0xe1, 0x73, 0xa5, 0xa0, 0xb6, 0x90, 0x5e, 0xa7, 0x43, 0xba, 0x9d, - 0x8e, 0xa3, 0xe7, 0xd0, 0x16, 0x54, 0x6c, 0xe7, 0x7d, 0xad, 0x65, 0x37, 0x08, 0xb6, 0x6a, 0xad, - 0xb6, 0xbe, 0x8e, 0xb6, 0x61, 0x73, 0x59, 0x2f, 0x2f, 0x4c, 0x24, 0x7a, 0x1d, 0xc7, 0xee, 0x38, - 0xe4, 0xbd, 0x85, 0xbb, 0x76, 0xc7, 0xd1, 0x0b, 0x68, 0x17, 0xd0, 0xa2, 0xe8, 0xac, 0x5d, 0xab, - 0xeb, 0x45, 0xf4, 0x39, 0x6c, 0x2d, 0xe2, 0x6f, 0xad, 0x0f, 0x3a, 0x20, 0x03, 0x76, 0xd4, 0xc1, - 0xc8, 0x1b, 0xab, 0xd5, 0xf9, 0x81, 0xb4, 0x6d, 0xc7, 0x6e, 0xf7, 0xdb, 0x7a, 0x09, 0xed, 0x80, - 0xde, 0xb4, 0x2c, 0x62, 0x3b, 0xdd, 0x7e, 0xb3, 0x69, 0xd7, 0x6d, 0xcb, 0xe9, 0xe9, 0x65, 0xe5, - 0x79, 0xd5, 0x87, 0x57, 0xc4, 0x86, 0xfa, 0x59, 0xcd, 0x71, 0xac, 0x16, 0x69, 0xd8, 0xdd, 0xda, - 0x9b, 0x96, 0xd5, 0xd0, 0x37, 0xd0, 0x01, 0x3c, 0xee, 0x59, 0xed, 0x8b, 0x0e, 0xae, 0xe1, 0x0f, - 0x24, 0x91, 0x37, 0x6b, 0x76, 0xab, 0x8f, 0x2d, 0x7d, 0x13, 0x7d, 0x09, 0x07, 0xd8, 0x7a, 0xd7, - 0xb7, 0xb1, 0xd5, 0x20, 0x4e, 0xa7, 0x61, 0x91, 0xa6, 0x55, 0xeb, 0xf5, 0xb1, 0x45, 0xda, 0x76, - 0xb7, 0x6b, 0x3b, 0xdf, 0xeb, 0x3a, 0x7a, 0x06, 0x87, 0x33, 0x95, 0x99, 0x81, 0x25, 0xad, 0x2d, - 0xf1, 0x7d, 0x49, 0x4a, 0x1d, 0xeb, 0xc7, 0x1e, 0xb9, 0xb0, 0x2c, 0xac, 0x23, 0x54, 0x85, 0xdd, - 0xb9, 0x7b, 0xe5, 0x20, 0xf6, 0xbd, 0x2d, 0x64, 0x17, 0x16, 0x6e, 0xd7, 0x1c, 0x91, 0xe0, 0x05, - 0xd9, 0x8e, 0x38, 0xf6, 0x5c, 0xb6, 0x7c, 0xec, 0xcf, 0x11, 0x82, 0x8d, 0x54, 0x56, 0x9a, 0x35, - 0xac, 0xef, 0xa2, 0x1d, 0xd8, 0x4c, 0x4e, 0x90, 0x28, 0xfe, 0x2b, 0x8f, 0x1e, 0x01, 0xea, 0x3b, - 0xd8, 0xaa, 0x35, 0x44, 0x40, 0x66, 0x82, 0x7f, 0xe7, 0xcf, 0xb3, 0x85, 0x35, 0x3d, 0x63, 0xfe, - 0x33, 0x03, 0x95, 0x85, 0xbe, 0x44, 0xfb, 0x50, 0x8c, 0xdc, 0x6b, 0x9f, 0x72, 0xc1, 0x1c, 0x8a, - 0x54, 0xe6, 0x80, 0xbc, 0x1b, 0x47, 0xd4, 0xf5, 0x15, 0x9b, 0x29, 0x36, 0x2f, 0x4a, 0x44, 0x72, - 0xd9, 0x1e, 0xe4, 0x93, 0x7b, 0x38, 0x33, 0xbb, 0x87, 0xd7, 0x07, 0xea, 0xfe, 0xdd, 0x87, 0xa2, - 0xa0, 0xcc, 0x88, 0xd3, 0xf1, 0x44, 0xb6, 0x78, 0x05, 0xcf, 0x01, 0xf4, 0x14, 0x2a, 0x63, 0x16, - 0x45, 0xf4, 0x9a, 0x11, 0xd5, 0xa6, 0x20, 0x35, 0xca, 0x31, 0xd8, 0x94, 0xdd, 0xfa, 0x14, 0x12, - 0xda, 0x88, 0x95, 0x72, 0x4a, 0x29, 0x06, 0x95, 0xd2, 0x32, 0x63, 0x73, 0x1a, 0xb3, 0x41, 0x9a, - 0xb1, 0x39, 0x45, 0x2f, 0x60, 0x4b, 0x51, 0x8e, 0xeb, 0xbb, 0xe3, 0xe9, 0x58, 0x51, 0x4f, 0x5e, - 0x52, 0xcf, 0xa6, 0xa4, 0x1e, 0x85, 0x4b, 0x06, 0x7a, 0x0c, 0x85, 0x4b, 0x1a, 0x31, 0x71, 0x59, - 0xc4, 0xd4, 0x90, 0x17, 0xeb, 0x26, 0x63, 0x42, 0x24, 0xae, 0x90, 0x50, 0x90, 0x9e, 0x62, 0x84, - 0xfc, 0x15, 0x63, 0x58, 0xc4, 0x72, 0xe6, 0x81, 0x7e, 0x9a, 0x7b, 0x28, 0xa5, 0x3c, 0x28, 0x5c, - 0x7a, 0x78, 0x01, 0x5b, 0xec, 0x13, 0x0f, 0x29, 0x09, 0x26, 0xf4, 0xe7, 0x29, 0x23, 0x43, 0xca, - 0xa9, 0x1c, 0xec, 0xca, 0x78, 0x53, 0x0a, 0x3a, 0x12, 0x6f, 0x50, 0x4e, 0xcd, 0x7d, 0xa8, 0x62, - 0x16, 0x31, 0xde, 0x76, 0xa3, 0xc8, 0x0d, 0xfc, 0x7a, 0xe0, 0xf3, 0x30, 0xf0, 0xe2, 0x3b, 0xc7, - 0x3c, 0x80, 0xbd, 0x95, 0x52, 0x75, 0x69, 0x88, 0xcd, 0xef, 0xa6, 0x2c, 0xbc, 0x5d, 0xbd, 0xf9, - 0x1d, 0xec, 0xad, 0x94, 0xc6, 0x37, 0xce, 0x4b, 0xc8, 0x4d, 0xa8, 0x1b, 0x46, 0xc6, 0x9a, 0x9c, - 0x62, 0x76, 0x17, 0xae, 0x7e, 0x37, 0x3c, 0x73, 0x23, 0x1e, 0x84, 0xb7, 0x58, 0x29, 0x9d, 0x67, - 0x0b, 0x9a, 0xbe, 0x66, 0xfe, 0x59, 0x83, 0x52, 0x4a, 0x28, 0xea, 0xc0, 0x0f, 0x86, 0x8c, 0x5c, - 0x85, 0xc1, 0x38, 0xa9, 0xb0, 0x19, 0x80, 0x0c, 0xc8, 0xcb, 0x05, 0x0f, 0xe2, 0xf2, 0x4a, 0x96, - 0xe8, 0x6b, 0xc8, 0x8f, 0x94, 0x09, 0x99, 0xa5, 0xd2, 0xe9, 0xf6, 0x92, 0x77, 0x11, 0x1b, 0x9c, - 0xe8, 0x9c, 0x67, 0x0b, 0x19, 0x3d, 0x7b, 0x9e, 0x2d, 0x64, 0xf5, 0xdc, 0x79, 0xb6, 0x90, 0xd3, - 0xd7, 0xcf, 0xb3, 0x85, 0x75, 0x3d, 0x6f, 0xfe, 0x55, 0x83, 0x42, 0xa2, 0xbd, 0x58, 0x93, 0x6a, - 0x00, 0x48, 0xd5, 0xe4, 0x29, 0xec, 0x8c, 0x5d, 0x9f, 0x4c, 0x98, 0x4f, 0x3d, 0xf7, 0x8f, 0x8c, - 0x2c, 0xce, 0x17, 0x2b, 0x65, 0xe8, 0x35, 0x3c, 0x92, 0x53, 0x26, 0xe5, 0x9c, 0x8d, 0x27, 0x9c, - 0x44, 0xd3, 0xc1, 0x80, 0x45, 0xd1, 0xd5, 0xd4, 0x93, 0x2d, 0x51, 0xc0, 0xf7, 0x89, 0xcd, 0x31, - 0x3c, 0x92, 0xa1, 0xbf, 0x08, 0x83, 0x4b, 0x7a, 0xe9, 0x7a, 0x2e, 0xbf, 0x4d, 0xc6, 0x88, 0x7d, - 0x28, 0x8a, 0xe0, 0x10, 0x3f, 0xb9, 0x97, 0xcb, 0x78, 0x0e, 0x88, 0x90, 0xf1, 0x40, 0xc9, 0xe2, - 0x90, 0xc5, 0x4b, 0x31, 0x20, 0xcc, 0x1e, 0x09, 0x19, 0x79, 0xe8, 0xd9, 0xda, 0xbc, 0x01, 0xe3, - 0xae, 0xbb, 0x38, 0xcd, 0x87, 0x50, 0x9a, 0xcc, 0x61, 0xe9, 0x51, 0xc3, 0x69, 0x28, 0x9d, 0x8c, - 0xb5, 0x5f, 0x4e, 0x86, 0xf9, 0x37, 0x0d, 0xb6, 0xde, 0x4c, 0x5d, 0x6f, 0xb8, 0x30, 0x1d, 0xa5, - 0xdf, 0x30, 0xda, 0xe2, 0x1b, 0x66, 0xd5, 0x03, 0x65, 0x6d, 0xe5, 0x03, 0x65, 0xd5, 0x23, 0x20, - 0x73, 0xef, 0x23, 0xe0, 0x09, 0x94, 0xe6, 0xf3, 0x7f, 0x64, 0x64, 0x0f, 0x33, 0x47, 0x65, 0x0c, - 0xa3, 0x64, 0xf8, 0x8f, 0xcc, 0xd7, 0x80, 0xd2, 0x07, 0x8d, 0x03, 0x32, 0x1b, 0xd2, 0xb4, 0x7b, - 0x87, 0xb4, 0x17, 0x7f, 0xd1, 0xa0, 0x9c, 0x9e, 0x7f, 0x51, 0x05, 0x8a, 0xb6, 0x43, 0x9a, 0x2d, - 0xfb, 0xfb, 0xb3, 0x9e, 0xfe, 0x99, 0x58, 0x76, 0xfb, 0xf5, 0xba, 0x65, 0x35, 0xac, 0x86, 0xae, - 0x09, 0x0e, 0x17, 0x74, 0x6c, 0x35, 0x48, 0xcf, 0x6e, 0x5b, 0x9d, 0xbe, 0xb8, 0xdd, 0xb7, 0x61, - 0x33, 0xc6, 0x9c, 0x0e, 0xc1, 0x9d, 0x7e, 0xcf, 0xd2, 0x33, 0x48, 0x87, 0x72, 0x0c, 0x5a, 0x18, - 0x77, 0xb0, 0x9e, 0x15, 0x57, 0x52, 0x8c, 0xdc, 0x9d, 0x14, 0x92, 0x41, 0x22, 0x77, 0xfa, 0x8f, - 0x1c, 0xac, 0xcb, 0x03, 0x86, 0xe8, 0x0c, 0x4a, 0xa9, 0x47, 0x06, 0x3a, 0x78, 0xf0, 0xf1, 0x51, - 0x35, 0x56, 0x0f, 0xf4, 0xd3, 0xe8, 0x95, 0x86, 0xce, 0xa1, 0x9c, 0x7e, 0x46, 0xa0, 0xf4, 0x78, - 0xb8, 0xe2, 0x7d, 0xf1, 0xa0, 0xad, 0xb7, 0xa0, 0x5b, 0x11, 0x77, 0xc7, 0x62, 0x1c, 0x8c, 0x07, - 0x74, 0x54, 0x4d, 0xe9, 0x2f, 0x4d, 0xfd, 0xd5, 0xbd, 0x95, 0xb2, 0x38, 0x43, 0x2d, 0xf5, 0x89, - 0xf1, 0x88, 0x7c, 0xe7, 0x13, 0x17, 0xe7, 0xf2, 0xea, 0x17, 0xf7, 0x89, 0x63, 0x6b, 0x43, 0xd8, - 0x5e, 0xc1, 0xa1, 0xe8, 0x57, 0xe9, 0x13, 0xdc, 0xcb, 0xc0, 0xd5, 0xe7, 0xbf, 0xa4, 0x36, 0xf7, - 0xb2, 0x82, 0x6c, 0x17, 0xbc, 0xdc, 0x4f, 0xd5, 0x0b, 0x5e, 0x1e, 0xe2, 0xec, 0x9f, 0x40, 0x5f, - 0x6e, 0x74, 0x64, 0x2e, 0xef, 0xbd, 0x4b, 0x3a, 0xd5, 0xa7, 0x0f, 0xea, 0xc4, 0xc6, 0x6d, 0x80, - 0x79, 0xbb, 0xa0, 0xfd, 0xd4, 0x96, 0x3b, 0xed, 0x5e, 0x3d, 0xb8, 0x47, 0xaa, 0x4c, 0xbd, 0xf9, - 0xf5, 0xef, 0x4f, 0xae, 0x5d, 0x3e, 0x9a, 0x5e, 0x1e, 0x0f, 0x82, 0xf1, 0x89, 0x27, 0x86, 0x6a, - 0xdf, 0xf5, 0xaf, 0x7d, 0xc6, 0xff, 0x10, 0x84, 0x37, 0x27, 0x9e, 0x3f, 0x3c, 0x91, 0x5d, 0x77, - 0x32, 0xb3, 0x72, 0xb9, 0x2e, 0xff, 0x91, 0xf2, 0x9b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x1f, - 0xb3, 0x05, 0x24, 0x78, 0x11, 0x00, 0x00, + 0x56, 0x3e, 0x43, 0x72, 0xcd, 0x57, 0x48, 0x0e, 0xc9, 0x29, 0xdf, 0x29, 0xa9, 0xca, 0x3d, 0xf7, + 0x54, 0x77, 0xcf, 0xc0, 0x80, 0x90, 0x36, 0x27, 0xa6, 0x7f, 0xef, 0x75, 0xbf, 0xee, 0xf7, 0xe7, + 0xd7, 0xaf, 0x81, 0xdd, 0x30, 0x98, 0x72, 0x16, 0x86, 0x93, 0xc1, 0x89, 0xfa, 0x3a, 0x9e, 0x84, + 0x01, 0x0f, 0x50, 0x71, 0x86, 0x57, 0x8b, 0xe1, 0x64, 0xa0, 0x50, 0xf3, 0x3f, 0x59, 0x40, 0x5d, + 0xe6, 0x0f, 0x2f, 0xe8, 0xed, 0x98, 0xf9, 0x1c, 0xb3, 0x9f, 0xa7, 0x2c, 0xe2, 0x08, 0x41, 0x76, + 0xc8, 0x22, 0x6e, 0x68, 0x87, 0xda, 0x51, 0x19, 0xcb, 0x6f, 0xa4, 0x43, 0x86, 0x8e, 0xb9, 0xb1, + 0x76, 0xa8, 0x1d, 0x65, 0xb0, 0xf8, 0x44, 0x8f, 0xa1, 0x40, 0xc7, 0x9c, 0x8c, 0x23, 0xca, 0x8d, + 0xb2, 0x84, 0xf3, 0x74, 0xcc, 0xdb, 0x11, 0xe5, 0xe8, 0x4b, 0x28, 0x4f, 0xd4, 0x92, 0x64, 0x44, + 0xa3, 0x91, 0x91, 0x91, 0x0b, 0x95, 0x62, 0xec, 0x8c, 0x46, 0x23, 0x74, 0x04, 0xfa, 0x95, 0xeb, + 0x53, 0x8f, 0x0c, 0x3c, 0xfe, 0x91, 0x0c, 0x99, 0xc7, 0xa9, 0x91, 0x3d, 0xd4, 0x8e, 0x72, 0x78, + 0x43, 0xe2, 0x75, 0x8f, 0x7f, 0x6c, 0x08, 0x14, 0x7d, 0x05, 0x9b, 0xc9, 0x62, 0xa1, 0xda, 0xa0, + 0x91, 0x3b, 0xd4, 0x8e, 0x8a, 0x78, 0x63, 0xb2, 0xb8, 0xed, 0xaf, 0x60, 0x93, 0xbb, 0x63, 0x16, + 0x4c, 0x39, 0x89, 0xd8, 0x20, 0xf0, 0x87, 0x91, 0xb1, 0xae, 0x56, 0x8c, 0xe1, 0xae, 0x42, 0x91, + 0x09, 0x95, 0x2b, 0xc6, 0x88, 0xe7, 0x8e, 0x5d, 0x4e, 0xc4, 0xf6, 0xf3, 0x72, 0xfb, 0xa5, 0x2b, + 0xc6, 0x5a, 0x02, 0xeb, 0x52, 0x8e, 0x9e, 0xc1, 0xc6, 0x5c, 0x47, 0x9e, 0xb1, 0x22, 0x95, 0xca, + 0x89, 0x92, 0x3c, 0xe8, 0x4b, 0xd0, 0x83, 0x29, 0xbf, 0x0e, 0x5c, 0xff, 0x9a, 0x0c, 0x46, 0xd4, + 0x27, 0xee, 0xd0, 0x28, 0x1c, 0x6a, 0x47, 0xd9, 0x37, 0x6b, 0xaf, 0x34, 0xbc, 0x91, 0xc8, 0xea, + 0x23, 0xea, 0xdb, 0x43, 0xf4, 0x1c, 0x36, 0x3d, 0x1a, 0x71, 0x32, 0x0a, 0x26, 0x64, 0x32, 0xbd, + 0xbc, 0x61, 0xb7, 0xc6, 0x86, 0xf4, 0x4c, 0x45, 0xc0, 0x67, 0xc1, 0xe4, 0x42, 0x82, 0xe8, 0x00, + 0x40, 0x7a, 0x45, 0x1a, 0x37, 0x8a, 0xf2, 0x0c, 0x45, 0x81, 0x48, 0xc3, 0xe8, 0x14, 0x4a, 0x32, + 0x9a, 0x64, 0xe4, 0xfa, 0x3c, 0x32, 0xe0, 0x30, 0x73, 0x54, 0x3a, 0xd5, 0x8f, 0x3d, 0x5f, 0x04, + 0x16, 0x0b, 0xc9, 0x99, 0xeb, 0x73, 0x9c, 0x56, 0x42, 0x16, 0x14, 0x44, 0x18, 0x09, 0xf7, 0x3e, + 0x1a, 0x25, 0x39, 0xe1, 0xc5, 0xf1, 0x2c, 0x25, 0x8e, 0xef, 0xe6, 0xc0, 0x71, 0x83, 0x45, 0xbc, + 0xe7, 0x7d, 0xb4, 0x7c, 0x1e, 0xde, 0xe2, 0xfc, 0x50, 0x8d, 0xaa, 0xdf, 0x41, 0x39, 0x2d, 0x10, + 0x59, 0x21, 0x4e, 0x21, 0x12, 0x25, 0x8b, 0xc5, 0x27, 0xda, 0x81, 0xdc, 0x47, 0xea, 0x4d, 0x99, + 0xcc, 0x94, 0x32, 0x56, 0x83, 0xef, 0xd6, 0x5e, 0x6b, 0xe6, 0x6b, 0xd8, 0xee, 0x85, 0x74, 0x70, + 0xb3, 0x94, 0x6c, 0xcb, 0xb9, 0xa2, 0xdd, 0xc9, 0x15, 0xf3, 0x6f, 0x1a, 0x54, 0xe2, 0x59, 0x5d, + 0x4e, 0xf9, 0x34, 0x42, 0x5f, 0x43, 0x2e, 0xe2, 0x94, 0x33, 0xa9, 0xbd, 0x71, 0xfa, 0x28, 0x75, + 0x96, 0x94, 0x22, 0xc3, 0x4a, 0x0b, 0x55, 0xa1, 0x30, 0x09, 0x99, 0x3b, 0xa6, 0xd7, 0xc9, 0xbe, + 0x66, 0x63, 0x64, 0x42, 0x4e, 0x4e, 0x96, 0x49, 0x5a, 0x3a, 0x2d, 0xa7, 0xfd, 0x88, 0x95, 0x08, + 0x1d, 0x41, 0x6e, 0xc4, 0xbd, 0x41, 0x64, 0x64, 0xa5, 0xeb, 0x50, 0xac, 0x73, 0xd6, 0x6b, 0xd5, + 0x6b, 0x9c, 0xb3, 0xf1, 0x84, 0x63, 0xa5, 0x60, 0xfe, 0x16, 0x36, 0xe5, 0xcc, 0x26, 0x63, 0x0f, + 0x55, 0xd3, 0x23, 0x10, 0xb5, 0x22, 0x73, 0x4f, 0x55, 0xd4, 0x3a, 0x1d, 0x8b, 0xb4, 0x33, 0x87, + 0xa0, 0xcf, 0xe7, 0x47, 0x93, 0xc0, 0x8f, 0x84, 0x75, 0x5d, 0x6c, 0x43, 0xe4, 0x98, 0x48, 0x49, + 0x99, 0x8c, 0x9a, 0x9c, 0xb5, 0x11, 0xe3, 0x4d, 0xc6, 0x64, 0x3a, 0x3e, 0x57, 0x15, 0x40, 0xbc, + 0x60, 0x70, 0x23, 0x6a, 0x8a, 0xde, 0xc6, 0xcb, 0x57, 0x04, 0xdc, 0x0a, 0x06, 0x37, 0x0d, 0x01, + 0x9a, 0x3f, 0xa9, 0xb2, 0xef, 0x05, 0xea, 0x94, 0xff, 0x77, 0x24, 0xe6, 0xce, 0x5a, 0xbb, 0xd7, + 0x59, 0x26, 0x81, 0xed, 0x85, 0xc5, 0xe3, 0x53, 0xa4, 0x63, 0xa0, 0x2d, 0xc5, 0xe0, 0x25, 0xe4, + 0xaf, 0xa8, 0xeb, 0x4d, 0xc3, 0x64, 0x61, 0x94, 0x0a, 0x68, 0x53, 0x49, 0x70, 0xa2, 0x62, 0xfe, + 0x37, 0x0f, 0xf9, 0x18, 0x44, 0xa7, 0x90, 0x1d, 0x04, 0xc3, 0x24, 0x0f, 0xbe, 0xb8, 0x3b, 0x2d, + 0xf9, 0xad, 0x07, 0x43, 0x86, 0xa5, 0x2e, 0xfa, 0x1d, 0x6c, 0x88, 0x5a, 0xf5, 0x99, 0x47, 0xa6, + 0x93, 0x21, 0x9d, 0x85, 0xde, 0x48, 0xcd, 0xae, 0x2b, 0x85, 0xbe, 0x94, 0xe3, 0xca, 0x20, 0x3d, + 0x44, 0x7b, 0x50, 0x14, 0xd1, 0x56, 0x91, 0xc8, 0xca, 0xdc, 0x2f, 0x08, 0x40, 0xc6, 0xc0, 0x84, + 0x4a, 0xe0, 0xbb, 0x81, 0x4f, 0xa2, 0x11, 0x25, 0xa7, 0xdf, 0x7c, 0x2b, 0xc9, 0xaa, 0x8c, 0x4b, + 0x12, 0xec, 0x8e, 0xe8, 0xe9, 0x37, 0xdf, 0xa2, 0x27, 0x50, 0x92, 0x05, 0xce, 0x3e, 0x4d, 0xdc, + 0xf0, 0x56, 0xb2, 0x54, 0x05, 0xcb, 0x9a, 0xb7, 0x24, 0x22, 0xaa, 0xe8, 0xca, 0xa3, 0xd7, 0x91, + 0x64, 0xa6, 0x0a, 0x56, 0x03, 0xf4, 0x0a, 0x76, 0x62, 0x1f, 0x90, 0x28, 0x98, 0x86, 0x03, 0x46, + 0x5c, 0x7f, 0xc8, 0x3e, 0x49, 0xc6, 0xa9, 0x60, 0x14, 0xcb, 0xba, 0x52, 0x64, 0x0b, 0x09, 0xda, + 0x85, 0xf5, 0x11, 0x73, 0xaf, 0x47, 0x8a, 0x45, 0x2a, 0x38, 0x1e, 0x99, 0x7f, 0xcf, 0x41, 0x29, + 0xe5, 0x18, 0x54, 0x86, 0x02, 0xb6, 0xba, 0x16, 0x7e, 0x6f, 0x35, 0xf4, 0xcf, 0xd0, 0x11, 0x3c, + 0xb3, 0x9d, 0x7a, 0x07, 0x63, 0xab, 0xde, 0x23, 0x1d, 0x4c, 0xfa, 0xce, 0x5b, 0xa7, 0xf3, 0x83, + 0x43, 0x2e, 0x6a, 0x1f, 0xda, 0x96, 0xd3, 0x23, 0x0d, 0xab, 0x57, 0xb3, 0x5b, 0x5d, 0x5d, 0x43, + 0xfb, 0x60, 0xcc, 0x35, 0x13, 0x71, 0xad, 0xdd, 0xe9, 0x3b, 0x3d, 0x7d, 0x0d, 0x3d, 0x81, 0xbd, + 0xa6, 0xed, 0xd4, 0x5a, 0x64, 0xae, 0x53, 0x6f, 0xf5, 0xde, 0x13, 0xeb, 0xc7, 0x0b, 0x1b, 0x7f, + 0xd0, 0x33, 0xab, 0x14, 0x44, 0x4d, 0x25, 0x2b, 0x64, 0xd1, 0x63, 0xf8, 0x5c, 0x29, 0xa8, 0x29, + 0xa4, 0xd7, 0xe9, 0x90, 0x6e, 0xa7, 0xe3, 0xe8, 0x39, 0xb4, 0x05, 0x15, 0xdb, 0x79, 0x5f, 0x6b, + 0xd9, 0x0d, 0x82, 0xad, 0x5a, 0xab, 0xad, 0xaf, 0xa3, 0x6d, 0xd8, 0x5c, 0xd6, 0xcb, 0x8b, 0x25, + 0x12, 0xbd, 0x8e, 0x63, 0x77, 0x1c, 0xf2, 0xde, 0xc2, 0x5d, 0xbb, 0xe3, 0xe8, 0x05, 0xb4, 0x0b, + 0x68, 0x51, 0x74, 0xd6, 0xae, 0xd5, 0xf5, 0x22, 0xfa, 0x1c, 0xb6, 0x16, 0xf1, 0xb7, 0xd6, 0x07, + 0x1d, 0x90, 0x01, 0x3b, 0x6a, 0x63, 0xe4, 0x8d, 0xd5, 0xea, 0xfc, 0x40, 0xda, 0xb6, 0x63, 0xb7, + 0xfb, 0x6d, 0xbd, 0x84, 0x76, 0x40, 0x6f, 0x5a, 0x16, 0xb1, 0x9d, 0x6e, 0xbf, 0xd9, 0xb4, 0xeb, + 0xb6, 0xe5, 0xf4, 0xf4, 0xb2, 0xb2, 0xbc, 0xea, 0xe0, 0x15, 0x31, 0xa1, 0x7e, 0x56, 0x73, 0x1c, + 0xab, 0x45, 0x1a, 0x76, 0xb7, 0xf6, 0xa6, 0x65, 0x35, 0xf4, 0x0d, 0x74, 0x00, 0x8f, 0x7b, 0x56, + 0xfb, 0xa2, 0x83, 0x6b, 0xf8, 0x03, 0x49, 0xe4, 0xcd, 0x9a, 0xdd, 0xea, 0x63, 0x4b, 0xdf, 0x44, + 0x5f, 0xc2, 0x01, 0xb6, 0xde, 0xf5, 0x6d, 0x6c, 0x35, 0x88, 0xd3, 0x69, 0x58, 0xa4, 0x69, 0xd5, + 0x7a, 0x7d, 0x6c, 0x91, 0xb6, 0xdd, 0xed, 0xda, 0xce, 0xf7, 0xba, 0x8e, 0x9e, 0xc1, 0xe1, 0x4c, + 0x65, 0xb6, 0xc0, 0x92, 0xd6, 0x96, 0x38, 0x5f, 0x12, 0x52, 0xc7, 0xfa, 0xb1, 0x47, 0x2e, 0x2c, + 0x0b, 0xeb, 0x08, 0x55, 0x61, 0x77, 0x6e, 0x5e, 0x19, 0x88, 0x6d, 0x6f, 0x0b, 0xd9, 0x85, 0x85, + 0xdb, 0x35, 0x47, 0x04, 0x78, 0x41, 0xb6, 0x23, 0xb6, 0x3d, 0x97, 0x2d, 0x6f, 0xfb, 0x73, 0x84, + 0x60, 0x23, 0x15, 0x95, 0x66, 0x0d, 0xeb, 0xbb, 0x68, 0x07, 0x36, 0x93, 0x1d, 0x24, 0x8a, 0xff, + 0xca, 0xa3, 0x47, 0x80, 0xfa, 0x0e, 0xb6, 0x6a, 0x0d, 0xe1, 0x90, 0x99, 0xe0, 0xdf, 0xf9, 0xf3, + 0x6c, 0x61, 0x4d, 0xcf, 0x98, 0xff, 0xcc, 0x40, 0x65, 0xa1, 0x2e, 0xd1, 0x3e, 0x14, 0x23, 0xf7, + 0xda, 0xa7, 0x5c, 0x30, 0x87, 0x22, 0x95, 0x39, 0x20, 0xaf, 0xd1, 0x11, 0x75, 0x7d, 0xc5, 0x66, + 0x8a, 0xf7, 0x8b, 0x12, 0x91, 0x5c, 0xb6, 0x07, 0xf9, 0xe4, 0xca, 0xce, 0xcc, 0xae, 0xec, 0xf5, + 0x81, 0xba, 0xaa, 0xf7, 0xa1, 0x28, 0x28, 0x33, 0xe2, 0x74, 0x3c, 0x91, 0x25, 0x5e, 0xc1, 0x73, + 0x00, 0x3d, 0x85, 0xca, 0x98, 0x45, 0x11, 0xbd, 0x66, 0x44, 0x95, 0x29, 0x48, 0x8d, 0x72, 0x0c, + 0x36, 0x65, 0xb5, 0x3e, 0x85, 0x84, 0x36, 0x62, 0xa5, 0x9c, 0x52, 0x8a, 0x41, 0xa5, 0xb4, 0xcc, + 0xd8, 0x9c, 0xc6, 0x6c, 0x90, 0x66, 0x6c, 0x4e, 0xd1, 0x0b, 0xd8, 0x52, 0x94, 0xe3, 0xfa, 0xee, + 0x78, 0x3a, 0x56, 0xd4, 0x93, 0x97, 0xd4, 0xb3, 0x29, 0xa9, 0x47, 0xe1, 0x92, 0x81, 0x1e, 0x43, + 0xe1, 0x92, 0x46, 0x4c, 0x5c, 0x16, 0x31, 0x35, 0xe4, 0xc5, 0xb8, 0xc9, 0x98, 0x10, 0x89, 0x2b, + 0x24, 0x14, 0xa4, 0xa7, 0x18, 0x21, 0x7f, 0xc5, 0x18, 0x16, 0xbe, 0x9c, 0x59, 0xa0, 0x9f, 0xe6, + 0x16, 0x4a, 0x29, 0x0b, 0x0a, 0x97, 0x16, 0x5e, 0xc0, 0x16, 0xfb, 0xc4, 0x43, 0x4a, 0x82, 0x09, + 0xfd, 0x79, 0xca, 0xc8, 0x90, 0x72, 0x2a, 0x7b, 0xc0, 0x32, 0xde, 0x94, 0x82, 0x8e, 0xc4, 0x1b, + 0x94, 0x53, 0x73, 0x1f, 0xaa, 0x98, 0x45, 0x8c, 0xb7, 0xdd, 0x28, 0x72, 0x03, 0xbf, 0x1e, 0xf8, + 0x3c, 0x0c, 0xbc, 0xf8, 0xce, 0x31, 0x0f, 0x60, 0x6f, 0xa5, 0x54, 0x5d, 0x1a, 0x62, 0xf2, 0xbb, + 0x29, 0x0b, 0x6f, 0x57, 0x4f, 0x7e, 0x07, 0x7b, 0x2b, 0xa5, 0xf1, 0x8d, 0xf3, 0x12, 0x72, 0x13, + 0xea, 0x86, 0x91, 0xb1, 0x26, 0x6f, 0xed, 0xdd, 0x85, 0x26, 0xc1, 0x0d, 0xcf, 0xdc, 0x88, 0x07, + 0xe1, 0x2d, 0x56, 0x4a, 0xe7, 0xd9, 0x82, 0xa6, 0xaf, 0x99, 0x7f, 0xd2, 0xa0, 0x94, 0x12, 0x8a, + 0x3c, 0xf0, 0x83, 0x21, 0x23, 0x57, 0x61, 0x30, 0x4e, 0x32, 0x6c, 0x06, 0x20, 0x03, 0xf2, 0x72, + 0xc0, 0x83, 0x38, 0xbd, 0x92, 0x21, 0xfa, 0x1a, 0xf2, 0x23, 0xb5, 0x84, 0x8c, 0x52, 0xe9, 0x74, + 0x7b, 0xc9, 0xba, 0xf0, 0x0d, 0x4e, 0x74, 0xce, 0xb3, 0x85, 0x8c, 0x9e, 0x3d, 0xcf, 0x16, 0xb2, + 0x7a, 0xee, 0x3c, 0x5b, 0xc8, 0xe9, 0xeb, 0xe7, 0xd9, 0xc2, 0xba, 0x9e, 0x37, 0xff, 0xa2, 0x41, + 0x21, 0xd1, 0x5e, 0xcc, 0x49, 0xd5, 0x00, 0xa4, 0x72, 0xf2, 0x14, 0x76, 0xc6, 0xae, 0x4f, 0x26, + 0xcc, 0xa7, 0x9e, 0xfb, 0x47, 0x46, 0x16, 0xfb, 0x8b, 0x95, 0x32, 0xf4, 0x1a, 0x1e, 0xc9, 0x86, + 0x94, 0xaa, 0x26, 0x86, 0x44, 0xd3, 0xc1, 0x80, 0x45, 0xd1, 0xd5, 0xd4, 0x93, 0x25, 0x51, 0xc0, + 0xf7, 0x89, 0xcd, 0x31, 0x3c, 0x92, 0xae, 0xbf, 0x08, 0x83, 0x4b, 0x7a, 0xe9, 0x7a, 0x2e, 0xbf, + 0x4d, 0xda, 0x88, 0x7d, 0x28, 0x0a, 0xe7, 0x10, 0x3f, 0xb9, 0x97, 0xcb, 0x78, 0x0e, 0x08, 0x97, + 0xf1, 0x40, 0xc9, 0x62, 0x97, 0xc5, 0x43, 0xd1, 0x20, 0xcc, 0xde, 0x13, 0x19, 0xb9, 0xe9, 0xd9, + 0xd8, 0xbc, 0x01, 0xe3, 0xae, 0xb9, 0x38, 0xcc, 0x87, 0x50, 0x9a, 0xcc, 0x61, 0x69, 0x51, 0xc3, + 0x69, 0x28, 0x1d, 0x8c, 0xb5, 0x5f, 0x0e, 0x86, 0xf9, 0x57, 0x0d, 0xb6, 0xde, 0x4c, 0x5d, 0x6f, + 0xb8, 0xd0, 0x1d, 0xa5, 0x9f, 0x3b, 0xda, 0xe2, 0x73, 0x67, 0xd5, 0x5b, 0x66, 0x6d, 0xe5, 0x5b, + 0x66, 0xd5, 0x7b, 0x21, 0x73, 0xef, 0x7b, 0xe1, 0x09, 0x94, 0xe6, 0x4f, 0x05, 0xd5, 0x7c, 0x96, + 0x31, 0x8c, 0x92, 0x77, 0x42, 0x64, 0xbe, 0x06, 0x94, 0xde, 0x68, 0xec, 0x90, 0x59, 0x93, 0xa6, + 0xdd, 0xdb, 0xa4, 0xbd, 0xf8, 0xb3, 0x06, 0xe5, 0x74, 0xa7, 0x8c, 0x2a, 0x50, 0xb4, 0x1d, 0xd2, + 0x6c, 0xd9, 0xdf, 0x9f, 0xf5, 0xf4, 0xcf, 0xc4, 0xb0, 0xdb, 0xaf, 0xd7, 0x2d, 0xab, 0x61, 0x35, + 0x74, 0x4d, 0x70, 0xb8, 0xa0, 0x63, 0xab, 0x41, 0x7a, 0x76, 0xdb, 0xea, 0xf4, 0xc5, 0xed, 0xbe, + 0x0d, 0x9b, 0x31, 0xe6, 0x74, 0x08, 0xee, 0xf4, 0x7b, 0x96, 0x9e, 0x41, 0x3a, 0x94, 0x63, 0xd0, + 0xc2, 0xb8, 0x83, 0xf5, 0xac, 0xb8, 0x92, 0x62, 0xe4, 0x6e, 0xa7, 0x90, 0x34, 0x12, 0xb9, 0xd3, + 0x7f, 0xe4, 0x60, 0x5d, 0x6e, 0x30, 0x44, 0x67, 0x50, 0x4a, 0xbd, 0x47, 0xd0, 0xc1, 0x83, 0xef, + 0x94, 0xaa, 0xb1, 0xba, 0xf5, 0x9f, 0x46, 0xaf, 0x34, 0x74, 0x0e, 0xe5, 0xf4, 0x8b, 0x03, 0xa5, + 0xdb, 0xc3, 0x15, 0x4f, 0x91, 0x07, 0xd7, 0x7a, 0x0b, 0xba, 0x15, 0x71, 0x77, 0x2c, 0xda, 0xc1, + 0xb8, 0x41, 0x47, 0xd5, 0x94, 0xfe, 0x52, 0xd7, 0x5f, 0xdd, 0x5b, 0x29, 0x8b, 0x23, 0xd4, 0x52, + 0x47, 0x8c, 0x5b, 0xe4, 0x3b, 0x47, 0x5c, 0xec, 0xcb, 0xab, 0x5f, 0xdc, 0x27, 0x8e, 0x57, 0x1b, + 0xc2, 0xf6, 0x0a, 0x0e, 0x45, 0xbf, 0x4a, 0xef, 0xe0, 0x5e, 0x06, 0xae, 0x3e, 0xff, 0x25, 0xb5, + 0xb9, 0x95, 0x15, 0x64, 0xbb, 0x60, 0xe5, 0x7e, 0xaa, 0x5e, 0xb0, 0xf2, 0x10, 0x67, 0xff, 0x04, + 0xfa, 0x72, 0xa1, 0x23, 0x73, 0x79, 0xee, 0x5d, 0xd2, 0xa9, 0x3e, 0x7d, 0x50, 0x27, 0x5e, 0xdc, + 0x06, 0x98, 0x97, 0x0b, 0xda, 0x4f, 0x4d, 0xb9, 0x53, 0xee, 0xd5, 0x83, 0x7b, 0xa4, 0x6a, 0xa9, + 0x37, 0xbf, 0xfe, 0xfd, 0xc9, 0xb5, 0xcb, 0x47, 0xd3, 0xcb, 0xe3, 0x41, 0x30, 0x3e, 0xf1, 0x44, + 0x53, 0xed, 0xbb, 0xfe, 0xb5, 0xcf, 0xf8, 0x1f, 0x82, 0xf0, 0xe6, 0xc4, 0xf3, 0x87, 0x27, 0xb2, + 0xea, 0x4e, 0x66, 0xab, 0x5c, 0xae, 0xcb, 0xff, 0x5c, 0x7e, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x78, 0xac, 0xbb, 0x04, 0xa3, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/routerrpc/router.proto b/lnrpc/routerrpc/router.proto index e7daa94b..167b8d7a 100644 --- a/lnrpc/routerrpc/router.proto +++ b/lnrpc/routerrpc/router.proto @@ -155,6 +155,11 @@ message PaymentStatus { The taken route when state is SUCCEEDED. */ lnrpc.Route route = 3; + + /** + The HTLCs made in attempt to settle the payment [EXPERIMENTAL]. + */ + repeated lnrpc.HTLCAttempt htlcs = 4; } From 063f24f2ed19231ca06bed4ffd08b5e284fabcc3 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 8 Nov 2019 03:39:51 -0800 Subject: [PATCH 9/9] channeldb+routing: expose HTLCs in payment subscriptions This commit modifies the FetchPayment method to return MPPayment structs converted from the legacy on-disk format. This allows us to attach the HTLCs to the events given to clients subscribing to the outcome of an HTLC. This commit also bubbles up to the routerrpc/router_server, by populating HTLCAttempts in the response and extracting the legacy route field from the HTLCAttempts. --- channeldb/payment_control.go | 40 ++++++++-------------- channeldb/payment_control_test.go | 15 ++++++--- channeldb/payments.go | 8 ++--- lnrpc/routerrpc/router_server.go | 55 ++++++++++++++++++++++-------- routing/control_tower.go | 55 ++++++++++++++---------------- routing/control_tower_test.go | 56 +++++++++++++++++++++++++++---- 6 files changed, 143 insertions(+), 86 deletions(-) diff --git a/channeldb/payment_control.go b/channeldb/payment_control.go index 13c09369..63be23a2 100644 --- a/channeldb/payment_control.go +++ b/channeldb/payment_control.go @@ -8,7 +8,6 @@ import ( "github.com/coreos/bbolt" "github.com/lightningnetwork/lnd/lntypes" - "github.com/lightningnetwork/lnd/routing/route" ) var ( @@ -192,16 +191,17 @@ func (p *PaymentControl) RegisterAttempt(paymentHash lntypes.Hash, // duplicate payments to the same payment hash. The provided preimage is // atomically saved to the DB for record keeping. func (p *PaymentControl) Success(paymentHash lntypes.Hash, - preimage lntypes.Preimage) (*route.Route, error) { + preimage lntypes.Preimage) (*MPPayment, error) { var ( updateErr error - route *route.Route + payment *MPPayment ) err := p.db.Batch(func(tx *bbolt.Tx) error { // Reset the update error, to avoid carrying over an error // from a previous execution of the batched db transaction. updateErr = nil + payment = nil bucket, err := fetchPaymentBucket(tx, paymentHash) if err == ErrPaymentNotInitiated { @@ -225,20 +225,14 @@ func (p *PaymentControl) Success(paymentHash lntypes.Hash, } // Retrieve attempt info for the notification. - attempt, err := fetchPaymentAttempt(bucket) - if err != nil { - return err - } - - route = &attempt.Route - - return nil + payment, err = fetchPayment(bucket) + return err }) if err != nil { return nil, err } - return route, updateErr + return payment, updateErr } // Fail transitions a payment into the Failed state, and records the reason the @@ -246,16 +240,17 @@ func (p *PaymentControl) Success(paymentHash lntypes.Hash, // its next call for this payment hash, allowing the switch to make a // subsequent payment. func (p *PaymentControl) Fail(paymentHash lntypes.Hash, - reason FailureReason) (*route.Route, error) { + reason FailureReason) (*MPPayment, error) { var ( updateErr error - route *route.Route + payment *MPPayment ) err := p.db.Batch(func(tx *bbolt.Tx) error { // Reset the update error, to avoid carrying over an error // from a previous execution of the batched db transaction. updateErr = nil + payment = nil bucket, err := fetchPaymentBucket(tx, paymentHash) if err == ErrPaymentNotInitiated { @@ -279,28 +274,21 @@ func (p *PaymentControl) Fail(paymentHash lntypes.Hash, } // Retrieve attempt info for the notification, if available. - attempt, err := fetchPaymentAttempt(bucket) - if err != nil && err != errNoAttemptInfo { - return err - } - if err != errNoAttemptInfo { - route = &attempt.Route - } - - return nil + payment, err = fetchPayment(bucket) + return err }) if err != nil { return nil, err } - return route, updateErr + return payment, updateErr } // FetchPayment returns information about a payment from the database. func (p *PaymentControl) FetchPayment(paymentHash lntypes.Hash) ( - *Payment, error) { + *MPPayment, error) { - var payment *Payment + var payment *MPPayment err := p.db.View(func(tx *bbolt.Tx) error { bucket, err := fetchPaymentBucket(tx, paymentHash) if err != nil { diff --git a/channeldb/payment_control_test.go b/channeldb/payment_control_test.go index 479e6898..7be04c6b 100644 --- a/channeldb/payment_control_test.go +++ b/channeldb/payment_control_test.go @@ -14,7 +14,6 @@ import ( "github.com/coreos/bbolt" "github.com/davecgh/go-spew/spew" "github.com/lightningnetwork/lnd/lntypes" - "github.com/lightningnetwork/lnd/routing/route" ) func initDB() (*DB, error) { @@ -132,16 +131,22 @@ func TestPaymentControlSwitchFail(t *testing.T) { ) // Verifies that status was changed to StatusSucceeded. - var route *route.Route - route, err = pControl.Success(info.PaymentHash, preimg) + var payment *MPPayment + payment, err = pControl.Success(info.PaymentHash, preimg) if err != nil { t.Fatalf("error shouldn't have been received, got: %v", err) } - err = assertRouteEqual(route, &attempt.Route) + if len(payment.HTLCs) != 1 { + t.Fatalf("payment should have one htlc, got: %d", + len(payment.HTLCs)) + } + + err = assertRouteEqual(&payment.HTLCs[0].Route, &attempt.Route) if err != nil { t.Fatalf("unexpected route returned: %v vs %v: %v", - spew.Sdump(attempt.Route), spew.Sdump(*route), err) + spew.Sdump(attempt.Route), + spew.Sdump(payment.HTLCs[0].Route), err) } assertPaymentStatus(t, db, info.PaymentHash, StatusSucceeded) diff --git a/channeldb/payments.go b/channeldb/payments.go index c1ff79e9..7a541543 100644 --- a/channeldb/payments.go +++ b/channeldb/payments.go @@ -337,7 +337,7 @@ func (db *DB) FetchPayments() ([]*MPPayment, error) { return err } - payments = append(payments, p.ToMPPayment()) + payments = append(payments, p) // For older versions of lnd, duplicate payments to a // payment has was possible. These will be found in a @@ -362,7 +362,7 @@ func (db *DB) FetchPayments() ([]*MPPayment, error) { return err } - payments = append(payments, p.ToMPPayment()) + payments = append(payments, p) return nil }) }) @@ -379,7 +379,7 @@ func (db *DB) FetchPayments() ([]*MPPayment, error) { return payments, nil } -func fetchPayment(bucket *bbolt.Bucket) (*Payment, error) { +func fetchPayment(bucket *bbolt.Bucket) (*MPPayment, error) { var ( err error p = &Payment{} @@ -434,7 +434,7 @@ func fetchPayment(bucket *bbolt.Bucket) (*Payment, error) { p.Failure = &reason } - return p, nil + return p.ToMPPayment(), nil } // DeletePayments deletes all completed and failed payments from the DB. diff --git a/lnrpc/routerrpc/router_server.go b/lnrpc/routerrpc/router_server.go index 5cf84dbc..3432ecd8 100644 --- a/lnrpc/routerrpc/router_server.go +++ b/lnrpc/routerrpc/router_server.go @@ -584,19 +584,12 @@ func (s *Server) trackPayment(paymentHash lntypes.Hash, case result := <-resultChan: // Marshall result to rpc type. var status PaymentStatus - if result.Success { log.Debugf("Payment %v successfully completed", paymentHash) status.State = PaymentState_SUCCEEDED status.Preimage = result.Preimage[:] - status.Route, err = router.MarshallRoute( - result.Route, - ) - if err != nil { - return err - } } else { state, err := marshallFailureReason( result.FailureReason, @@ -605,15 +598,49 @@ func (s *Server) trackPayment(paymentHash lntypes.Hash, return err } status.State = state - if result.Route != nil { - status.Route, err = router.MarshallRoute( - result.Route, - ) - if err != nil { - return err - } + } + + // Extract the last route from the given list of HTLCs. This + // will populate the legacy route field for backwards + // compatibility. + // + // NOTE: For now there will be at most one HTLC, this code + // should be revisted or the field removed when multiple HTLCs + // are permitted. + var legacyRoute *route.Route + for _, htlc := range result.HTLCs { + switch { + case htlc.Settle != nil: + legacyRoute = &htlc.Route + + // Only display the route for failed payments if we got + // an incorrect payment details error, so that it can be + // used for probing or fee estimation. + case htlc.Failure != nil && result.FailureReason == + channeldb.FailureReasonPaymentDetails: + + legacyRoute = &htlc.Route } } + if legacyRoute != nil { + status.Route, err = router.MarshallRoute(legacyRoute) + if err != nil { + return err + } + } + + // Marshal our list of HTLCs that have been tried for this + // payment. + htlcs := make([]*lnrpc.HTLCAttempt, 0, len(result.HTLCs)) + for _, dbHtlc := range result.HTLCs { + htlc, err := router.MarshalHTLCAttempt(dbHtlc) + if err != nil { + return err + } + + htlcs = append(htlcs, htlc) + } + status.Htlcs = htlcs // Send event to the client. err = stream.Send(&status) diff --git a/routing/control_tower.go b/routing/control_tower.go index ee8d75c8..4cf6839f 100644 --- a/routing/control_tower.go +++ b/routing/control_tower.go @@ -6,7 +6,6 @@ import ( "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/lntypes" - "github.com/lightningnetwork/lnd/routing/route" ) // ControlTower tracks all outgoing payments made, whose primary purpose is to @@ -52,10 +51,6 @@ type PaymentResult struct { // Success indicates whether the payment was successful. Success bool - // Route is the (last) route attempted to send the HTLC. It is only set - // for successful payments. - Route *route.Route - // Preimage is the preimage of a successful payment. This serves as a // proof of payment. It is only set for successful payments. Preimage lntypes.Preimage @@ -63,6 +58,10 @@ type PaymentResult struct { // FailureReason is a failure reason code indicating the reason the // payment failed. It is only set for failed payments. FailureReason channeldb.FailureReason + + // HTLCs is a list of HTLCs that have been attempted in order to settle + // the payment. + HTLCs []channeldb.HTLCAttempt } // controlTower is persistent implementation of ControlTower to restrict @@ -107,46 +106,46 @@ func (p *controlTower) RegisterAttempt(paymentHash lntypes.Hash, func (p *controlTower) Success(paymentHash lntypes.Hash, preimage lntypes.Preimage) error { - route, err := p.db.Success(paymentHash, preimage) + payment, err := p.db.Success(paymentHash, preimage) if err != nil { return err } // Notify subscribers of success event. p.notifyFinalEvent( - paymentHash, createSuccessResult(route, preimage), + paymentHash, createSuccessResult(payment.HTLCs), ) return nil } // createSuccessResult creates a success result to send to subscribers. -func createSuccessResult(rt *route.Route, - preimage lntypes.Preimage) *PaymentResult { +func createSuccessResult(htlcs []channeldb.HTLCAttempt) *PaymentResult { + // Extract any preimage from the list of HTLCs. + var preimage lntypes.Preimage + for _, htlc := range htlcs { + if htlc.Settle != nil { + preimage = htlc.Settle.Preimage + break + } + } return &PaymentResult{ Success: true, Preimage: preimage, - Route: rt, + HTLCs: htlcs, } } // createFailResult creates a failed result to send to subscribers. -func createFailedResult(rt *route.Route, +func createFailedResult(htlcs []channeldb.HTLCAttempt, reason channeldb.FailureReason) *PaymentResult { - result := &PaymentResult{ + return &PaymentResult{ Success: false, FailureReason: reason, + HTLCs: htlcs, } - - // In case of incorrect payment details, set the route. This can be used - // for probing and to extract a fee estimate from the route. - if reason == channeldb.FailureReasonPaymentDetails { - result.Route = rt - } - - return result } // Fail transitions a payment into the Failed state, and records the reason the @@ -156,14 +155,16 @@ func createFailedResult(rt *route.Route, func (p *controlTower) Fail(paymentHash lntypes.Hash, reason channeldb.FailureReason) error { - route, err := p.db.Fail(paymentHash, reason) + payment, err := p.db.Fail(paymentHash, reason) if err != nil { return err } // Notify subscribers of fail event. p.notifyFinalEvent( - paymentHash, createFailedResult(route, reason), + paymentHash, createFailedResult( + payment.HTLCs, reason, + ), ) return nil @@ -213,20 +214,14 @@ func (p *controlTower) SubscribePayment(paymentHash lntypes.Hash) ( // a subscriber, because we can send the result on the channel // immediately. case channeldb.StatusSucceeded: - event = *createSuccessResult( - &payment.Attempt.Route, *payment.Preimage, - ) + event = *createSuccessResult(payment.HTLCs) // Payment already failed. It is not necessary to register as a // subscriber, because we can send the result on the channel // immediately. case channeldb.StatusFailed: - var route *route.Route - if payment.Attempt != nil { - route = &payment.Attempt.Route - } event = *createFailedResult( - route, *payment.Failure, + payment.HTLCs, *payment.FailureReason, ) default: diff --git a/routing/control_tower_test.go b/routing/control_tower_test.go index 49cc6d43..e326e98c 100644 --- a/routing/control_tower_test.go +++ b/routing/control_tower_test.go @@ -144,10 +144,13 @@ func TestControlTowerSubscribeSuccess(t *testing.T) { if result.Preimage != preimg { t.Fatal("unexpected preimage") } - - if !reflect.DeepEqual(result.Route, &attempt.Route) { - t.Fatalf("unexpected route: %v vs %v", - spew.Sdump(result.Route), + if len(result.HTLCs) != 1 { + t.Fatalf("expected one htlc, got %d", len(result.HTLCs)) + } + htlc := result.HTLCs[0] + if !reflect.DeepEqual(htlc.Route, attempt.Route) { + t.Fatalf("unexpected htlc route: %v vs %v", + spew.Sdump(htlc.Route), spew.Sdump(attempt.Route)) } @@ -168,6 +171,15 @@ func TestControlTowerSubscribeSuccess(t *testing.T) { func TestPaymentControlSubscribeFail(t *testing.T) { t.Parallel() + t.Run("register attempt", func(t *testing.T) { + testPaymentControlSubscribeFail(t, true) + }) + t.Run("no register attempt", func(t *testing.T) { + testPaymentControlSubscribeFail(t, false) + }) +} + +func testPaymentControlSubscribeFail(t *testing.T, registerAttempt bool) { db, err := initDB() if err != nil { t.Fatalf("unable to init db: %v", err) @@ -176,7 +188,7 @@ func TestPaymentControlSubscribeFail(t *testing.T) { pControl := NewControlTower(channeldb.NewPaymentControl(db)) // Initiate a payment. - info, _, _, err := genInfo() + info, attempt, _, err := genInfo() if err != nil { t.Fatal(err) } @@ -192,6 +204,17 @@ func TestPaymentControlSubscribeFail(t *testing.T) { t.Fatalf("expected subscribe to succeed, but got: %v", err) } + // Conditionally register the attempt based on the test type. This + // allows us to simulate failing after attempting with an htlc or before + // making any attempts at all. + if registerAttempt { + // Register an attempt. + err = pControl.RegisterAttempt(info.PaymentHash, attempt) + if err != nil { + t.Fatal(err) + } + } + // Mark the payment as failed. if err := pControl.Fail(info.PaymentHash, channeldb.FailureReasonTimeout); err != nil { t.Fatal(err) @@ -223,9 +246,28 @@ func TestPaymentControlSubscribeFail(t *testing.T) { if result.Success { t.Fatal("unexpected payment state") } - if result.Route != nil { - t.Fatal("expected no route") + + // There will either be one or zero htlcs depending on whether + // or not the attempt was registered. Assert the correct number + // is present, and the route taken if the attempt was + // registered. + if registerAttempt { + if len(result.HTLCs) != 1 { + t.Fatalf("expected 1 htlc, got: %d", + len(result.HTLCs)) + } + + htlc := result.HTLCs[0] + if !reflect.DeepEqual(htlc.Route, testRoute) { + t.Fatalf("unexpected htlc route: %v vs %v", + spew.Sdump(htlc.Route), + spew.Sdump(testRoute)) + } + } else if len(result.HTLCs) != 0 { + t.Fatalf("expected 0 htlcs, got: %d", + len(result.HTLCs)) } + if result.FailureReason != channeldb.FailureReasonTimeout { t.Fatal("unexpected failure reason") }