diff --git a/api/gen/proto/go/teleport/machineid/v1/federation.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go new file mode 100644 index 0000000000000..ae54d9eda14ed --- /dev/null +++ b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go @@ -0,0 +1,620 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc (unknown) +// source: teleport/machineid/v1/federation.proto + +package machineidv1 + +import ( + v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// SPIFFEFederation is a resource that represents the configuration of a trust +// domain federation. +type SPIFFEFederation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The kind of resource represented. + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + // Differentiates variations of the same kind. All resources should + // contain one, even if it is never populated. + SubKind string `protobuf:"bytes,2,opt,name=sub_kind,json=subKind,proto3" json:"sub_kind,omitempty"` + // The version of the resource being represented. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // Common metadata that all resources share. + // Importantly, the name MUST match the name of the trust domain you federate + // with. + Metadata *v1.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The configured properties of the trust domain federation + Spec *SPIFFEFederationSpec `protobuf:"bytes,5,opt,name=spec,proto3" json:"spec,omitempty"` + // Fields that are set by the server as results of operations. These should + // not be modified by users. + Status *SPIFFEFederationStatus `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *SPIFFEFederation) Reset() { + *x = SPIFFEFederation{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederation) ProtoMessage() {} + +func (x *SPIFFEFederation) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederation.ProtoReflect.Descriptor instead. +func (*SPIFFEFederation) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{0} +} + +func (x *SPIFFEFederation) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *SPIFFEFederation) GetSubKind() string { + if x != nil { + return x.SubKind + } + return "" +} + +func (x *SPIFFEFederation) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SPIFFEFederation) GetMetadata() *v1.Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *SPIFFEFederation) GetSpec() *SPIFFEFederationSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *SPIFFEFederation) GetStatus() *SPIFFEFederationStatus { + if x != nil { + return x.Status + } + return nil +} + +// SPIFFEFederationBundleSourceStatic is a static bundle source. It should be an +// option of last resort, as it requires manual updates. +type SPIFFEFederationBundleSourceStatic struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The SPIFFE JWKS bundle. + Bundle string `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` +} + +func (x *SPIFFEFederationBundleSourceStatic) Reset() { + *x = SPIFFEFederationBundleSourceStatic{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederationBundleSourceStatic) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederationBundleSourceStatic) ProtoMessage() {} + +func (x *SPIFFEFederationBundleSourceStatic) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederationBundleSourceStatic.ProtoReflect.Descriptor instead. +func (*SPIFFEFederationBundleSourceStatic) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{1} +} + +func (x *SPIFFEFederationBundleSourceStatic) GetBundle() string { + if x != nil { + return x.Bundle + } + return "" +} + +// SPIFFEFederationBundleSourceHTTPSWeb is a bundle source that fetches the bundle +// from a HTTPS endpoint that is protected by a Web PKI certificate. +type SPIFFEFederationBundleSourceHTTPSWeb struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The URL of the SPIFFE Bundle Endpoint. + BundleEndpointUrl string `protobuf:"bytes,1,opt,name=bundle_endpoint_url,json=bundleEndpointUrl,proto3" json:"bundle_endpoint_url,omitempty"` +} + +func (x *SPIFFEFederationBundleSourceHTTPSWeb) Reset() { + *x = SPIFFEFederationBundleSourceHTTPSWeb{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederationBundleSourceHTTPSWeb) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederationBundleSourceHTTPSWeb) ProtoMessage() {} + +func (x *SPIFFEFederationBundleSourceHTTPSWeb) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederationBundleSourceHTTPSWeb.ProtoReflect.Descriptor instead. +func (*SPIFFEFederationBundleSourceHTTPSWeb) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{2} +} + +func (x *SPIFFEFederationBundleSourceHTTPSWeb) GetBundleEndpointUrl() string { + if x != nil { + return x.BundleEndpointUrl + } + return "" +} + +// SPIFFEFederationBundleSource configures how the federation bundle is sourced. +// Only one field can be set. +type SPIFFEFederationBundleSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Static *SPIFFEFederationBundleSourceStatic `protobuf:"bytes,1,opt,name=static,proto3" json:"static,omitempty"` + HttpsWeb *SPIFFEFederationBundleSourceHTTPSWeb `protobuf:"bytes,2,opt,name=https_web,json=httpsWeb,proto3" json:"https_web,omitempty"` +} + +func (x *SPIFFEFederationBundleSource) Reset() { + *x = SPIFFEFederationBundleSource{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederationBundleSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederationBundleSource) ProtoMessage() {} + +func (x *SPIFFEFederationBundleSource) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederationBundleSource.ProtoReflect.Descriptor instead. +func (*SPIFFEFederationBundleSource) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{3} +} + +func (x *SPIFFEFederationBundleSource) GetStatic() *SPIFFEFederationBundleSourceStatic { + if x != nil { + return x.Static + } + return nil +} + +func (x *SPIFFEFederationBundleSource) GetHttpsWeb() *SPIFFEFederationBundleSourceHTTPSWeb { + if x != nil { + return x.HttpsWeb + } + return nil +} + +// SPIFFEFederationSpec is the configuration of a trust domain federation. +type SPIFFEFederationSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The source of the federation bundle. + BundleSource *SPIFFEFederationBundleSource `protobuf:"bytes,1,opt,name=bundle_source,json=bundleSource,proto3" json:"bundle_source,omitempty"` +} + +func (x *SPIFFEFederationSpec) Reset() { + *x = SPIFFEFederationSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederationSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederationSpec) ProtoMessage() {} + +func (x *SPIFFEFederationSpec) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederationSpec.ProtoReflect.Descriptor instead. +func (*SPIFFEFederationSpec) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{4} +} + +func (x *SPIFFEFederationSpec) GetBundleSource() *SPIFFEFederationBundleSource { + if x != nil { + return x.BundleSource + } + return nil +} + +// FederationStatus is the status of a trust domain federation. +type SPIFFEFederationStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The most recently fetched bundle from the federated trust domain. + CurrentBundle string `protobuf:"bytes,1,opt,name=current_bundle,json=currentBundle,proto3" json:"current_bundle,omitempty"` + // The time that the most recently fetched bundle was obtained. + CurrentBundleSyncedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=current_bundle_synced_at,json=currentBundleSyncedAt,proto3" json:"current_bundle_synced_at,omitempty"` + // The duration that the current bundle suggests the next bundle should be + // refresh after. + CurrentBundleRefreshHint *durationpb.Duration `protobuf:"bytes,3,opt,name=current_bundle_refresh_hint,json=currentBundleRefreshHint,proto3" json:"current_bundle_refresh_hint,omitempty"` +} + +func (x *SPIFFEFederationStatus) Reset() { + *x = SPIFFEFederationStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SPIFFEFederationStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SPIFFEFederationStatus) ProtoMessage() {} + +func (x *SPIFFEFederationStatus) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SPIFFEFederationStatus.ProtoReflect.Descriptor instead. +func (*SPIFFEFederationStatus) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_proto_rawDescGZIP(), []int{5} +} + +func (x *SPIFFEFederationStatus) GetCurrentBundle() string { + if x != nil { + return x.CurrentBundle + } + return "" +} + +func (x *SPIFFEFederationStatus) GetCurrentBundleSyncedAt() *timestamppb.Timestamp { + if x != nil { + return x.CurrentBundleSyncedAt + } + return nil +} + +func (x *SPIFFEFederationStatus) GetCurrentBundleRefreshHint() *durationpb.Duration { + if x != nil { + return x.CurrentBundleRefreshHint + } + return nil +} + +var File_teleport_machineid_v1_federation_proto protoreflect.FileDescriptor + +var file_teleport_machineid_v1_federation_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x1a, + 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x02, 0x0a, 0x10, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, + 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x75, 0x62, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x73, 0x75, 0x62, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x22, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x22, 0x56, 0x0a, 0x24, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x54, 0x54, 0x50, 0x53, 0x57, 0x65, 0x62, 0x12, 0x2e, 0x0a, 0x13, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x72, 0x6c, 0x22, 0xcb, 0x01, 0x0a, 0x1c, 0x53, 0x50, + 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x63, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x12, 0x58, 0x0a, + 0x09, 0x68, 0x74, 0x74, 0x70, 0x73, 0x5f, 0x77, 0x65, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, + 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x54, 0x54, 0x50, 0x53, 0x57, 0x65, 0x62, 0x52, 0x08, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x57, 0x65, 0x62, 0x22, 0x70, 0x0a, 0x14, 0x53, 0x50, 0x49, 0x46, 0x46, + 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x58, 0x0a, 0x0d, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xee, 0x01, 0x0a, 0x16, 0x53, 0x50, + 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x53, 0x0a, 0x18, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x79, + 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x58, 0x0a, 0x1b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x18, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x48, 0x69, 0x6e, 0x74, 0x42, 0x56, 0x5a, 0x54, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_machineid_v1_federation_proto_rawDescOnce sync.Once + file_teleport_machineid_v1_federation_proto_rawDescData = file_teleport_machineid_v1_federation_proto_rawDesc +) + +func file_teleport_machineid_v1_federation_proto_rawDescGZIP() []byte { + file_teleport_machineid_v1_federation_proto_rawDescOnce.Do(func() { + file_teleport_machineid_v1_federation_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_machineid_v1_federation_proto_rawDescData) + }) + return file_teleport_machineid_v1_federation_proto_rawDescData +} + +var file_teleport_machineid_v1_federation_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_teleport_machineid_v1_federation_proto_goTypes = []any{ + (*SPIFFEFederation)(nil), // 0: teleport.machineid.v1.SPIFFEFederation + (*SPIFFEFederationBundleSourceStatic)(nil), // 1: teleport.machineid.v1.SPIFFEFederationBundleSourceStatic + (*SPIFFEFederationBundleSourceHTTPSWeb)(nil), // 2: teleport.machineid.v1.SPIFFEFederationBundleSourceHTTPSWeb + (*SPIFFEFederationBundleSource)(nil), // 3: teleport.machineid.v1.SPIFFEFederationBundleSource + (*SPIFFEFederationSpec)(nil), // 4: teleport.machineid.v1.SPIFFEFederationSpec + (*SPIFFEFederationStatus)(nil), // 5: teleport.machineid.v1.SPIFFEFederationStatus + (*v1.Metadata)(nil), // 6: teleport.header.v1.Metadata + (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 8: google.protobuf.Duration +} +var file_teleport_machineid_v1_federation_proto_depIdxs = []int32{ + 6, // 0: teleport.machineid.v1.SPIFFEFederation.metadata:type_name -> teleport.header.v1.Metadata + 4, // 1: teleport.machineid.v1.SPIFFEFederation.spec:type_name -> teleport.machineid.v1.SPIFFEFederationSpec + 5, // 2: teleport.machineid.v1.SPIFFEFederation.status:type_name -> teleport.machineid.v1.SPIFFEFederationStatus + 1, // 3: teleport.machineid.v1.SPIFFEFederationBundleSource.static:type_name -> teleport.machineid.v1.SPIFFEFederationBundleSourceStatic + 2, // 4: teleport.machineid.v1.SPIFFEFederationBundleSource.https_web:type_name -> teleport.machineid.v1.SPIFFEFederationBundleSourceHTTPSWeb + 3, // 5: teleport.machineid.v1.SPIFFEFederationSpec.bundle_source:type_name -> teleport.machineid.v1.SPIFFEFederationBundleSource + 7, // 6: teleport.machineid.v1.SPIFFEFederationStatus.current_bundle_synced_at:type_name -> google.protobuf.Timestamp + 8, // 7: teleport.machineid.v1.SPIFFEFederationStatus.current_bundle_refresh_hint:type_name -> google.protobuf.Duration + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_teleport_machineid_v1_federation_proto_init() } +func file_teleport_machineid_v1_federation_proto_init() { + if File_teleport_machineid_v1_federation_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_teleport_machineid_v1_federation_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederationBundleSourceStatic); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederationBundleSourceHTTPSWeb); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederationBundleSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederationSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*SPIFFEFederationStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_machineid_v1_federation_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_teleport_machineid_v1_federation_proto_goTypes, + DependencyIndexes: file_teleport_machineid_v1_federation_proto_depIdxs, + MessageInfos: file_teleport_machineid_v1_federation_proto_msgTypes, + }.Build() + File_teleport_machineid_v1_federation_proto = out.File + file_teleport_machineid_v1_federation_proto_rawDesc = nil + file_teleport_machineid_v1_federation_proto_goTypes = nil + file_teleport_machineid_v1_federation_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go new file mode 100644 index 0000000000000..84df89d5208c8 --- /dev/null +++ b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go @@ -0,0 +1,510 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc (unknown) +// source: teleport/machineid/v1/federation_service.proto + +package machineidv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GetSPIFFEFederationRequest +type GetSPIFFEFederationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetSPIFFEFederationRequest) Reset() { + *x = GetSPIFFEFederationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSPIFFEFederationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSPIFFEFederationRequest) ProtoMessage() {} + +func (x *GetSPIFFEFederationRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSPIFFEFederationRequest.ProtoReflect.Descriptor instead. +func (*GetSPIFFEFederationRequest) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_service_proto_rawDescGZIP(), []int{0} +} + +func (x *GetSPIFFEFederationRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Request for ListSPIFFEFederations. +// +// Follows the pagination semantics of +// https://cloud.google.com/apis/design/standard_methods#list +type ListSPIFFEFederationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The maximum number of items to return. + // The server may impose a different page size at its discretion. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // The page_token value returned from a previous ListBotInstances request, if + // any. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListSPIFFEFederationsRequest) Reset() { + *x = ListSPIFFEFederationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSPIFFEFederationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSPIFFEFederationsRequest) ProtoMessage() {} + +func (x *ListSPIFFEFederationsRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListSPIFFEFederationsRequest.ProtoReflect.Descriptor instead. +func (*ListSPIFFEFederationsRequest) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ListSPIFFEFederationsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListSPIFFEFederationsRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// ListSPIFFEFederationsResponse +type ListSPIFFEFederationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SpiffeFederations []*SPIFFEFederation `protobuf:"bytes,1,rep,name=spiffe_federations,json=spiffeFederations,proto3" json:"spiffe_federations,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results exist. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListSPIFFEFederationsResponse) Reset() { + *x = ListSPIFFEFederationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSPIFFEFederationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSPIFFEFederationsResponse) ProtoMessage() {} + +func (x *ListSPIFFEFederationsResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListSPIFFEFederationsResponse.ProtoReflect.Descriptor instead. +func (*ListSPIFFEFederationsResponse) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ListSPIFFEFederationsResponse) GetSpiffeFederations() []*SPIFFEFederation { + if x != nil { + return x.SpiffeFederations + } + return nil +} + +func (x *ListSPIFFEFederationsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +// DeleteSPIFFEFederationRequest +type DeleteSPIFFEFederationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeleteSPIFFEFederationRequest) Reset() { + *x = DeleteSPIFFEFederationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteSPIFFEFederationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteSPIFFEFederationRequest) ProtoMessage() {} + +func (x *DeleteSPIFFEFederationRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteSPIFFEFederationRequest.ProtoReflect.Descriptor instead. +func (*DeleteSPIFFEFederationRequest) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_service_proto_rawDescGZIP(), []int{3} +} + +func (x *DeleteSPIFFEFederationRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// CreateSPIFFEFederationRequest +type CreateSPIFFEFederationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SpiffeFederation *SPIFFEFederation `protobuf:"bytes,1,opt,name=spiffe_federation,json=spiffeFederation,proto3" json:"spiffe_federation,omitempty"` +} + +func (x *CreateSPIFFEFederationRequest) Reset() { + *x = CreateSPIFFEFederationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateSPIFFEFederationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSPIFFEFederationRequest) ProtoMessage() {} + +func (x *CreateSPIFFEFederationRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_machineid_v1_federation_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSPIFFEFederationRequest.ProtoReflect.Descriptor instead. +func (*CreateSPIFFEFederationRequest) Descriptor() ([]byte, []int) { + return file_teleport_machineid_v1_federation_service_proto_rawDescGZIP(), []int{4} +} + +func (x *CreateSPIFFEFederationRequest) GetSpiffeFederation() *SPIFFEFederation { + if x != nil { + return x.SpiffeFederation + } + return nil +} + +var File_teleport_machineid_v1_federation_service_proto protoreflect.FileDescriptor + +var file_teleport_machineid_v1_federation_service_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x15, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x65, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x30, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5a, + 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x1d, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x12, + 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x11, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, + 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x33, 0x0a, 0x1d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x75, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x50, 0x49, 0x46, 0x46, + 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x66, 0x65, 0x64, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x46, 0x65, + 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xf2, 0x03, 0x0a, 0x17, 0x53, 0x50, 0x49, + 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, + 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x50, + 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x16, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x77, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x50, + 0x49, 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x50, 0x49, + 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x50, 0x49, + 0x46, 0x46, 0x45, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x56, 0x5a, + 0x54, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x69, 0x64, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_machineid_v1_federation_service_proto_rawDescOnce sync.Once + file_teleport_machineid_v1_federation_service_proto_rawDescData = file_teleport_machineid_v1_federation_service_proto_rawDesc +) + +func file_teleport_machineid_v1_federation_service_proto_rawDescGZIP() []byte { + file_teleport_machineid_v1_federation_service_proto_rawDescOnce.Do(func() { + file_teleport_machineid_v1_federation_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_machineid_v1_federation_service_proto_rawDescData) + }) + return file_teleport_machineid_v1_federation_service_proto_rawDescData +} + +var file_teleport_machineid_v1_federation_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_teleport_machineid_v1_federation_service_proto_goTypes = []any{ + (*GetSPIFFEFederationRequest)(nil), // 0: teleport.machineid.v1.GetSPIFFEFederationRequest + (*ListSPIFFEFederationsRequest)(nil), // 1: teleport.machineid.v1.ListSPIFFEFederationsRequest + (*ListSPIFFEFederationsResponse)(nil), // 2: teleport.machineid.v1.ListSPIFFEFederationsResponse + (*DeleteSPIFFEFederationRequest)(nil), // 3: teleport.machineid.v1.DeleteSPIFFEFederationRequest + (*CreateSPIFFEFederationRequest)(nil), // 4: teleport.machineid.v1.CreateSPIFFEFederationRequest + (*SPIFFEFederation)(nil), // 5: teleport.machineid.v1.SPIFFEFederation + (*emptypb.Empty)(nil), // 6: google.protobuf.Empty +} +var file_teleport_machineid_v1_federation_service_proto_depIdxs = []int32{ + 5, // 0: teleport.machineid.v1.ListSPIFFEFederationsResponse.spiffe_federations:type_name -> teleport.machineid.v1.SPIFFEFederation + 5, // 1: teleport.machineid.v1.CreateSPIFFEFederationRequest.spiffe_federation:type_name -> teleport.machineid.v1.SPIFFEFederation + 0, // 2: teleport.machineid.v1.SPIFFEFederationService.GetSPIFFEFederation:input_type -> teleport.machineid.v1.GetSPIFFEFederationRequest + 1, // 3: teleport.machineid.v1.SPIFFEFederationService.ListSPIFFEFederations:input_type -> teleport.machineid.v1.ListSPIFFEFederationsRequest + 3, // 4: teleport.machineid.v1.SPIFFEFederationService.DeleteSPIFFEFederation:input_type -> teleport.machineid.v1.DeleteSPIFFEFederationRequest + 4, // 5: teleport.machineid.v1.SPIFFEFederationService.CreateSPIFFEFederation:input_type -> teleport.machineid.v1.CreateSPIFFEFederationRequest + 5, // 6: teleport.machineid.v1.SPIFFEFederationService.GetSPIFFEFederation:output_type -> teleport.machineid.v1.SPIFFEFederation + 2, // 7: teleport.machineid.v1.SPIFFEFederationService.ListSPIFFEFederations:output_type -> teleport.machineid.v1.ListSPIFFEFederationsResponse + 6, // 8: teleport.machineid.v1.SPIFFEFederationService.DeleteSPIFFEFederation:output_type -> google.protobuf.Empty + 5, // 9: teleport.machineid.v1.SPIFFEFederationService.CreateSPIFFEFederation:output_type -> teleport.machineid.v1.SPIFFEFederation + 6, // [6:10] is the sub-list for method output_type + 2, // [2:6] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_teleport_machineid_v1_federation_service_proto_init() } +func file_teleport_machineid_v1_federation_service_proto_init() { + if File_teleport_machineid_v1_federation_service_proto != nil { + return + } + file_teleport_machineid_v1_federation_proto_init() + if !protoimpl.UnsafeEnabled { + file_teleport_machineid_v1_federation_service_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*GetSPIFFEFederationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_service_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*ListSPIFFEFederationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_service_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*ListSPIFFEFederationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_service_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*DeleteSPIFFEFederationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_machineid_v1_federation_service_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*CreateSPIFFEFederationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_machineid_v1_federation_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_teleport_machineid_v1_federation_service_proto_goTypes, + DependencyIndexes: file_teleport_machineid_v1_federation_service_proto_depIdxs, + MessageInfos: file_teleport_machineid_v1_federation_service_proto_msgTypes, + }.Build() + File_teleport_machineid_v1_federation_service_proto = out.File + file_teleport_machineid_v1_federation_service_proto_rawDesc = nil + file_teleport_machineid_v1_federation_service_proto_goTypes = nil + file_teleport_machineid_v1_federation_service_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/machineid/v1/federation_service_grpc.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation_service_grpc.pb.go new file mode 100644 index 0000000000000..6c8e886d4034b --- /dev/null +++ b/api/gen/proto/go/teleport/machineid/v1/federation_service_grpc.pb.go @@ -0,0 +1,263 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.0 +// - protoc (unknown) +// source: teleport/machineid/v1/federation_service.proto + +package machineidv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SPIFFEFederationService_GetSPIFFEFederation_FullMethodName = "/teleport.machineid.v1.SPIFFEFederationService/GetSPIFFEFederation" + SPIFFEFederationService_ListSPIFFEFederations_FullMethodName = "/teleport.machineid.v1.SPIFFEFederationService/ListSPIFFEFederations" + SPIFFEFederationService_DeleteSPIFFEFederation_FullMethodName = "/teleport.machineid.v1.SPIFFEFederationService/DeleteSPIFFEFederation" + SPIFFEFederationService_CreateSPIFFEFederation_FullMethodName = "/teleport.machineid.v1.SPIFFEFederationService/CreateSPIFFEFederation" +) + +// SPIFFEFederationServiceClient is the client API for SPIFFEFederationService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// SPIFFEFederation +type SPIFFEFederationServiceClient interface { + // GetSPIFFEFederation + GetSPIFFEFederation(ctx context.Context, in *GetSPIFFEFederationRequest, opts ...grpc.CallOption) (*SPIFFEFederation, error) + // ListSPIFFEFederations + ListSPIFFEFederations(ctx context.Context, in *ListSPIFFEFederationsRequest, opts ...grpc.CallOption) (*ListSPIFFEFederationsResponse, error) + // DeleteSPIFFEFederation + DeleteSPIFFEFederation(ctx context.Context, in *DeleteSPIFFEFederationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // CreateSPIFFEFederation + CreateSPIFFEFederation(ctx context.Context, in *CreateSPIFFEFederationRequest, opts ...grpc.CallOption) (*SPIFFEFederation, error) +} + +type sPIFFEFederationServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSPIFFEFederationServiceClient(cc grpc.ClientConnInterface) SPIFFEFederationServiceClient { + return &sPIFFEFederationServiceClient{cc} +} + +func (c *sPIFFEFederationServiceClient) GetSPIFFEFederation(ctx context.Context, in *GetSPIFFEFederationRequest, opts ...grpc.CallOption) (*SPIFFEFederation, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SPIFFEFederation) + err := c.cc.Invoke(ctx, SPIFFEFederationService_GetSPIFFEFederation_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sPIFFEFederationServiceClient) ListSPIFFEFederations(ctx context.Context, in *ListSPIFFEFederationsRequest, opts ...grpc.CallOption) (*ListSPIFFEFederationsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListSPIFFEFederationsResponse) + err := c.cc.Invoke(ctx, SPIFFEFederationService_ListSPIFFEFederations_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sPIFFEFederationServiceClient) DeleteSPIFFEFederation(ctx context.Context, in *DeleteSPIFFEFederationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SPIFFEFederationService_DeleteSPIFFEFederation_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sPIFFEFederationServiceClient) CreateSPIFFEFederation(ctx context.Context, in *CreateSPIFFEFederationRequest, opts ...grpc.CallOption) (*SPIFFEFederation, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SPIFFEFederation) + err := c.cc.Invoke(ctx, SPIFFEFederationService_CreateSPIFFEFederation_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SPIFFEFederationServiceServer is the server API for SPIFFEFederationService service. +// All implementations must embed UnimplementedSPIFFEFederationServiceServer +// for forward compatibility. +// +// SPIFFEFederation +type SPIFFEFederationServiceServer interface { + // GetSPIFFEFederation + GetSPIFFEFederation(context.Context, *GetSPIFFEFederationRequest) (*SPIFFEFederation, error) + // ListSPIFFEFederations + ListSPIFFEFederations(context.Context, *ListSPIFFEFederationsRequest) (*ListSPIFFEFederationsResponse, error) + // DeleteSPIFFEFederation + DeleteSPIFFEFederation(context.Context, *DeleteSPIFFEFederationRequest) (*emptypb.Empty, error) + // CreateSPIFFEFederation + CreateSPIFFEFederation(context.Context, *CreateSPIFFEFederationRequest) (*SPIFFEFederation, error) + mustEmbedUnimplementedSPIFFEFederationServiceServer() +} + +// UnimplementedSPIFFEFederationServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSPIFFEFederationServiceServer struct{} + +func (UnimplementedSPIFFEFederationServiceServer) GetSPIFFEFederation(context.Context, *GetSPIFFEFederationRequest) (*SPIFFEFederation, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSPIFFEFederation not implemented") +} +func (UnimplementedSPIFFEFederationServiceServer) ListSPIFFEFederations(context.Context, *ListSPIFFEFederationsRequest) (*ListSPIFFEFederationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListSPIFFEFederations not implemented") +} +func (UnimplementedSPIFFEFederationServiceServer) DeleteSPIFFEFederation(context.Context, *DeleteSPIFFEFederationRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteSPIFFEFederation not implemented") +} +func (UnimplementedSPIFFEFederationServiceServer) CreateSPIFFEFederation(context.Context, *CreateSPIFFEFederationRequest) (*SPIFFEFederation, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateSPIFFEFederation not implemented") +} +func (UnimplementedSPIFFEFederationServiceServer) mustEmbedUnimplementedSPIFFEFederationServiceServer() { +} +func (UnimplementedSPIFFEFederationServiceServer) testEmbeddedByValue() {} + +// UnsafeSPIFFEFederationServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SPIFFEFederationServiceServer will +// result in compilation errors. +type UnsafeSPIFFEFederationServiceServer interface { + mustEmbedUnimplementedSPIFFEFederationServiceServer() +} + +func RegisterSPIFFEFederationServiceServer(s grpc.ServiceRegistrar, srv SPIFFEFederationServiceServer) { + // If the following call pancis, it indicates UnimplementedSPIFFEFederationServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&SPIFFEFederationService_ServiceDesc, srv) +} + +func _SPIFFEFederationService_GetSPIFFEFederation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSPIFFEFederationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SPIFFEFederationServiceServer).GetSPIFFEFederation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SPIFFEFederationService_GetSPIFFEFederation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SPIFFEFederationServiceServer).GetSPIFFEFederation(ctx, req.(*GetSPIFFEFederationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SPIFFEFederationService_ListSPIFFEFederations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSPIFFEFederationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SPIFFEFederationServiceServer).ListSPIFFEFederations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SPIFFEFederationService_ListSPIFFEFederations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SPIFFEFederationServiceServer).ListSPIFFEFederations(ctx, req.(*ListSPIFFEFederationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SPIFFEFederationService_DeleteSPIFFEFederation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSPIFFEFederationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SPIFFEFederationServiceServer).DeleteSPIFFEFederation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SPIFFEFederationService_DeleteSPIFFEFederation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SPIFFEFederationServiceServer).DeleteSPIFFEFederation(ctx, req.(*DeleteSPIFFEFederationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SPIFFEFederationService_CreateSPIFFEFederation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSPIFFEFederationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SPIFFEFederationServiceServer).CreateSPIFFEFederation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SPIFFEFederationService_CreateSPIFFEFederation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SPIFFEFederationServiceServer).CreateSPIFFEFederation(ctx, req.(*CreateSPIFFEFederationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SPIFFEFederationService_ServiceDesc is the grpc.ServiceDesc for SPIFFEFederationService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SPIFFEFederationService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "teleport.machineid.v1.SPIFFEFederationService", + HandlerType: (*SPIFFEFederationServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetSPIFFEFederation", + Handler: _SPIFFEFederationService_GetSPIFFEFederation_Handler, + }, + { + MethodName: "ListSPIFFEFederations", + Handler: _SPIFFEFederationService_ListSPIFFEFederations_Handler, + }, + { + MethodName: "DeleteSPIFFEFederation", + Handler: _SPIFFEFederationService_DeleteSPIFFEFederation_Handler, + }, + { + MethodName: "CreateSPIFFEFederation", + Handler: _SPIFFEFederationService_CreateSPIFFEFederation_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "teleport/machineid/v1/federation_service.proto", +} diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index c4a4bb1c6ad15..fa4f1221220fd 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -4454,6 +4454,8 @@ message OneOf { events.IntegrationCreate IntegrationCreate = 165; events.IntegrationUpdate IntegrationUpdate = 166; events.IntegrationDelete IntegrationDelete = 167; + events.SPIFFEFederationCreate SPIFFEFederationCreate = 168; + events.SPIFFEFederationDelete SPIFFEFederationDelete = 169; } } @@ -6664,3 +6666,65 @@ message AccessGraphSettingsUpdate { (gogoproto.jsontag) = "" ]; } + +// SPIFFEFederationCreate is emitted when a SPIFFE federation is created. +message SPIFFEFederationCreate { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; +} + +// SPIFFEFederationDelete is emitted when a SPIFFE federation is deleted. +message SPIFFEFederationDelete { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; +} diff --git a/api/proto/teleport/machineid/v1/federation.proto b/api/proto/teleport/machineid/v1/federation.proto new file mode 100644 index 0000000000000..343b8e0f8efa6 --- /dev/null +++ b/api/proto/teleport/machineid/v1/federation.proto @@ -0,0 +1,67 @@ +syntax = "proto3"; +package teleport.machineid.v1; + +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "teleport/header/v1/metadata.proto"; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1;machineidv1"; + +// SPIFFEFederation is a resource that represents the configuration of a trust +// domain federation. +message SPIFFEFederation { + // The kind of resource represented. + string kind = 1; + // Differentiates variations of the same kind. All resources should + // contain one, even if it is never populated. + string sub_kind = 2; + // The version of the resource being represented. + string version = 3; + // Common metadata that all resources share. + // Importantly, the name MUST match the name of the trust domain you federate + // with. + teleport.header.v1.Metadata metadata = 4; + // The configured properties of the trust domain federation + SPIFFEFederationSpec spec = 5; + // Fields that are set by the server as results of operations. These should + // not be modified by users. + SPIFFEFederationStatus status = 6; +} + +// SPIFFEFederationBundleSourceStatic is a static bundle source. It should be an +// option of last resort, as it requires manual updates. +message SPIFFEFederationBundleSourceStatic { + // The SPIFFE JWKS bundle. + string bundle = 1; +} + +// SPIFFEFederationBundleSourceHTTPSWeb is a bundle source that fetches the bundle +// from a HTTPS endpoint that is protected by a Web PKI certificate. +message SPIFFEFederationBundleSourceHTTPSWeb { + // The URL of the SPIFFE Bundle Endpoint. + string bundle_endpoint_url = 1; +} + +// SPIFFEFederationBundleSource configures how the federation bundle is sourced. +// Only one field can be set. +message SPIFFEFederationBundleSource { + SPIFFEFederationBundleSourceStatic static = 1; + SPIFFEFederationBundleSourceHTTPSWeb https_web = 2; +} + +// SPIFFEFederationSpec is the configuration of a trust domain federation. +message SPIFFEFederationSpec { + // The source of the federation bundle. + SPIFFEFederationBundleSource bundle_source = 1; +} + +// FederationStatus is the status of a trust domain federation. +message SPIFFEFederationStatus { + // The most recently fetched bundle from the federated trust domain. + string current_bundle = 1; + // The time that the most recently fetched bundle was obtained. + google.protobuf.Timestamp current_bundle_synced_at = 2; + // The duration that the current bundle suggests the next bundle should be + // refresh after. + google.protobuf.Duration current_bundle_refresh_hint = 3; +} diff --git a/api/proto/teleport/machineid/v1/federation_service.proto b/api/proto/teleport/machineid/v1/federation_service.proto new file mode 100644 index 0000000000000..1526f6ae402be --- /dev/null +++ b/api/proto/teleport/machineid/v1/federation_service.proto @@ -0,0 +1,70 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package teleport.machineid.v1; + +import "google/protobuf/empty.proto"; +import "teleport/machineid/v1/federation.proto"; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1;machineidv1"; + +// GetSPIFFEFederationRequest +message GetSPIFFEFederationRequest { + string name = 1; +} + +// Request for ListSPIFFEFederations. +// +// Follows the pagination semantics of +// https://cloud.google.com/apis/design/standard_methods#list +message ListSPIFFEFederationsRequest { + // The maximum number of items to return. + // The server may impose a different page size at its discretion. + int32 page_size = 1; + // The page_token value returned from a previous ListBotInstances request, if + // any. + string page_token = 2; +} + +// ListSPIFFEFederationsResponse +message ListSPIFFEFederationsResponse { + repeated SPIFFEFederation spiffe_federations = 1; + // Token to retrieve the next page of results, or empty if there are no + // more results exist. + string next_page_token = 2; +} + +// DeleteSPIFFEFederationRequest +message DeleteSPIFFEFederationRequest { + string name = 1; +} + +// CreateSPIFFEFederationRequest +message CreateSPIFFEFederationRequest { + SPIFFEFederation spiffe_federation = 1; +} + +// SPIFFEFederation +service SPIFFEFederationService { + // GetSPIFFEFederation + rpc GetSPIFFEFederation(GetSPIFFEFederationRequest) returns (SPIFFEFederation); + // ListSPIFFEFederations + rpc ListSPIFFEFederations(ListSPIFFEFederationsRequest) returns (ListSPIFFEFederationsResponse); + // DeleteSPIFFEFederation + rpc DeleteSPIFFEFederation(DeleteSPIFFEFederationRequest) returns (google.protobuf.Empty); + // CreateSPIFFEFederation + rpc CreateSPIFFEFederation(CreateSPIFFEFederationRequest) returns (SPIFFEFederation); +} diff --git a/api/types/constants.go b/api/types/constants.go index f598dcf32e760..8eb83f9b748e0 100644 --- a/api/types/constants.go +++ b/api/types/constants.go @@ -67,6 +67,8 @@ const ( KindBot = "bot" // KindBotInstance is an instance of a Machine ID bot KindBotInstance = "bot_instance" + // KindSPIFFEFederation is a SPIFFE federation resource + KindSPIFFEFederation = "spiffe_federation" // KindHostCert is a host certificate KindHostCert = "host_cert" diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index dc74c9474cc7a..9fdd549ad7b36 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -7513,6 +7513,8 @@ type OneOf struct { // *OneOf_IntegrationCreate // *OneOf_IntegrationUpdate // *OneOf_IntegrationDelete + // *OneOf_SPIFFEFederationCreate + // *OneOf_SPIFFEFederationDelete Event isOneOf_Event `protobuf_oneof:"Event"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -8056,6 +8058,12 @@ type OneOf_IntegrationUpdate struct { type OneOf_IntegrationDelete struct { IntegrationDelete *IntegrationDelete `protobuf:"bytes,167,opt,name=IntegrationDelete,proto3,oneof" json:"IntegrationDelete,omitempty"` } +type OneOf_SPIFFEFederationCreate struct { + SPIFFEFederationCreate *SPIFFEFederationCreate `protobuf:"bytes,168,opt,name=SPIFFEFederationCreate,proto3,oneof" json:"SPIFFEFederationCreate,omitempty"` +} +type OneOf_SPIFFEFederationDelete struct { + SPIFFEFederationDelete *SPIFFEFederationDelete `protobuf:"bytes,169,opt,name=SPIFFEFederationDelete,proto3,oneof" json:"SPIFFEFederationDelete,omitempty"` +} func (*OneOf_UserLogin) isOneOf_Event() {} func (*OneOf_UserCreate) isOneOf_Event() {} @@ -8223,6 +8231,8 @@ func (*OneOf_AccessGraphSettingsUpdate) isOneOf_Event() {} func (*OneOf_IntegrationCreate) isOneOf_Event() {} func (*OneOf_IntegrationUpdate) isOneOf_Event() {} func (*OneOf_IntegrationDelete) isOneOf_Event() {} +func (*OneOf_SPIFFEFederationCreate) isOneOf_Event() {} +func (*OneOf_SPIFFEFederationDelete) isOneOf_Event() {} func (m *OneOf) GetEvent() isOneOf_Event { if m != nil { @@ -9393,6 +9403,20 @@ func (m *OneOf) GetIntegrationDelete() *IntegrationDelete { return nil } +func (m *OneOf) GetSPIFFEFederationCreate() *SPIFFEFederationCreate { + if x, ok := m.GetEvent().(*OneOf_SPIFFEFederationCreate); ok { + return x.SPIFFEFederationCreate + } + return nil +} + +func (m *OneOf) GetSPIFFEFederationDelete() *SPIFFEFederationDelete { + if x, ok := m.GetEvent().(*OneOf_SPIFFEFederationDelete); ok { + return x.SPIFFEFederationDelete + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*OneOf) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -9562,6 +9586,8 @@ func (*OneOf) XXX_OneofWrappers() []interface{} { (*OneOf_IntegrationCreate)(nil), (*OneOf_IntegrationUpdate)(nil), (*OneOf_IntegrationDelete)(nil), + (*OneOf_SPIFFEFederationCreate)(nil), + (*OneOf_SPIFFEFederationDelete)(nil), } } @@ -13386,6 +13412,102 @@ func (m *AccessGraphSettingsUpdate) XXX_DiscardUnknown() { var xxx_messageInfo_AccessGraphSettingsUpdate proto.InternalMessageInfo +// SPIFFEFederationCreate is emitted when a SPIFFE federation is created. +type SPIFFEFederationCreate struct { + // Metadata is a common event metadata + Metadata `protobuf:"bytes,1,opt,name=Metadata,proto3,embedded=Metadata" json:""` + // ResourceMetadata is a common resource event metadata + ResourceMetadata `protobuf:"bytes,2,opt,name=Resource,proto3,embedded=Resource" json:""` + // User is a common user event metadata + UserMetadata `protobuf:"bytes,3,opt,name=User,proto3,embedded=User" json:""` + // ConnectionMetadata holds information about the connection + ConnectionMetadata `protobuf:"bytes,4,opt,name=Connection,proto3,embedded=Connection" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SPIFFEFederationCreate) Reset() { *m = SPIFFEFederationCreate{} } +func (m *SPIFFEFederationCreate) String() string { return proto.CompactTextString(m) } +func (*SPIFFEFederationCreate) ProtoMessage() {} +func (*SPIFFEFederationCreate) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{209} +} +func (m *SPIFFEFederationCreate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SPIFFEFederationCreate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SPIFFEFederationCreate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SPIFFEFederationCreate) XXX_Merge(src proto.Message) { + xxx_messageInfo_SPIFFEFederationCreate.Merge(m, src) +} +func (m *SPIFFEFederationCreate) XXX_Size() int { + return m.Size() +} +func (m *SPIFFEFederationCreate) XXX_DiscardUnknown() { + xxx_messageInfo_SPIFFEFederationCreate.DiscardUnknown(m) +} + +var xxx_messageInfo_SPIFFEFederationCreate proto.InternalMessageInfo + +// SPIFFEFederationDelete is emitted when a SPIFFE federation is deleted. +type SPIFFEFederationDelete struct { + // Metadata is a common event metadata + Metadata `protobuf:"bytes,1,opt,name=Metadata,proto3,embedded=Metadata" json:""` + // ResourceMetadata is a common resource event metadata + ResourceMetadata `protobuf:"bytes,2,opt,name=Resource,proto3,embedded=Resource" json:""` + // User is a common user event metadata + UserMetadata `protobuf:"bytes,3,opt,name=User,proto3,embedded=User" json:""` + // ConnectionMetadata holds information about the connection + ConnectionMetadata `protobuf:"bytes,4,opt,name=Connection,proto3,embedded=Connection" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SPIFFEFederationDelete) Reset() { *m = SPIFFEFederationDelete{} } +func (m *SPIFFEFederationDelete) String() string { return proto.CompactTextString(m) } +func (*SPIFFEFederationDelete) ProtoMessage() {} +func (*SPIFFEFederationDelete) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{210} +} +func (m *SPIFFEFederationDelete) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SPIFFEFederationDelete) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SPIFFEFederationDelete.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SPIFFEFederationDelete) XXX_Merge(src proto.Message) { + xxx_messageInfo_SPIFFEFederationDelete.Merge(m, src) +} +func (m *SPIFFEFederationDelete) XXX_Size() int { + return m.Size() +} +func (m *SPIFFEFederationDelete) XXX_DiscardUnknown() { + xxx_messageInfo_SPIFFEFederationDelete.DiscardUnknown(m) +} + +var xxx_messageInfo_SPIFFEFederationDelete proto.InternalMessageInfo + func init() { proto.RegisterEnum("events.UserKind", UserKind_name, UserKind_value) proto.RegisterEnum("events.EventAction", EventAction_name, EventAction_value) @@ -13619,6 +13741,8 @@ func init() { proto.RegisterType((*AccessPathChanged)(nil), "events.AccessPathChanged") proto.RegisterType((*SpannerRPC)(nil), "events.SpannerRPC") proto.RegisterType((*AccessGraphSettingsUpdate)(nil), "events.AccessGraphSettingsUpdate") + proto.RegisterType((*SPIFFEFederationCreate)(nil), "events.SPIFFEFederationCreate") + proto.RegisterType((*SPIFFEFederationDelete)(nil), "events.SPIFFEFederationDelete") } func init() { @@ -13626,987 +13750,990 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 15665 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x5b, 0x74, 0x24, 0xc7, - 0x75, 0x20, 0x88, 0x7a, 0xa0, 0x00, 0x5c, 0x3c, 0x1a, 0x88, 0x7e, 0x25, 0x9b, 0xdd, 0x5d, 0x64, - 0x52, 0x6c, 0x75, 0x53, 0x64, 0xb7, 0xd8, 0x6c, 0x92, 0xe2, 0x4b, 0x64, 0x01, 0x05, 0x34, 0x8a, - 0x8d, 0x17, 0xb3, 0xd0, 0xdd, 0xa2, 0x5e, 0xe5, 0x44, 0x65, 0x00, 0x48, 0xa2, 0x2a, 0xb3, 0x94, - 0x99, 0xd5, 0x68, 0x70, 0x5f, 0x96, 0xd7, 0x0f, 0xc9, 0x2b, 0xc9, 0x5a, 0x79, 0x6d, 0xd9, 0x6b, - 0xef, 0x5a, 0x7e, 0xed, 0x7a, 0x7d, 0xbc, 0xf6, 0x7a, 0xd7, 0xc7, 0xb6, 0xec, 0xd5, 0x59, 0x7b, - 0xb5, 0x0f, 0x7a, 0x75, 0xbc, 0xc7, 0xf6, 0xee, 0xf8, 0xf8, 0xcc, 0x78, 0x20, 0x8f, 0x66, 0x3c, - 0x1f, 0x38, 0x33, 0xe7, 0x78, 0x66, 0x74, 0xc6, 0x1a, 0x8f, 0x67, 0xce, 0x9c, 0xb8, 0x11, 0x99, - 0x19, 0xf9, 0xa8, 0xc2, 0x93, 0x06, 0xa1, 0xc6, 0x4f, 0x37, 0xea, 0xde, 0x1b, 0x37, 0x22, 0x6f, - 0xdc, 0x88, 0xb8, 0x11, 0x71, 0xe3, 0x5e, 0xb8, 0xe2, 0xd1, 0x06, 0x6d, 0xd9, 0x8e, 0x77, 0xad, - 0x41, 0x57, 0xf4, 0xfa, 0xc6, 0x35, 0x6f, 0xa3, 0x45, 0xdd, 0x6b, 0xf4, 0x1e, 0xb5, 0x3c, 0xff, - 0xbf, 0xab, 0x2d, 0xc7, 0xf6, 0x6c, 0x52, 0xe0, 0xbf, 0xce, 0x9d, 0x5a, 0xb1, 0x57, 0x6c, 0x04, - 0x5d, 0x63, 0x7f, 0x71, 0xec, 0xb9, 0xf3, 0x2b, 0xb6, 0xbd, 0xd2, 0xa0, 0xd7, 0xf0, 0xd7, 0x52, - 0x7b, 0xf9, 0x9a, 0xeb, 0x39, 0xed, 0xba, 0x27, 0xb0, 0xc5, 0x38, 0xd6, 0x33, 0x9b, 0xd4, 0xf5, - 0xf4, 0x66, 0x4b, 0x10, 0x5c, 0x8c, 0x13, 0xac, 0x3b, 0x7a, 0xab, 0x45, 0x1d, 0x51, 0xf9, 0xb9, - 0x47, 0xd3, 0xdb, 0x89, 0xff, 0x0a, 0x92, 0xa7, 0xd2, 0x49, 0x7c, 0x46, 0x31, 0x8e, 0xea, 0x97, - 0xb2, 0xd0, 0x3f, 0x4b, 0x3d, 0xdd, 0xd0, 0x3d, 0x9d, 0x9c, 0x87, 0xde, 0x8a, 0x65, 0xd0, 0xfb, - 0x4a, 0xe6, 0x91, 0xcc, 0xe5, 0xdc, 0x78, 0x61, 0x6b, 0xb3, 0x98, 0xa5, 0xa6, 0xc6, 0x81, 0xe4, - 0x02, 0xe4, 0x17, 0x37, 0x5a, 0x54, 0xc9, 0x3e, 0x92, 0xb9, 0x3c, 0x30, 0x3e, 0xb0, 0xb5, 0x59, - 0xec, 0x45, 0x59, 0x68, 0x08, 0x26, 0x8f, 0x42, 0xb6, 0x52, 0x56, 0x72, 0x88, 0x1c, 0xdb, 0xda, - 0x2c, 0x0e, 0xb7, 0x4d, 0xe3, 0x49, 0xbb, 0x69, 0x7a, 0xb4, 0xd9, 0xf2, 0x36, 0xb4, 0x6c, 0xa5, - 0x4c, 0x2e, 0x41, 0x7e, 0xc2, 0x36, 0xa8, 0x92, 0x47, 0x22, 0xb2, 0xb5, 0x59, 0x1c, 0xa9, 0xdb, - 0x06, 0x95, 0xa8, 0x10, 0x4f, 0x5e, 0x83, 0xfc, 0xa2, 0xd9, 0xa4, 0x4a, 0xef, 0x23, 0x99, 0xcb, - 0x83, 0xd7, 0xcf, 0x5d, 0xe5, 0x52, 0xb9, 0xea, 0x4b, 0xe5, 0xea, 0xa2, 0x2f, 0xb6, 0xf1, 0xd1, - 0x77, 0x36, 0x8b, 0x3d, 0x5b, 0x9b, 0xc5, 0x3c, 0x93, 0xe4, 0x17, 0xbf, 0x59, 0xcc, 0x68, 0x58, - 0x92, 0xbc, 0x0c, 0x83, 0x13, 0x8d, 0xb6, 0xeb, 0x51, 0x67, 0x4e, 0x6f, 0x52, 0xa5, 0x80, 0x15, - 0x9e, 0xdb, 0xda, 0x2c, 0x9e, 0xa9, 0x73, 0x70, 0xcd, 0xd2, 0x9b, 0x72, 0xc5, 0x32, 0xb9, 0xfa, - 0xdb, 0x19, 0x38, 0x51, 0xa5, 0xae, 0x6b, 0xda, 0x56, 0x20, 0x9b, 0xc7, 0x61, 0x40, 0x80, 0x2a, - 0x65, 0x94, 0xcf, 0xc0, 0x78, 0xdf, 0xd6, 0x66, 0x31, 0xe7, 0x9a, 0x86, 0x16, 0x62, 0xc8, 0x07, - 0xa1, 0xef, 0xae, 0xe9, 0xad, 0xce, 0x4e, 0x95, 0x84, 0x9c, 0xce, 0x6c, 0x6d, 0x16, 0xc9, 0xba, - 0xe9, 0xad, 0xd6, 0x9a, 0xcb, 0xba, 0x54, 0xa1, 0x4f, 0x46, 0x66, 0x60, 0x74, 0xc1, 0x31, 0xef, - 0xe9, 0x1e, 0xbd, 0x45, 0x37, 0x16, 0xec, 0x86, 0x59, 0xdf, 0x10, 0x52, 0x7c, 0x64, 0x6b, 0xb3, - 0x78, 0xbe, 0xc5, 0x71, 0xb5, 0x35, 0xba, 0x51, 0x6b, 0x21, 0x56, 0x62, 0x92, 0x28, 0xa9, 0xfe, - 0x4e, 0x01, 0x86, 0x6e, 0xbb, 0xd4, 0x09, 0xda, 0x7d, 0x09, 0xf2, 0xec, 0xb7, 0x68, 0x32, 0xca, - 0xbc, 0xed, 0x52, 0x47, 0x96, 0x39, 0xc3, 0x93, 0x2b, 0xd0, 0x3b, 0x63, 0xaf, 0x98, 0x96, 0x68, - 0xf6, 0xc9, 0xad, 0xcd, 0xe2, 0x89, 0x06, 0x03, 0x48, 0x94, 0x9c, 0x82, 0x7c, 0x18, 0x86, 0x2a, - 0x4d, 0xa6, 0x43, 0xb6, 0xa5, 0x7b, 0xb6, 0x23, 0x5a, 0x8b, 0xd2, 0x35, 0x25, 0xb8, 0x54, 0x30, - 0x42, 0x4f, 0x5e, 0x04, 0x28, 0xdd, 0xad, 0x6a, 0x76, 0x83, 0x96, 0xb4, 0x39, 0xa1, 0x0c, 0x58, - 0x5a, 0x5f, 0x77, 0x6b, 0x8e, 0xdd, 0xa0, 0x35, 0xdd, 0x91, 0xab, 0x95, 0xa8, 0xc9, 0x24, 0x8c, - 0x94, 0xea, 0x75, 0xea, 0xba, 0x1a, 0xfd, 0x54, 0x9b, 0xba, 0x9e, 0xab, 0xf4, 0x3e, 0x92, 0xbb, - 0x3c, 0x30, 0x7e, 0x61, 0x6b, 0xb3, 0xf8, 0x90, 0x8e, 0x98, 0x9a, 0x23, 0x50, 0x12, 0x8b, 0x58, - 0x21, 0x32, 0x0e, 0xc3, 0xa5, 0xb7, 0xdb, 0x0e, 0xad, 0x18, 0xd4, 0xf2, 0x4c, 0x6f, 0x43, 0x68, - 0xc8, 0xf9, 0xad, 0xcd, 0xa2, 0xa2, 0x33, 0x44, 0xcd, 0x14, 0x18, 0x89, 0x49, 0xb4, 0x08, 0x99, - 0x87, 0xb1, 0x9b, 0x13, 0x0b, 0x55, 0xea, 0xdc, 0x33, 0xeb, 0xb4, 0x54, 0xaf, 0xdb, 0x6d, 0xcb, - 0x53, 0xfa, 0x90, 0xcf, 0xa3, 0x5b, 0x9b, 0xc5, 0x0b, 0x2b, 0xf5, 0x56, 0xcd, 0xe5, 0xd8, 0x9a, - 0xce, 0xd1, 0x12, 0xb3, 0x64, 0x59, 0xf2, 0x51, 0x18, 0x5e, 0x74, 0x98, 0x16, 0x1a, 0x65, 0xca, - 0xe0, 0x4a, 0x3f, 0xea, 0xff, 0x99, 0xab, 0x62, 0x02, 0xe2, 0x50, 0xbf, 0x67, 0x79, 0x63, 0x3d, - 0x5e, 0xa0, 0x66, 0x20, 0x4e, 0x6e, 0x6c, 0x84, 0x15, 0xa1, 0xa0, 0xb0, 0x8f, 0x37, 0x1d, 0x6a, - 0x24, 0xb4, 0x6d, 0x00, 0xdb, 0x7c, 0x65, 0x6b, 0xb3, 0xf8, 0xb8, 0x23, 0x68, 0x6a, 0x5d, 0xd5, - 0xae, 0x23, 0x2b, 0x32, 0x09, 0xfd, 0x4c, 0x9b, 0x6e, 0x99, 0x96, 0xa1, 0xc0, 0x23, 0x99, 0xcb, - 0x23, 0xd7, 0x47, 0xfd, 0xd6, 0xfb, 0xf0, 0xf1, 0xb3, 0x5b, 0x9b, 0xc5, 0x93, 0x4c, 0x07, 0x6b, - 0x6b, 0xa6, 0x25, 0x4f, 0x11, 0x41, 0x51, 0x36, 0x8a, 0xc6, 0x6d, 0x0f, 0x87, 0xee, 0x60, 0x38, - 0x8a, 0x96, 0x6c, 0x2f, 0x3e, 0x6c, 0x7d, 0x32, 0x32, 0x01, 0xc3, 0xe3, 0xb6, 0x57, 0xb1, 0x5c, - 0x4f, 0xb7, 0xea, 0xb4, 0x52, 0x56, 0x86, 0xb0, 0x1c, 0xaa, 0x05, 0x2b, 0x67, 0x0a, 0x4c, 0x2d, - 0x32, 0x29, 0x45, 0xcb, 0xa8, 0x7f, 0x9d, 0x87, 0x11, 0xd6, 0x27, 0xd2, 0xf0, 0x29, 0xb1, 0x99, - 0x80, 0x41, 0x58, 0x2d, 0x6e, 0x4b, 0xaf, 0x53, 0x31, 0x92, 0xf0, 0x2b, 0x2c, 0x1f, 0x28, 0xf1, - 0x8c, 0xd3, 0x93, 0x2b, 0xd0, 0xcf, 0x41, 0x95, 0xb2, 0x18, 0x5c, 0xc3, 0x5b, 0x9b, 0xc5, 0x01, - 0x17, 0x61, 0x35, 0xd3, 0xd0, 0x02, 0x34, 0xd3, 0x6e, 0xfe, 0xf7, 0xb4, 0xed, 0x7a, 0x8c, 0xb9, - 0x18, 0x5b, 0xf8, 0x19, 0xa2, 0xc0, 0xaa, 0x40, 0xc9, 0xda, 0x1d, 0x2d, 0x44, 0x5e, 0x00, 0xe0, - 0x90, 0x92, 0x61, 0x38, 0x62, 0x80, 0x3d, 0xb4, 0xb5, 0x59, 0x3c, 0x2d, 0x58, 0xe8, 0x86, 0x21, - 0x8f, 0x4e, 0x89, 0x98, 0x34, 0x61, 0x88, 0xff, 0x9a, 0xd1, 0x97, 0x68, 0x83, 0x8f, 0xae, 0xc1, - 0xeb, 0x97, 0xfd, 0x4e, 0x8c, 0x4a, 0xe7, 0xaa, 0x4c, 0x3a, 0x69, 0x79, 0xce, 0xc6, 0x78, 0x51, - 0x4c, 0xc8, 0x67, 0x45, 0x55, 0x0d, 0xc4, 0xc9, 0x53, 0x81, 0x5c, 0x86, 0xcd, 0xd3, 0x53, 0xb6, - 0xb3, 0xae, 0x3b, 0x06, 0x35, 0xc6, 0x37, 0xe4, 0x79, 0x7a, 0xd9, 0x07, 0xd7, 0x96, 0x64, 0xd5, - 0x93, 0xc9, 0x59, 0xa7, 0x73, 0x6e, 0xd5, 0xf6, 0x12, 0xaa, 0x5c, 0x5f, 0x42, 0x5a, 0x6e, 0x7b, - 0x29, 0xae, 0x66, 0xd1, 0x32, 0x6c, 0x2a, 0xe0, 0x80, 0x3b, 0xd4, 0x61, 0x93, 0x38, 0x8e, 0x3a, - 0x31, 0x15, 0x08, 0x26, 0xf7, 0x38, 0x26, 0xc9, 0x43, 0x14, 0x39, 0xf7, 0x2a, 0x8c, 0x25, 0x44, - 0x41, 0x46, 0x21, 0xb7, 0x46, 0x37, 0xb8, 0xba, 0x68, 0xec, 0x4f, 0x72, 0x0a, 0x7a, 0xef, 0xe9, - 0x8d, 0xb6, 0x58, 0x42, 0x35, 0xfe, 0xe3, 0xc5, 0xec, 0x87, 0x32, 0x6c, 0xc5, 0x21, 0x13, 0xb6, - 0x65, 0xd1, 0xba, 0x27, 0x2f, 0x3a, 0xcf, 0xc1, 0xc0, 0x8c, 0x5d, 0xd7, 0x1b, 0xd8, 0x8f, 0x5c, - 0xef, 0x94, 0xad, 0xcd, 0xe2, 0x29, 0xd6, 0x81, 0x57, 0x1b, 0x0c, 0x23, 0xb5, 0x29, 0x24, 0x65, - 0x0a, 0xa0, 0xd1, 0xa6, 0xed, 0x51, 0x2c, 0x98, 0x0d, 0x15, 0x00, 0x0b, 0x3a, 0x88, 0x92, 0x15, - 0x20, 0x24, 0x26, 0xd7, 0xa0, 0x7f, 0x81, 0xad, 0xb3, 0x75, 0xbb, 0x21, 0x94, 0x0f, 0x97, 0x02, - 0x5c, 0x7b, 0xe5, 0xb1, 0xea, 0x13, 0xa9, 0xd3, 0x30, 0x32, 0xd1, 0x30, 0xa9, 0xe5, 0xc9, 0xad, - 0x66, 0x23, 0xb9, 0xb4, 0x42, 0x2d, 0x4f, 0x6e, 0x35, 0x8e, 0x79, 0x9d, 0x41, 0xe5, 0x56, 0x07, - 0xa4, 0xea, 0xff, 0x9b, 0x83, 0x87, 0x6e, 0xb5, 0x97, 0xa8, 0x63, 0x51, 0x8f, 0xba, 0x62, 0x41, - 0x0e, 0xb8, 0xce, 0xc1, 0x58, 0x02, 0x29, 0xb8, 0xe3, 0x42, 0xb9, 0x16, 0x20, 0x6b, 0x62, 0x8d, - 0x97, 0x67, 0xdb, 0x44, 0x51, 0x32, 0x0d, 0x27, 0x42, 0x20, 0x6b, 0x84, 0xab, 0x64, 0x71, 0x29, - 0xb9, 0xb8, 0xb5, 0x59, 0x3c, 0x27, 0x71, 0x63, 0xcd, 0x96, 0x35, 0x38, 0x5e, 0x8c, 0xdc, 0x82, - 0xd1, 0x10, 0x74, 0xd3, 0xb1, 0xdb, 0x2d, 0x57, 0xc9, 0x21, 0xab, 0xe2, 0xd6, 0x66, 0xf1, 0x61, - 0x89, 0xd5, 0x0a, 0x22, 0xe5, 0x05, 0x3c, 0x5e, 0x90, 0x7c, 0x7f, 0x46, 0xe6, 0x26, 0x46, 0x61, - 0x1e, 0x47, 0xe1, 0xf3, 0xfe, 0x28, 0xec, 0x28, 0xa4, 0xab, 0xf1, 0x92, 0x62, 0x50, 0xc6, 0x9a, - 0x91, 0x18, 0x94, 0x89, 0x1a, 0xcf, 0x4d, 0xc0, 0xe9, 0x54, 0x5e, 0xbb, 0xd2, 0xea, 0xbf, 0xcc, - 0xc9, 0x5c, 0x16, 0x6c, 0x23, 0xe8, 0xcc, 0x79, 0xb9, 0x33, 0x17, 0x6c, 0x03, 0xa7, 0xfa, 0x4c, - 0xb8, 0x76, 0x4a, 0x8d, 0x6d, 0xd9, 0x46, 0x7c, 0xd6, 0x4f, 0x96, 0x25, 0x9f, 0x84, 0x33, 0x09, - 0x20, 0x9f, 0xae, 0xb9, 0xf6, 0x5f, 0xda, 0xda, 0x2c, 0xaa, 0x29, 0x5c, 0xe3, 0xb3, 0x77, 0x07, - 0x2e, 0x44, 0x87, 0xb3, 0x92, 0xd4, 0x6d, 0xcb, 0xd3, 0x4d, 0x4b, 0x18, 0x97, 0x7c, 0x94, 0xbc, - 0x7f, 0x6b, 0xb3, 0xf8, 0x98, 0xac, 0x83, 0x3e, 0x4d, 0xbc, 0xf1, 0x9d, 0xf8, 0x10, 0x03, 0x94, - 0x14, 0x54, 0xa5, 0xa9, 0xaf, 0xf8, 0x16, 0xf3, 0xe5, 0xad, 0xcd, 0xe2, 0xfb, 0x52, 0xeb, 0x30, - 0x19, 0x95, 0xbc, 0x42, 0x77, 0xe2, 0x44, 0x34, 0x20, 0x21, 0x6e, 0xce, 0x36, 0x28, 0x7e, 0x43, - 0x2f, 0xf2, 0x57, 0xb7, 0x36, 0x8b, 0x17, 0x25, 0xfe, 0x96, 0x6d, 0xd0, 0x78, 0xf3, 0x53, 0x4a, - 0xab, 0xbf, 0x9d, 0x83, 0x8b, 0xd5, 0xd2, 0xec, 0x4c, 0xc5, 0xf0, 0x4d, 0x9a, 0x05, 0xc7, 0xbe, - 0x67, 0x1a, 0xd2, 0xe8, 0x5d, 0x82, 0xb3, 0x31, 0xd4, 0x24, 0x5a, 0x51, 0x81, 0x31, 0x8d, 0xdf, - 0xe6, 0x9b, 0x4b, 0x2d, 0x41, 0x53, 0xe3, 0xa6, 0x56, 0x74, 0xd1, 0xee, 0xc4, 0x88, 0xf5, 0x51, - 0x0c, 0x55, 0x5d, 0xb5, 0x1d, 0xaf, 0xde, 0xf6, 0x84, 0x12, 0x60, 0x1f, 0x25, 0xea, 0x70, 0x05, - 0x51, 0x97, 0x2a, 0x7c, 0x3e, 0xe4, 0xb3, 0x19, 0x18, 0x2d, 0x79, 0x9e, 0x63, 0x2e, 0xb5, 0x3d, - 0x3a, 0xab, 0xb7, 0x5a, 0xa6, 0xb5, 0x82, 0x63, 0x7d, 0xf0, 0xfa, 0xcb, 0xc1, 0x1a, 0xd9, 0x55, - 0x12, 0x57, 0xe3, 0xc5, 0xa5, 0x21, 0xaa, 0xfb, 0xa8, 0x5a, 0x93, 0xe3, 0xe4, 0x21, 0x1a, 0x2f, - 0xc7, 0x86, 0x68, 0x2a, 0xaf, 0x5d, 0x0d, 0xd1, 0x2f, 0xe5, 0xe0, 0xfc, 0xfc, 0x9a, 0xa7, 0x6b, - 0xd4, 0xb5, 0xdb, 0x4e, 0x9d, 0xba, 0xb7, 0x5b, 0x86, 0xee, 0xd1, 0x70, 0xa4, 0x16, 0xa1, 0xb7, - 0x64, 0x18, 0xd4, 0x40, 0x76, 0xbd, 0x7c, 0xdb, 0xa7, 0x33, 0x80, 0xc6, 0xe1, 0xe4, 0x71, 0xe8, - 0x13, 0x65, 0x90, 0x7b, 0xef, 0xf8, 0xe0, 0xd6, 0x66, 0xb1, 0xaf, 0xcd, 0x41, 0x9a, 0x8f, 0x63, - 0x64, 0x65, 0xda, 0xa0, 0x8c, 0x2c, 0x17, 0x92, 0x19, 0x1c, 0xa4, 0xf9, 0x38, 0xf2, 0x06, 0x8c, - 0x20, 0xdb, 0xa0, 0x3d, 0x62, 0xee, 0x3b, 0xe5, 0x4b, 0x57, 0x6e, 0x2c, 0x5f, 0x9a, 0xb0, 0x35, - 0x35, 0xc7, 0x2f, 0xa0, 0xc5, 0x18, 0x90, 0xbb, 0x30, 0x2a, 0x1a, 0x11, 0x32, 0xed, 0xed, 0xc2, - 0xf4, 0xf4, 0xd6, 0x66, 0x71, 0x4c, 0xb4, 0x5f, 0x62, 0x9b, 0x60, 0xc2, 0x18, 0x8b, 0x66, 0x87, - 0x8c, 0x0b, 0xdb, 0x31, 0x16, 0x5f, 0x2c, 0x33, 0x8e, 0x33, 0x51, 0xdf, 0x84, 0x21, 0xb9, 0x20, - 0x39, 0x83, 0x5b, 0x6b, 0x3e, 0x4e, 0x70, 0x53, 0x6e, 0x1a, 0xb8, 0x9f, 0x7e, 0x1a, 0x06, 0xcb, - 0xd4, 0xad, 0x3b, 0x66, 0x8b, 0x59, 0x0d, 0x42, 0xc9, 0x4f, 0x6c, 0x6d, 0x16, 0x07, 0x8d, 0x10, - 0xac, 0xc9, 0x34, 0xea, 0xbf, 0xce, 0xc0, 0x19, 0xc6, 0xbb, 0xe4, 0xba, 0xe6, 0x8a, 0xd5, 0x94, - 0x97, 0xed, 0x27, 0xa1, 0x50, 0xc5, 0xfa, 0x44, 0x4d, 0xa7, 0xb6, 0x36, 0x8b, 0xa3, 0xbc, 0x05, - 0x92, 0x1e, 0x0a, 0x9a, 0x60, 0x5f, 0x99, 0xdd, 0x66, 0x5f, 0xc9, 0x4c, 0x5a, 0x4f, 0x77, 0x3c, - 0xd3, 0x5a, 0xa9, 0x7a, 0xba, 0xd7, 0x76, 0x23, 0x26, 0xad, 0xc0, 0xd4, 0x5c, 0x44, 0x45, 0x4c, - 0xda, 0x48, 0x21, 0xf2, 0x2a, 0x0c, 0x4d, 0x5a, 0x46, 0xc8, 0x84, 0x4f, 0x88, 0x0f, 0x33, 0x4b, - 0x93, 0x22, 0x3c, 0xc9, 0x22, 0x52, 0x40, 0xfd, 0x1f, 0x33, 0xa0, 0xf0, 0x4d, 0xe0, 0x8c, 0xe9, - 0x7a, 0xb3, 0xb4, 0xb9, 0x24, 0xcd, 0x4e, 0x53, 0xfe, 0xae, 0x92, 0xe1, 0xa4, 0xb5, 0x08, 0x4d, - 0x01, 0xb1, 0xab, 0x6c, 0x98, 0x6e, 0x62, 0xfb, 0x11, 0x2b, 0x45, 0x2a, 0xd0, 0xc7, 0x39, 0x73, - 0x5b, 0x62, 0xf0, 0xba, 0xe2, 0x2b, 0x42, 0xbc, 0x6a, 0xae, 0x0c, 0x4d, 0x4e, 0x2c, 0x6f, 0x68, - 0x44, 0x79, 0xf5, 0x7f, 0xca, 0xc2, 0x68, 0xbc, 0x10, 0xb9, 0x0b, 0xfd, 0xaf, 0xdb, 0xa6, 0x45, - 0x8d, 0x79, 0x0b, 0x5b, 0xd8, 0xfd, 0x70, 0xc4, 0xb7, 0xc5, 0x4f, 0xbe, 0x85, 0x65, 0x6a, 0xb2, - 0x05, 0x8b, 0x67, 0x25, 0x01, 0x33, 0xf2, 0x51, 0x18, 0x60, 0x36, 0xe0, 0x3d, 0xe4, 0x9c, 0xdd, - 0x96, 0xf3, 0x23, 0x82, 0xf3, 0x29, 0x87, 0x17, 0x4a, 0xb2, 0x0e, 0xd9, 0x31, 0xbd, 0xd2, 0xa8, - 0xee, 0xda, 0x96, 0xe8, 0x79, 0xd4, 0x2b, 0x07, 0x21, 0xb2, 0x5e, 0x71, 0x1a, 0x66, 0xba, 0xf2, - 0x8f, 0xc5, 0x6e, 0x90, 0xf6, 0x2e, 0x5c, 0x56, 0xf1, 0x1e, 0x90, 0x88, 0xd5, 0x1f, 0xcc, 0xc2, - 0x53, 0xa1, 0xc8, 0x34, 0x7a, 0xcf, 0xa4, 0xeb, 0x42, 0x9c, 0xab, 0x66, 0x4b, 0xec, 0x59, 0x99, - 0xca, 0xbb, 0x13, 0xab, 0xba, 0xb5, 0x42, 0x0d, 0x72, 0x05, 0x7a, 0x35, 0xbb, 0x41, 0x5d, 0x25, - 0x83, 0xe6, 0x1a, 0x4e, 0x27, 0x0e, 0x03, 0xc8, 0x87, 0x1e, 0x48, 0x41, 0x6c, 0x28, 0x2c, 0x3a, - 0xba, 0xe9, 0xf9, 0x3d, 0x5b, 0x4a, 0xf6, 0xec, 0x0e, 0x6a, 0xbc, 0xca, 0x79, 0xf0, 0x39, 0x1f, - 0x05, 0xe1, 0x21, 0x40, 0x16, 0x04, 0x27, 0x39, 0xf7, 0x02, 0x0c, 0x4a, 0xc4, 0xbb, 0x9a, 0xd4, - 0xbf, 0x9a, 0x97, 0x75, 0xdd, 0x6f, 0x96, 0xd0, 0xf5, 0x6b, 0x4c, 0x47, 0x5d, 0x97, 0x59, 0x15, - 0x5c, 0xc9, 0x85, 0x26, 0x22, 0x28, 0xaa, 0x89, 0x08, 0x22, 0xcf, 0x40, 0x3f, 0x67, 0x11, 0xec, - 0x5f, 0x71, 0xef, 0xeb, 0x20, 0x2c, 0xba, 0x34, 0x07, 0x84, 0xe4, 0x97, 0x33, 0x70, 0xa1, 0xab, - 0x24, 0x50, 0x19, 0x06, 0xaf, 0x3f, 0xbb, 0x27, 0x31, 0x8e, 0x3f, 0xb5, 0xb5, 0x59, 0xbc, 0xd2, - 0x0c, 0x48, 0x6a, 0x8e, 0x44, 0x53, 0xab, 0x73, 0x22, 0xa9, 0x5d, 0xdd, 0x9b, 0xc2, 0x8c, 0x47, - 0x5e, 0xe9, 0x14, 0x1e, 0x1d, 0x59, 0xf5, 0x0d, 0xbf, 0x91, 0xf9, 0xd0, 0x78, 0x14, 0xdf, 0xbb, - 0xec, 0x93, 0xa4, 0x54, 0xd3, 0x81, 0x0b, 0xa9, 0xc3, 0x59, 0x8e, 0x29, 0xeb, 0x1b, 0xf3, 0xcb, - 0xb3, 0xb6, 0xe5, 0xad, 0xfa, 0x15, 0xf4, 0xca, 0x67, 0x2f, 0x58, 0x81, 0xa1, 0x6f, 0xd4, 0xec, - 0xe5, 0x5a, 0x93, 0x51, 0xa5, 0xd4, 0xd1, 0x89, 0x13, 0x9b, 0x68, 0xc5, 0x98, 0xf3, 0xa7, 0xa0, - 0x42, 0x78, 0x32, 0xe6, 0x8f, 0xd3, 0xe4, 0x84, 0x13, 0x2b, 0xa4, 0x56, 0x60, 0x68, 0xc6, 0xae, - 0xaf, 0x05, 0xea, 0xf2, 0x02, 0x14, 0x16, 0x75, 0x67, 0x85, 0x7a, 0x28, 0x8b, 0xc1, 0xeb, 0x63, - 0x57, 0xf9, 0x69, 0x33, 0x23, 0xe2, 0x88, 0xf1, 0x11, 0x31, 0x1b, 0x14, 0x3c, 0xfc, 0xad, 0x89, - 0x02, 0xea, 0x37, 0x7b, 0x61, 0x48, 0x9c, 0x8c, 0xe2, 0x6c, 0x4e, 0x5e, 0x0c, 0xcf, 0x9a, 0xc5, - 0xf4, 0x15, 0x9c, 0x0e, 0x05, 0xa7, 0x5a, 0x43, 0x8c, 0xd9, 0x1f, 0x6d, 0x16, 0x33, 0x5b, 0x9b, - 0xc5, 0x1e, 0xad, 0x5f, 0xda, 0x54, 0x86, 0xeb, 0x8d, 0xb4, 0xc0, 0xca, 0x67, 0x9d, 0xb1, 0xb2, - 0x7c, 0xfd, 0x79, 0x15, 0xfa, 0x44, 0x1b, 0x84, 0xc6, 0x9d, 0x0d, 0xcf, 0x32, 0x22, 0x27, 0xbc, - 0xb1, 0xd2, 0x7e, 0x29, 0xf2, 0x32, 0x14, 0xf8, 0xde, 0x5e, 0x08, 0xe0, 0x4c, 0xfa, 0x59, 0x48, - 0xac, 0xb8, 0x28, 0x43, 0xa6, 0x01, 0xc2, 0x7d, 0x7d, 0x70, 0xa0, 0x2d, 0x38, 0x24, 0x77, 0xfc, - 0x31, 0x2e, 0x52, 0x59, 0xf2, 0x1c, 0x0c, 0x2d, 0x52, 0xa7, 0x69, 0x5a, 0x7a, 0xa3, 0x6a, 0xbe, - 0xed, 0x9f, 0x69, 0xe3, 0xc2, 0xeb, 0x9a, 0x6f, 0xcb, 0x23, 0x37, 0x42, 0x47, 0x3e, 0x91, 0xb6, - 0x6f, 0xee, 0xc3, 0x86, 0x3c, 0xba, 0xed, 0x86, 0x32, 0xd6, 0x9e, 0x94, 0x6d, 0xf4, 0x1b, 0x30, - 0x1c, 0xd9, 0x32, 0x89, 0x43, 0xcb, 0x0b, 0x49, 0xd6, 0xd2, 0xfe, 0x2f, 0xc6, 0x36, 0xca, 0x81, - 0x69, 0x72, 0xc5, 0x32, 0x3d, 0x53, 0x6f, 0x4c, 0xd8, 0xcd, 0xa6, 0x6e, 0x19, 0xca, 0x40, 0xa8, - 0xc9, 0x26, 0xc7, 0xd4, 0xea, 0x1c, 0x25, 0x6b, 0x72, 0xb4, 0x10, 0xdb, 0x96, 0x8b, 0x3e, 0xd4, - 0x68, 0xdd, 0x76, 0x98, 0x2d, 0x80, 0x67, 0x92, 0x62, 0x5b, 0xee, 0x72, 0x5c, 0xcd, 0xf1, 0x91, - 0xb2, 0xb1, 0x1d, 0x2f, 0xf8, 0x7a, 0xbe, 0x7f, 0x70, 0x74, 0x28, 0x7e, 0x8c, 0xac, 0xfe, 0x0f, - 0x39, 0x18, 0x14, 0xa4, 0x6c, 0x29, 0x3d, 0x56, 0xf0, 0xfd, 0x28, 0x78, 0xaa, 0xa2, 0x16, 0x0e, - 0x4a, 0x51, 0xd5, 0xcf, 0x65, 0x83, 0xd9, 0x68, 0xc1, 0x31, 0xad, 0xfd, 0xcd, 0x46, 0x97, 0x00, - 0x26, 0x56, 0xdb, 0xd6, 0x1a, 0xbf, 0x2e, 0xcb, 0x86, 0xd7, 0x65, 0x75, 0x53, 0x93, 0x30, 0xe4, - 0x02, 0xe4, 0xcb, 0x8c, 0x3f, 0xeb, 0x99, 0xa1, 0xf1, 0x81, 0x77, 0x38, 0xa7, 0xcc, 0x53, 0x1a, - 0x82, 0xd9, 0xe6, 0x6a, 0x7c, 0xc3, 0xa3, 0xdc, 0x9c, 0xcd, 0xf1, 0xcd, 0xd5, 0x12, 0x03, 0x68, - 0x1c, 0x4e, 0x6e, 0xc0, 0x58, 0x99, 0x36, 0xf4, 0x8d, 0x59, 0xb3, 0xd1, 0x30, 0x5d, 0x5a, 0xb7, - 0x2d, 0xc3, 0x45, 0x21, 0x8b, 0xea, 0x9a, 0xae, 0x96, 0x24, 0x20, 0x2a, 0x14, 0xe6, 0x97, 0x97, - 0x5d, 0xea, 0xa1, 0xf8, 0x72, 0xe3, 0xc0, 0x26, 0x67, 0x1b, 0x21, 0x9a, 0xc0, 0xa8, 0xbf, 0x96, - 0x61, 0xbb, 0x17, 0x77, 0xcd, 0xb3, 0x5b, 0x81, 0x96, 0xef, 0x4b, 0x24, 0x57, 0x42, 0xbb, 0x22, - 0x8b, 0x5f, 0x7b, 0x42, 0x7c, 0x6d, 0x9f, 0xb0, 0x2d, 0x42, 0x8b, 0x22, 0xf5, 0xab, 0x72, 0xdb, - 0x7c, 0x95, 0xfa, 0x57, 0x59, 0x38, 0x2b, 0x5a, 0x3c, 0xd1, 0x30, 0x5b, 0x4b, 0xb6, 0xee, 0x18, - 0x1a, 0xad, 0x53, 0xf3, 0x1e, 0x3d, 0x9a, 0x03, 0x2f, 0x3a, 0x74, 0xf2, 0xfb, 0x18, 0x3a, 0xd7, - 0x71, 0x23, 0xc8, 0x24, 0x83, 0x07, 0xbe, 0xdc, 0xa8, 0x18, 0xdd, 0xda, 0x2c, 0x0e, 0x19, 0x1c, - 0x8c, 0x47, 0xfe, 0x9a, 0x4c, 0xc4, 0x94, 0x64, 0x86, 0x5a, 0x2b, 0xde, 0x2a, 0x2a, 0x49, 0x2f, - 0x57, 0x92, 0x06, 0x42, 0x34, 0x81, 0x51, 0xff, 0x79, 0x16, 0x4e, 0xc5, 0x45, 0x5e, 0xa5, 0x96, - 0x71, 0x2c, 0xef, 0x77, 0x47, 0xde, 0xdf, 0xce, 0xc1, 0xc3, 0xa2, 0x4c, 0x75, 0x55, 0x77, 0xa8, - 0x51, 0x36, 0x1d, 0x5a, 0xf7, 0x6c, 0x67, 0xe3, 0x08, 0x1b, 0x50, 0x07, 0x27, 0xf6, 0x1b, 0x50, - 0x10, 0xdb, 0x7f, 0xbe, 0xce, 0x8c, 0x04, 0x2d, 0x41, 0x68, 0x62, 0x85, 0xe2, 0x47, 0x07, 0xb1, - 0xce, 0x2a, 0xec, 0xa4, 0xb3, 0x3e, 0x04, 0xc3, 0x81, 0xe8, 0x71, 0x23, 0xda, 0x17, 0x5a, 0x5b, - 0x86, 0x8f, 0xc0, 0xbd, 0xa8, 0x16, 0x25, 0xc4, 0xda, 0x7c, 0x40, 0xa5, 0x8c, 0xd6, 0xd0, 0xb0, - 0xa8, 0x2d, 0x28, 0x67, 0x1a, 0x9a, 0x4c, 0xa4, 0x6e, 0xe6, 0xe1, 0x5c, 0x7a, 0xb7, 0x6b, 0x54, - 0x37, 0x8e, 0x7b, 0xfd, 0xbb, 0xb2, 0xd7, 0xc9, 0xa3, 0x90, 0x5f, 0xd0, 0xbd, 0x55, 0x71, 0xfd, - 0x8e, 0x77, 0xc2, 0xcb, 0x66, 0x83, 0xd6, 0x5a, 0xba, 0xb7, 0xaa, 0x21, 0x4a, 0x9a, 0x33, 0x00, - 0x39, 0xa6, 0xcc, 0x19, 0xd2, 0x62, 0x3f, 0xf8, 0x48, 0xe6, 0x72, 0x3e, 0x75, 0xb1, 0xff, 0x66, - 0xbe, 0xd3, 0xbc, 0x72, 0xd7, 0x31, 0x3d, 0x7a, 0xac, 0x61, 0xc7, 0x1a, 0xb6, 0x4f, 0x0d, 0xfb, - 0x93, 0x2c, 0x0c, 0x07, 0x9b, 0xa6, 0xb7, 0x68, 0xfd, 0x70, 0xd6, 0xaa, 0x70, 0x2b, 0x93, 0xdb, - 0xf7, 0x56, 0x66, 0x3f, 0x0a, 0xa5, 0x06, 0x47, 0x9e, 0xdc, 0x34, 0x40, 0x89, 0xf1, 0x23, 0xcf, - 0xe0, 0xa0, 0xf3, 0x51, 0xe8, 0x9b, 0xd5, 0xef, 0x9b, 0xcd, 0x76, 0x53, 0x58, 0xe9, 0xe8, 0x4e, - 0xd6, 0xd4, 0xef, 0x6b, 0x3e, 0x5c, 0xfd, 0xff, 0x33, 0x30, 0x22, 0x84, 0x2a, 0x98, 0xef, 0x4b, - 0xaa, 0xa1, 0x74, 0xb2, 0xfb, 0x96, 0x4e, 0x6e, 0xef, 0xd2, 0x51, 0x7f, 0x3a, 0x07, 0xca, 0x94, - 0xd9, 0xa0, 0x8b, 0x8e, 0x6e, 0xb9, 0xcb, 0xd4, 0x11, 0xdb, 0xe9, 0x49, 0xc6, 0x6a, 0x5f, 0x1f, - 0x28, 0x4d, 0x29, 0xd9, 0x3d, 0x4d, 0x29, 0x1f, 0x80, 0x01, 0xd1, 0x98, 0xc0, 0x95, 0x11, 0x47, - 0x8d, 0xe3, 0x03, 0xb5, 0x10, 0xcf, 0x88, 0x4b, 0xad, 0x96, 0x63, 0xdf, 0xa3, 0x0e, 0xbf, 0xa5, - 0x12, 0xc4, 0xba, 0x0f, 0xd4, 0x42, 0xbc, 0xc4, 0x99, 0xfa, 0xf6, 0xa2, 0xcc, 0x99, 0x3a, 0x5a, - 0x88, 0x27, 0x97, 0xa1, 0x7f, 0xc6, 0xae, 0xeb, 0x28, 0x68, 0x3e, 0xad, 0x0c, 0x6d, 0x6d, 0x16, - 0xfb, 0x1b, 0x02, 0xa6, 0x05, 0x58, 0x46, 0x59, 0xb6, 0xd7, 0xad, 0x86, 0xad, 0x73, 0xe7, 0x97, - 0x7e, 0x4e, 0x69, 0x08, 0x98, 0x16, 0x60, 0x19, 0x25, 0x93, 0x39, 0x3a, 0x15, 0xf5, 0x87, 0x3c, - 0x97, 0x05, 0x4c, 0x0b, 0xb0, 0xea, 0xaf, 0xe5, 0x99, 0xf6, 0xba, 0xe6, 0xdb, 0x0f, 0xfc, 0xba, - 0x10, 0x0e, 0x98, 0xde, 0x3d, 0x0c, 0x98, 0x07, 0xe6, 0xc0, 0x4e, 0xfd, 0xeb, 0x3e, 0x00, 0x21, - 0xfd, 0xc9, 0xe3, 0xcd, 0xe1, 0xfe, 0xb4, 0xa6, 0x0c, 0x63, 0x93, 0xd6, 0xaa, 0x6e, 0xd5, 0xa9, - 0x11, 0x1e, 0x5b, 0x16, 0x70, 0x68, 0xa3, 0x13, 0x24, 0x15, 0xc8, 0xf0, 0xdc, 0x52, 0x4b, 0x16, - 0x20, 0x4f, 0xc3, 0x60, 0xc5, 0xf2, 0xa8, 0xa3, 0xd7, 0x3d, 0xf3, 0x1e, 0x15, 0x53, 0x03, 0xde, - 0x0c, 0x9b, 0x21, 0x58, 0x93, 0x69, 0xc8, 0x0d, 0x18, 0x5a, 0xd0, 0x1d, 0xcf, 0xac, 0x9b, 0x2d, - 0xdd, 0xf2, 0x5c, 0xa5, 0x1f, 0x67, 0x34, 0xb4, 0x30, 0x5a, 0x12, 0x5c, 0x8b, 0x50, 0x91, 0x4f, - 0xc0, 0x00, 0x6e, 0x4d, 0xd1, 0x5f, 0x7b, 0x60, 0xdb, 0x8b, 0xc3, 0xc7, 0x42, 0xf7, 0x40, 0x7e, - 0xfa, 0x8a, 0x37, 0xc0, 0xf1, 0xbb, 0xc3, 0x80, 0x23, 0xf9, 0x08, 0xf4, 0x4d, 0x5a, 0x06, 0x32, - 0x87, 0x6d, 0x99, 0xab, 0x82, 0xf9, 0x99, 0x90, 0xb9, 0xdd, 0x8a, 0xf1, 0xf6, 0xd9, 0xa5, 0x8f, - 0xb2, 0xc1, 0x77, 0x6f, 0x94, 0x0d, 0xbd, 0x0b, 0xc7, 0xe2, 0xc3, 0x07, 0x75, 0x2c, 0x3e, 0xb2, - 0xc7, 0x63, 0x71, 0xf5, 0x6d, 0x18, 0x1c, 0x5f, 0x98, 0x0a, 0x46, 0xef, 0x43, 0x90, 0x5b, 0x10, - 0x9e, 0x0a, 0x79, 0x6e, 0xcf, 0xb4, 0x4c, 0x43, 0x63, 0x30, 0x72, 0x05, 0xfa, 0x27, 0xd0, 0xfd, - 0x4d, 0xdc, 0x22, 0xe6, 0xf9, 0xfa, 0x57, 0x47, 0x18, 0x7a, 0xc1, 0xfa, 0x68, 0xf2, 0x38, 0xf4, - 0x2d, 0x38, 0xf6, 0x8a, 0xa3, 0x37, 0xc5, 0x1a, 0x8c, 0xae, 0x22, 0x2d, 0x0e, 0xd2, 0x7c, 0x9c, - 0xfa, 0xa3, 0x19, 0xdf, 0x6c, 0x67, 0x25, 0xaa, 0x6d, 0x3c, 0x9a, 0xc7, 0xba, 0xfb, 0x79, 0x09, - 0x97, 0x83, 0x34, 0x1f, 0x47, 0xae, 0x40, 0xef, 0xa4, 0xe3, 0xd8, 0x8e, 0xec, 0xe3, 0x4e, 0x19, - 0x40, 0xbe, 0xee, 0x45, 0x0a, 0xf2, 0x3c, 0x0c, 0xf2, 0x39, 0x87, 0x9f, 0x68, 0xe6, 0xba, 0xdd, - 0x94, 0xca, 0x94, 0xea, 0xd7, 0x73, 0x92, 0xcd, 0xc6, 0x25, 0xfe, 0x00, 0xde, 0x0a, 0x3c, 0x03, - 0xb9, 0xf1, 0x85, 0x29, 0x31, 0x01, 0x9e, 0xf4, 0x8b, 0x4a, 0xaa, 0x12, 0x2b, 0xc7, 0xa8, 0xc9, - 0x79, 0xc8, 0x2f, 0x30, 0xf5, 0x29, 0xa0, 0x7a, 0xf4, 0x6f, 0x6d, 0x16, 0xf3, 0x2d, 0xa6, 0x3f, - 0x08, 0x45, 0x2c, 0xdb, 0xcc, 0xf0, 0x1d, 0x13, 0xc7, 0x86, 0xfb, 0x98, 0xf3, 0x90, 0x2f, 0x39, - 0x2b, 0xf7, 0xc4, 0xac, 0x85, 0x58, 0xdd, 0x59, 0xb9, 0xa7, 0x21, 0x94, 0x5c, 0x03, 0xd0, 0xa8, - 0xd7, 0x76, 0x2c, 0x7c, 0x7e, 0x32, 0x80, 0xe7, 0x6f, 0x38, 0x1b, 0x3a, 0x08, 0xad, 0xd5, 0x6d, - 0x83, 0x6a, 0x12, 0x89, 0xfa, 0x8b, 0xe1, 0xc5, 0x4e, 0xd9, 0x74, 0xd7, 0x8e, 0xbb, 0x70, 0x17, - 0x5d, 0xa8, 0x8b, 0x23, 0xce, 0x64, 0x27, 0x15, 0xa1, 0x77, 0xaa, 0xa1, 0xaf, 0xb8, 0xd8, 0x87, - 0xc2, 0x97, 0x6c, 0x99, 0x01, 0x34, 0x0e, 0x8f, 0xf5, 0x53, 0xff, 0xf6, 0xfd, 0xf4, 0xe5, 0xde, - 0x60, 0xb4, 0xcd, 0x51, 0x6f, 0xdd, 0x76, 0x8e, 0xbb, 0x6a, 0xa7, 0x5d, 0x75, 0x09, 0xfa, 0xaa, - 0x4e, 0x5d, 0x3a, 0xba, 0xc0, 0xfd, 0x80, 0xeb, 0xd4, 0xf9, 0xb1, 0x85, 0x8f, 0x64, 0x74, 0x65, - 0xd7, 0x43, 0xba, 0xbe, 0x90, 0xce, 0x70, 0x3d, 0x41, 0x27, 0x90, 0x82, 0x6e, 0xc1, 0x76, 0x3c, - 0xd1, 0x71, 0x01, 0x5d, 0xcb, 0x76, 0x3c, 0xcd, 0x47, 0x92, 0x0f, 0x00, 0x2c, 0x4e, 0x2c, 0xf8, - 0xce, 0xf6, 0x03, 0xa1, 0x2f, 0xa0, 0xf0, 0xb2, 0xd7, 0x24, 0x34, 0x59, 0x84, 0x81, 0xf9, 0x16, - 0x75, 0xf8, 0x56, 0x88, 0x3f, 0x28, 0x79, 0x7f, 0x4c, 0xb4, 0xa2, 0xdf, 0xaf, 0x8a, 0xff, 0x03, - 0x72, 0xbe, 0xbe, 0xd8, 0xfe, 0x4f, 0x2d, 0x64, 0x44, 0x9e, 0x87, 0x42, 0x89, 0xdb, 0x79, 0x83, - 0xc8, 0x32, 0x10, 0x19, 0x6e, 0x41, 0x39, 0x8a, 0xef, 0xd9, 0x75, 0xfc, 0x5b, 0x13, 0xe4, 0xea, - 0x15, 0x18, 0x8d, 0x57, 0x43, 0x06, 0xa1, 0x6f, 0x62, 0x7e, 0x6e, 0x6e, 0x72, 0x62, 0x71, 0xb4, - 0x87, 0xf4, 0x43, 0xbe, 0x3a, 0x39, 0x57, 0x1e, 0xcd, 0xa8, 0xbf, 0x22, 0xcd, 0x20, 0x4c, 0xb5, - 0x8e, 0xaf, 0x86, 0xf7, 0x75, 0xdf, 0x32, 0x8a, 0xf7, 0xa1, 0x78, 0x62, 0xd0, 0x34, 0x3d, 0x8f, - 0x1a, 0x62, 0x95, 0xc0, 0xfb, 0x42, 0xef, 0xbe, 0x96, 0xc0, 0x93, 0x27, 0x61, 0x18, 0x61, 0xe2, - 0x8a, 0x90, 0xef, 0x8f, 0x45, 0x01, 0xe7, 0xbe, 0x16, 0x45, 0xaa, 0xdf, 0x08, 0x6f, 0x87, 0x67, - 0xa8, 0x7e, 0x54, 0x6f, 0x14, 0xdf, 0x23, 0xfd, 0xa5, 0xfe, 0x6d, 0x9e, 0x3f, 0x01, 0xe1, 0xef, - 0x05, 0x0f, 0x43, 0x94, 0xe1, 0x91, 0x6e, 0x6e, 0x17, 0x47, 0xba, 0x4f, 0x42, 0x61, 0x96, 0x7a, - 0xab, 0xb6, 0xef, 0xf8, 0x85, 0x1e, 0x7a, 0x4d, 0x84, 0xc8, 0x1e, 0x7a, 0x9c, 0x86, 0xac, 0x01, - 0xf1, 0x1f, 0x03, 0x06, 0x8e, 0xd8, 0xfe, 0x11, 0xf2, 0xd9, 0xc4, 0x3e, 0xa5, 0x8a, 0x2f, 0x81, - 0xd1, 0xc7, 0xfe, 0x54, 0xe0, 0xe8, 0x2d, 0x79, 0x62, 0xfd, 0xcd, 0x66, 0xb1, 0xc0, 0x69, 0xb4, - 0x14, 0xb6, 0xe4, 0x0d, 0x18, 0x98, 0x9d, 0x2a, 0x89, 0x87, 0x81, 0xdc, 0x2b, 0xe2, 0xa1, 0x40, - 0x8a, 0x3e, 0x22, 0x10, 0x09, 0xbe, 0xb7, 0x69, 0x2e, 0xeb, 0xc9, 0x77, 0x81, 0x21, 0x17, 0xa6, - 0x2d, 0xfc, 0xe5, 0x8e, 0x38, 0x5d, 0x08, 0xb4, 0x25, 0xfa, 0x9e, 0x27, 0x2e, 0x2b, 0x8e, 0x8d, - 0x69, 0x4b, 0xff, 0x3e, 0x46, 0xf7, 0x3c, 0x8c, 0x95, 0x5a, 0xad, 0x86, 0x49, 0x0d, 0xd4, 0x17, - 0xad, 0xdd, 0xa0, 0xae, 0x70, 0xf9, 0xc1, 0xc7, 0x20, 0x3a, 0x47, 0xd6, 0xf0, 0x39, 0x6a, 0xcd, - 0x69, 0x47, 0xfd, 0x33, 0x93, 0x65, 0xd5, 0x1f, 0xcf, 0xc2, 0x99, 0x09, 0x87, 0xea, 0x1e, 0x9d, - 0x9d, 0x2a, 0x95, 0xda, 0xe8, 0x23, 0xd7, 0x68, 0x50, 0x6b, 0xe5, 0x70, 0x86, 0xf5, 0x4b, 0x30, - 0x12, 0x34, 0xa0, 0x5a, 0xb7, 0x5b, 0x54, 0x7e, 0x58, 0x55, 0xf7, 0x31, 0x35, 0x97, 0xa1, 0xb4, - 0x18, 0x29, 0xb9, 0x05, 0x27, 0x03, 0x48, 0xa9, 0xd1, 0xb0, 0xd7, 0x35, 0xda, 0x76, 0xb9, 0x63, - 0x6c, 0x3f, 0x77, 0x8c, 0x0d, 0x39, 0xe8, 0x0c, 0x5f, 0x73, 0x18, 0x81, 0x96, 0x56, 0x4a, 0xfd, - 0x4a, 0x0e, 0xce, 0xde, 0xd1, 0x1b, 0xa6, 0x11, 0x8a, 0x46, 0xa3, 0x6e, 0xcb, 0xb6, 0x5c, 0x7a, - 0x84, 0x46, 0x69, 0x64, 0x28, 0xe4, 0x0f, 0x64, 0x28, 0x24, 0xbb, 0xa8, 0x77, 0xdf, 0x5d, 0x54, - 0xd8, 0x53, 0x17, 0xfd, 0xb3, 0x0c, 0x8c, 0xfa, 0x8e, 0xff, 0xf2, 0x23, 0x6e, 0xc9, 0x2b, 0x1d, - 0x8f, 0x10, 0x63, 0x7e, 0xd0, 0x88, 0x27, 0x55, 0xe8, 0x9b, 0xbc, 0xdf, 0x32, 0x1d, 0xea, 0xee, - 0xc0, 0x89, 0xfb, 0x82, 0x38, 0x2e, 0x19, 0xa3, 0xbc, 0x48, 0xe2, 0xa4, 0x84, 0x83, 0xf1, 0x39, - 0x1f, 0x7f, 0xfa, 0x30, 0xee, 0xbf, 0x4c, 0xe7, 0xcf, 0xf9, 0xc4, 0x13, 0x89, 0xc8, 0xfb, 0xcc, - 0x90, 0x94, 0x3c, 0x06, 0xb9, 0xc5, 0xc5, 0x19, 0x31, 0x93, 0x62, 0x44, 0x00, 0xcf, 0x93, 0xdf, - 0x2b, 0x32, 0xac, 0xfa, 0xe7, 0x59, 0x00, 0xa6, 0x0a, 0x7c, 0xb8, 0x1e, 0x8a, 0x12, 0x8e, 0x43, - 0xbf, 0x2f, 0x70, 0xa1, 0x86, 0x81, 0xd7, 0x7e, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x34, 0x8a, - 0xbe, 0x23, 0x39, 0xbf, 0x07, 0xc0, 0x9d, 0x0d, 0x3a, 0x92, 0xfb, 0xee, 0xe3, 0x1f, 0x80, 0x01, - 0x31, 0xe3, 0xd9, 0x91, 0xf3, 0xff, 0xba, 0x0f, 0xd4, 0x42, 0x7c, 0x6c, 0x6a, 0x2d, 0xec, 0x63, - 0x21, 0xf6, 0xc5, 0xcb, 0x7b, 0xe5, 0x58, 0xbc, 0x07, 0x2c, 0xde, 0x2f, 0x08, 0xf1, 0xf2, 0x17, - 0x3c, 0x47, 0x56, 0xbc, 0x07, 0x76, 0xf6, 0xad, 0xfe, 0x49, 0x06, 0x08, 0x6b, 0xd6, 0x82, 0xee, - 0xba, 0xeb, 0xb6, 0x63, 0x70, 0xe7, 0xf4, 0x43, 0x11, 0xcc, 0xc1, 0xdd, 0x57, 0x7e, 0xbd, 0x1f, - 0x4e, 0x46, 0x1c, 0x7f, 0x8f, 0xf8, 0x64, 0x75, 0x25, 0x3a, 0x9a, 0xba, 0xbd, 0x7a, 0x79, 0x9f, - 0x7c, 0x21, 0xda, 0x1b, 0x79, 0x80, 0x26, 0xdd, 0x84, 0x3e, 0x05, 0x43, 0xe2, 0x07, 0x5b, 0xa1, - 0xfd, 0x9b, 0x2e, 0x1c, 0xa5, 0x2e, 0x03, 0x68, 0x11, 0x34, 0x79, 0x16, 0x06, 0xd8, 0x80, 0x59, - 0xc1, 0xe0, 0x21, 0x7d, 0xe1, 0x8b, 0x12, 0xc3, 0x07, 0xca, 0xeb, 0x49, 0x40, 0x29, 0xbd, 0x23, - 0xea, 0xdf, 0xc1, 0x3b, 0xa2, 0x4f, 0xc2, 0x60, 0xc9, 0xb2, 0x6c, 0x0f, 0x37, 0xe9, 0xae, 0xb8, - 0x9a, 0xe8, 0x68, 0x95, 0x3f, 0x86, 0x8f, 0xe3, 0x43, 0xfa, 0x54, 0xb3, 0x5c, 0x66, 0x48, 0xae, - 0xfb, 0xaf, 0x62, 0xa8, 0x23, 0xbc, 0xca, 0xf1, 0x7a, 0xc6, 0x11, 0xb0, 0xe4, 0xa3, 0x18, 0xec, - 0xbc, 0xe1, 0x05, 0xc7, 0x6e, 0xd9, 0x2e, 0x35, 0xb8, 0xa0, 0x06, 0xc3, 0x50, 0x03, 0x2d, 0x81, - 0xc0, 0x77, 0x6c, 0x91, 0x40, 0x1e, 0x91, 0x22, 0x64, 0x19, 0x4e, 0xf9, 0x17, 0xc5, 0xc1, 0x8b, - 0xc1, 0x4a, 0xd9, 0x55, 0x86, 0xf0, 0x55, 0x12, 0x89, 0x2b, 0x43, 0xa5, 0x3c, 0x7e, 0xd1, 0xbf, - 0x16, 0xf1, 0x9f, 0x1c, 0xd6, 0x4c, 0x43, 0xee, 0xea, 0x54, 0x7e, 0xe4, 0x7b, 0x60, 0x70, 0x56, - 0xbf, 0x5f, 0x6e, 0x8b, 0xb3, 0x97, 0xe1, 0x9d, 0xdf, 0xbe, 0x34, 0xf5, 0xfb, 0x35, 0x43, 0x94, - 0x8b, 0xd9, 0x14, 0x32, 0x4b, 0x52, 0x83, 0x33, 0x0b, 0x8e, 0xdd, 0xb4, 0x3d, 0x6a, 0xc4, 0x1e, - 0xdf, 0x9d, 0x08, 0x5f, 0xeb, 0xb6, 0x04, 0x45, 0xad, 0xcb, 0x2b, 0xbc, 0x0e, 0x6c, 0x48, 0x13, - 0x4e, 0x94, 0x5c, 0xb7, 0xdd, 0xa4, 0xe1, 0x0d, 0xd5, 0xe8, 0xb6, 0x9f, 0xf1, 0x7e, 0xe1, 0xb5, - 0xfc, 0xb0, 0x8e, 0x45, 0xf9, 0x05, 0x55, 0xcd, 0x33, 0xe5, 0x1a, 0xf1, 0x5b, 0xe2, 0xbc, 0x5f, - 0xcf, 0xf7, 0x8f, 0x8c, 0x9e, 0xd0, 0xce, 0x26, 0x1b, 0xb3, 0x68, 0x7a, 0x0d, 0xaa, 0x7e, 0x2d, - 0x03, 0x10, 0x0a, 0x98, 0x3c, 0x15, 0x8d, 0x50, 0x94, 0x09, 0x2f, 0x3a, 0x44, 0xf4, 0x82, 0x48, - 0x48, 0x22, 0x72, 0x1e, 0xf2, 0x18, 0xe1, 0x22, 0x1b, 0x1e, 0xac, 0xae, 0x99, 0x96, 0xa1, 0x21, - 0x94, 0x61, 0xa5, 0xa7, 0xe8, 0x88, 0xc5, 0x4b, 0x7d, 0x6e, 0x15, 0x96, 0xe1, 0x44, 0xb5, 0xbd, - 0xe4, 0xd7, 0x2d, 0xbd, 0xab, 0xc3, 0x40, 0x1b, 0x6e, 0x7b, 0x29, 0x78, 0x8c, 0x1a, 0x09, 0x63, - 0x12, 0x2d, 0xa2, 0xfe, 0x5a, 0x26, 0x36, 0x0b, 0x1e, 0xe2, 0xa2, 0xf7, 0xbe, 0xa4, 0x9f, 0x46, - 0x72, 0x5a, 0x52, 0x7f, 0x26, 0x0b, 0x83, 0x0b, 0xb6, 0xe3, 0x89, 0x90, 0x21, 0x47, 0x7b, 0x15, - 0x92, 0xf6, 0x4a, 0xf9, 0x5d, 0xec, 0x95, 0xce, 0x43, 0x5e, 0x72, 0x51, 0xe6, 0xf7, 0x22, 0x86, - 0xe1, 0x68, 0x08, 0x55, 0xbf, 0x37, 0x0b, 0xf0, 0x91, 0xa7, 0x9f, 0x7e, 0x80, 0x05, 0xa4, 0xfe, - 0x54, 0x06, 0x4e, 0x88, 0x8b, 0x3a, 0x29, 0xd6, 0x57, 0x9f, 0x7f, 0xc5, 0x2a, 0x8f, 0x4b, 0x0e, - 0xd2, 0x7c, 0x1c, 0x5b, 0x02, 0x26, 0xef, 0x9b, 0x1e, 0xde, 0x55, 0x48, 0xc1, 0xbe, 0xa8, 0x80, - 0xc9, 0x4b, 0x80, 0x4f, 0x47, 0x9e, 0xf2, 0xaf, 0x20, 0x73, 0xe1, 0xba, 0xc7, 0x0a, 0x4c, 0xa6, - 0x5e, 0x43, 0xaa, 0xbf, 0x99, 0x87, 0xfc, 0xe4, 0x7d, 0x5a, 0x3f, 0xe2, 0x5d, 0x23, 0x1d, 0x6c, - 0xe6, 0xf7, 0x79, 0xb0, 0xb9, 0x17, 0x9f, 0x8a, 0x57, 0xc3, 0xfe, 0x2c, 0x44, 0xab, 0x8f, 0xf5, - 0x7c, 0xbc, 0x7a, 0xbf, 0xa7, 0x8f, 0x9e, 0x4b, 0xce, 0xff, 0x99, 0x83, 0x5c, 0x75, 0x62, 0xe1, - 0x58, 0x6f, 0x0e, 0x55, 0x6f, 0xba, 0xdf, 0x59, 0xab, 0xc1, 0x35, 0x54, 0x7f, 0xe8, 0x25, 0x1a, - 0xbb, 0x71, 0xfa, 0x76, 0x0e, 0x46, 0xaa, 0x53, 0x8b, 0x0b, 0xd2, 0x49, 0xf0, 0x2d, 0xee, 0xc9, - 0x87, 0x3e, 0x65, 0xbc, 0x4b, 0xcf, 0x27, 0xec, 0x99, 0xdb, 0x15, 0xcb, 0x7b, 0xee, 0xc6, 0x1d, - 0xbd, 0xd1, 0xa6, 0x78, 0xf4, 0xc2, 0xfd, 0x7e, 0x5d, 0xf3, 0x6d, 0xfa, 0x15, 0x7c, 0xf8, 0xef, - 0x33, 0x20, 0x2f, 0x41, 0xee, 0xb6, 0xf0, 0xc8, 0xe8, 0xc4, 0xe7, 0x99, 0xeb, 0x9c, 0x0f, 0x9b, - 0x04, 0x73, 0x6d, 0xd3, 0x40, 0x0e, 0xac, 0x14, 0x2b, 0x7c, 0x53, 0x2c, 0xc0, 0x3b, 0x2a, 0xbc, - 0xe2, 0x17, 0xbe, 0x59, 0x29, 0x93, 0x2a, 0x0c, 0x2e, 0x50, 0xa7, 0x69, 0x62, 0x47, 0xf9, 0x73, - 0x76, 0x77, 0x26, 0x6c, 0xa7, 0x32, 0xd8, 0x0a, 0x0b, 0x21, 0x33, 0x99, 0x0b, 0x79, 0x13, 0x80, - 0xdb, 0x28, 0x3b, 0x8c, 0x1f, 0x79, 0x01, 0xed, 0x7e, 0x6e, 0x5a, 0xa6, 0xd8, 0x78, 0x12, 0x33, - 0xb2, 0x06, 0xa3, 0xb3, 0xb6, 0x61, 0x2e, 0x9b, 0xdc, 0xf5, 0x12, 0x2b, 0x28, 0x6c, 0xef, 0xf0, - 0xc4, 0x4c, 0xc9, 0xa6, 0x54, 0x2e, 0xad, 0x9a, 0x04, 0x63, 0xf5, 0x7f, 0xeb, 0x85, 0x3c, 0xeb, - 0xf6, 0xe3, 0xf1, 0xbb, 0x9f, 0xf1, 0x5b, 0x82, 0xd1, 0xbb, 0xb6, 0xb3, 0x66, 0x5a, 0x2b, 0x81, - 0x57, 0xbc, 0xd8, 0x9b, 0xa2, 0x27, 0xcf, 0x3a, 0xc7, 0xd5, 0x02, 0x07, 0x7a, 0x2d, 0x41, 0xbe, - 0xcd, 0x08, 0x7e, 0x01, 0x80, 0xbf, 0x75, 0x47, 0x9a, 0xfe, 0x30, 0x58, 0x05, 0x7f, 0x09, 0x8f, - 0x8e, 0xf6, 0x72, 0xb0, 0x8a, 0x90, 0x98, 0x6d, 0xc2, 0xb9, 0x2f, 0xc4, 0x00, 0xfa, 0xdd, 0xe3, - 0x26, 0x1c, 0x7d, 0x21, 0x64, 0x23, 0x80, 0x7b, 0x45, 0x2c, 0x00, 0x48, 0xf7, 0x4b, 0x10, 0x13, - 0x44, 0x64, 0x72, 0x10, 0xe1, 0xe1, 0x52, 0xae, 0x97, 0x34, 0x89, 0x07, 0x79, 0x2e, 0x76, 0x01, - 0x4e, 0x22, 0xdc, 0x3a, 0xde, 0x7f, 0x87, 0x0e, 0x54, 0x43, 0xdb, 0x39, 0x50, 0xa9, 0x9f, 0xcb, - 0xc2, 0x40, 0xb5, 0xbd, 0xe4, 0x6e, 0xb8, 0x1e, 0x6d, 0x1e, 0x71, 0x35, 0xf6, 0xb7, 0x57, 0xf9, - 0xd4, 0xed, 0xd5, 0x63, 0xbe, 0x50, 0xa4, 0x73, 0xc7, 0xc0, 0xa4, 0xf3, 0xc5, 0xf1, 0x3f, 0x67, - 0x61, 0x94, 0x5f, 0x9c, 0x95, 0x4d, 0xb7, 0x7e, 0x00, 0xce, 0xfc, 0x87, 0x2f, 0x95, 0xfd, 0x5d, - 0x36, 0xef, 0xe0, 0x89, 0x84, 0xfa, 0xe9, 0x2c, 0x0c, 0x96, 0xda, 0xde, 0x6a, 0xc9, 0x43, 0xdd, - 0x7a, 0x20, 0xf7, 0x27, 0x7f, 0x90, 0x81, 0x13, 0xac, 0x21, 0x8b, 0xf6, 0x1a, 0xb5, 0x0e, 0xe0, - 0xe0, 0x51, 0x3e, 0x40, 0xcc, 0xee, 0xf1, 0x00, 0xd1, 0x97, 0x65, 0x6e, 0x77, 0xb2, 0xc4, 0xe3, - 0x72, 0xcd, 0x6e, 0xd0, 0xa3, 0xfd, 0x19, 0x07, 0x78, 0x5c, 0xee, 0x0b, 0xe4, 0x00, 0xae, 0x67, - 0xbe, 0xbb, 0x04, 0x72, 0x00, 0x67, 0x4b, 0xdf, 0x1d, 0x02, 0xf9, 0x7a, 0x06, 0x06, 0xc6, 0x6d, - 0xef, 0x88, 0x0f, 0x7c, 0xf1, 0x15, 0x47, 0x5b, 0xcd, 0xfd, 0xaf, 0x38, 0xda, 0xba, 0xa9, 0xfe, - 0x44, 0x16, 0x4e, 0x89, 0xd8, 0xe0, 0xe2, 0xfc, 0xe1, 0x78, 0x3a, 0x16, 0x83, 0x2d, 0x29, 0x9a, - 0xe3, 0x79, 0x48, 0x88, 0xe6, 0x97, 0x72, 0x70, 0x0a, 0x43, 0x99, 0xb2, 0x6d, 0xd9, 0x77, 0x81, - 0x2d, 0x42, 0xea, 0xd1, 0x4b, 0xd0, 0xd9, 0x94, 0x4b, 0xd0, 0xbf, 0xd9, 0x2c, 0x3e, 0xb7, 0x62, - 0x7a, 0xab, 0xed, 0xa5, 0xab, 0x75, 0xbb, 0x79, 0x6d, 0xc5, 0xd1, 0xef, 0x99, 0xfc, 0xfa, 0x4f, - 0x6f, 0x5c, 0x0b, 0xd2, 0x6c, 0xe8, 0x2d, 0x53, 0x24, 0xe0, 0xa8, 0xe2, 0x5e, 0x87, 0x71, 0xf5, - 0xaf, 0x4f, 0x5d, 0x80, 0xd7, 0x6d, 0xd3, 0x12, 0x3e, 0x85, 0xdc, 0xd0, 0xad, 0xb2, 0xfd, 0xe1, - 0x5b, 0xb6, 0x69, 0xd5, 0xe2, 0x8e, 0x85, 0xbb, 0xad, 0x2f, 0x64, 0xad, 0x49, 0xd5, 0xa8, 0xff, - 0x5f, 0x06, 0x1e, 0x8a, 0x6a, 0xf1, 0x77, 0x83, 0xed, 0xf8, 0x93, 0x59, 0x38, 0x7d, 0x13, 0x85, - 0x13, 0x38, 0x72, 0x1c, 0xcf, 0x5b, 0x62, 0x70, 0xa6, 0xc8, 0xe6, 0xd8, 0xa2, 0xec, 0x2c, 0x9b, - 0xe3, 0x49, 0x5d, 0xc8, 0xe6, 0x0f, 0x33, 0x70, 0x72, 0xbe, 0x52, 0x9e, 0xf8, 0x2e, 0x19, 0x51, - 0xc9, 0xef, 0x39, 0xe2, 0x06, 0x67, 0xe2, 0x7b, 0x8e, 0xb8, 0xe9, 0xf9, 0xa5, 0x2c, 0x9c, 0xac, - 0x96, 0x66, 0x67, 0xbe, 0x5b, 0x66, 0xf0, 0x09, 0xd9, 0xeb, 0xd0, 0x3f, 0x04, 0x13, 0xb6, 0x80, - 0xfc, 0x99, 0x77, 0xae, 0x77, 0xf6, 0x46, 0x4c, 0x0a, 0xe5, 0x88, 0x4f, 0xdd, 0x07, 0x22, 0x14, - 0xa6, 0xf9, 0x11, 0xea, 0x23, 0xae, 0xf9, 0xff, 0x47, 0x01, 0x06, 0x6f, 0xb5, 0x97, 0xa8, 0x70, - 0x4e, 0x79, 0xa0, 0x4f, 0x7e, 0xaf, 0xc3, 0xa0, 0x10, 0x03, 0xde, 0x9a, 0x48, 0xc1, 0xf3, 0x44, - 0x30, 0x14, 0x1e, 0x9f, 0x48, 0x26, 0x22, 0xe7, 0x21, 0x7f, 0x87, 0x3a, 0x4b, 0xf2, 0xbb, 0xd2, - 0x7b, 0xd4, 0x59, 0xd2, 0x10, 0x4a, 0x66, 0x42, 0x97, 0xf9, 0xd2, 0x42, 0x05, 0x13, 0xa9, 0x88, - 0x0b, 0x1b, 0xcc, 0x0c, 0x13, 0xf8, 0xbd, 0xe9, 0x2d, 0x93, 0xa7, 0x60, 0x91, 0xdf, 0xb4, 0xc7, - 0x4b, 0x92, 0x39, 0x18, 0x93, 0x1d, 0x9f, 0x78, 0x16, 0x91, 0xfe, 0x14, 0x76, 0x69, 0xf9, 0x43, - 0x92, 0x45, 0xc9, 0xab, 0x30, 0xe4, 0x03, 0xd1, 0x85, 0x6b, 0x20, 0x0c, 0x5d, 0x1f, 0xb0, 0x8a, - 0xa5, 0x28, 0x8a, 0x14, 0x90, 0x19, 0xe0, 0x35, 0x04, 0xa4, 0x30, 0x88, 0xb9, 0xc4, 0x45, 0x0a, - 0x90, 0x67, 0x91, 0x01, 0x3e, 0xf3, 0x40, 0x67, 0x95, 0x41, 0x7c, 0x74, 0x89, 0x2e, 0xf9, 0x8e, - 0x80, 0xf3, 0xa7, 0xb5, 0x11, 0x32, 0x32, 0x0f, 0x10, 0x3a, 0x15, 0x88, 0x00, 0x06, 0xbb, 0x76, - 0x77, 0x90, 0x58, 0xc8, 0xd7, 0x81, 0xc3, 0x7b, 0xb9, 0x0e, 0x54, 0xff, 0x38, 0x0b, 0x83, 0xa5, - 0x56, 0x2b, 0x18, 0x0a, 0x4f, 0x41, 0xa1, 0xd4, 0x6a, 0xdd, 0xd6, 0x2a, 0x72, 0x28, 0x73, 0xbd, - 0xd5, 0xaa, 0xb5, 0x1d, 0x53, 0xf6, 0x09, 0xe5, 0x44, 0x64, 0x02, 0x86, 0x4b, 0xad, 0xd6, 0x42, - 0x7b, 0xa9, 0x61, 0xd6, 0xa5, 0xcc, 0x48, 0x3c, 0x77, 0x5c, 0xab, 0x55, 0x6b, 0x21, 0x26, 0x9e, - 0x1e, 0x2b, 0x5a, 0x86, 0x7c, 0x12, 0xc3, 0xfe, 0x88, 0xc4, 0x3c, 0x3c, 0xf5, 0x87, 0x1a, 0x04, - 0x31, 0x0f, 0xdb, 0x76, 0x35, 0x20, 0xe2, 0xc1, 0xde, 0xcf, 0xfb, 0x21, 0xf3, 0x59, 0x45, 0x89, - 0x04, 0x3c, 0x21, 0x4b, 0xf2, 0x41, 0xe8, 0x2b, 0xb5, 0x5a, 0xd2, 0x7d, 0x13, 0x3a, 0x15, 0xb1, - 0x52, 0xf1, 0xdc, 0x67, 0x82, 0xec, 0xdc, 0xcb, 0x30, 0x12, 0xad, 0x6c, 0x57, 0xc1, 0xe2, 0xbf, - 0x93, 0xc1, 0x0f, 0x3a, 0xe2, 0x3e, 0xcd, 0xcf, 0x40, 0xae, 0xd4, 0x6a, 0x89, 0xf9, 0xe8, 0x64, - 0x4a, 0x7f, 0xc4, 0x9f, 0x40, 0x97, 0x5a, 0x2d, 0xff, 0xd3, 0x8f, 0xf8, 0xe3, 0x88, 0x3d, 0x7d, - 0xfa, 0xd7, 0xf9, 0xa7, 0x1f, 0xed, 0x87, 0x0b, 0xea, 0x6f, 0xe6, 0xe0, 0x44, 0xa9, 0xd5, 0x3a, - 0x0e, 0x32, 0x7f, 0x50, 0x0f, 0xad, 0x9f, 0x06, 0x90, 0xa6, 0xc7, 0xbe, 0xe0, 0xe9, 0xd6, 0xa0, - 0x34, 0x35, 0x2a, 0x19, 0x4d, 0x22, 0xf2, 0xd5, 0xaf, 0x7f, 0x57, 0xea, 0xf7, 0xe9, 0x1c, 0x4e, - 0xc5, 0x47, 0x3d, 0x68, 0xd4, 0x7b, 0xa5, 0xdb, 0x44, 0x1f, 0x14, 0x76, 0xd5, 0x07, 0xbf, 0x1f, - 0x19, 0x3c, 0x18, 0xb4, 0xfc, 0xb8, 0x17, 0x7a, 0xf7, 0x65, 0x16, 0x8f, 0xc8, 0xc2, 0x14, 0x91, - 0x6c, 0xfc, 0x44, 0x4a, 0x22, 0xae, 0x52, 0x9d, 0xa1, 0x6a, 0xa6, 0xa1, 0xc5, 0x68, 0xfd, 0x3e, - 0xec, 0xdb, 0x55, 0x1f, 0x6e, 0x66, 0xf1, 0xed, 0x74, 0x10, 0x97, 0x69, 0xff, 0xbb, 0x8b, 0x6b, - 0x00, 0xdc, 0xf3, 0x20, 0x70, 0x6b, 0x1e, 0xe6, 0x21, 0x58, 0x78, 0x7e, 0x25, 0x11, 0x82, 0x25, - 0x24, 0x09, 0x3c, 0xa4, 0x72, 0xa9, 0x1e, 0x52, 0x57, 0xa0, 0x5f, 0xd3, 0xd7, 0xdf, 0x68, 0x53, - 0x67, 0x43, 0x98, 0x33, 0x3c, 0xec, 0xa1, 0xbe, 0x5e, 0xfb, 0x14, 0x03, 0x6a, 0x01, 0x9a, 0xa8, - 0xc1, 0xe3, 0x7b, 0xc9, 0x23, 0x84, 0x9f, 0x91, 0x07, 0x4f, 0xee, 0xf7, 0xa2, 0xe8, 0xe4, 0x45, - 0xc8, 0x95, 0xee, 0x56, 0x85, 0x64, 0x83, 0xae, 0x2d, 0xdd, 0xad, 0x0a, 0x79, 0x75, 0x2c, 0x7b, - 0xb7, 0xaa, 0x7e, 0x3a, 0x0b, 0x24, 0x49, 0x49, 0x9e, 0x83, 0x01, 0x84, 0xae, 0x30, 0x9d, 0x91, - 0x13, 0x73, 0xae, 0xbb, 0x35, 0x07, 0xa1, 0x11, 0xe3, 0xce, 0x27, 0x25, 0x2f, 0x60, 0xea, 0x63, - 0x91, 0x1a, 0x2e, 0x92, 0x98, 0x73, 0xdd, 0xf5, 0x93, 0x05, 0xc7, 0x32, 0x1f, 0x0b, 0x62, 0xb4, - 0x0b, 0xef, 0x56, 0xa7, 0x6d, 0xd7, 0x13, 0xa2, 0xe6, 0x76, 0xe1, 0xba, 0x8b, 0x19, 0x61, 0x23, - 0x76, 0x21, 0x27, 0xc3, 0xac, 0x56, 0x77, 0xab, 0xfc, 0x99, 0x8a, 0xa1, 0xd9, 0x0d, 0xdf, 0xa0, - 0xe4, 0x59, 0xad, 0xd6, 0xdd, 0x1a, 0x7f, 0xe2, 0x62, 0x60, 0xce, 0xe5, 0x48, 0x56, 0xab, 0x48, - 0x29, 0xf5, 0xf3, 0xfd, 0x30, 0x5a, 0xd6, 0x3d, 0x7d, 0x49, 0x77, 0xa9, 0xb4, 0x9b, 0x3e, 0xe1, - 0xc3, 0xfc, 0xcf, 0x91, 0xe4, 0x60, 0x2c, 0xa5, 0x7c, 0x4d, 0xbc, 0x00, 0x79, 0x29, 0xe4, 0x1b, - 0xe4, 0x1c, 0x95, 0x93, 0x98, 0x2d, 0xd5, 0x5a, 0x02, 0xac, 0x25, 0x08, 0xc9, 0x93, 0x30, 0xe8, - 0xc3, 0xd8, 0x06, 0x20, 0x17, 0xea, 0x8c, 0xb1, 0xc4, 0xec, 0x7f, 0x4d, 0x46, 0x93, 0x17, 0x60, - 0xc8, 0xff, 0x29, 0x99, 0xd6, 0x3c, 0x23, 0xdb, 0x52, 0x62, 0xf7, 0x24, 0x93, 0xca, 0x45, 0x71, - 0x7e, 0xeb, 0x8d, 0x14, 0x8d, 0x25, 0x3d, 0x8b, 0x90, 0x92, 0x4f, 0xc1, 0x88, 0xff, 0x5b, 0x6c, - 0x18, 0x78, 0x7e, 0xb8, 0x27, 0x83, 0x94, 0xce, 0x31, 0xb1, 0x5e, 0x8d, 0x92, 0xf3, 0xad, 0xc3, - 0xc3, 0x7e, 0x1e, 0x2f, 0x63, 0x29, 0xb9, 0x73, 0x88, 0x55, 0x40, 0x2a, 0x30, 0xe6, 0x43, 0x42, - 0x0d, 0xed, 0x0b, 0x77, 0x8c, 0xc6, 0x52, 0x2d, 0x55, 0x49, 0x93, 0xa5, 0x48, 0x03, 0xce, 0x47, - 0x80, 0x86, 0xbb, 0x6a, 0x2e, 0x7b, 0x62, 0xbb, 0x27, 0x62, 0x10, 0x8b, 0xc4, 0x8d, 0x01, 0x57, - 0x4e, 0xe3, 0x67, 0x60, 0x8d, 0x66, 0x87, 0xea, 0xca, 0x8d, 0x54, 0xe1, 0x94, 0x8f, 0xbf, 0x39, - 0xb1, 0xb0, 0xe0, 0xd8, 0x6f, 0xd1, 0xba, 0x57, 0x29, 0x8b, 0xed, 0x32, 0xc6, 0xa6, 0x33, 0x96, - 0x6a, 0x2b, 0xf5, 0x16, 0x53, 0x0a, 0x86, 0x8b, 0x32, 0x4f, 0x2d, 0x4c, 0xee, 0xc0, 0x69, 0x09, - 0x2e, 0xa5, 0x87, 0x86, 0x70, 0x3f, 0x2f, 0xb8, 0xa6, 0x67, 0x88, 0x4e, 0x2f, 0x4e, 0x5e, 0x86, - 0x61, 0x1f, 0xc1, 0x6f, 0x11, 0x07, 0xf1, 0x16, 0x11, 0x87, 0xa4, 0xb1, 0x54, 0x8b, 0xbf, 0xa6, - 0x8c, 0x12, 0xcb, 0x1a, 0x85, 0x19, 0xf5, 0x87, 0x22, 0x1a, 0xe5, 0x6d, 0xb4, 0x52, 0x95, 0x11, - 0xb3, 0xec, 0xbf, 0x1a, 0x6a, 0xd4, 0xbc, 0x63, 0xae, 0x98, 0x7c, 0x27, 0xed, 0x3f, 0xa0, 0x5c, - 0xaa, 0xd9, 0x08, 0x4c, 0xd3, 0x0f, 0x4e, 0x7e, 0xae, 0x04, 0x27, 0x53, 0x74, 0x6c, 0x57, 0x3b, - 0xc6, 0xcf, 0x65, 0xc3, 0x46, 0x1c, 0xf1, 0x6d, 0xe3, 0x38, 0xf4, 0xfb, 0x5f, 0x22, 0x8c, 0x07, - 0xa5, 0xd3, 0xd0, 0x8c, 0xf3, 0xf0, 0xf1, 0x11, 0x71, 0x1c, 0xf1, 0xad, 0xe4, 0x41, 0x88, 0xe3, - 0x9d, 0x4c, 0x28, 0x8e, 0x23, 0xbe, 0xbd, 0xfc, 0xc3, 0x5c, 0x38, 0x27, 0x1d, 0xef, 0x31, 0x0f, - 0xca, 0x4c, 0x0e, 0xfd, 0x60, 0x0b, 0xbb, 0x78, 0xc8, 0x28, 0xab, 0x66, 0xdf, 0x1e, 0x55, 0xf3, - 0x4f, 0x93, 0xfd, 0xc9, 0x4d, 0xcf, 0x23, 0xd9, 0x9f, 0x07, 0x30, 0x58, 0xc9, 0xf5, 0x70, 0x1d, - 0xe3, 0x36, 0x7a, 0xaf, 0x14, 0xe2, 0x6f, 0x49, 0x98, 0xe8, 0x51, 0x12, 0xf2, 0x31, 0x38, 0x1b, - 0x01, 0x2c, 0xe8, 0x8e, 0xde, 0xa4, 0x5e, 0x98, 0x71, 0x10, 0x83, 0x36, 0xf9, 0xa5, 0x6b, 0xad, - 0x00, 0x2d, 0x67, 0x31, 0xec, 0xc0, 0x41, 0x52, 0x8e, 0xbe, 0x5d, 0x38, 0x49, 0x7f, 0x39, 0x17, - 0x9a, 0x2a, 0xd1, 0xe0, 0xab, 0x1a, 0x75, 0xdb, 0x0d, 0xef, 0xc1, 0xed, 0xe0, 0xbd, 0xa5, 0xb6, - 0x98, 0x86, 0x13, 0xa5, 0xe5, 0x65, 0x5a, 0xf7, 0xfc, 0x98, 0xd2, 0xae, 0x08, 0xb7, 0xc7, 0xb7, - 0x0e, 0x02, 0x25, 0x62, 0x04, 0x47, 0x72, 0xe3, 0xc7, 0x8a, 0xa9, 0x7f, 0x96, 0x07, 0x25, 0x30, - 0xdd, 0x83, 0x87, 0x5a, 0x87, 0xb8, 0x4c, 0xbe, 0x27, 0x7a, 0xc5, 0x84, 0xb1, 0x50, 0x18, 0xd5, - 0x76, 0xb3, 0xa9, 0xe3, 0xd0, 0x63, 0x5b, 0x83, 0x62, 0x9c, 0x59, 0x48, 0xc8, 0x77, 0x03, 0xe7, - 0xc4, 0x6e, 0x80, 0x84, 0x0f, 0xe1, 0x6a, 0x2e, 0x67, 0xa1, 0x25, 0xb9, 0x92, 0x2f, 0x64, 0xe0, - 0x94, 0xdf, 0x29, 0xf3, 0x4b, 0xcc, 0x2c, 0x9e, 0xb0, 0xdb, 0x96, 0xe7, 0xef, 0x44, 0x5e, 0xec, - 0x5c, 0x1d, 0xef, 0xa4, 0xab, 0x69, 0x85, 0x79, 0x4b, 0x82, 0xc0, 0x12, 0x81, 0x42, 0xd8, 0x48, - 0x53, 0xab, 0x23, 0x91, 0x96, 0x5a, 0xef, 0xb9, 0x9b, 0xf0, 0x50, 0x47, 0x96, 0xdb, 0x99, 0xa1, - 0xbd, 0xb2, 0x19, 0xfa, 0xf7, 0x32, 0xe1, 0x44, 0x14, 0x13, 0x12, 0xb9, 0x0a, 0x10, 0x82, 0xc4, - 0xc6, 0x74, 0x64, 0x6b, 0xb3, 0x08, 0xa1, 0xd0, 0x34, 0x89, 0x82, 0xcc, 0x43, 0x41, 0x88, 0x85, - 0x67, 0xf7, 0xfd, 0xc0, 0x36, 0xbd, 0x70, 0x55, 0x96, 0x03, 0x6e, 0x3a, 0xc5, 0x37, 0x0b, 0x36, - 0xe7, 0x5e, 0x80, 0xc1, 0xbd, 0x7e, 0xd7, 0x17, 0x72, 0x40, 0xe4, 0x5d, 0xe4, 0x21, 0x9a, 0xd8, - 0x47, 0x78, 0x0a, 0xbb, 0x0c, 0xfd, 0xec, 0x13, 0x30, 0xdf, 0x85, 0x14, 0xdf, 0xb6, 0x2d, 0x60, - 0x5a, 0x80, 0x0d, 0x83, 0x4b, 0xf5, 0xa5, 0x07, 0x97, 0x52, 0x7f, 0x2c, 0x07, 0x67, 0xe4, 0x0e, - 0x29, 0x53, 0x0c, 0x99, 0x7f, 0xdc, 0x29, 0xef, 0x62, 0xa7, 0xa8, 0x50, 0xe0, 0x9b, 0x07, 0x91, - 0xbb, 0x80, 0x1f, 0xec, 0x20, 0x44, 0x13, 0x18, 0xf5, 0x1f, 0x67, 0x61, 0x78, 0xc1, 0x76, 0xbd, - 0x15, 0x87, 0xba, 0x0b, 0xba, 0xe3, 0x3e, 0xc0, 0xdd, 0xf1, 0x21, 0x18, 0xc6, 0xf0, 0x40, 0x4d, - 0x6a, 0xf1, 0x10, 0x3a, 0xbd, 0x52, 0xb2, 0x11, 0x1f, 0x21, 0xf2, 0x4a, 0x45, 0x08, 0x99, 0xf6, - 0x73, 0xcb, 0x4f, 0x0a, 0xda, 0xc4, 0xcd, 0x3e, 0x0e, 0x57, 0x7f, 0x2e, 0x07, 0x43, 0xbe, 0x94, - 0xc7, 0xcd, 0xa3, 0x7a, 0x53, 0x73, 0xb8, 0x42, 0xbe, 0x06, 0xb0, 0x60, 0x3b, 0x9e, 0xde, 0x98, - 0x0b, 0x35, 0x1f, 0x8f, 0x38, 0x5b, 0x08, 0xe5, 0x65, 0x24, 0x12, 0x5c, 0xbf, 0x42, 0xb3, 0x9a, - 0x4f, 0x4c, 0x7c, 0xfd, 0x0a, 0xa0, 0x9a, 0x44, 0xa1, 0xfe, 0x6e, 0x16, 0x4e, 0xf8, 0x9d, 0x34, - 0x79, 0x9f, 0xd6, 0xdb, 0x0f, 0xf2, 0xdc, 0x14, 0x95, 0x76, 0xef, 0xb6, 0xd2, 0x56, 0xff, 0x95, - 0x34, 0x91, 0x4c, 0x34, 0xec, 0xe3, 0x89, 0xe4, 0xef, 0x42, 0xc7, 0xd5, 0xef, 0xcf, 0xc1, 0x29, - 0x5f, 0xea, 0x53, 0x6d, 0x0b, 0x0f, 0x07, 0x26, 0xf4, 0x46, 0xe3, 0x41, 0xde, 0x8d, 0x0f, 0xfa, - 0x82, 0x98, 0x17, 0xf1, 0xf6, 0x44, 0x8e, 0xbf, 0x65, 0x01, 0xae, 0xd9, 0xa6, 0xa1, 0xc9, 0x44, - 0xe4, 0x55, 0x18, 0xf2, 0x7f, 0x96, 0x9c, 0x15, 0x7f, 0x0b, 0x8e, 0x47, 0xfd, 0x41, 0x21, 0xdd, - 0x89, 0x84, 0x15, 0x88, 0x14, 0x50, 0xff, 0x69, 0x01, 0xce, 0xdd, 0x35, 0x2d, 0xc3, 0x5e, 0x77, - 0xfd, 0x14, 0x91, 0x47, 0xfe, 0xa8, 0xeb, 0xb0, 0x53, 0x43, 0xbe, 0x01, 0xa7, 0xe3, 0x22, 0x75, - 0x82, 0xc0, 0xdd, 0xa2, 0x77, 0xd6, 0x39, 0x41, 0xcd, 0x4f, 0x16, 0x29, 0xee, 0xcb, 0xb4, 0xf4, - 0x92, 0xf1, 0x6c, 0x93, 0x7d, 0x3b, 0xc9, 0x36, 0xf9, 0x04, 0x14, 0xca, 0x76, 0x53, 0x37, 0xfd, - 0x00, 0x33, 0x38, 0x8a, 0x83, 0x7a, 0x11, 0xa3, 0x09, 0x0a, 0xc6, 0x5f, 0x54, 0x8c, 0x5d, 0x36, - 0x10, 0xf2, 0xf7, 0x0b, 0x30, 0x2b, 0x4d, 0x93, 0x89, 0x88, 0x0d, 0xc3, 0xa2, 0x3a, 0x71, 0xbb, - 0x05, 0xb8, 0x79, 0x7a, 0xd6, 0x97, 0x51, 0x67, 0xb5, 0xba, 0x1a, 0x29, 0xc7, 0xb7, 0x51, 0x3c, - 0x09, 0xa6, 0xf8, 0x18, 0x7e, 0xcf, 0xa5, 0x45, 0xf9, 0x4b, 0x42, 0xc0, 0x49, 0x66, 0x30, 0x29, - 0x04, 0x9c, 0x65, 0x64, 0x22, 0x32, 0x09, 0x63, 0x18, 0x5e, 0x39, 0xd8, 0x4a, 0x31, 0x95, 0x18, - 0x42, 0xa3, 0x12, 0x2f, 0x4d, 0x78, 0x44, 0x66, 0xf6, 0x71, 0xb5, 0xba, 0x40, 0x6b, 0xc9, 0x12, - 0xe7, 0x5e, 0x03, 0x92, 0x6c, 0xf3, 0xae, 0xae, 0x4d, 0xfe, 0x2f, 0x69, 0x5f, 0x77, 0xd4, 0x1d, - 0x5f, 0x0e, 0x62, 0xb6, 0x8b, 0xa4, 0x0e, 0xeb, 0x7d, 0x37, 0x53, 0x87, 0x15, 0x0e, 0x34, 0x75, - 0x98, 0xfa, 0xab, 0x19, 0x18, 0x4b, 0xc4, 0x19, 0x27, 0xcf, 0x00, 0x70, 0x88, 0x14, 0xcf, 0x11, - 0x03, 0xa4, 0x84, 0xb1, 0xc7, 0xc5, 0x1a, 0x18, 0x92, 0x91, 0x6b, 0xd0, 0xcf, 0x7f, 0x89, 0x18, - 0x4c, 0xc9, 0x22, 0xed, 0xb6, 0x69, 0x68, 0x01, 0x51, 0x58, 0x0b, 0x5e, 0x1c, 0xe6, 0x52, 0x8b, - 0x78, 0x1b, 0xad, 0xa0, 0x16, 0x46, 0xa6, 0x7e, 0x3e, 0x0b, 0x43, 0x41, 0x83, 0x4b, 0xc6, 0x61, - 0xe9, 0x5c, 0x41, 0x84, 0x6c, 0xcf, 0x6d, 0x17, 0xb2, 0x3d, 0x36, 0xa9, 0x8a, 0x18, 0xed, 0x07, - 0xf7, 0xee, 0xe9, 0x8b, 0x59, 0x38, 0x11, 0xd4, 0x7a, 0x88, 0x77, 0x54, 0xef, 0x21, 0x91, 0x7c, - 0x21, 0x03, 0xca, 0xb8, 0xd9, 0x68, 0x98, 0xd6, 0x4a, 0xc5, 0x5a, 0xb6, 0x9d, 0x26, 0xce, 0x7a, - 0x87, 0x77, 0x4e, 0xab, 0xfe, 0x50, 0x06, 0xc6, 0x44, 0x83, 0x26, 0x74, 0xc7, 0x38, 0xbc, 0x43, - 0xb0, 0x78, 0x4b, 0x0e, 0x4f, 0x5f, 0xd4, 0xaf, 0x66, 0x01, 0x66, 0xec, 0xfa, 0xda, 0x11, 0x7f, - 0x36, 0xf5, 0x12, 0x14, 0x78, 0x20, 0x2c, 0xa1, 0xb1, 0x63, 0xe2, 0x79, 0x10, 0xfb, 0x34, 0x8e, - 0x18, 0x1f, 0x15, 0xf3, 0x71, 0x81, 0x07, 0xd2, 0x52, 0x32, 0x9a, 0x28, 0xc2, 0x2a, 0x65, 0x74, - 0x62, 0xc1, 0x08, 0x2a, 0x65, 0xb0, 0x68, 0xa5, 0x5b, 0x9b, 0xc5, 0x7c, 0xc3, 0xae, 0xaf, 0x69, - 0x48, 0xaf, 0xfe, 0x6d, 0x86, 0xcb, 0xee, 0x88, 0x3f, 0xfe, 0xf4, 0x3f, 0x3f, 0xbf, 0xcb, 0xcf, - 0xff, 0xe1, 0x0c, 0x9c, 0xd2, 0x68, 0xdd, 0xbe, 0x47, 0x9d, 0x8d, 0x09, 0xdb, 0xa0, 0x37, 0xa9, - 0x45, 0x9d, 0xc3, 0x1a, 0x51, 0xff, 0x2b, 0xe6, 0xb8, 0x08, 0x1b, 0x73, 0xdb, 0xa5, 0xc6, 0xd1, - 0xc9, 0x3f, 0xa2, 0xfe, 0x46, 0x1f, 0x28, 0xa9, 0xa6, 0xed, 0x91, 0x35, 0xe7, 0x3a, 0xee, 0x57, - 0xf2, 0x07, 0xb5, 0x5f, 0xe9, 0xdd, 0xdd, 0x7e, 0xa5, 0xb0, 0xdb, 0xfd, 0x4a, 0xdf, 0x4e, 0xf6, - 0x2b, 0xcd, 0xf8, 0x7e, 0xa5, 0x1f, 0xf7, 0x2b, 0xcf, 0x74, 0xdd, 0xaf, 0x4c, 0x5a, 0xc6, 0x1e, - 0x77, 0x2b, 0x47, 0x36, 0x37, 0xee, 0x5e, 0xb6, 0x59, 0x97, 0xd9, 0xa4, 0x58, 0xb7, 0x1d, 0x83, - 0x1a, 0x62, 0x77, 0x85, 0x47, 0xfb, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x91, 0x68, 0x78, 0x78, 0x27, - 0x89, 0x86, 0x0f, 0x60, 0xff, 0xf5, 0xb9, 0x2c, 0x8c, 0x4d, 0x50, 0xc7, 0xe3, 0x91, 0x36, 0x0f, - 0xc2, 0x73, 0xad, 0x04, 0x27, 0x24, 0x86, 0x68, 0x91, 0x67, 0x43, 0x6f, 0xbc, 0x3a, 0x75, 0xbc, - 0xb8, 0x33, 0x5f, 0x9c, 0x9e, 0x55, 0xef, 0x27, 0xfb, 0x12, 0x63, 0x37, 0xa8, 0xde, 0x87, 0x73, - 0x41, 0x9a, 0xe2, 0x97, 0x16, 0xd0, 0x4b, 0xf9, 0xbb, 0xf2, 0xbb, 0xcf, 0xdf, 0xa5, 0xfe, 0x4a, - 0x06, 0x2e, 0x69, 0xd4, 0xa2, 0xeb, 0xfa, 0x52, 0x83, 0x4a, 0xcd, 0x12, 0x2b, 0x03, 0x9b, 0x35, - 0x4c, 0xb7, 0xa9, 0x7b, 0xf5, 0xd5, 0x7d, 0xc9, 0x68, 0x0a, 0x86, 0xe4, 0xf9, 0x6b, 0x17, 0x73, - 0x5b, 0xa4, 0x9c, 0xfa, 0x1b, 0x79, 0xe8, 0x1b, 0xb7, 0xbd, 0xd7, 0xed, 0x7d, 0x26, 0x94, 0x0b, - 0xa7, 0xfc, 0xec, 0x2e, 0x0e, 0x74, 0x3e, 0x88, 0x95, 0x4b, 0x31, 0xf6, 0xd1, 0xd3, 0x73, 0xc9, - 0x4e, 0xe4, 0x22, 0xf0, 0xc9, 0x76, 0x99, 0x4a, 0xee, 0x39, 0x18, 0xc0, 0x20, 0x2d, 0xd2, 0x91, - 0x2b, 0xfa, 0x51, 0x7b, 0x0c, 0x18, 0xaf, 0x23, 0x24, 0x25, 0x1f, 0x8b, 0x84, 0x06, 0x2d, 0xec, - 0x3f, 0xf5, 0x9c, 0x1c, 0x25, 0xf4, 0x19, 0x7e, 0x5b, 0x87, 0x6d, 0x92, 0xd2, 0x74, 0xe0, 0x51, - 0x49, 0xac, 0x49, 0x01, 0xe1, 0x01, 0xa6, 0x85, 0x9b, 0x80, 0xe1, 0x71, 0xdb, 0x93, 0x7c, 0x76, - 0x07, 0xc2, 0xd7, 0x9a, 0x4c, 0xf2, 0xe9, 0x0e, 0xbb, 0xd1, 0x32, 0xea, 0xb7, 0xf3, 0x30, 0xe4, - 0xff, 0x3c, 0x24, 0xdd, 0x79, 0x0a, 0x0a, 0xd3, 0xb6, 0x94, 0xa9, 0x00, 0xfd, 0x7c, 0x57, 0x6d, - 0x37, 0xe6, 0xc0, 0x2c, 0x88, 0x98, 0xd4, 0xe7, 0x6c, 0x43, 0xf6, 0x52, 0x47, 0xa9, 0x5b, 0xb6, - 0x91, 0x78, 0xe5, 0x1b, 0x10, 0x92, 0x4b, 0x90, 0x47, 0x07, 0x7f, 0xe9, 0xb4, 0x3e, 0xe6, 0xd4, - 0x8f, 0x78, 0x49, 0x2b, 0x0b, 0xbb, 0xd5, 0xca, 0xbe, 0xbd, 0x6a, 0x65, 0xff, 0xc1, 0x6a, 0xe5, - 0x9b, 0x30, 0x84, 0x35, 0xf9, 0x89, 0xce, 0xb6, 0x5f, 0x58, 0x1f, 0x12, 0x6b, 0xdf, 0x30, 0x6f, - 0xb7, 0x48, 0x77, 0x86, 0x4b, 0x5e, 0x84, 0x55, 0x4c, 0x77, 0x61, 0x1f, 0xdb, 0xe9, 0x3f, 0xcd, - 0x40, 0xdf, 0x6d, 0x6b, 0xcd, 0xb2, 0xd7, 0xf7, 0xa7, 0x71, 0xcf, 0xc0, 0xa0, 0x60, 0x23, 0xad, - 0x2e, 0xf8, 0x70, 0xbb, 0xcd, 0xc1, 0x35, 0xe4, 0xa4, 0xc9, 0x54, 0xe4, 0xe5, 0xa0, 0x10, 0xbe, - 0xe1, 0xc9, 0x85, 0xb9, 0x3e, 0xfc, 0x42, 0xf5, 0x68, 0x7a, 0x02, 0x99, 0x9c, 0x9c, 0x87, 0x7c, - 0x99, 0x35, 0x55, 0x0a, 0x76, 0xcb, 0x9a, 0xa2, 0x21, 0x54, 0xfd, 0x5c, 0x1e, 0x46, 0x62, 0x07, - 0x5f, 0x4f, 0xc0, 0x80, 0x38, 0x78, 0x32, 0xfd, 0x7c, 0x09, 0xf8, 0xc6, 0x27, 0x00, 0x6a, 0xfd, - 0xfc, 0xcf, 0x8a, 0x41, 0x3e, 0x0c, 0x7d, 0xb6, 0x8b, 0x8b, 0x22, 0x7e, 0xcb, 0x48, 0x38, 0x84, - 0xe6, 0xab, 0xac, 0xed, 0x7c, 0x70, 0x08, 0x12, 0x59, 0x23, 0x6d, 0x17, 0x3f, 0xed, 0x06, 0x0c, - 0xe8, 0xae, 0x4b, 0xbd, 0x9a, 0xa7, 0xaf, 0xc8, 0x29, 0x14, 0x02, 0xa0, 0x3c, 0x3a, 0x10, 0xb8, - 0xa8, 0xaf, 0x90, 0xd7, 0x60, 0xb8, 0xee, 0x50, 0x5c, 0x36, 0xf5, 0x06, 0x6b, 0xa5, 0x64, 0xd6, - 0x46, 0x10, 0xf2, 0x25, 0x49, 0x88, 0xa8, 0x18, 0xe4, 0x0e, 0x0c, 0x8b, 0xcf, 0xe1, 0x0e, 0xf6, - 0x38, 0xd0, 0x46, 0xc2, 0x65, 0x8c, 0x8b, 0x84, 0xbb, 0xd8, 0x8b, 0x77, 0x16, 0x32, 0xb9, 0xcc, - 0xd7, 0x90, 0x48, 0xc9, 0x3c, 0x90, 0x75, 0xba, 0x54, 0xd3, 0xdb, 0xde, 0x2a, 0xab, 0x8b, 0x47, - 0x00, 0x17, 0x99, 0x03, 0xf1, 0x71, 0x42, 0x12, 0x2b, 0xbf, 0xd9, 0x58, 0xa7, 0x4b, 0xa5, 0x08, - 0x92, 0xdc, 0x85, 0xd3, 0xc9, 0x22, 0xec, 0x93, 0xf9, 0x0d, 0xc0, 0x63, 0x5b, 0x9b, 0xc5, 0x62, - 0x2a, 0x81, 0xc4, 0xf6, 0x64, 0x82, 0x6d, 0xc5, 0x78, 0x3d, 0xdf, 0xdf, 0x37, 0xda, 0xaf, 0x8d, - 0xb0, 0xb2, 0xbe, 0x09, 0x69, 0x1a, 0xea, 0x37, 0x32, 0xcc, 0x54, 0x64, 0x1f, 0x84, 0xa9, 0x93, - 0x99, 0xae, 0x37, 0x77, 0xa9, 0xeb, 0xcd, 0x30, 0xc9, 0x61, 0xc1, 0xed, 0x32, 0xbb, 0x6a, 0x02, - 0x4b, 0xae, 0x42, 0xc1, 0x90, 0x4f, 0xcd, 0xce, 0x44, 0x3b, 0xc1, 0xaf, 0x47, 0x13, 0x54, 0xe4, - 0x32, 0xe4, 0xd9, 0x92, 0x15, 0xdf, 0x32, 0xcb, 0xd6, 0x85, 0x86, 0x14, 0xea, 0xf7, 0x66, 0x61, - 0x48, 0xfa, 0x9a, 0xeb, 0xfb, 0xfa, 0x9c, 0x17, 0x77, 0xd6, 0x4c, 0xdf, 0xb3, 0x05, 0xf7, 0x52, - 0x7e, 0x93, 0x6f, 0x04, 0xa2, 0xd8, 0xd1, 0xad, 0x93, 0x10, 0xcc, 0x73, 0xe2, 0x43, 0x0b, 0x3b, - 0xdf, 0x3e, 0x32, 0xfa, 0xd7, 0xf3, 0xfd, 0xd9, 0xd1, 0xdc, 0xeb, 0xf9, 0xfe, 0xfc, 0x68, 0x2f, - 0x86, 0xcb, 0xc2, 0x08, 0xd5, 0x7c, 0x6f, 0x6e, 0x2d, 0x9b, 0x2b, 0x47, 0xfc, 0x89, 0xc7, 0xc1, - 0x86, 0x12, 0x8b, 0xc9, 0xe6, 0x88, 0xbf, 0xf7, 0x78, 0x57, 0x65, 0x73, 0x9c, 0x14, 0x51, 0xc8, - 0xe6, 0xcf, 0x32, 0xa0, 0xa4, 0xca, 0xa6, 0x74, 0x48, 0xce, 0x0e, 0x07, 0x97, 0x1a, 0xf1, 0x5b, - 0x59, 0x18, 0xab, 0x58, 0x1e, 0x5d, 0xe1, 0x3b, 0xc6, 0x23, 0x3e, 0x55, 0xdc, 0x82, 0x41, 0xe9, - 0x63, 0x44, 0x9f, 0x3f, 0x1c, 0xec, 0xc7, 0x43, 0x54, 0x07, 0x4e, 0x72, 0xe9, 0x03, 0xcc, 0xa6, - 0x1e, 0x13, 0xf2, 0x11, 0x9f, 0x73, 0x8e, 0x86, 0x90, 0x8f, 0xf8, 0xe4, 0xf5, 0x1e, 0x15, 0xf2, - 0xbf, 0xc8, 0xc0, 0xc9, 0x94, 0xca, 0xc9, 0x25, 0xe8, 0xab, 0xb6, 0x97, 0x30, 0x3a, 0x56, 0x26, - 0x74, 0x0b, 0x76, 0xdb, 0x4b, 0x18, 0x18, 0x4b, 0xf3, 0x91, 0x64, 0x11, 0xdf, 0xc0, 0xcf, 0x57, - 0xca, 0x13, 0x42, 0xaa, 0xaa, 0xf4, 0x9a, 0x9f, 0x81, 0xd3, 0xbe, 0x2c, 0x78, 0x27, 0x6f, 0x9b, - 0x46, 0x3d, 0xf6, 0x4e, 0x9e, 0x95, 0x21, 0x1f, 0x87, 0x81, 0xd2, 0xdb, 0x6d, 0x87, 0x22, 0x5f, - 0x2e, 0xf1, 0xf7, 0x05, 0x7c, 0x7d, 0x44, 0x1a, 0x67, 0xfe, 0xe4, 0x9f, 0x51, 0xc4, 0x79, 0x87, - 0x0c, 0xd5, 0xcf, 0x67, 0xe0, 0x5c, 0xe7, 0xd6, 0x91, 0x0f, 0x42, 0x1f, 0xdb, 0x99, 0x97, 0xb4, - 0x39, 0xf1, 0xe9, 0x3c, 0x8d, 0xa8, 0xdd, 0xa0, 0x35, 0xdd, 0x91, 0x8d, 0x7d, 0x9f, 0x8c, 0xbc, - 0x02, 0x83, 0x15, 0xd7, 0x6d, 0x53, 0xa7, 0xfa, 0xcc, 0x6d, 0xad, 0x22, 0xf6, 0x84, 0xb8, 0xe7, - 0x30, 0x11, 0x5c, 0x73, 0x9f, 0x89, 0xc5, 0xbf, 0x92, 0xe9, 0xd5, 0xcf, 0x64, 0xe0, 0x7c, 0xb7, - 0xaf, 0x22, 0xcf, 0x40, 0xff, 0x22, 0xb5, 0x74, 0xcb, 0xab, 0x94, 0x45, 0x93, 0x70, 0x8b, 0xe5, - 0x21, 0x2c, 0xba, 0x53, 0x08, 0x08, 0x59, 0x21, 0x7e, 0xae, 0x18, 0x38, 0x32, 0xf0, 0x33, 0x50, - 0x84, 0xc5, 0x0a, 0xf9, 0x84, 0xea, 0x2f, 0x2c, 0x41, 0xef, 0xbc, 0x45, 0xe7, 0x97, 0xc9, 0xd3, - 0x30, 0xc0, 0x74, 0x1f, 0x73, 0xf8, 0x8b, 0x81, 0x36, 0x26, 0x0f, 0x18, 0x44, 0x4c, 0xf7, 0x68, - 0x21, 0x15, 0xb9, 0x21, 0x27, 0x0e, 0x17, 0xea, 0x40, 0xe4, 0x32, 0x1c, 0x33, 0xdd, 0xa3, 0xc9, - 0x09, 0xc6, 0x6f, 0xc8, 0x09, 0x9b, 0x45, 0x67, 0x47, 0x4a, 0x71, 0x8c, 0x5f, 0x4a, 0x4c, 0x03, - 0x33, 0x69, 0x59, 0x8d, 0xe3, 0x36, 0x41, 0x92, 0x62, 0xba, 0x47, 0x4b, 0xcf, 0x86, 0x3c, 0x24, - 0xfb, 0x42, 0xc5, 0xaf, 0x32, 0x65, 0xdc, 0x74, 0x8f, 0x16, 0xa1, 0x25, 0xcf, 0xc3, 0xa0, 0xf8, - 0xfd, 0xba, 0x6d, 0x5a, 0xf1, 0x40, 0x18, 0x12, 0x6a, 0xba, 0x47, 0x93, 0x29, 0xa5, 0x4a, 0x17, - 0x1c, 0xd3, 0xf2, 0xc4, 0xf3, 0xba, 0x78, 0xa5, 0x88, 0x93, 0x2a, 0xc5, 0xdf, 0xe4, 0x15, 0x18, - 0x0e, 0x22, 0x8c, 0xbc, 0x45, 0xeb, 0x9e, 0x38, 0xd2, 0x39, 0x1d, 0x2b, 0xcc, 0x91, 0xd3, 0x3d, - 0x5a, 0x94, 0x9a, 0x5c, 0x86, 0x82, 0x46, 0x5d, 0xf3, 0x6d, 0xff, 0x12, 0x64, 0x44, 0x9a, 0xce, - 0xcc, 0xb7, 0x99, 0x94, 0x04, 0x9e, 0xf5, 0x4e, 0x78, 0xeb, 0x22, 0x0e, 0x60, 0x48, 0xac, 0x96, - 0x49, 0xcb, 0x60, 0xbd, 0x23, 0x5d, 0xb9, 0xbd, 0x16, 0xc6, 0x5d, 0x11, 0xd9, 0xda, 0x06, 0xe3, - 0x0f, 0x5c, 0x65, 0xec, 0x74, 0x8f, 0x16, 0xa3, 0x97, 0xa4, 0x5a, 0x36, 0xdd, 0x35, 0x11, 0xea, - 0x2e, 0x2e, 0x55, 0x86, 0x92, 0xa4, 0xca, 0x7e, 0x4a, 0x55, 0xcf, 0x51, 0x6f, 0xdd, 0x76, 0xd6, - 0x44, 0x60, 0xbb, 0x78, 0xd5, 0x02, 0x2b, 0x55, 0x2d, 0x20, 0x72, 0xd5, 0x6c, 0x91, 0x19, 0x49, - 0xaf, 0x5a, 0xf7, 0x74, 0xb9, 0x6a, 0xbe, 0xbf, 0xf4, 0x3b, 0x69, 0x86, 0xea, 0xf7, 0x78, 0xd2, - 0xdc, 0x64, 0x87, 0x22, 0x4e, 0xea, 0x50, 0xfc, 0xcd, 0x2a, 0x95, 0x12, 0xa3, 0x8a, 0xac, 0xb8, - 0x41, 0xa5, 0x12, 0x8a, 0x55, 0x2a, 0xa7, 0x50, 0xbd, 0x21, 0xe7, 0x0b, 0x55, 0xc6, 0xa2, 0x1d, - 0x14, 0x62, 0x58, 0x07, 0x49, 0x79, 0x45, 0x8b, 0x98, 0x8b, 0x50, 0x21, 0x48, 0x3e, 0x18, 0xb4, - 0x70, 0x62, 0x61, 0xba, 0x47, 0xc3, 0x2c, 0x85, 0x2a, 0xcf, 0x72, 0xa9, 0x9c, 0x44, 0x8a, 0x21, - 0x9f, 0x82, 0xc1, 0xa6, 0x7b, 0x34, 0x9e, 0x01, 0xf3, 0x69, 0x29, 0x9f, 0x94, 0x72, 0x2a, 0x3a, - 0x45, 0x04, 0x08, 0x36, 0x45, 0x84, 0x59, 0xa7, 0xa6, 0x92, 0x39, 0x97, 0x94, 0xd3, 0xd1, 0x15, - 0x35, 0x8e, 0x9f, 0xee, 0xd1, 0x92, 0x79, 0x9a, 0x9e, 0x8f, 0xa4, 0x21, 0x52, 0xce, 0xc4, 0xa2, - 0xcf, 0x84, 0x28, 0x26, 0x2e, 0x39, 0x61, 0xd1, 0x7c, 0x6a, 0xe2, 0x70, 0xe5, 0x6c, 0x74, 0x39, - 0x4e, 0x21, 0x99, 0xee, 0xd1, 0x52, 0x53, 0x8e, 0x4f, 0x24, 0x92, 0x01, 0x29, 0x4a, 0xf4, 0xc6, - 0x37, 0x86, 0x9e, 0xee, 0xd1, 0x12, 0xe9, 0x83, 0x6e, 0xc8, 0x59, 0x78, 0x94, 0x87, 0xa2, 0x9d, - 0x18, 0x62, 0x58, 0x27, 0x4a, 0xd9, 0x7a, 0x6e, 0xc8, 0x99, 0x59, 0x94, 0x73, 0xc9, 0x52, 0xe1, - 0xcc, 0x29, 0x65, 0x70, 0xd1, 0xd2, 0x93, 0x4d, 0x28, 0x0f, 0x8b, 0x74, 0x7f, 0xa2, 0x7c, 0x1a, - 0xcd, 0x74, 0x8f, 0x96, 0x9e, 0xa8, 0x42, 0x4b, 0xcf, 0xd2, 0xa0, 0x9c, 0xef, 0xc6, 0x33, 0x68, - 0x5d, 0x7a, 0x86, 0x07, 0xbd, 0x4b, 0xcc, 0x7c, 0xe5, 0x42, 0x34, 0xf4, 0x65, 0x47, 0xc2, 0xe9, - 0x1e, 0xad, 0x4b, 0xe4, 0xfd, 0xdb, 0x1d, 0x02, 0xd8, 0x2b, 0x17, 0xa3, 0xd9, 0x3e, 0x53, 0x89, - 0xa6, 0x7b, 0xb4, 0x0e, 0xe1, 0xef, 0x6f, 0x77, 0x88, 0x6f, 0xae, 0x14, 0xbb, 0xb2, 0x0d, 0xe4, - 0xd1, 0x21, 0x3a, 0xfa, 0x7c, 0x6a, 0x68, 0x70, 0xe5, 0x91, 0xa8, 0xea, 0xa6, 0x90, 0x30, 0xd5, - 0x4d, 0x0b, 0x2a, 0x3e, 0x9f, 0x1a, 0xcb, 0x5a, 0x79, 0xb4, 0x0b, 0xc3, 0xa0, 0x8d, 0xa9, 0x51, - 0xb0, 0xe7, 0x53, 0x83, 0x49, 0x2b, 0x6a, 0x94, 0x61, 0x0a, 0x09, 0x63, 0x98, 0x16, 0x86, 0x7a, - 0x3e, 0x35, 0xe6, 0xb0, 0xf2, 0x58, 0x17, 0x86, 0x61, 0x0b, 0xd3, 0xa2, 0x15, 0x3f, 0x1f, 0x09, - 0xfa, 0xab, 0xbc, 0x2f, 0x3a, 0x6f, 0x48, 0x28, 0x36, 0x6f, 0xc8, 0xe1, 0x81, 0x27, 0x12, 0x61, - 0x0d, 0x95, 0xc7, 0xa3, 0xc3, 0x3c, 0x86, 0x66, 0xc3, 0x3c, 0x1e, 0x08, 0x71, 0x22, 0x11, 0xde, - 0x4d, 0xb9, 0xd4, 0x89, 0x09, 0xa2, 0xa3, 0x4c, 0x78, 0x40, 0xb8, 0x4a, 0x4a, 0x7c, 0x31, 0xe5, - 0xfd, 0x51, 0x6f, 0xc5, 0x04, 0xc1, 0x74, 0x8f, 0x96, 0x12, 0x95, 0x4c, 0x4b, 0x0f, 0xa6, 0xa1, - 0x5c, 0x8e, 0x0e, 0xdb, 0x34, 0x1a, 0x36, 0x6c, 0x53, 0x03, 0x71, 0xcc, 0xa4, 0xb9, 0x54, 0x2b, - 0x57, 0xa2, 0x86, 0x59, 0x92, 0x82, 0x19, 0x66, 0x29, 0xae, 0xd8, 0x5a, 0x7a, 0x78, 0x08, 0xe5, - 0x89, 0xae, 0x2d, 0x44, 0x9a, 0x94, 0x16, 0xf2, 0x68, 0x09, 0xa1, 0xed, 0x74, 0xbb, 0xd5, 0xb0, - 0x75, 0x43, 0xf9, 0x40, 0xaa, 0xed, 0xc4, 0x91, 0x92, 0xed, 0xc4, 0x01, 0x6c, 0x95, 0x97, 0x3d, - 0x77, 0x95, 0x27, 0xa3, 0xab, 0xbc, 0x8c, 0x63, 0xab, 0x7c, 0xc4, 0xcb, 0x77, 0x22, 0xe1, 0xe5, - 0xaa, 0x3c, 0x15, 0x55, 0x80, 0x18, 0x9a, 0x29, 0x40, 0xdc, 0x2f, 0xf6, 0x93, 0x9d, 0xfd, 0x42, - 0x95, 0xab, 0xc8, 0xed, 0x11, 0x9f, 0x5b, 0x27, 0xba, 0xe9, 0x1e, 0xad, 0xb3, 0x6f, 0x69, 0x25, - 0xc5, 0xcd, 0x53, 0xb9, 0x16, 0x55, 0xb0, 0x04, 0x01, 0x53, 0xb0, 0xa4, 0x73, 0x68, 0x25, 0xc5, - 0x4f, 0x53, 0xf9, 0x60, 0x47, 0x56, 0xc1, 0x37, 0xa7, 0x78, 0x77, 0xde, 0x90, 0x1d, 0x2d, 0x95, - 0xa7, 0xa3, 0x8b, 0x5d, 0x88, 0x61, 0x8b, 0x9d, 0xe4, 0x90, 0x79, 0x43, 0x76, 0x31, 0x54, 0xae, - 0x27, 0x4b, 0x85, 0x4b, 0xa4, 0xe4, 0x8a, 0xa8, 0xa5, 0x7b, 0xe6, 0x29, 0xcf, 0x44, 0xb5, 0x2e, - 0x8d, 0x86, 0x69, 0x5d, 0xaa, 0x57, 0xdf, 0x54, 0xd2, 0xc1, 0x4e, 0xb9, 0x11, 0x3f, 0x4b, 0x88, - 0xe2, 0x99, 0xe5, 0x93, 0x70, 0xca, 0x7b, 0x2d, 0x1e, 0xe9, 0x49, 0x79, 0x36, 0x76, 0x99, 0x11, - 0xc1, 0x32, 0xfb, 0x36, 0x16, 0x19, 0xea, 0xb5, 0x78, 0x70, 0x24, 0xe5, 0xb9, 0x74, 0x0e, 0x81, - 0xae, 0xc4, 0x83, 0x29, 0xbd, 0x16, 0x8f, 0x27, 0xa4, 0x3c, 0x9f, 0xce, 0x21, 0x90, 0x6e, 0x3c, - 0xfe, 0xd0, 0xd3, 0x52, 0x84, 0x63, 0xe5, 0x43, 0x51, 0xd3, 0x31, 0x40, 0x30, 0xd3, 0x31, 0x8c, - 0x83, 0xfc, 0xb4, 0x14, 0x19, 0x58, 0x79, 0x21, 0x51, 0x24, 0x68, 0xac, 0x14, 0x3f, 0xf8, 0x69, - 0x29, 0xa2, 0xae, 0xf2, 0x62, 0xa2, 0x48, 0xd0, 0x3a, 0x29, 0xee, 0xae, 0xd1, 0xed, 0xe9, 0x95, - 0xf2, 0x52, 0xf4, 0x88, 0xa3, 0x33, 0xe5, 0x74, 0x8f, 0xd6, 0xed, 0x09, 0xd7, 0x27, 0x3b, 0xbb, - 0x2b, 0x2a, 0x2f, 0x47, 0x87, 0x70, 0x27, 0x3a, 0x36, 0x84, 0x3b, 0xba, 0x3c, 0xbe, 0x12, 0x7b, - 0x86, 0xad, 0xbc, 0x12, 0x9d, 0xe2, 0x22, 0x48, 0x36, 0xc5, 0xc5, 0x1f, 0x6d, 0x47, 0xde, 0x17, - 0x2b, 0x1f, 0x8e, 0x4e, 0x71, 0x32, 0x8e, 0x4d, 0x71, 0x91, 0xb7, 0xc8, 0x13, 0x89, 0x67, 0xaf, - 0xca, 0xab, 0xd1, 0x29, 0x2e, 0x86, 0x66, 0x53, 0x5c, 0xfc, 0xa1, 0xec, 0x2b, 0xb1, 0xd7, 0x9f, - 0xca, 0x6b, 0xe9, 0xed, 0x47, 0xa4, 0xdc, 0x7e, 0xfe, 0x56, 0x54, 0x4b, 0x7f, 0xc6, 0xa8, 0x94, - 0xa2, 0xe3, 0x37, 0x8d, 0x86, 0x8d, 0xdf, 0xd4, 0x27, 0x90, 0xf1, 0x8d, 0x83, 0xd0, 0xaa, 0xf1, - 0x2e, 0x1b, 0x87, 0xd0, 0x14, 0x49, 0x01, 0x47, 0xf6, 0xc8, 0x7c, 0x23, 0x34, 0xd1, 0x61, 0x8f, - 0xec, 0x6f, 0x83, 0x62, 0xf4, 0x6c, 0x76, 0x4d, 0x78, 0xcf, 0x29, 0xe5, 0xe8, 0xec, 0x9a, 0x20, - 0x60, 0xb3, 0x6b, 0xd2, 0xe7, 0x6e, 0x0a, 0x46, 0x85, 0x16, 0x71, 0xa7, 0x40, 0xd3, 0x5a, 0x51, - 0x26, 0x63, 0xaf, 0x88, 0x62, 0x78, 0x36, 0x3b, 0xc5, 0x61, 0xb8, 0x5e, 0x73, 0xd8, 0x44, 0xc3, - 0x6c, 0x2d, 0xd9, 0xba, 0x63, 0x54, 0xa9, 0x65, 0x28, 0x53, 0xb1, 0xf5, 0x3a, 0x85, 0x06, 0xd7, - 0xeb, 0x14, 0x38, 0x46, 0x37, 0x8a, 0xc1, 0x35, 0x5a, 0xa7, 0xe6, 0x3d, 0xaa, 0xdc, 0x44, 0xb6, - 0xc5, 0x4e, 0x6c, 0x05, 0xd9, 0x74, 0x8f, 0xd6, 0x89, 0x03, 0xb3, 0xd5, 0x67, 0x37, 0xaa, 0x6f, - 0xcc, 0x04, 0x2f, 0x67, 0x17, 0x1c, 0xda, 0xd2, 0x1d, 0xaa, 0x4c, 0x47, 0x6d, 0xf5, 0x54, 0x22, - 0x66, 0xab, 0xa7, 0x22, 0x92, 0x6c, 0xfd, 0xb1, 0x50, 0xe9, 0xc6, 0x36, 0x1c, 0x11, 0xe9, 0xa5, - 0xd9, 0xec, 0x14, 0x45, 0x30, 0x01, 0xcd, 0xd8, 0xd6, 0x0a, 0x9e, 0x54, 0xbc, 0x1e, 0x9d, 0x9d, - 0x3a, 0x53, 0xb2, 0xd9, 0xa9, 0x33, 0x96, 0xa9, 0x7a, 0x14, 0xcb, 0xc7, 0xe0, 0xad, 0xa8, 0xaa, - 0xa7, 0x90, 0x30, 0x55, 0x4f, 0x01, 0x27, 0x19, 0x6a, 0xd4, 0xa5, 0x9e, 0x32, 0xd3, 0x8d, 0x21, - 0x92, 0x24, 0x19, 0x22, 0x38, 0xc9, 0x70, 0x8a, 0x7a, 0xf5, 0x55, 0x65, 0xb6, 0x1b, 0x43, 0x24, - 0x49, 0x32, 0x44, 0x30, 0xdb, 0x6c, 0x46, 0xc1, 0xe3, 0xed, 0xc6, 0x9a, 0xdf, 0x67, 0x73, 0xd1, - 0xcd, 0x66, 0x47, 0x42, 0xb6, 0xd9, 0xec, 0x88, 0x24, 0x9f, 0xd9, 0xb1, 0x77, 0xa7, 0x32, 0x8f, - 0x15, 0x5e, 0x0d, 0xed, 0x82, 0x9d, 0x94, 0x9a, 0xee, 0xd1, 0x76, 0xea, 0x3d, 0xfa, 0x81, 0xc0, - 0x15, 0x4a, 0x59, 0xc0, 0xaa, 0x4e, 0x04, 0x67, 0x15, 0x1c, 0x3c, 0xdd, 0xa3, 0x05, 0xce, 0x52, - 0xcf, 0xc3, 0x20, 0x7e, 0x54, 0xc5, 0x32, 0xbd, 0xf2, 0xb8, 0xf2, 0x46, 0x74, 0xcb, 0x24, 0xa1, - 0xd8, 0x96, 0x49, 0xfa, 0xc9, 0x26, 0x71, 0xfc, 0xc9, 0xa7, 0x98, 0xf2, 0xb8, 0xa2, 0x45, 0x27, - 0xf1, 0x08, 0x92, 0x4d, 0xe2, 0x11, 0x40, 0x50, 0x6f, 0xd9, 0xb1, 0x5b, 0xe5, 0x71, 0xa5, 0x9a, - 0x52, 0x2f, 0x47, 0x05, 0xf5, 0xf2, 0x9f, 0x41, 0xbd, 0xd5, 0xd5, 0xb6, 0x57, 0x66, 0xdf, 0xb8, - 0x98, 0x52, 0xaf, 0x8f, 0x0c, 0xea, 0xf5, 0x01, 0x6c, 0x2a, 0x44, 0xc0, 0x82, 0x63, 0xb3, 0x49, - 0xfb, 0x96, 0xd9, 0x68, 0x28, 0xb7, 0xa3, 0x53, 0x61, 0x1c, 0xcf, 0xa6, 0xc2, 0x38, 0x8c, 0x99, - 0x9e, 0xbc, 0x55, 0x74, 0xa9, 0xbd, 0xa2, 0xdc, 0x89, 0x9a, 0x9e, 0x21, 0x86, 0x99, 0x9e, 0xe1, - 0x2f, 0xdc, 0x5d, 0xb0, 0x5f, 0x1a, 0x5d, 0x76, 0xa8, 0xbb, 0xaa, 0xdc, 0x8d, 0xed, 0x2e, 0x24, - 0x1c, 0xee, 0x2e, 0xa4, 0xdf, 0x64, 0x05, 0x1e, 0x8e, 0x2c, 0x34, 0xfe, 0xdd, 0x53, 0x95, 0xea, - 0x4e, 0x7d, 0x55, 0xf9, 0x08, 0xb2, 0x7a, 0x2c, 0x75, 0xa9, 0x8a, 0x92, 0x4e, 0xf7, 0x68, 0xdd, - 0x38, 0xe1, 0xb6, 0xfc, 0x8d, 0x19, 0x1e, 0x86, 0x50, 0x5b, 0x98, 0xf0, 0x37, 0xa1, 0x6f, 0xc6, - 0xb6, 0xe5, 0x49, 0x12, 0xdc, 0x96, 0x27, 0xc1, 0xa4, 0x05, 0x17, 0x63, 0x5b, 0xb5, 0x59, 0xbd, - 0xc1, 0xf6, 0x25, 0xd4, 0x58, 0xd0, 0xeb, 0x6b, 0xd4, 0x53, 0x3e, 0x8a, 0xbc, 0x2f, 0x75, 0xd8, - 0xf0, 0xc5, 0xa8, 0xa7, 0x7b, 0xb4, 0x6d, 0xf8, 0x11, 0x15, 0xf2, 0xd5, 0xa9, 0xc5, 0x05, 0xe5, - 0x63, 0xd1, 0xf3, 0x4d, 0x06, 0x9b, 0xee, 0xd1, 0x10, 0xc7, 0xac, 0xb4, 0xdb, 0xad, 0x15, 0x47, - 0x37, 0x28, 0x37, 0xb4, 0xd0, 0x76, 0x13, 0x06, 0xe8, 0xc7, 0xa3, 0x56, 0x5a, 0x27, 0x3a, 0x66, - 0xa5, 0x75, 0xc2, 0x31, 0x45, 0x8d, 0x44, 0xdc, 0x57, 0x3e, 0x11, 0x55, 0xd4, 0x08, 0x92, 0x29, - 0x6a, 0x34, 0x3e, 0xff, 0x47, 0xe0, 0x4c, 0xb0, 0x9f, 0x17, 0xeb, 0x2f, 0xef, 0x34, 0xe5, 0x93, - 0xc8, 0xe7, 0x62, 0xe2, 0x32, 0x20, 0x42, 0x35, 0xdd, 0xa3, 0x75, 0x28, 0xcf, 0x56, 0xdc, 0x44, - 0x32, 0x19, 0x61, 0x5e, 0x7c, 0x4f, 0x74, 0xc5, 0xed, 0x40, 0xc6, 0x56, 0xdc, 0x0e, 0xa8, 0x54, - 0xe6, 0x42, 0xa8, 0xfa, 0x36, 0xcc, 0x03, 0x99, 0x76, 0xe2, 0x90, 0xca, 0x5c, 0x58, 0x6a, 0x4b, - 0xdb, 0x30, 0x0f, 0xac, 0xb5, 0x4e, 0x1c, 0xc8, 0x65, 0x28, 0x54, 0xab, 0xb3, 0x5a, 0xdb, 0x52, - 0xea, 0x31, 0x1f, 0x30, 0x84, 0x4e, 0xf7, 0x68, 0x02, 0xcf, 0xcc, 0xa0, 0xc9, 0x86, 0xee, 0x7a, - 0x66, 0xdd, 0xc5, 0x11, 0xe3, 0x8f, 0x10, 0x23, 0x6a, 0x06, 0xa5, 0xd1, 0x30, 0x33, 0x28, 0x0d, - 0xce, 0xec, 0xc5, 0x09, 0xdd, 0x75, 0x75, 0xcb, 0x70, 0xf4, 0x71, 0x5c, 0x26, 0x68, 0xec, 0x8d, - 0x41, 0x04, 0xcb, 0xec, 0xc5, 0x28, 0x04, 0x0f, 0xdf, 0x7d, 0x88, 0x6f, 0xe6, 0x2c, 0xc7, 0x0e, - 0xdf, 0x63, 0x78, 0x3c, 0x7c, 0x8f, 0xc1, 0xd0, 0xee, 0xf4, 0x61, 0x1a, 0x5d, 0x31, 0x99, 0x88, - 0x94, 0x95, 0x98, 0xdd, 0x19, 0x27, 0x40, 0xbb, 0x33, 0x0e, 0x8c, 0x34, 0xc9, 0x5f, 0x6e, 0x57, - 0x3b, 0x34, 0x29, 0x5c, 0x65, 0x13, 0x65, 0xd8, 0xfa, 0x1d, 0x0e, 0x8e, 0xf2, 0x86, 0xa5, 0x37, - 0xed, 0xf2, 0xb8, 0x2f, 0x75, 0x33, 0xba, 0x7e, 0x77, 0x24, 0x64, 0xeb, 0x77, 0x47, 0x24, 0x9b, - 0x5d, 0xfd, 0x8d, 0xd6, 0xaa, 0xee, 0x50, 0xa3, 0x6c, 0x3a, 0x78, 0xb2, 0xb8, 0xc1, 0xb7, 0x86, - 0x6f, 0x45, 0x67, 0xd7, 0x2e, 0xa4, 0x6c, 0x76, 0xed, 0x82, 0x66, 0x46, 0x5e, 0x3a, 0x5a, 0xa3, - 0xba, 0xa1, 0xac, 0x45, 0x8d, 0xbc, 0xce, 0x94, 0xcc, 0xc8, 0xeb, 0x8c, 0xed, 0xfc, 0x39, 0x77, - 0x1d, 0xd3, 0xa3, 0x4a, 0x63, 0x27, 0x9f, 0x83, 0xa4, 0x9d, 0x3f, 0x07, 0xd1, 0x6c, 0x43, 0x18, - 0xef, 0x90, 0x66, 0x74, 0x43, 0x98, 0xec, 0x86, 0x78, 0x09, 0x66, 0xb1, 0x88, 0xa7, 0x26, 0x8a, - 0x15, 0xb5, 0x58, 0x04, 0x98, 0x59, 0x2c, 0xe1, 0x63, 0x94, 0xc8, 0x03, 0x03, 0xc5, 0x8e, 0xae, - 0xa1, 0x32, 0x8e, 0xad, 0xa1, 0x91, 0xc7, 0x08, 0xcf, 0x47, 0xbc, 0x67, 0x95, 0x56, 0xd4, 0xea, - 0x90, 0x50, 0xcc, 0xea, 0x90, 0xfd, 0x6c, 0x27, 0xe0, 0x04, 0xde, 0x82, 0x6b, 0xed, 0xe0, 0x1e, - 0xe7, 0x53, 0xd1, 0xcf, 0x8c, 0xa1, 0xd9, 0x67, 0xc6, 0x40, 0x11, 0x26, 0x62, 0xda, 0x72, 0x3a, - 0x30, 0x09, 0xcf, 0x07, 0x63, 0x20, 0x32, 0x03, 0xa4, 0x5a, 0x9a, 0x9d, 0xa9, 0x18, 0x0b, 0xf2, - 0x15, 0x99, 0x1b, 0x3d, 0x81, 0x4d, 0x52, 0x4c, 0xf7, 0x68, 0x29, 0xe5, 0xc8, 0x5b, 0x70, 0x5e, - 0x40, 0xc5, 0x3b, 0x42, 0xcc, 0x39, 0x6d, 0x04, 0x0b, 0x82, 0x17, 0xf5, 0xce, 0xe8, 0x46, 0x3b, - 0xdd, 0xa3, 0x75, 0xe5, 0xd5, 0xb9, 0x2e, 0xb1, 0x3e, 0xb4, 0x77, 0x52, 0x57, 0xb0, 0x48, 0x74, - 0xe5, 0xd5, 0xb9, 0x2e, 0x21, 0xf7, 0x7b, 0x3b, 0xa9, 0x2b, 0xe8, 0x84, 0xae, 0xbc, 0x88, 0x0b, - 0xc5, 0x6e, 0xf8, 0x52, 0xa3, 0xa1, 0xac, 0x63, 0x75, 0xef, 0xdf, 0x49, 0x75, 0x25, 0x34, 0x38, - 0xb7, 0xe3, 0xc8, 0x66, 0xe9, 0xf9, 0x16, 0xb5, 0xaa, 0x91, 0x05, 0xe8, 0x7e, 0x74, 0x96, 0x4e, - 0x10, 0xb0, 0x59, 0x3a, 0x01, 0x64, 0x03, 0x4a, 0x76, 0xc2, 0x56, 0x36, 0xa2, 0x03, 0x4a, 0xc6, - 0xb1, 0x01, 0x15, 0x71, 0xd8, 0x9e, 0x87, 0x93, 0xf3, 0x6b, 0x9e, 0xee, 0x5b, 0x90, 0xae, 0xe8, - 0xca, 0xb7, 0x63, 0x97, 0x4c, 0x49, 0x12, 0xbc, 0x64, 0x4a, 0x82, 0xd9, 0x18, 0x61, 0xe0, 0xea, - 0x86, 0x55, 0x9f, 0xd2, 0xcd, 0x46, 0xdb, 0xa1, 0xca, 0x7f, 0x14, 0x1d, 0x23, 0x31, 0x34, 0x1b, - 0x23, 0x31, 0x10, 0x5b, 0xa0, 0x19, 0xa8, 0xe4, 0xba, 0xe6, 0x8a, 0x25, 0xf6, 0x95, 0xed, 0x86, - 0xa7, 0xfc, 0xc7, 0xd1, 0x05, 0x3a, 0x8d, 0x86, 0x2d, 0xd0, 0x69, 0x70, 0x3c, 0x75, 0x4a, 0xc9, - 0xc7, 0xae, 0xfc, 0x27, 0xb1, 0x53, 0xa7, 0x14, 0x1a, 0x3c, 0x75, 0x4a, 0xcb, 0xe5, 0x3e, 0x05, - 0xa3, 0xdc, 0x26, 0x9b, 0x31, 0x83, 0xbb, 0xea, 0xff, 0x34, 0xba, 0x3e, 0xc6, 0xf1, 0x6c, 0x7d, - 0x8c, 0xc3, 0xa2, 0x7c, 0x44, 0x17, 0xfc, 0x67, 0x9d, 0xf8, 0x04, 0xf2, 0x4f, 0x94, 0x21, 0x37, - 0x65, 0x3e, 0x62, 0xa4, 0x7c, 0x6f, 0xa6, 0x13, 0xa3, 0x60, 0x78, 0x24, 0x0a, 0x45, 0x19, 0x69, - 0xf4, 0x9e, 0x49, 0xd7, 0x95, 0x4f, 0x77, 0x64, 0xc4, 0x09, 0xa2, 0x8c, 0x38, 0x8c, 0xbc, 0x09, - 0x67, 0x42, 0xd8, 0x2c, 0x6d, 0x2e, 0x05, 0x33, 0xd3, 0xf7, 0x65, 0xa2, 0x66, 0x70, 0x3a, 0x19, - 0x33, 0x83, 0xd3, 0x31, 0x69, 0xac, 0x85, 0xe8, 0xfe, 0xf3, 0x6d, 0x58, 0x07, 0x12, 0xec, 0xc0, - 0x20, 0x8d, 0xb5, 0x90, 0xe6, 0xf7, 0x6f, 0xc3, 0x3a, 0x90, 0x69, 0x07, 0x06, 0xe4, 0xb3, 0x19, - 0xb8, 0x94, 0x8e, 0x2a, 0x35, 0x1a, 0x53, 0xb6, 0x13, 0xe2, 0x94, 0x1f, 0xc8, 0x44, 0x0f, 0x1a, - 0x76, 0x56, 0x6c, 0xba, 0x47, 0xdb, 0x61, 0x05, 0xe4, 0xc3, 0x30, 0x5c, 0x6a, 0x1b, 0xa6, 0x87, - 0x17, 0x6f, 0xcc, 0x70, 0xfe, 0xc1, 0x4c, 0x6c, 0x8b, 0x23, 0x63, 0x71, 0x8b, 0x23, 0x03, 0xc8, - 0xeb, 0x30, 0x56, 0xa5, 0xf5, 0xb6, 0x63, 0x7a, 0x1b, 0x1a, 0xe6, 0xda, 0x67, 0x3c, 0x7e, 0x28, - 0x13, 0x9d, 0xc4, 0x12, 0x14, 0x6c, 0x12, 0x4b, 0x00, 0xc9, 0x9d, 0x0e, 0x19, 0xd9, 0x95, 0xcf, - 0x64, 0xba, 0x5e, 0xcb, 0x07, 0x7d, 0xd9, 0x21, 0xa1, 0xfb, 0x42, 0x6a, 0x86, 0x6b, 0xe5, 0xb3, - 0x99, 0x2e, 0xd7, 0xe8, 0xd2, 0x0c, 0x97, 0x92, 0x1c, 0x7b, 0x21, 0x35, 0xfd, 0xb0, 0xf2, 0xc3, - 0x99, 0x2e, 0xd7, 0xde, 0x21, 0xc7, 0xb4, 0xcc, 0xc5, 0xcf, 0x72, 0x4f, 0x11, 0xc1, 0xe8, 0xbf, - 0xc8, 0x24, 0x5d, 0x45, 0x82, 0xf2, 0x12, 0x21, 0x2b, 0x76, 0xdb, 0x0d, 0x94, 0xfe, 0x73, 0x99, - 0xa4, 0x6f, 0x5e, 0x58, 0x2c, 0xfc, 0x45, 0x28, 0x9c, 0x9b, 0xbc, 0xef, 0x51, 0xc7, 0xd2, 0x1b, - 0xd8, 0x9d, 0x55, 0xcf, 0x76, 0xf4, 0x15, 0x3a, 0x69, 0xe9, 0x4b, 0x0d, 0xaa, 0x7c, 0x3e, 0x13, - 0xb5, 0x60, 0x3b, 0x93, 0x32, 0x0b, 0xb6, 0x33, 0x96, 0xac, 0xc2, 0xc3, 0x69, 0xd8, 0xb2, 0xe9, - 0x62, 0x3d, 0x5f, 0xc8, 0x44, 0x4d, 0xd8, 0x2e, 0xb4, 0xcc, 0x84, 0xed, 0x82, 0x26, 0xd7, 0x61, - 0x60, 0xdc, 0xf6, 0xa7, 0xdf, 0x1f, 0x89, 0x39, 0x43, 0x06, 0x98, 0xe9, 0x1e, 0x2d, 0x24, 0x13, - 0x65, 0xc4, 0xa0, 0xfe, 0x62, 0xb2, 0x4c, 0x78, 0xf9, 0x14, 0xfc, 0x10, 0x65, 0x84, 0xb8, 0xff, - 0xcb, 0x64, 0x99, 0xf0, 0x8e, 0x2b, 0xf8, 0xc1, 0x66, 0x12, 0x5e, 0xe3, 0xec, 0x54, 0x89, 0xd9, - 0x6d, 0x13, 0xab, 0x7a, 0xa3, 0x41, 0xad, 0x15, 0xaa, 0x7c, 0x29, 0x36, 0x93, 0xa4, 0x93, 0xb1, - 0x99, 0x24, 0x1d, 0x43, 0x3e, 0x0e, 0x67, 0xef, 0xe8, 0x0d, 0xd3, 0x08, 0x71, 0x7e, 0x32, 0x5a, - 0xe5, 0x47, 0x33, 0xd1, 0xdd, 0x74, 0x07, 0x3a, 0xb6, 0x9b, 0xee, 0x80, 0x22, 0xb3, 0x40, 0x70, - 0x19, 0x0d, 0x66, 0x0b, 0xb6, 0x3e, 0x2b, 0xff, 0x55, 0x26, 0x6a, 0xa7, 0x26, 0x49, 0x98, 0x9d, - 0x9a, 0x84, 0x92, 0x5a, 0xe7, 0xa8, 0xf6, 0xca, 0x8f, 0x65, 0xa2, 0xa7, 0x35, 0x9d, 0x08, 0xa7, - 0x7b, 0xb4, 0xce, 0xa1, 0xf1, 0x6f, 0xc2, 0x68, 0x75, 0xa1, 0x32, 0x35, 0x35, 0x59, 0xbd, 0x53, - 0x29, 0xa3, 0xfb, 0xae, 0xa1, 0xfc, 0x78, 0x6c, 0xc5, 0x8a, 0x13, 0xb0, 0x15, 0x2b, 0x0e, 0x23, - 0x2f, 0xc1, 0x10, 0x6b, 0x3f, 0x1b, 0x30, 0xf8, 0xc9, 0x5f, 0xce, 0x44, 0xcd, 0x29, 0x19, 0xc9, - 0xcc, 0x29, 0xf9, 0x37, 0xa9, 0xc2, 0x29, 0x26, 0xc5, 0x05, 0x87, 0x2e, 0x53, 0x87, 0x5a, 0x75, - 0x7f, 0x4c, 0xff, 0x44, 0x26, 0x6a, 0x65, 0xa4, 0x11, 0x31, 0x2b, 0x23, 0x0d, 0x4e, 0xd6, 0xe0, - 0x7c, 0xfc, 0x24, 0x48, 0x7e, 0x4c, 0xa5, 0xfc, 0x64, 0x26, 0x66, 0x0c, 0x77, 0x21, 0x46, 0x63, - 0xb8, 0x0b, 0x9e, 0x58, 0x70, 0x41, 0x1c, 0xab, 0x08, 0x87, 0xcb, 0x78, 0x6d, 0xff, 0x35, 0xaf, - 0xed, 0xf1, 0xd0, 0x21, 0xb0, 0x0b, 0xf5, 0x74, 0x8f, 0xd6, 0x9d, 0x1d, 0xd3, 0xb3, 0x64, 0xec, - 0x76, 0xe5, 0xa7, 0x32, 0xe9, 0x1e, 0x29, 0x11, 0x37, 0xe5, 0xb4, 0xa0, 0xef, 0x6f, 0x76, 0x8a, - 0x3c, 0xae, 0xfc, 0x74, 0x6c, 0xbc, 0xa5, 0x93, 0xb1, 0xf1, 0xd6, 0x21, 0x74, 0xf9, 0xeb, 0x30, - 0xc6, 0x95, 0x7a, 0x41, 0xc7, 0x61, 0x68, 0xad, 0x50, 0x43, 0xf9, 0x6f, 0x62, 0xab, 0x5d, 0x82, - 0x02, 0x5d, 0x7b, 0xe2, 0x40, 0x36, 0x75, 0x57, 0x5b, 0xba, 0x65, 0xe1, 0x31, 0xab, 0xf2, 0xdf, - 0xc6, 0xa6, 0xee, 0x10, 0x85, 0x8e, 0xbb, 0xc1, 0x2f, 0xa6, 0x09, 0xdd, 0xb2, 0x76, 0x28, 0x3f, - 0x13, 0xd3, 0x84, 0x6e, 0xc4, 0x4c, 0x13, 0xba, 0xa6, 0x00, 0xb9, 0xd3, 0xe1, 0x61, 0xa3, 0xf2, - 0x95, 0xd8, 0x8a, 0x9c, 0x4a, 0xc5, 0x56, 0xe4, 0xf4, 0x77, 0x91, 0x77, 0x3a, 0x3c, 0x0a, 0x54, - 0x7e, 0xb6, 0x3b, 0xdf, 0x70, 0xa5, 0x4f, 0x7f, 0x53, 0x78, 0xa7, 0xc3, 0x83, 0x3a, 0xe5, 0xe7, - 0xba, 0xf3, 0x0d, 0x1d, 0xfb, 0xd2, 0xdf, 0xe3, 0xd5, 0x3a, 0x3f, 0x46, 0x53, 0x7e, 0x3e, 0x3e, - 0x75, 0x75, 0x20, 0xc4, 0xa9, 0xab, 0xd3, 0x8b, 0xb6, 0x25, 0x78, 0x88, 0x6b, 0xc8, 0x4d, 0x47, - 0x6f, 0xad, 0x56, 0xa9, 0xe7, 0x99, 0xd6, 0x8a, 0xbf, 0x13, 0xfb, 0x85, 0x4c, 0xec, 0x78, 0xac, - 0x13, 0x25, 0x1e, 0x8f, 0x75, 0x42, 0x32, 0xe5, 0x4d, 0x3c, 0x3b, 0x53, 0x7e, 0x31, 0xa6, 0xbc, - 0x09, 0x0a, 0xa6, 0xbc, 0xc9, 0xd7, 0x6a, 0xaf, 0xa7, 0xbc, 0xae, 0x52, 0xfe, 0xbb, 0xce, 0xbc, - 0x82, 0xf6, 0xa5, 0x3c, 0xca, 0x7a, 0x3d, 0xe5, 0x11, 0x91, 0xf2, 0xdf, 0x77, 0xe6, 0x15, 0xfa, - 0x20, 0x25, 0x80, 0xe3, 0x7d, 0xd0, 0x8b, 0xbb, 0x5a, 0xf5, 0x2b, 0x19, 0x18, 0xaa, 0x7a, 0x0e, - 0xd5, 0x9b, 0x22, 0xa2, 0xc4, 0x39, 0xe8, 0xe7, 0xee, 0x61, 0xfe, 0x0b, 0x0d, 0x2d, 0xf8, 0x4d, - 0x2e, 0xc1, 0xc8, 0x8c, 0xee, 0x7a, 0x58, 0xb2, 0x62, 0x19, 0xf4, 0x3e, 0x3e, 0x8d, 0xc8, 0x69, - 0x31, 0x28, 0x99, 0xe1, 0x74, 0xbc, 0x1c, 0x06, 0x11, 0xca, 0x6d, 0x1b, 0x48, 0xa1, 0xff, 0x9d, - 0xcd, 0x62, 0x0f, 0xc6, 0x4d, 0x88, 0x95, 0x55, 0xbf, 0x91, 0x81, 0x84, 0xe3, 0xda, 0xde, 0x5f, - 0x4e, 0xcd, 0xc3, 0x89, 0x58, 0xe0, 0x2a, 0xf1, 0xbe, 0x63, 0x87, 0x71, 0xad, 0xe2, 0xa5, 0xc9, - 0xfb, 0x83, 0x77, 0x05, 0xb7, 0xb5, 0x19, 0x11, 0x24, 0xa3, 0x6f, 0x6b, 0xb3, 0x98, 0x6b, 0x3b, - 0x0d, 0x4d, 0x42, 0x89, 0x47, 0xd0, 0xdf, 0x19, 0x0d, 0xa3, 0xf2, 0x90, 0x4b, 0xe2, 0x19, 0x57, - 0x26, 0x0c, 0xad, 0x11, 0xcb, 0xf9, 0xc8, 0x9f, 0x6d, 0x7d, 0x18, 0x86, 0x2a, 0xcd, 0x16, 0x75, - 0x5c, 0xdb, 0xd2, 0x3d, 0xdb, 0xcf, 0x2d, 0x8f, 0x61, 0x17, 0x4c, 0x09, 0x2e, 0x87, 0x02, 0x90, - 0xe9, 0xc9, 0x15, 0x3f, 0x0d, 0x45, 0x0e, 0xe3, 0x21, 0x61, 0x50, 0xcf, 0x78, 0x1e, 0x41, 0x4e, - 0xc1, 0x48, 0x6f, 0xbb, 0x3a, 0xbe, 0x40, 0x09, 0x48, 0xdb, 0x0c, 0x20, 0x93, 0x22, 0x05, 0x79, - 0x12, 0x0a, 0x78, 0x62, 0xe7, 0x62, 0x7a, 0x19, 0x11, 0xf0, 0xa3, 0x81, 0x10, 0x39, 0xbc, 0x02, - 0xa7, 0x21, 0xb7, 0x60, 0x34, 0xbc, 0x8e, 0xb8, 0xe9, 0xd8, 0xed, 0x96, 0x1f, 0x50, 0x1a, 0xf3, - 0x2f, 0xae, 0x05, 0xb8, 0xda, 0x0a, 0x22, 0x25, 0x16, 0x89, 0x82, 0x64, 0x1a, 0x4e, 0x84, 0x30, - 0x26, 0x22, 0x3f, 0x90, 0x3d, 0x26, 0x11, 0x92, 0x78, 0x31, 0x71, 0x46, 0x92, 0x08, 0xc5, 0x8a, - 0x91, 0x0a, 0xf4, 0xf9, 0xd1, 0x3e, 0xfa, 0xb7, 0x55, 0xd2, 0x93, 0x22, 0xda, 0x47, 0x9f, 0x1c, - 0xe7, 0xc3, 0x2f, 0x4f, 0xa6, 0x60, 0x44, 0xb3, 0xdb, 0x1e, 0x5d, 0xb4, 0xc5, 0x3a, 0x2e, 0xa2, - 0xca, 0x60, 0x9b, 0x1c, 0x86, 0xa9, 0x79, 0xb6, 0x9f, 0xbe, 0x52, 0x4e, 0xa3, 0x18, 0x2d, 0x45, - 0xe6, 0x60, 0x2c, 0x71, 0x71, 0x23, 0x27, 0x95, 0x94, 0x3e, 0x2f, 0xc9, 0x2c, 0x59, 0x94, 0xfc, - 0x60, 0x06, 0x0a, 0x8b, 0x8e, 0x6e, 0x7a, 0xae, 0x78, 0xbc, 0x72, 0xfa, 0xea, 0xba, 0xa3, 0xb7, - 0x98, 0x7e, 0x5c, 0xc5, 0x80, 0x57, 0x77, 0xf4, 0x46, 0x9b, 0xba, 0xe3, 0x77, 0xd9, 0xd7, 0xfd, - 0xfd, 0xcd, 0xe2, 0x4b, 0x2b, 0xb8, 0x3d, 0xbc, 0x5a, 0xb7, 0x9b, 0xd7, 0x56, 0x1c, 0xfd, 0x9e, - 0xe9, 0xe1, 0xd4, 0xa1, 0x37, 0xae, 0x79, 0xb4, 0x81, 0xbb, 0xd0, 0x6b, 0x7a, 0xcb, 0xbc, 0x86, - 0x81, 0x15, 0xaf, 0x05, 0x9c, 0x78, 0x0d, 0x4c, 0x05, 0x3c, 0xfc, 0x4b, 0x56, 0x01, 0x8e, 0x23, - 0x73, 0x6c, 0xf3, 0x86, 0x9f, 0x5a, 0x6a, 0xb5, 0xc4, 0x4b, 0x18, 0x69, 0xef, 0xe6, 0x63, 0xb8, - 0x62, 0x07, 0x02, 0xd3, 0x5b, 0x2d, 0x39, 0x6d, 0x6d, 0x48, 0xc7, 0xb4, 0x60, 0x51, 0xb4, 0xc8, - 0x17, 0xd3, 0x70, 0x28, 0x71, 0xbf, 0xb1, 0x29, 0x42, 0x8a, 0x17, 0x23, 0x4b, 0x70, 0x42, 0xf0, - 0x0d, 0x42, 0x0f, 0x8f, 0x44, 0x67, 0x85, 0x18, 0x9a, 0x2b, 0x6d, 0xd0, 0x46, 0x43, 0x80, 0xe5, - 0x3a, 0x62, 0x25, 0xc8, 0x78, 0x98, 0x0f, 0x6d, 0x4e, 0x6f, 0x52, 0x57, 0x39, 0x81, 0x1a, 0x7b, - 0x7e, 0x6b, 0xb3, 0xa8, 0xf8, 0xe5, 0x31, 0xf0, 0x4d, 0x6a, 0x76, 0x4f, 0x2c, 0x22, 0xf3, 0xe0, - 0x5a, 0x3f, 0x9a, 0xc2, 0x23, 0xae, 0xf3, 0xd1, 0x22, 0x64, 0x02, 0x86, 0x03, 0x47, 0xdc, 0xdb, - 0xb7, 0x2b, 0x65, 0x7c, 0x6a, 0x23, 0x62, 0x1f, 0xc5, 0x82, 0x03, 0xcb, 0x4c, 0x22, 0x65, 0xa4, - 0x37, 0x79, 0xfc, 0xed, 0x4d, 0xec, 0x4d, 0x5e, 0x2b, 0xe5, 0x4d, 0xde, 0x02, 0x79, 0x05, 0x06, - 0x4b, 0x77, 0xab, 0xe2, 0xad, 0xa1, 0xab, 0x9c, 0x0c, 0xc3, 0xc9, 0x63, 0x82, 0x57, 0xf1, 0x2e, - 0x51, 0x6e, 0xba, 0x4c, 0x4f, 0x26, 0x61, 0x24, 0x72, 0x97, 0xef, 0x2a, 0xa7, 0x90, 0x03, 0xb6, - 0x5c, 0x47, 0x4c, 0xcd, 0x11, 0xa8, 0x48, 0xca, 0xe1, 0x48, 0x21, 0xa6, 0x35, 0x6c, 0x3b, 0xdc, - 0x68, 0xd8, 0xeb, 0x1a, 0xc5, 0x67, 0x8d, 0xf8, 0x70, 0xa7, 0x9f, 0x6b, 0x8d, 0x21, 0x50, 0x35, - 0x87, 0xe3, 0x22, 0x39, 0x86, 0xa3, 0xc5, 0xc8, 0x5b, 0x40, 0x30, 0x98, 0x37, 0x35, 0xfc, 0xa3, - 0xdd, 0x4a, 0xd9, 0x55, 0xce, 0x60, 0xe0, 0x3f, 0x12, 0x7f, 0x57, 0x5b, 0x29, 0x8f, 0x5f, 0x12, - 0xd3, 0xc7, 0x45, 0x9d, 0x97, 0xaa, 0x39, 0x02, 0x57, 0x33, 0x23, 0x99, 0xce, 0x52, 0xb8, 0x92, - 0x75, 0x38, 0xbb, 0xe0, 0xd0, 0x7b, 0xa6, 0xdd, 0x76, 0xfd, 0xe5, 0xc3, 0x9f, 0xb7, 0xce, 0x6e, - 0x3b, 0x6f, 0x3d, 0x2a, 0x2a, 0x3e, 0xdd, 0x72, 0xe8, 0xbd, 0x9a, 0x1f, 0xee, 0x2d, 0x12, 0xad, - 0xa8, 0x13, 0x77, 0xcc, 0xd7, 0xf6, 0x76, 0xdb, 0xa1, 0x02, 0x6e, 0x52, 0x57, 0x51, 0xc2, 0xa9, - 0x96, 0xbf, 0x50, 0x35, 0x03, 0x5c, 0x24, 0x5f, 0x5b, 0xb4, 0x18, 0xd1, 0x80, 0xdc, 0x9c, 0xf0, - 0x8f, 0xf9, 0x4b, 0x75, 0x9e, 0xd5, 0x4a, 0x79, 0x08, 0x99, 0xa9, 0x4c, 0x2c, 0x2b, 0xf5, 0x20, - 0xf4, 0x63, 0x4d, 0x17, 0x78, 0x59, 0x2c, 0xc9, 0xd2, 0x64, 0x06, 0x46, 0x17, 0x1c, 0xdc, 0x74, - 0xdc, 0xa2, 0x1b, 0x0b, 0x76, 0xc3, 0xac, 0x6f, 0xe0, 0xfb, 0x21, 0x31, 0x55, 0xb6, 0x38, 0xae, - 0xb6, 0x46, 0x37, 0x6a, 0x2d, 0xc4, 0xca, 0xcb, 0x4a, 0xbc, 0xa4, 0x1c, 0x8a, 0xed, 0xe1, 0x9d, - 0x85, 0x62, 0xa3, 0x30, 0x2a, 0x2e, 0x09, 0xee, 0x7b, 0xd4, 0x62, 0x4b, 0xbd, 0x2b, 0xde, 0x0a, - 0x29, 0xb1, 0x4b, 0x85, 0x00, 0x2f, 0xf2, 0x0d, 0xf3, 0x51, 0x46, 0x03, 0xb0, 0xdc, 0xb0, 0x78, - 0x91, 0x64, 0xbc, 0xb2, 0x0b, 0x7b, 0x88, 0x57, 0xf6, 0xbf, 0xe4, 0xe4, 0xf9, 0x97, 0x9c, 0x87, - 0xbc, 0x14, 0x4e, 0x1c, 0x83, 0x31, 0x61, 0xe8, 0xc5, 0xbc, 0x88, 0x31, 0x37, 0x20, 0x6c, 0x97, - 0xe0, 0xd5, 0x2d, 0x26, 0x89, 0x09, 0x03, 0xf4, 0x68, 0x21, 0x01, 0x26, 0xe8, 0x68, 0x2f, 0x35, - 0xcc, 0x3a, 0x06, 0xe4, 0xcc, 0x49, 0x09, 0x3a, 0x10, 0xca, 0xe3, 0x71, 0x4a, 0x24, 0xe4, 0x3a, - 0x0c, 0xfa, 0x9b, 0xdd, 0x30, 0x18, 0x19, 0xc6, 0x69, 0xf4, 0xd3, 0x3b, 0xf3, 0x30, 0x90, 0x12, - 0x11, 0x79, 0x11, 0x13, 0x9c, 0xfb, 0x2f, 0x9a, 0x7b, 0x43, 0x1b, 0x48, 0x9e, 0x3d, 0x62, 0x19, - 0xce, 0xfd, 0x87, 0xcd, 0xe3, 0x30, 0x2c, 0xab, 0xa3, 0x9f, 0x92, 0x08, 0x27, 0xce, 0x88, 0x0e, - 0xcb, 0x0a, 0x12, 0x2d, 0x42, 0xe6, 0x61, 0x2c, 0xa1, 0x81, 0x22, 0x74, 0x19, 0xa6, 0xa5, 0x4c, - 0x51, 0x5f, 0x79, 0x61, 0x4e, 0x94, 0x25, 0x8f, 0x41, 0xee, 0xb6, 0x56, 0x11, 0xe1, 0x93, 0x78, - 0xe4, 0xad, 0xc8, 0xdb, 0x6a, 0x86, 0x55, 0xbf, 0x2f, 0x9b, 0x58, 0x9b, 0x98, 0xf4, 0x04, 0x2b, - 0xa9, 0x07, 0x51, 0x7a, 0x7e, 0xfd, 0x5c, 0x7a, 0x12, 0x11, 0xb9, 0x0c, 0xfd, 0xb1, 0x44, 0xe8, - 0xf8, 0x10, 0x3e, 0xc8, 0x82, 0x1e, 0x60, 0xc9, 0x75, 0x29, 0x93, 0x96, 0x14, 0x91, 0xd0, 0xcf, - 0xa4, 0x15, 0x0f, 0xcd, 0x87, 0x39, 0xb5, 0xae, 0xc7, 0x82, 0xf6, 0xfb, 0xf9, 0xaa, 0x93, 0xeb, - 0x62, 0x18, 0xa4, 0x3f, 0xb0, 0x4a, 0x7b, 0xb7, 0xb3, 0x4a, 0xd5, 0xdf, 0xcb, 0x24, 0xc7, 0x19, - 0xb9, 0x91, 0x0c, 0x0e, 0xc6, 0x53, 0x55, 0xfb, 0x40, 0xb9, 0xd6, 0x20, 0x4c, 0x58, 0x24, 0xcc, - 0x57, 0x76, 0xcf, 0x61, 0xbe, 0x72, 0xbb, 0x0c, 0xf3, 0xa5, 0xfe, 0xdb, 0x7c, 0x57, 0xa7, 0xb6, - 0x43, 0x09, 0x07, 0xf1, 0x02, 0xdb, 0x59, 0xb1, 0xda, 0x4b, 0x6e, 0x62, 0x7f, 0xc0, 0x7d, 0x76, - 0x6a, 0x3a, 0x1f, 0x5a, 0xae, 0x16, 0xa5, 0x24, 0xaf, 0xc2, 0x90, 0xff, 0x01, 0x18, 0x3e, 0x4e, - 0x0a, 0x7b, 0x16, 0xac, 0x6a, 0xf1, 0x6c, 0xe3, 0x72, 0x01, 0xf2, 0x2c, 0x0c, 0xa0, 0x4d, 0xd3, - 0xd2, 0xeb, 0x7e, 0x6c, 0x41, 0x1e, 0x8c, 0xd0, 0x07, 0xca, 0x21, 0x0f, 0x02, 0x4a, 0xf2, 0x09, - 0x28, 0x44, 0xd2, 0xdd, 0x5f, 0xdb, 0x81, 0x17, 0xe0, 0x55, 0x39, 0xb8, 0x2e, 0xdf, 0xa5, 0xc4, - 0x53, 0xdd, 0x0b, 0xa6, 0x64, 0x11, 0x4e, 0x2e, 0x38, 0xd4, 0x40, 0x7f, 0xd3, 0xc9, 0xfb, 0x2d, - 0x47, 0x84, 0x3e, 0xe6, 0xa3, 0x1c, 0x17, 0xa9, 0x96, 0x8f, 0x66, 0xcb, 0xa7, 0xc0, 0xcb, 0x01, - 0xce, 0x52, 0x8a, 0x33, 0xcb, 0x85, 0xb7, 0xe4, 0x16, 0xdd, 0x58, 0xc7, 0x94, 0xa7, 0xfd, 0xa1, - 0xe5, 0x22, 0x04, 0xbd, 0x26, 0x50, 0xb2, 0xe5, 0x12, 0x2d, 0x74, 0xee, 0x05, 0x18, 0xdc, 0x6b, - 0x80, 0xda, 0x5f, 0xcf, 0x76, 0x70, 0x0f, 0x7f, 0x70, 0x73, 0x84, 0x04, 0xd9, 0xe9, 0x7a, 0x3b, - 0x64, 0xa7, 0xfb, 0x76, 0xb6, 0x83, 0xef, 0xfb, 0x03, 0x9d, 0x45, 0x2a, 0x10, 0x46, 0x34, 0x8b, - 0x54, 0x98, 0xc0, 0xcb, 0x34, 0x34, 0x99, 0x28, 0x96, 0x6f, 0xae, 0xb0, 0x6d, 0xbe, 0xb9, 0x5f, - 0xca, 0x75, 0x7b, 0x1b, 0x70, 0x2c, 0xfb, 0xdd, 0xc8, 0xfe, 0x3a, 0x0c, 0x06, 0x92, 0xad, 0x94, - 0xd1, 0xe8, 0x19, 0x0e, 0xc2, 0x61, 0x73, 0x30, 0x96, 0x91, 0x88, 0xc8, 0x15, 0xde, 0xd6, 0xaa, - 0xf9, 0x36, 0x0f, 0xcc, 0x3a, 0x2c, 0x42, 0x6e, 0xea, 0x9e, 0x5e, 0x73, 0xcd, 0xb7, 0xa9, 0x16, - 0xa0, 0xd5, 0xff, 0x3d, 0x9b, 0xfa, 0xc0, 0xe2, 0xb8, 0x8f, 0x76, 0xd1, 0x47, 0x29, 0x42, 0xe4, - 0x4f, 0x43, 0x8e, 0x85, 0xb8, 0x0b, 0x21, 0xfe, 0x55, 0x36, 0xf5, 0x21, 0xcd, 0xb1, 0x10, 0x77, - 0x33, 0x5b, 0x3c, 0x09, 0x03, 0x9a, 0xbd, 0xee, 0x62, 0x72, 0x69, 0x31, 0x57, 0xe0, 0x44, 0xed, - 0xd8, 0xeb, 0x2e, 0x4f, 0xbc, 0xad, 0x85, 0x04, 0xea, 0x77, 0xb2, 0x5d, 0x9e, 0x1a, 0x1d, 0x0b, - 0xfe, 0xdd, 0x5c, 0x22, 0x7f, 0x2b, 0x1b, 0x79, 0xca, 0xf4, 0x40, 0xa7, 0x63, 0xad, 0xd6, 0x57, - 0x69, 0x53, 0x8f, 0xa7, 0x63, 0x75, 0x11, 0x2a, 0x92, 0xa2, 0x85, 0x24, 0xea, 0x57, 0xb3, 0xb1, - 0xb7, 0x5c, 0xc7, 0xb2, 0xdb, 0xb1, 0xec, 0x02, 0xad, 0x13, 0xcf, 0xd3, 0x8e, 0x25, 0xb7, 0x53, - 0xc9, 0x7d, 0x26, 0x1b, 0x7b, 0xc9, 0xf7, 0xc0, 0xca, 0x8e, 0x0d, 0xc0, 0xe4, 0x0b, 0xc3, 0x07, - 0x56, 0x93, 0x9e, 0x84, 0x01, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, 0x07, 0xe2, 0x29, 0x6b, - 0x40, 0xa0, 0xfe, 0x40, 0x16, 0xa2, 0x2f, 0x2c, 0x1f, 0x50, 0x1d, 0xfa, 0xad, 0x6c, 0xf4, 0x6d, - 0xe9, 0x83, 0xab, 0x3f, 0x57, 0x01, 0xaa, 0xed, 0xa5, 0xba, 0x08, 0x4d, 0xd8, 0x2b, 0x1d, 0xd3, - 0x07, 0x50, 0x4d, 0xa2, 0x50, 0xff, 0x5d, 0x36, 0xf5, 0xc1, 0xeb, 0x83, 0x2b, 0xc0, 0x67, 0xf0, - 0x54, 0xbc, 0x6e, 0x85, 0x13, 0x39, 0x1e, 0x42, 0xb2, 0xf1, 0x97, 0xc8, 0x88, 0xe2, 0x13, 0x92, - 0x0f, 0xa5, 0x98, 0x6b, 0x18, 0xaf, 0x35, 0x34, 0xd7, 0xe4, 0x6b, 0x08, 0xc9, 0x70, 0xfb, 0x7f, - 0xb2, 0xdb, 0xbd, 0x0f, 0x7e, 0x90, 0x57, 0xd5, 0xbe, 0x05, 0x7d, 0x03, 0xe3, 0x58, 0xb1, 0x9e, - 0x18, 0xe2, 0xf9, 0x3a, 0x5a, 0x1c, 0x24, 0xdf, 0xbd, 0x09, 0x2a, 0xf5, 0x2f, 0x7b, 0xd3, 0x1f, - 0xa7, 0x3e, 0xb8, 0x22, 0x3c, 0x0f, 0xf9, 0x05, 0xdd, 0x5b, 0x15, 0x9a, 0x8c, 0x57, 0x7a, 0x2d, - 0xdd, 0x5b, 0xd5, 0x10, 0x4a, 0xae, 0x40, 0xbf, 0xa6, 0xaf, 0xf3, 0x33, 0xcf, 0x42, 0x98, 0x4b, - 0xc5, 0xd1, 0xd7, 0x6b, 0xfc, 0xdc, 0x33, 0x40, 0x13, 0x35, 0xc8, 0xe5, 0xc3, 0x4f, 0xbe, 0x31, - 0x91, 0x04, 0xcf, 0xe5, 0x13, 0x64, 0xf0, 0x39, 0x0f, 0xf9, 0x71, 0xdb, 0xd8, 0xc0, 0xeb, 0xab, - 0x21, 0x5e, 0xd9, 0x92, 0x6d, 0x6c, 0x68, 0x08, 0x25, 0x9f, 0xcd, 0x40, 0xdf, 0x34, 0xd5, 0x0d, - 0x36, 0x42, 0x06, 0xba, 0x79, 0x9d, 0x7c, 0xe4, 0x60, 0xbc, 0x4e, 0xc6, 0x56, 0x79, 0x65, 0xb2, - 0xa2, 0x88, 0xfa, 0xc9, 0x4d, 0xe8, 0x9f, 0xd0, 0x3d, 0xba, 0x62, 0x3b, 0x1b, 0xe8, 0x47, 0x33, - 0x12, 0x3a, 0x38, 0x46, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x75, 0xf1, 0x4b, 0x0b, 0x0a, 0x33, - 0xb1, 0x88, 0xec, 0xa2, 0x83, 0xa1, 0x58, 0x78, 0x1a, 0xd1, 0x20, 0x89, 0x68, 0x70, 0xac, 0x3c, - 0x94, 0x7e, 0xac, 0x8c, 0xd6, 0x23, 0xfa, 0xda, 0x61, 0x06, 0x9d, 0x61, 0x5c, 0xf4, 0xb9, 0xf5, - 0x88, 0x50, 0x4c, 0xa0, 0xa3, 0x49, 0x24, 0xea, 0x37, 0x7b, 0x21, 0xf5, 0x29, 0xdb, 0xb1, 0x92, - 0x1f, 0x2b, 0x79, 0xa8, 0xe4, 0xe5, 0x84, 0x92, 0x9f, 0x4b, 0x3e, 0x8e, 0x7c, 0x8f, 0x6a, 0xf8, - 0x97, 0xf3, 0x89, 0xa7, 0xd5, 0x0f, 0xf6, 0xee, 0x32, 0x94, 0x5e, 0xef, 0xb6, 0xd2, 0x0b, 0x06, - 0x44, 0x61, 0xdb, 0x01, 0xd1, 0xb7, 0xd3, 0x01, 0xd1, 0xdf, 0x71, 0x40, 0x84, 0x0a, 0x32, 0xd0, - 0x51, 0x41, 0x2a, 0x62, 0xd0, 0x40, 0xf7, 0xec, 0x6c, 0xe7, 0xb7, 0x36, 0x8b, 0x23, 0x6c, 0x34, - 0xa5, 0xe6, 0x65, 0x43, 0x16, 0xea, 0x37, 0xf2, 0x5d, 0xe2, 0x21, 0x1c, 0x8a, 0x8e, 0x3c, 0x03, - 0xb9, 0x52, 0xab, 0x25, 0xf4, 0xe3, 0xa4, 0x14, 0x8a, 0xa1, 0x43, 0x29, 0x46, 0x4d, 0x5e, 0x84, - 0x5c, 0xe9, 0x6e, 0x35, 0x1e, 0xd5, 0xbd, 0x74, 0xb7, 0x2a, 0xbe, 0xa4, 0x63, 0xd9, 0xbb, 0x55, - 0xf2, 0x72, 0x18, 0x5e, 0x6d, 0xb5, 0x6d, 0xad, 0x89, 0x8d, 0xa2, 0x70, 0xb7, 0xf5, 0xdd, 0x71, - 0xea, 0x0c, 0xc5, 0xb6, 0x8b, 0x31, 0xda, 0x98, 0x36, 0x15, 0x76, 0xae, 0x4d, 0x7d, 0xdb, 0x6a, - 0x53, 0xff, 0x4e, 0xb5, 0x69, 0x60, 0x07, 0xda, 0x04, 0xdb, 0x6a, 0xd3, 0xe0, 0xfe, 0xb5, 0xa9, - 0x05, 0xe7, 0x92, 0x31, 0x6c, 0x02, 0x8d, 0xd0, 0x80, 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, - 0xdb, 0x1c, 0x5b, 0xe3, 0x59, 0x80, 0xe3, 0x39, 0x74, 0xb5, 0x94, 0xd2, 0xea, 0xaf, 0x67, 0x3b, - 0x87, 0xde, 0x39, 0x9a, 0x53, 0xdc, 0xf7, 0xa4, 0x4a, 0x29, 0x1f, 0x7d, 0x0a, 0xd9, 0x59, 0xca, - 0x31, 0xb6, 0x69, 0x32, 0xfb, 0x7a, 0xa6, 0x53, 0x3c, 0xa0, 0x7d, 0x49, 0xec, 0xf1, 0xa4, 0x47, - 0x1b, 0xfa, 0xe9, 0xbb, 0x51, 0x57, 0xb6, 0x78, 0x52, 0xd9, 0xdc, 0x1e, 0x93, 0xca, 0xfe, 0x5e, - 0x06, 0x4e, 0xde, 0x6a, 0x2f, 0x51, 0xe1, 0xc1, 0x16, 0x34, 0xe3, 0x2d, 0x00, 0x06, 0x16, 0x4e, - 0x2c, 0x19, 0x74, 0x62, 0xf9, 0x80, 0x1c, 0xcb, 0x27, 0x56, 0xe0, 0x6a, 0x48, 0xcd, 0x1d, 0x58, - 0x2e, 0xf8, 0xce, 0x9c, 0x6b, 0xed, 0x25, 0x5a, 0x4b, 0x78, 0xb2, 0x48, 0xdc, 0xcf, 0xbd, 0xc2, - 0xdd, 0xe4, 0xf7, 0xea, 0x34, 0xf2, 0xab, 0xd9, 0x8e, 0xe1, 0x93, 0x8e, 0x6c, 0xf6, 0x9a, 0x8f, - 0xa5, 0xf6, 0x4a, 0x3c, 0x8b, 0x4d, 0x0a, 0x49, 0x8c, 0x63, 0x1a, 0x97, 0x74, 0x81, 0x1d, 0xf1, - 0x9c, 0x4a, 0xef, 0xaa, 0xc0, 0xfe, 0x38, 0xd3, 0x31, 0xcc, 0xd5, 0x51, 0x15, 0x98, 0xfa, 0x4f, - 0x72, 0x7e, 0x74, 0xad, 0x7d, 0x7d, 0xc2, 0x93, 0x30, 0x20, 0x1e, 0x19, 0x46, 0x1d, 0x70, 0xc5, - 0x51, 0x1e, 0x1e, 0x0d, 0x07, 0x04, 0x6c, 0x99, 0x97, 0xbc, 0x83, 0x25, 0x07, 0x5c, 0xc9, 0x33, - 0x58, 0x93, 0x48, 0xd8, 0x42, 0x3e, 0x79, 0xdf, 0xf4, 0xd0, 0x2a, 0x60, 0x7d, 0x99, 0xe3, 0x0b, - 0x39, 0xbd, 0x6f, 0x7a, 0xdc, 0x26, 0x08, 0xd0, 0x6c, 0x91, 0xae, 0x86, 0x19, 0x23, 0xc5, 0x22, - 0xed, 0x8a, 0xc4, 0x99, 0xe2, 0xd9, 0xd8, 0x93, 0x30, 0x20, 0xbc, 0x5a, 0x85, 0x9b, 0x89, 0x68, - 0xad, 0xf0, 0x83, 0xc5, 0xd6, 0x06, 0x04, 0x8c, 0xa3, 0x46, 0x57, 0x42, 0xc7, 0x3a, 0xe4, 0xe8, - 0x20, 0x44, 0x13, 0x18, 0x72, 0x1d, 0x46, 0xaa, 0x9e, 0x6e, 0x19, 0xba, 0x63, 0xcc, 0xb7, 0xbd, - 0x56, 0xdb, 0x93, 0x8d, 0x52, 0xd7, 0x33, 0xec, 0xb6, 0xa7, 0xc5, 0x28, 0xc8, 0x07, 0x61, 0xd8, - 0x87, 0x4c, 0x3a, 0x8e, 0xed, 0xc8, 0x96, 0x87, 0xeb, 0x19, 0xd4, 0x71, 0xb4, 0x28, 0x01, 0xf9, - 0x10, 0x0c, 0x57, 0xac, 0x7b, 0x36, 0x4f, 0x45, 0x7a, 0x5b, 0x9b, 0x11, 0x76, 0x08, 0x3e, 0xc5, - 0x32, 0x03, 0x44, 0xad, 0xed, 0x34, 0xb4, 0x28, 0xa1, 0xba, 0x95, 0x4d, 0x06, 0x21, 0x7b, 0x70, - 0x37, 0x2d, 0x57, 0xa2, 0xce, 0x74, 0xe8, 0x41, 0x8a, 0x06, 0xa1, 0xec, 0xcb, 0xcb, 0xed, 0xc2, - 0xeb, 0xd0, 0x7f, 0x8b, 0x6e, 0x70, 0xbf, 0xcf, 0x42, 0xe8, 0x2a, 0xbc, 0x26, 0x60, 0xf2, 0x89, - 0xab, 0x4f, 0xa7, 0x7e, 0x2d, 0x9b, 0x0c, 0xaf, 0xf6, 0xe0, 0x0a, 0xfb, 0x83, 0xd0, 0x87, 0xa2, - 0xac, 0xf8, 0x47, 0xfe, 0x28, 0x40, 0x14, 0x77, 0xd4, 0x03, 0xd9, 0x27, 0x53, 0x7f, 0xb6, 0x10, - 0x8f, 0xb9, 0xf7, 0xe0, 0x4a, 0xef, 0x25, 0x18, 0x9c, 0xb0, 0x2d, 0xd7, 0x74, 0x3d, 0x6a, 0xd5, - 0x7d, 0x85, 0x7d, 0x88, 0x19, 0x54, 0xf5, 0x10, 0x2c, 0xbf, 0x41, 0x92, 0xa8, 0xf7, 0xa2, 0xbc, - 0xe4, 0x39, 0x18, 0x40, 0x91, 0xa3, 0x9f, 0xb4, 0x94, 0xea, 0x7c, 0x89, 0x01, 0xe3, 0x4e, 0xd2, - 0x21, 0x29, 0xb9, 0x0d, 0xfd, 0x13, 0xab, 0x66, 0xc3, 0x70, 0xa8, 0x85, 0xfe, 0xc2, 0xd2, 0xd3, - 0xe6, 0x68, 0x5f, 0x5e, 0xc5, 0x7f, 0x91, 0x96, 0x37, 0xa7, 0x2e, 0x8a, 0x45, 0x5e, 0x61, 0x09, - 0xd8, 0xb9, 0x1f, 0xcb, 0x02, 0x84, 0x05, 0xc8, 0x23, 0x90, 0x0d, 0x92, 0xb1, 0xa1, 0x9b, 0x4a, - 0x44, 0x83, 0xb2, 0xb8, 0x54, 0x88, 0xb1, 0x9d, 0xdd, 0x76, 0x6c, 0xdf, 0x86, 0x02, 0x3f, 0xf1, - 0x42, 0x4f, 0x72, 0x29, 0x0c, 0x58, 0xc7, 0x06, 0x5f, 0x45, 0x7a, 0xbe, 0x99, 0x45, 0xcb, 0x33, - 0xe2, 0x95, 0xcd, 0x99, 0x9d, 0xab, 0x43, 0x2f, 0xfe, 0x45, 0x2e, 0x41, 0x1e, 0xa5, 0x98, 0xc1, - 0x7d, 0x2c, 0xce, 0xd2, 0x31, 0xf9, 0x21, 0x9e, 0x75, 0xd3, 0x84, 0x6d, 0x79, 0xac, 0x6a, 0x6c, - 0xf5, 0x90, 0x90, 0x8b, 0x80, 0x45, 0xe4, 0x22, 0x60, 0xea, 0xff, 0x9d, 0x4d, 0x89, 0x06, 0xf9, - 0xe0, 0x0e, 0x93, 0x17, 0x00, 0xf0, 0x49, 0x37, 0x93, 0xa7, 0xff, 0x44, 0x03, 0x47, 0x09, 0x32, - 0x42, 0xb5, 0x8d, 0x6c, 0x3b, 0x42, 0x62, 0xf5, 0x0f, 0x32, 0x89, 0x10, 0x82, 0xfb, 0x92, 0xa3, - 0x6c, 0x95, 0x65, 0xf7, 0x68, 0xc6, 0xfa, 0x7d, 0x91, 0xdb, 0x5d, 0x5f, 0x44, 0xbf, 0xe5, 0x00, - 0x2c, 0xd3, 0xc3, 0xfc, 0x96, 0x6f, 0x66, 0xd3, 0x02, 0x2a, 0x1e, 0x4d, 0x15, 0xbf, 0x11, 0x18, - 0xa5, 0xf9, 0x9d, 0xa4, 0x31, 0x17, 0x66, 0xea, 0x27, 0xe1, 0x44, 0x2c, 0xcc, 0xa0, 0xc8, 0x90, - 0x78, 0xa9, 0x7b, 0xbc, 0xc2, 0xce, 0xc1, 0x00, 0x22, 0x64, 0xea, 0xbf, 0xcf, 0x74, 0x0f, 0x32, - 0x79, 0xe8, 0xaa, 0x93, 0x22, 0x80, 0xdc, 0xdf, 0x8d, 0x00, 0x0e, 0x60, 0x1b, 0x7c, 0xb4, 0x05, - 0xf0, 0x1e, 0x99, 0x3c, 0xde, 0x6d, 0x01, 0xfc, 0x6c, 0x66, 0xdb, 0x18, 0xa1, 0x87, 0x2d, 0x03, - 0xf5, 0x1f, 0x66, 0x52, 0x63, 0x79, 0xee, 0xab, 0x5d, 0x2f, 0x43, 0x81, 0xbb, 0xd5, 0x88, 0x56, - 0x49, 0xd9, 0x4f, 0x18, 0xb4, 0x43, 0x79, 0x51, 0x86, 0xcc, 0x40, 0x1f, 0x6f, 0x83, 0x11, 0xcf, - 0x12, 0x9c, 0xd2, 0x4e, 0xa3, 0xd3, 0xe4, 0x28, 0xd0, 0xea, 0xef, 0x67, 0x12, 0xa1, 0x45, 0x0f, - 0xf1, 0xdb, 0xc2, 0xa9, 0x3a, 0xb7, 0xf3, 0xa9, 0x5a, 0xfd, 0x8b, 0x6c, 0x7a, 0x64, 0xd3, 0x43, - 0xfc, 0x90, 0x83, 0x38, 0x4e, 0xdb, 0xdb, 0xba, 0xb5, 0x08, 0x23, 0x51, 0x59, 0x88, 0x65, 0xeb, - 0x62, 0x7a, 0x7c, 0xd7, 0x0e, 0xad, 0x88, 0xf1, 0x50, 0xdf, 0xc9, 0x24, 0x83, 0xb2, 0x1e, 0xfa, - 0xfc, 0xb4, 0x37, 0x6d, 0x89, 0x7e, 0xca, 0x7b, 0x64, 0xad, 0x39, 0x88, 0x4f, 0x79, 0x8f, 0xac, - 0x1a, 0x7b, 0xfb, 0x94, 0x5f, 0xce, 0x76, 0x8a, 0x69, 0x7b, 0xe8, 0x1f, 0xf4, 0x51, 0x59, 0xc8, - 0xbc, 0x65, 0xe2, 0xd3, 0x1e, 0xe9, 0x14, 0x44, 0xb6, 0x03, 0xcf, 0x04, 0x9f, 0xbd, 0x8d, 0xf1, - 0x54, 0x61, 0xbd, 0x47, 0x14, 0xf9, 0x68, 0x08, 0xeb, 0x3d, 0x32, 0x54, 0xde, 0x7b, 0xc2, 0xfa, - 0x9d, 0xec, 0x4e, 0x03, 0x29, 0x1f, 0x0b, 0x2f, 0x21, 0xbc, 0x2f, 0x66, 0x93, 0x01, 0xbe, 0x0f, - 0x5d, 0x4c, 0x53, 0x50, 0x10, 0xa1, 0xc6, 0x3b, 0x0a, 0x87, 0xe3, 0x3b, 0x59, 0x34, 0xe2, 0x3b, - 0x6e, 0x80, 0xb8, 0xc8, 0xd9, 0x99, 0x48, 0x38, 0xad, 0xfa, 0x9d, 0x4c, 0x2c, 0x1a, 0xf6, 0xa1, - 0x1c, 0x21, 0xec, 0x69, 0x49, 0x22, 0xaf, 0xf8, 0x87, 0x99, 0xf9, 0x58, 0x34, 0xd2, 0xe0, 0x7b, - 0xca, 0xd4, 0xd3, 0xcd, 0x46, 0xbc, 0xbc, 0x88, 0x09, 0xf0, 0xb5, 0x2c, 0x8c, 0x25, 0x48, 0xc9, - 0xa5, 0x48, 0x28, 0x1d, 0x3c, 0x96, 0x8c, 0x39, 0x8f, 0xf3, 0xa0, 0x3a, 0xbb, 0x38, 0x49, 0xbd, - 0x04, 0xf9, 0xb2, 0xbe, 0xc1, 0xbf, 0xad, 0x97, 0xb3, 0x34, 0xf4, 0x0d, 0xf9, 0xc4, 0x0d, 0xf1, - 0x64, 0x09, 0x4e, 0xf3, 0xfb, 0x10, 0xd3, 0xb6, 0x16, 0xcd, 0x26, 0xad, 0x58, 0xb3, 0x66, 0xa3, - 0x61, 0xba, 0xe2, 0x52, 0xef, 0xc9, 0xad, 0xcd, 0xe2, 0x65, 0xcf, 0xf6, 0xf4, 0x46, 0x8d, 0xfa, - 0x64, 0x35, 0xcf, 0x6c, 0xd2, 0x9a, 0x69, 0xd5, 0x9a, 0x48, 0x29, 0xb1, 0x4c, 0x67, 0x45, 0x2a, - 0x3c, 0xf0, 0x6c, 0xb5, 0xae, 0x5b, 0x16, 0x35, 0x2a, 0xd6, 0xf8, 0x86, 0x47, 0xf9, 0x65, 0x60, - 0x8e, 0x1f, 0x09, 0xf2, 0xb7, 0xe1, 0x1c, 0xcd, 0x18, 0x2f, 0x31, 0x02, 0x2d, 0xa5, 0x90, 0xfa, - 0xbb, 0xf9, 0x94, 0x40, 0xe8, 0x47, 0x48, 0x7d, 0xfc, 0x9e, 0xce, 0x6f, 0xd3, 0xd3, 0xd7, 0xa0, - 0xef, 0x0e, 0x75, 0xf0, 0x7c, 0x8b, 0x5f, 0x30, 0xa0, 0x33, 0xfb, 0x3d, 0x0e, 0x92, 0x6f, 0x68, - 0x04, 0x15, 0x69, 0xc0, 0xb9, 0x45, 0xd6, 0x4d, 0xe9, 0x9d, 0x59, 0xd8, 0x43, 0x67, 0x76, 0xe1, - 0x47, 0xde, 0x84, 0xb3, 0x88, 0x4d, 0xe9, 0xd6, 0x3e, 0xac, 0x0a, 0x63, 0x54, 0xf1, 0xaa, 0xd2, - 0x3b, 0xb7, 0x53, 0x79, 0xf2, 0x51, 0x18, 0x0a, 0x06, 0x88, 0x49, 0x5d, 0x71, 0x73, 0xd1, 0x65, - 0x9c, 0xf1, 0x00, 0x70, 0x0c, 0x8c, 0x2e, 0x64, 0xd1, 0x20, 0x62, 0x11, 0x5e, 0xea, 0x3f, 0xc8, - 0x74, 0x0b, 0xc8, 0x7e, 0xe8, 0xb3, 0xf2, 0x2b, 0xd0, 0x67, 0xf0, 0x8f, 0x12, 0x3a, 0xd5, 0x3d, - 0x64, 0x3b, 0x27, 0xd5, 0xfc, 0x32, 0xea, 0x9f, 0x67, 0xba, 0xc6, 0x81, 0x3f, 0xea, 0x9f, 0xf7, - 0xc5, 0x5c, 0x87, 0xcf, 0x13, 0x93, 0xe8, 0x15, 0x18, 0x35, 0xc3, 0x40, 0xb5, 0xb5, 0x30, 0xfc, - 0x94, 0x76, 0x42, 0x82, 0xe3, 0xe8, 0xba, 0x01, 0x67, 0x7c, 0xc7, 0x47, 0xc7, 0xf7, 0x10, 0x73, - 0x6b, 0x6d, 0xc7, 0xe4, 0xe3, 0x52, 0x3b, 0xe5, 0xc6, 0xdc, 0xc7, 0xdc, 0xdb, 0x8e, 0xc9, 0x2a, - 0xd0, 0xbd, 0x55, 0x6a, 0xe9, 0xb5, 0x75, 0xdb, 0x59, 0xc3, 0x28, 0xa3, 0x7c, 0x70, 0x6a, 0x27, - 0x38, 0xfc, 0xae, 0x0f, 0x26, 0x8f, 0xc1, 0xf0, 0x4a, 0xa3, 0x4d, 0x83, 0xb8, 0x8e, 0xfc, 0xae, - 0x4f, 0x1b, 0x62, 0xc0, 0xe0, 0x86, 0xe4, 0x02, 0x00, 0x12, 0x79, 0x18, 0xa5, 0x1f, 0x2f, 0xf6, - 0xb4, 0x01, 0x06, 0x59, 0x14, 0xdd, 0x75, 0x8e, 0x6b, 0x35, 0x17, 0x52, 0xad, 0x61, 0x5b, 0x2b, - 0x35, 0x8f, 0x3a, 0x4d, 0x6c, 0x28, 0x3a, 0x33, 0x68, 0x67, 0x90, 0x02, 0xaf, 0x4e, 0xdc, 0x19, - 0xdb, 0x5a, 0x59, 0xa4, 0x4e, 0x93, 0x35, 0xf5, 0x49, 0x20, 0xa2, 0xa9, 0x0e, 0x1e, 0x7a, 0xf0, - 0x8f, 0x43, 0x6f, 0x06, 0x4d, 0x7c, 0x04, 0x3f, 0x0d, 0xc1, 0x0f, 0x2b, 0xc2, 0x20, 0x0f, 0x6e, - 0xc7, 0x85, 0x86, 0x2e, 0x0c, 0x1a, 0x70, 0x10, 0xca, 0xeb, 0x0c, 0x08, 0xef, 0x0a, 0xee, 0xd5, - 0xad, 0x89, 0x5f, 0xea, 0xe7, 0x72, 0x69, 0xa1, 0xeb, 0xf7, 0xa5, 0x68, 0xe1, 0xb4, 0x9a, 0xdd, - 0xd5, 0xb4, 0x7a, 0xc2, 0x6a, 0x37, 0x6b, 0x7a, 0xab, 0x55, 0x5b, 0x36, 0x1b, 0xf8, 0xac, 0x0a, - 0x17, 0x3e, 0x6d, 0xd8, 0x6a, 0x37, 0x4b, 0xad, 0xd6, 0x14, 0x07, 0x92, 0x27, 0x60, 0x8c, 0xd1, - 0x61, 0x27, 0x05, 0x94, 0x79, 0xa4, 0x64, 0x0c, 0x30, 0x3a, 0xac, 0x4f, 0xfb, 0x10, 0xf4, 0x0b, - 0x9e, 0x7c, 0xad, 0xea, 0xd5, 0xfa, 0x38, 0x33, 0x97, 0xf5, 0x5c, 0xc0, 0x86, 0x4f, 0xae, 0xbd, - 0xda, 0x80, 0x5f, 0x1e, 0x63, 0x20, 0x5b, 0xed, 0x26, 0x8f, 0x88, 0xd5, 0x87, 0xc8, 0xe0, 0x37, - 0xb9, 0x04, 0x23, 0x8c, 0x4b, 0x20, 0x30, 0x1e, 0x36, 0xb6, 0x57, 0x8b, 0x41, 0xc9, 0x75, 0x38, - 0x15, 0x81, 0x70, 0x1b, 0x94, 0x3f, 0x13, 0xe8, 0xd5, 0x52, 0x71, 0xea, 0x57, 0x73, 0xd1, 0x80, - 0xfa, 0x87, 0xd0, 0x11, 0x67, 0xa1, 0xcf, 0x76, 0x56, 0x6a, 0x6d, 0xa7, 0x21, 0xc6, 0x5e, 0xc1, - 0x76, 0x56, 0x6e, 0x3b, 0x0d, 0x72, 0x1a, 0x0a, 0xac, 0x77, 0x4c, 0x43, 0x0c, 0xb1, 0x5e, 0xbd, - 0xd5, 0xaa, 0x18, 0xa4, 0xc4, 0x3b, 0x04, 0x43, 0x8e, 0xd6, 0xea, 0xb8, 0xb5, 0xe7, 0x4e, 0x09, - 0xbd, 0x7c, 0xc5, 0x4b, 0x20, 0xb1, 0x9f, 0x30, 0x10, 0x29, 0x3f, 0x08, 0x88, 0xb1, 0x30, 0x70, - 0x5b, 0x62, 0xf0, 0x3e, 0x89, 0xb3, 0x10, 0xc8, 0x90, 0x05, 0xdf, 0xc4, 0x18, 0xa4, 0x0c, 0x24, - 0xa4, 0x6a, 0xda, 0x86, 0xb9, 0x6c, 0x52, 0xfe, 0xaa, 0xa3, 0x97, 0x5f, 0xfc, 0x26, 0xb1, 0xda, - 0xa8, 0xcf, 0x64, 0x56, 0x40, 0xc8, 0x4b, 0x5c, 0x09, 0x39, 0x1d, 0xae, 0x7d, 0xbc, 0x6f, 0xb9, - 0x9d, 0x16, 0x43, 0xa1, 0x66, 0x62, 0x79, 0x5c, 0x08, 0xd5, 0x77, 0x72, 0xc9, 0xac, 0x0a, 0x87, - 0x62, 0xd7, 0x4c, 0x03, 0x88, 0xa4, 0x29, 0xe1, 0xe5, 0x5a, 0xe0, 0x71, 0x1e, 0x62, 0x3a, 0xf0, - 0x90, 0xca, 0x92, 0x2b, 0xd0, 0xcf, 0xbf, 0xa8, 0x52, 0x16, 0xf6, 0x0e, 0xba, 0x88, 0xb9, 0x2d, - 0x73, 0x79, 0x19, 0xfd, 0xc9, 0x02, 0x34, 0xb9, 0x04, 0x7d, 0xe5, 0xb9, 0x6a, 0xb5, 0x34, 0xe7, - 0xdf, 0x14, 0xe3, 0xfb, 0x12, 0xc3, 0x72, 0x6b, 0xae, 0x6e, 0xb9, 0x9a, 0x8f, 0x24, 0x8f, 0x41, - 0xa1, 0xb2, 0x80, 0x64, 0xfc, 0xd5, 0xe4, 0xe0, 0xd6, 0x66, 0xb1, 0xcf, 0x6c, 0x71, 0x2a, 0x81, - 0xc2, 0x7a, 0xef, 0x54, 0xca, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0x9e, 0x69, 0xe0, 0xb5, 0xb3, 0x16, - 0xa0, 0xc9, 0xb3, 0x30, 0x54, 0xa5, 0x8e, 0xa9, 0x37, 0xe6, 0xda, 0xb8, 0x55, 0x94, 0x42, 0x29, - 0xba, 0x08, 0xaf, 0x59, 0x88, 0xd0, 0x22, 0x64, 0xe4, 0x3c, 0xe4, 0xa7, 0x4d, 0xcb, 0x7f, 0xc2, - 0x80, 0x3e, 0xee, 0xab, 0xa6, 0xe5, 0x69, 0x08, 0x55, 0xff, 0x65, 0x36, 0x3d, 0x35, 0xc5, 0x21, - 0x0c, 0xc7, 0x3d, 0xde, 0xf4, 0xc6, 0x94, 0x20, 0xbf, 0x0f, 0x25, 0x58, 0x86, 0x13, 0x25, 0xa3, - 0x69, 0x5a, 0x25, 0xfc, 0xe9, 0xce, 0x4e, 0x95, 0x70, 0x78, 0x4b, 0x4f, 0xe8, 0x62, 0x68, 0xf1, - 0x3d, 0x3c, 0x28, 0x2f, 0x43, 0xd5, 0x74, 0x8e, 0xab, 0x35, 0x97, 0xf5, 0x5a, 0x9d, 0x67, 0x75, - 0xd0, 0xe2, 0x4c, 0xd5, 0x1f, 0xcd, 0x6e, 0x93, 0x4d, 0xe3, 0x41, 0x94, 0xbe, 0xfa, 0xa5, 0x6c, - 0xf7, 0x84, 0x26, 0x0f, 0xa4, 0x50, 0xfe, 0x2a, 0x9b, 0x92, 0x5e, 0x64, 0x5f, 0x92, 0xb8, 0x02, - 0xfd, 0x9c, 0x4d, 0xe0, 0x6a, 0x8b, 0x33, 0x0e, 0x57, 0x56, 0x9c, 0xe9, 0x7c, 0x34, 0x99, 0x83, - 0x53, 0xa5, 0xe5, 0x65, 0x5a, 0xf7, 0xc2, 0xf0, 0xcc, 0x73, 0x61, 0xa0, 0x54, 0x1e, 0x8e, 0x56, - 0xe0, 0xc3, 0xf0, 0xce, 0x18, 0x10, 0x24, 0xb5, 0x1c, 0x59, 0x84, 0x33, 0x71, 0x78, 0x95, 0x9b, - 0xe9, 0x79, 0x29, 0x42, 0x6d, 0x82, 0x23, 0xff, 0x4f, 0xeb, 0x50, 0x36, 0xad, 0x95, 0x38, 0x9d, - 0xf6, 0x76, 0x6b, 0x25, 0xce, 0xad, 0xa9, 0xe5, 0xd4, 0xaf, 0xe5, 0xe4, 0x2c, 0x2c, 0x0f, 0xae, - 0x53, 0xd4, 0x8d, 0x88, 0x2b, 0xf4, 0x4e, 0x87, 0xcc, 0xb3, 0x22, 0xca, 0x87, 0xd1, 0x76, 0x7c, - 0xaf, 0xc1, 0x20, 0xca, 0x00, 0x02, 0x65, 0xff, 0xbf, 0x80, 0x92, 0x54, 0x20, 0x5f, 0x72, 0x56, - 0xb8, 0x09, 0xba, 0xdd, 0xc3, 0x27, 0xdd, 0x59, 0x71, 0xd3, 0x1f, 0x3e, 0x31, 0x16, 0xea, 0x8f, - 0x64, 0xbb, 0x24, 0x4e, 0x79, 0x10, 0x27, 0x91, 0x27, 0x66, 0x79, 0x90, 0xe3, 0x5b, 0xa6, 0x65, - 0x90, 0x87, 0xe0, 0xf4, 0xed, 0xea, 0xa4, 0x56, 0xbb, 0x55, 0x99, 0x2b, 0xd7, 0x6e, 0xcf, 0x55, - 0x17, 0x26, 0x27, 0x2a, 0x53, 0x95, 0xc9, 0xf2, 0x68, 0x0f, 0x39, 0x09, 0x27, 0x42, 0xd4, 0xf4, - 0xed, 0xd9, 0xd2, 0xdc, 0x68, 0x86, 0x8c, 0xc1, 0x70, 0x08, 0x1c, 0x9f, 0x5f, 0x1c, 0xcd, 0x3e, - 0xf1, 0x7e, 0x18, 0xc4, 0x5d, 0x1c, 0x5f, 0xd1, 0xc8, 0x10, 0xf4, 0xcf, 0x8f, 0x57, 0x27, 0xb5, - 0x3b, 0xc8, 0x04, 0xa0, 0x50, 0x9e, 0x9c, 0x63, 0x0c, 0x33, 0x4f, 0xfc, 0x9b, 0x0c, 0x40, 0x75, - 0x6a, 0x71, 0x41, 0x10, 0x0e, 0x42, 0x5f, 0x65, 0xee, 0x4e, 0x69, 0xa6, 0xc2, 0xe8, 0xfa, 0x21, - 0x3f, 0xbf, 0x30, 0xc9, 0x6a, 0x18, 0x80, 0xde, 0x89, 0x99, 0xf9, 0xea, 0xe4, 0x68, 0x96, 0x01, - 0xb5, 0xc9, 0x52, 0x79, 0x34, 0xc7, 0x80, 0x77, 0xb5, 0xca, 0xe2, 0xe4, 0x68, 0x9e, 0xfd, 0x39, - 0x53, 0x5d, 0x2c, 0x2d, 0x8e, 0xf6, 0xb2, 0x3f, 0xa7, 0xf0, 0xcf, 0x02, 0x63, 0x56, 0x9d, 0x5c, - 0xc4, 0x1f, 0x7d, 0xac, 0x09, 0x53, 0xfe, 0xaf, 0x7e, 0x86, 0x62, 0xac, 0xcb, 0x15, 0x6d, 0x74, - 0x80, 0xfd, 0x60, 0x2c, 0xd9, 0x0f, 0x60, 0x8d, 0xd3, 0x26, 0x67, 0xe7, 0xef, 0x4c, 0x8e, 0x0e, - 0x32, 0x5e, 0xb3, 0xb7, 0x18, 0x78, 0x88, 0xfd, 0xa9, 0xcd, 0xb2, 0x3f, 0x87, 0x19, 0x27, 0x6d, - 0xb2, 0x34, 0xb3, 0x50, 0x5a, 0x9c, 0x1e, 0x1d, 0x61, 0xed, 0x41, 0x9e, 0x27, 0x78, 0xc9, 0xb9, - 0xd2, 0xec, 0xe4, 0xe8, 0xa8, 0xa0, 0x29, 0xcf, 0x54, 0xe6, 0x6e, 0x8d, 0x8e, 0x61, 0x43, 0xde, - 0x9c, 0xc5, 0x1f, 0x84, 0x15, 0xc0, 0xbf, 0x4e, 0x3e, 0xf1, 0x71, 0x28, 0xcc, 0x57, 0xd1, 0x6e, - 0x3b, 0x0b, 0x27, 0xe7, 0xab, 0xb5, 0xc5, 0x37, 0x17, 0x26, 0x63, 0xf2, 0x1e, 0x83, 0x61, 0x1f, - 0x31, 0x53, 0x99, 0xbb, 0xfd, 0x11, 0x2e, 0x6d, 0x1f, 0x34, 0x5b, 0x9a, 0x98, 0xaf, 0x8e, 0x66, - 0x59, 0xaf, 0xf8, 0xa0, 0xbb, 0x95, 0xb9, 0xf2, 0xfc, 0xdd, 0xea, 0x68, 0xee, 0x89, 0x7b, 0x7e, - 0x6e, 0xd7, 0x79, 0xc7, 0x5c, 0x31, 0x2d, 0x72, 0x01, 0x1e, 0x2a, 0x4f, 0xde, 0xa9, 0x4c, 0x4c, - 0xd6, 0xe6, 0xb5, 0xca, 0xcd, 0xca, 0x5c, 0xac, 0xa6, 0xd3, 0x30, 0x16, 0x45, 0x97, 0x16, 0x2a, - 0xa3, 0x19, 0x72, 0x06, 0x48, 0x14, 0xfc, 0x7a, 0x69, 0x76, 0x6a, 0x34, 0x4b, 0x14, 0x38, 0x15, - 0x85, 0x57, 0xe6, 0x16, 0x6f, 0xcf, 0x4d, 0x8e, 0xe6, 0x9e, 0xf8, 0xf9, 0x0c, 0x9c, 0x4e, 0x0d, - 0x23, 0x40, 0x54, 0xb8, 0x38, 0x39, 0x53, 0xaa, 0x2e, 0x56, 0x26, 0xaa, 0x93, 0x25, 0x6d, 0x62, - 0xba, 0x36, 0x51, 0x5a, 0x9c, 0xbc, 0x39, 0xaf, 0xbd, 0x59, 0xbb, 0x39, 0x39, 0x37, 0xa9, 0x95, - 0x66, 0x46, 0x7b, 0xc8, 0x63, 0x50, 0xec, 0x40, 0x53, 0x9d, 0x9c, 0xb8, 0xad, 0x55, 0x16, 0xdf, - 0x1c, 0xcd, 0x90, 0x47, 0xe1, 0x42, 0x47, 0x22, 0xf6, 0x7b, 0x34, 0x4b, 0x2e, 0xc2, 0xb9, 0x4e, - 0x24, 0x6f, 0xcc, 0x8c, 0xe6, 0x9e, 0xf8, 0x89, 0x0c, 0x90, 0xe4, 0x3b, 0x70, 0xf2, 0x08, 0x9c, - 0x67, 0x7a, 0x51, 0xeb, 0xdc, 0xc0, 0x47, 0xe1, 0x42, 0x2a, 0x85, 0xd4, 0xbc, 0x22, 0x3c, 0xdc, - 0x81, 0x44, 0x34, 0xee, 0x3c, 0x28, 0xe9, 0x04, 0xd8, 0xb4, 0xdf, 0xcc, 0xc0, 0xe9, 0x54, 0x23, - 0x92, 0x5c, 0x86, 0xf7, 0x95, 0xca, 0xb3, 0xac, 0x6f, 0x26, 0x16, 0x2b, 0xf3, 0x73, 0xd5, 0xda, - 0xec, 0x54, 0xa9, 0xc6, 0xb4, 0xef, 0x76, 0x35, 0xd6, 0x9b, 0x97, 0x40, 0xed, 0x42, 0x39, 0x31, - 0x5d, 0x9a, 0xbb, 0xc9, 0x86, 0x1f, 0x79, 0x1f, 0x3c, 0xd2, 0x91, 0x6e, 0x72, 0xae, 0x34, 0x3e, - 0x33, 0x59, 0x1e, 0xcd, 0x92, 0xc7, 0xe1, 0xd1, 0x8e, 0x54, 0xe5, 0x4a, 0x95, 0x93, 0xe5, 0xc6, - 0xcb, 0xef, 0xfc, 0xa3, 0x8b, 0x3d, 0xef, 0x7c, 0xeb, 0x62, 0xe6, 0x8f, 0xbe, 0x75, 0x31, 0xf3, - 0x17, 0xdf, 0xba, 0x98, 0xf9, 0xe8, 0xf5, 0xdd, 0xbc, 0xef, 0xe7, 0xd3, 0xd6, 0x52, 0x01, 0x27, - 0xf4, 0x67, 0xfe, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x6b, 0x6a, 0x5a, 0x29, 0x58, 0x01, - 0x00, + // 15715 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x74, 0x24, 0xc7, + 0x75, 0x18, 0x8c, 0x79, 0x60, 0x00, 0x5c, 0x3c, 0x16, 0xa8, 0x7d, 0x35, 0x97, 0xbb, 0x3b, 0x64, + 0x53, 0x5c, 0xed, 0x52, 0xe4, 0xae, 0xb8, 0x5c, 0x92, 0xe2, 0x4b, 0xe4, 0x00, 0x03, 0x2c, 0x86, + 0x8b, 0x17, 0x7b, 0xb0, 0xbb, 0xa2, 0x5e, 0xe3, 0xc6, 0x74, 0x01, 0x68, 0xee, 0x4c, 0xf7, 0xa8, + 0xbb, 0x67, 0xb1, 0xe0, 0xf7, 0x25, 0xb1, 0x1c, 0x3f, 0x24, 0x47, 0x92, 0x15, 0x39, 0xb6, 0xfc, + 0x4a, 0x2c, 0xdb, 0x71, 0x62, 0xfb, 0x38, 0x76, 0x9c, 0xf8, 0xd8, 0x96, 0x1d, 0x9d, 0xd8, 0x51, + 0x1e, 0x74, 0x74, 0x9c, 0x63, 0x3b, 0x89, 0x8f, 0x8f, 0xe3, 0x40, 0x8e, 0x12, 0xe7, 0x07, 0x4e, + 0x72, 0x8e, 0x93, 0xe8, 0xc4, 0x8a, 0xe3, 0xe4, 0xe4, 0xd4, 0xad, 0xea, 0xee, 0xea, 0xc7, 0x0c, + 0x9e, 0x34, 0x08, 0x2d, 0xfe, 0xec, 0x62, 0xee, 0xbd, 0x75, 0xab, 0xfa, 0xd6, 0xad, 0xaa, 0x5b, + 0x55, 0xb7, 0xee, 0x85, 0x4b, 0x1e, 0x6d, 0xd0, 0x96, 0xed, 0x78, 0x57, 0x1a, 0x74, 0x45, 0xaf, + 0xaf, 0x5f, 0xf1, 0xd6, 0x5b, 0xd4, 0xbd, 0x42, 0xef, 0x52, 0xcb, 0xf3, 0xff, 0xbb, 0xdc, 0x72, + 0x6c, 0xcf, 0x26, 0x05, 0xfe, 0xeb, 0xcc, 0x89, 0x15, 0x7b, 0xc5, 0x46, 0xd0, 0x15, 0xf6, 0x17, + 0xc7, 0x9e, 0x39, 0xbb, 0x62, 0xdb, 0x2b, 0x0d, 0x7a, 0x05, 0x7f, 0x2d, 0xb5, 0x97, 0xaf, 0xb8, + 0x9e, 0xd3, 0xae, 0x7b, 0x02, 0x5b, 0x8c, 0x63, 0x3d, 0xb3, 0x49, 0x5d, 0x4f, 0x6f, 0xb6, 0x04, + 0xc1, 0xf9, 0x38, 0xc1, 0x9a, 0xa3, 0xb7, 0x5a, 0xd4, 0x11, 0x95, 0x9f, 0x79, 0x38, 0xbd, 0x9d, + 0xf8, 0xaf, 0x20, 0x79, 0x22, 0x9d, 0xc4, 0x67, 0x14, 0xe3, 0xa8, 0x7e, 0x2e, 0x0b, 0xfd, 0xb3, + 0xd4, 0xd3, 0x0d, 0xdd, 0xd3, 0xc9, 0x59, 0xe8, 0xad, 0x58, 0x06, 0xbd, 0xa7, 0x64, 0x1e, 0xca, + 0x5c, 0xcc, 0x8d, 0x17, 0x36, 0x37, 0x8a, 0x59, 0x6a, 0x6a, 0x1c, 0x48, 0xce, 0x41, 0x7e, 0x71, + 0xbd, 0x45, 0x95, 0xec, 0x43, 0x99, 0x8b, 0x03, 0xe3, 0x03, 0x9b, 0x1b, 0xc5, 0x5e, 0x94, 0x85, + 0x86, 0x60, 0xf2, 0x30, 0x64, 0x2b, 0x65, 0x25, 0x87, 0xc8, 0xb1, 0xcd, 0x8d, 0xe2, 0x70, 0xdb, + 0x34, 0x1e, 0xb7, 0x9b, 0xa6, 0x47, 0x9b, 0x2d, 0x6f, 0x5d, 0xcb, 0x56, 0xca, 0xe4, 0x02, 0xe4, + 0x27, 0x6c, 0x83, 0x2a, 0x79, 0x24, 0x22, 0x9b, 0x1b, 0xc5, 0x91, 0xba, 0x6d, 0x50, 0x89, 0x0a, + 0xf1, 0xe4, 0x15, 0xc8, 0x2f, 0x9a, 0x4d, 0xaa, 0xf4, 0x3e, 0x94, 0xb9, 0x38, 0x78, 0xf5, 0xcc, + 0x65, 0x2e, 0x95, 0xcb, 0xbe, 0x54, 0x2e, 0x2f, 0xfa, 0x62, 0x1b, 0x1f, 0x7d, 0x6b, 0xa3, 0xd8, + 0xb3, 0xb9, 0x51, 0xcc, 0x33, 0x49, 0x7e, 0xf6, 0xab, 0xc5, 0x8c, 0x86, 0x25, 0xc9, 0x8b, 0x30, + 0x38, 0xd1, 0x68, 0xbb, 0x1e, 0x75, 0xe6, 0xf4, 0x26, 0x55, 0x0a, 0x58, 0xe1, 0x99, 0xcd, 0x8d, + 0xe2, 0xa9, 0x3a, 0x07, 0xd7, 0x2c, 0xbd, 0x29, 0x57, 0x2c, 0x93, 0xab, 0xbf, 0x92, 0x81, 0x63, + 0x55, 0xea, 0xba, 0xa6, 0x6d, 0x05, 0xb2, 0x79, 0x14, 0x06, 0x04, 0xa8, 0x52, 0x46, 0xf9, 0x0c, + 0x8c, 0xf7, 0x6d, 0x6e, 0x14, 0x73, 0xae, 0x69, 0x68, 0x21, 0x86, 0xbc, 0x17, 0xfa, 0x6e, 0x9b, + 0xde, 0xea, 0xec, 0x54, 0x49, 0xc8, 0xe9, 0xd4, 0xe6, 0x46, 0x91, 0xac, 0x99, 0xde, 0x6a, 0xad, + 0xb9, 0xac, 0x4b, 0x15, 0xfa, 0x64, 0x64, 0x06, 0x46, 0x17, 0x1c, 0xf3, 0xae, 0xee, 0xd1, 0x1b, + 0x74, 0x7d, 0xc1, 0x6e, 0x98, 0xf5, 0x75, 0x21, 0xc5, 0x87, 0x36, 0x37, 0x8a, 0x67, 0x5b, 0x1c, + 0x57, 0xbb, 0x43, 0xd7, 0x6b, 0x2d, 0xc4, 0x4a, 0x4c, 0x12, 0x25, 0xd5, 0x5f, 0x2d, 0xc0, 0xd0, + 0x4d, 0x97, 0x3a, 0x41, 0xbb, 0x2f, 0x40, 0x9e, 0xfd, 0x16, 0x4d, 0x46, 0x99, 0xb7, 0x5d, 0xea, + 0xc8, 0x32, 0x67, 0x78, 0x72, 0x09, 0x7a, 0x67, 0xec, 0x15, 0xd3, 0x12, 0xcd, 0x3e, 0xbe, 0xb9, + 0x51, 0x3c, 0xd6, 0x60, 0x00, 0x89, 0x92, 0x53, 0x90, 0xf7, 0xc3, 0x50, 0xa5, 0xc9, 0x74, 0xc8, + 0xb6, 0x74, 0xcf, 0x76, 0x44, 0x6b, 0x51, 0xba, 0xa6, 0x04, 0x97, 0x0a, 0x46, 0xe8, 0xc9, 0xf3, + 0x00, 0xa5, 0xdb, 0x55, 0xcd, 0x6e, 0xd0, 0x92, 0x36, 0x27, 0x94, 0x01, 0x4b, 0xeb, 0x6b, 0x6e, + 0xcd, 0xb1, 0x1b, 0xb4, 0xa6, 0x3b, 0x72, 0xb5, 0x12, 0x35, 0x99, 0x84, 0x91, 0x52, 0xbd, 0x4e, + 0x5d, 0x57, 0xa3, 0x1f, 0x6b, 0x53, 0xd7, 0x73, 0x95, 0xde, 0x87, 0x72, 0x17, 0x07, 0xc6, 0xcf, + 0x6d, 0x6e, 0x14, 0x1f, 0xd0, 0x11, 0x53, 0x73, 0x04, 0x4a, 0x62, 0x11, 0x2b, 0x44, 0xc6, 0x61, + 0xb8, 0xf4, 0x66, 0xdb, 0xa1, 0x15, 0x83, 0x5a, 0x9e, 0xe9, 0xad, 0x0b, 0x0d, 0x39, 0xbb, 0xb9, + 0x51, 0x54, 0x74, 0x86, 0xa8, 0x99, 0x02, 0x23, 0x31, 0x89, 0x16, 0x21, 0xf3, 0x30, 0x76, 0x7d, + 0x62, 0xa1, 0x4a, 0x9d, 0xbb, 0x66, 0x9d, 0x96, 0xea, 0x75, 0xbb, 0x6d, 0x79, 0x4a, 0x1f, 0xf2, + 0x79, 0x78, 0x73, 0xa3, 0x78, 0x6e, 0xa5, 0xde, 0xaa, 0xb9, 0x1c, 0x5b, 0xd3, 0x39, 0x5a, 0x62, + 0x96, 0x2c, 0x4b, 0x3e, 0x08, 0xc3, 0x8b, 0x0e, 0xd3, 0x42, 0xa3, 0x4c, 0x19, 0x5c, 0xe9, 0x47, + 0xfd, 0x3f, 0x75, 0x59, 0x4c, 0x40, 0x1c, 0xea, 0xf7, 0x2c, 0x6f, 0xac, 0xc7, 0x0b, 0xd4, 0x0c, + 0xc4, 0xc9, 0x8d, 0x8d, 0xb0, 0x22, 0x14, 0x14, 0xf6, 0xf1, 0xa6, 0x43, 0x8d, 0x84, 0xb6, 0x0d, + 0x60, 0x9b, 0x2f, 0x6d, 0x6e, 0x14, 0x1f, 0x75, 0x04, 0x4d, 0xad, 0xab, 0xda, 0x75, 0x64, 0x45, + 0x26, 0xa1, 0x9f, 0x69, 0xd3, 0x0d, 0xd3, 0x32, 0x14, 0x78, 0x28, 0x73, 0x71, 0xe4, 0xea, 0xa8, + 0xdf, 0x7a, 0x1f, 0x3e, 0x7e, 0x7a, 0x73, 0xa3, 0x78, 0x9c, 0xe9, 0x60, 0xed, 0x8e, 0x69, 0xc9, + 0x53, 0x44, 0x50, 0x94, 0x8d, 0xa2, 0x71, 0xdb, 0xc3, 0xa1, 0x3b, 0x18, 0x8e, 0xa2, 0x25, 0xdb, + 0x8b, 0x0f, 0x5b, 0x9f, 0x8c, 0x4c, 0xc0, 0xf0, 0xb8, 0xed, 0x55, 0x2c, 0xd7, 0xd3, 0xad, 0x3a, + 0xad, 0x94, 0x95, 0x21, 0x2c, 0x87, 0x6a, 0xc1, 0xca, 0x99, 0x02, 0x53, 0x8b, 0x4c, 0x4a, 0xd1, + 0x32, 0xea, 0x9f, 0xe6, 0x61, 0x84, 0xf5, 0x89, 0x34, 0x7c, 0x4a, 0x6c, 0x26, 0x60, 0x10, 0x56, + 0x8b, 0xdb, 0xd2, 0xeb, 0x54, 0x8c, 0x24, 0xfc, 0x0a, 0xcb, 0x07, 0x4a, 0x3c, 0xe3, 0xf4, 0xe4, + 0x12, 0xf4, 0x73, 0x50, 0xa5, 0x2c, 0x06, 0xd7, 0xf0, 0xe6, 0x46, 0x71, 0xc0, 0x45, 0x58, 0xcd, + 0x34, 0xb4, 0x00, 0xcd, 0xb4, 0x9b, 0xff, 0x3d, 0x6d, 0xbb, 0x1e, 0x63, 0x2e, 0xc6, 0x16, 0x7e, + 0x86, 0x28, 0xb0, 0x2a, 0x50, 0xb2, 0x76, 0x47, 0x0b, 0x91, 0xe7, 0x00, 0x38, 0xa4, 0x64, 0x18, + 0x8e, 0x18, 0x60, 0x0f, 0x6c, 0x6e, 0x14, 0x4f, 0x0a, 0x16, 0xba, 0x61, 0xc8, 0xa3, 0x53, 0x22, + 0x26, 0x4d, 0x18, 0xe2, 0xbf, 0x66, 0xf4, 0x25, 0xda, 0xe0, 0xa3, 0x6b, 0xf0, 0xea, 0x45, 0xbf, + 0x13, 0xa3, 0xd2, 0xb9, 0x2c, 0x93, 0x4e, 0x5a, 0x9e, 0xb3, 0x3e, 0x5e, 0x14, 0x13, 0xf2, 0x69, + 0x51, 0x55, 0x03, 0x71, 0xf2, 0x54, 0x20, 0x97, 0x61, 0xf3, 0xf4, 0x94, 0xed, 0xac, 0xe9, 0x8e, + 0x41, 0x8d, 0xf1, 0x75, 0x79, 0x9e, 0x5e, 0xf6, 0xc1, 0xb5, 0x25, 0x59, 0xf5, 0x64, 0x72, 0xd6, + 0xe9, 0x9c, 0x5b, 0xb5, 0xbd, 0x84, 0x2a, 0xd7, 0x97, 0x90, 0x96, 0xdb, 0x5e, 0x8a, 0xab, 0x59, + 0xb4, 0x0c, 0x9b, 0x0a, 0x38, 0xe0, 0x16, 0x75, 0xd8, 0x24, 0x8e, 0xa3, 0x4e, 0x4c, 0x05, 0x82, + 0xc9, 0x5d, 0x8e, 0x49, 0xf2, 0x10, 0x45, 0xce, 0xbc, 0x0c, 0x63, 0x09, 0x51, 0x90, 0x51, 0xc8, + 0xdd, 0xa1, 0xeb, 0x5c, 0x5d, 0x34, 0xf6, 0x27, 0x39, 0x01, 0xbd, 0x77, 0xf5, 0x46, 0x5b, 0x2c, + 0xa1, 0x1a, 0xff, 0xf1, 0x7c, 0xf6, 0x7d, 0x19, 0xb6, 0xe2, 0x90, 0x09, 0xdb, 0xb2, 0x68, 0xdd, + 0x93, 0x17, 0x9d, 0x67, 0x60, 0x60, 0xc6, 0xae, 0xeb, 0x0d, 0xec, 0x47, 0xae, 0x77, 0xca, 0xe6, + 0x46, 0xf1, 0x04, 0xeb, 0xc0, 0xcb, 0x0d, 0x86, 0x91, 0xda, 0x14, 0x92, 0x32, 0x05, 0xd0, 0x68, + 0xd3, 0xf6, 0x28, 0x16, 0xcc, 0x86, 0x0a, 0x80, 0x05, 0x1d, 0x44, 0xc9, 0x0a, 0x10, 0x12, 0x93, + 0x2b, 0xd0, 0xbf, 0xc0, 0xd6, 0xd9, 0xba, 0xdd, 0x10, 0xca, 0x87, 0x4b, 0x01, 0xae, 0xbd, 0xf2, + 0x58, 0xf5, 0x89, 0xd4, 0x69, 0x18, 0x99, 0x68, 0x98, 0xd4, 0xf2, 0xe4, 0x56, 0xb3, 0x91, 0x5c, + 0x5a, 0xa1, 0x96, 0x27, 0xb7, 0x1a, 0xc7, 0xbc, 0xce, 0xa0, 0x72, 0xab, 0x03, 0x52, 0xf5, 0x5f, + 0xe5, 0xe0, 0x81, 0x1b, 0xed, 0x25, 0xea, 0x58, 0xd4, 0xa3, 0xae, 0x58, 0x90, 0x03, 0xae, 0x73, + 0x30, 0x96, 0x40, 0x0a, 0xee, 0xb8, 0x50, 0xde, 0x09, 0x90, 0x35, 0xb1, 0xc6, 0xcb, 0xb3, 0x6d, + 0xa2, 0x28, 0x99, 0x86, 0x63, 0x21, 0x90, 0x35, 0xc2, 0x55, 0xb2, 0xb8, 0x94, 0x9c, 0xdf, 0xdc, + 0x28, 0x9e, 0x91, 0xb8, 0xb1, 0x66, 0xcb, 0x1a, 0x1c, 0x2f, 0x46, 0x6e, 0xc0, 0x68, 0x08, 0xba, + 0xee, 0xd8, 0xed, 0x96, 0xab, 0xe4, 0x90, 0x55, 0x71, 0x73, 0xa3, 0xf8, 0xa0, 0xc4, 0x6a, 0x05, + 0x91, 0xf2, 0x02, 0x1e, 0x2f, 0x48, 0xbe, 0x3d, 0x23, 0x73, 0x13, 0xa3, 0x30, 0x8f, 0xa3, 0xf0, + 0x59, 0x7f, 0x14, 0x76, 0x14, 0xd2, 0xe5, 0x78, 0x49, 0x31, 0x28, 0x63, 0xcd, 0x48, 0x0c, 0xca, + 0x44, 0x8d, 0x67, 0x26, 0xe0, 0x64, 0x2a, 0xaf, 0x1d, 0x69, 0xf5, 0x1f, 0xe7, 0x64, 0x2e, 0x0b, + 0xb6, 0x11, 0x74, 0xe6, 0xbc, 0xdc, 0x99, 0x0b, 0xb6, 0x81, 0x53, 0x7d, 0x26, 0x5c, 0x3b, 0xa5, + 0xc6, 0xb6, 0x6c, 0x23, 0x3e, 0xeb, 0x27, 0xcb, 0x92, 0x8f, 0xc2, 0xa9, 0x04, 0x90, 0x4f, 0xd7, + 0x5c, 0xfb, 0x2f, 0x6c, 0x6e, 0x14, 0xd5, 0x14, 0xae, 0xf1, 0xd9, 0xbb, 0x03, 0x17, 0xa2, 0xc3, + 0x69, 0x49, 0xea, 0xb6, 0xe5, 0xe9, 0xa6, 0x25, 0x8c, 0x4b, 0x3e, 0x4a, 0xde, 0xbd, 0xb9, 0x51, + 0x7c, 0x44, 0xd6, 0x41, 0x9f, 0x26, 0xde, 0xf8, 0x4e, 0x7c, 0x88, 0x01, 0x4a, 0x0a, 0xaa, 0xd2, + 0xd4, 0x57, 0x7c, 0x8b, 0xf9, 0xe2, 0xe6, 0x46, 0xf1, 0x5d, 0xa9, 0x75, 0x98, 0x8c, 0x4a, 0x5e, + 0xa1, 0x3b, 0x71, 0x22, 0x1a, 0x90, 0x10, 0x37, 0x67, 0x1b, 0x14, 0xbf, 0xa1, 0x17, 0xf9, 0xab, + 0x9b, 0x1b, 0xc5, 0xf3, 0x12, 0x7f, 0xcb, 0x36, 0x68, 0xbc, 0xf9, 0x29, 0xa5, 0xd5, 0x5f, 0xc9, + 0xc1, 0xf9, 0x6a, 0x69, 0x76, 0xa6, 0x62, 0xf8, 0x26, 0xcd, 0x82, 0x63, 0xdf, 0x35, 0x0d, 0x69, + 0xf4, 0x2e, 0xc1, 0xe9, 0x18, 0x6a, 0x12, 0xad, 0xa8, 0xc0, 0x98, 0xc6, 0x6f, 0xf3, 0xcd, 0xa5, + 0x96, 0xa0, 0xa9, 0x71, 0x53, 0x2b, 0xba, 0x68, 0x77, 0x62, 0xc4, 0xfa, 0x28, 0x86, 0xaa, 0xae, + 0xda, 0x8e, 0x57, 0x6f, 0x7b, 0x42, 0x09, 0xb0, 0x8f, 0x12, 0x75, 0xb8, 0x82, 0xa8, 0x4b, 0x15, + 0x3e, 0x1f, 0xf2, 0xc9, 0x0c, 0x8c, 0x96, 0x3c, 0xcf, 0x31, 0x97, 0xda, 0x1e, 0x9d, 0xd5, 0x5b, + 0x2d, 0xd3, 0x5a, 0xc1, 0xb1, 0x3e, 0x78, 0xf5, 0xc5, 0x60, 0x8d, 0xec, 0x2a, 0x89, 0xcb, 0xf1, + 0xe2, 0xd2, 0x10, 0xd5, 0x7d, 0x54, 0xad, 0xc9, 0x71, 0xf2, 0x10, 0x8d, 0x97, 0x63, 0x43, 0x34, + 0x95, 0xd7, 0x8e, 0x86, 0xe8, 0xe7, 0x72, 0x70, 0x76, 0xfe, 0x8e, 0xa7, 0x6b, 0xd4, 0xb5, 0xdb, + 0x4e, 0x9d, 0xba, 0x37, 0x5b, 0x86, 0xee, 0xd1, 0x70, 0xa4, 0x16, 0xa1, 0xb7, 0x64, 0x18, 0xd4, + 0x40, 0x76, 0xbd, 0x7c, 0xdb, 0xa7, 0x33, 0x80, 0xc6, 0xe1, 0xe4, 0x51, 0xe8, 0x13, 0x65, 0x90, + 0x7b, 0xef, 0xf8, 0xe0, 0xe6, 0x46, 0xb1, 0xaf, 0xcd, 0x41, 0x9a, 0x8f, 0x63, 0x64, 0x65, 0xda, + 0xa0, 0x8c, 0x2c, 0x17, 0x92, 0x19, 0x1c, 0xa4, 0xf9, 0x38, 0xf2, 0x1a, 0x8c, 0x20, 0xdb, 0xa0, + 0x3d, 0x62, 0xee, 0x3b, 0xe1, 0x4b, 0x57, 0x6e, 0x2c, 0x5f, 0x9a, 0xb0, 0x35, 0x35, 0xc7, 0x2f, + 0xa0, 0xc5, 0x18, 0x90, 0xdb, 0x30, 0x2a, 0x1a, 0x11, 0x32, 0xed, 0xed, 0xc2, 0xf4, 0xe4, 0xe6, + 0x46, 0x71, 0x4c, 0xb4, 0x5f, 0x62, 0x9b, 0x60, 0xc2, 0x18, 0x8b, 0x66, 0x87, 0x8c, 0x0b, 0x5b, + 0x31, 0x16, 0x5f, 0x2c, 0x33, 0x8e, 0x33, 0x51, 0x5f, 0x87, 0x21, 0xb9, 0x20, 0x39, 0x85, 0x5b, + 0x6b, 0x3e, 0x4e, 0x70, 0x53, 0x6e, 0x1a, 0xb8, 0x9f, 0x7e, 0x12, 0x06, 0xcb, 0xd4, 0xad, 0x3b, + 0x66, 0x8b, 0x59, 0x0d, 0x42, 0xc9, 0x8f, 0x6d, 0x6e, 0x14, 0x07, 0x8d, 0x10, 0xac, 0xc9, 0x34, + 0xea, 0xff, 0xcc, 0xc0, 0x29, 0xc6, 0xbb, 0xe4, 0xba, 0xe6, 0x8a, 0xd5, 0x94, 0x97, 0xed, 0xc7, + 0xa1, 0x50, 0xc5, 0xfa, 0x44, 0x4d, 0x27, 0x36, 0x37, 0x8a, 0xa3, 0xbc, 0x05, 0x92, 0x1e, 0x0a, + 0x9a, 0x60, 0x5f, 0x99, 0xdd, 0x62, 0x5f, 0xc9, 0x4c, 0x5a, 0x4f, 0x77, 0x3c, 0xd3, 0x5a, 0xa9, + 0x7a, 0xba, 0xd7, 0x76, 0x23, 0x26, 0xad, 0xc0, 0xd4, 0x5c, 0x44, 0x45, 0x4c, 0xda, 0x48, 0x21, + 0xf2, 0x32, 0x0c, 0x4d, 0x5a, 0x46, 0xc8, 0x84, 0x4f, 0x88, 0x0f, 0x32, 0x4b, 0x93, 0x22, 0x3c, + 0xc9, 0x22, 0x52, 0x40, 0xfd, 0x7b, 0x19, 0x50, 0xf8, 0x26, 0x70, 0xc6, 0x74, 0xbd, 0x59, 0xda, + 0x5c, 0x92, 0x66, 0xa7, 0x29, 0x7f, 0x57, 0xc9, 0x70, 0xd2, 0x5a, 0x84, 0xa6, 0x80, 0xd8, 0x55, + 0x36, 0x4c, 0x37, 0xb1, 0xfd, 0x88, 0x95, 0x22, 0x15, 0xe8, 0xe3, 0x9c, 0xb9, 0x2d, 0x31, 0x78, + 0x55, 0xf1, 0x15, 0x21, 0x5e, 0x35, 0x57, 0x86, 0x26, 0x27, 0x96, 0x37, 0x34, 0xa2, 0xbc, 0xfa, + 0xf7, 0xb3, 0x30, 0x1a, 0x2f, 0x44, 0x6e, 0x43, 0xff, 0xab, 0xb6, 0x69, 0x51, 0x63, 0xde, 0xc2, + 0x16, 0x76, 0x3f, 0x1c, 0xf1, 0x6d, 0xf1, 0xe3, 0x6f, 0x60, 0x99, 0x9a, 0x6c, 0xc1, 0xe2, 0x59, + 0x49, 0xc0, 0x8c, 0x7c, 0x10, 0x06, 0x98, 0x0d, 0x78, 0x17, 0x39, 0x67, 0xb7, 0xe4, 0xfc, 0x90, + 0xe0, 0x7c, 0xc2, 0xe1, 0x85, 0x92, 0xac, 0x43, 0x76, 0x4c, 0xaf, 0x34, 0xaa, 0xbb, 0xb6, 0x25, + 0x7a, 0x1e, 0xf5, 0xca, 0x41, 0x88, 0xac, 0x57, 0x9c, 0x86, 0x99, 0xae, 0xfc, 0x63, 0xb1, 0x1b, + 0xa4, 0xbd, 0x0b, 0x97, 0x55, 0xbc, 0x07, 0x24, 0x62, 0xf5, 0x3b, 0xb3, 0xf0, 0x44, 0x28, 0x32, + 0x8d, 0xde, 0x35, 0xe9, 0x9a, 0x10, 0xe7, 0xaa, 0xd9, 0x12, 0x7b, 0x56, 0xa6, 0xf2, 0xee, 0xc4, + 0xaa, 0x6e, 0xad, 0x50, 0x83, 0x5c, 0x82, 0x5e, 0xcd, 0x6e, 0x50, 0x57, 0xc9, 0xa0, 0xb9, 0x86, + 0xd3, 0x89, 0xc3, 0x00, 0xf2, 0xa1, 0x07, 0x52, 0x10, 0x1b, 0x0a, 0x8b, 0x8e, 0x6e, 0x7a, 0x7e, + 0xcf, 0x96, 0x92, 0x3d, 0xbb, 0x8d, 0x1a, 0x2f, 0x73, 0x1e, 0x7c, 0xce, 0x47, 0x41, 0x78, 0x08, + 0x90, 0x05, 0xc1, 0x49, 0xce, 0x3c, 0x07, 0x83, 0x12, 0xf1, 0x8e, 0x26, 0xf5, 0x2f, 0xe6, 0x65, + 0x5d, 0xf7, 0x9b, 0x25, 0x74, 0xfd, 0x0a, 0xd3, 0x51, 0xd7, 0x65, 0x56, 0x05, 0x57, 0x72, 0xa1, + 0x89, 0x08, 0x8a, 0x6a, 0x22, 0x82, 0xc8, 0x53, 0xd0, 0xcf, 0x59, 0x04, 0xfb, 0x57, 0xdc, 0xfb, + 0x3a, 0x08, 0x8b, 0x2e, 0xcd, 0x01, 0x21, 0xf9, 0x99, 0x0c, 0x9c, 0xeb, 0x2a, 0x09, 0x54, 0x86, + 0xc1, 0xab, 0x4f, 0xef, 0x4a, 0x8c, 0xe3, 0x4f, 0x6c, 0x6e, 0x14, 0x2f, 0x35, 0x03, 0x92, 0x9a, + 0x23, 0xd1, 0xd4, 0xea, 0x9c, 0x48, 0x6a, 0x57, 0xf7, 0xa6, 0x30, 0xe3, 0x91, 0x57, 0x3a, 0x85, + 0x47, 0x47, 0x56, 0x7d, 0xdd, 0x6f, 0x64, 0x3e, 0x34, 0x1e, 0xc5, 0xf7, 0x2e, 0xfb, 0x24, 0x29, + 0xd5, 0x74, 0xe0, 0x42, 0xea, 0x70, 0x9a, 0x63, 0xca, 0xfa, 0xfa, 0xfc, 0xf2, 0xac, 0x6d, 0x79, + 0xab, 0x7e, 0x05, 0xbd, 0xf2, 0xd9, 0x0b, 0x56, 0x60, 0xe8, 0xeb, 0x35, 0x7b, 0xb9, 0xd6, 0x64, + 0x54, 0x29, 0x75, 0x74, 0xe2, 0xc4, 0x26, 0x5a, 0x31, 0xe6, 0xfc, 0x29, 0xa8, 0x10, 0x9e, 0x8c, + 0xf9, 0xe3, 0x34, 0x39, 0xe1, 0xc4, 0x0a, 0xa9, 0x15, 0x18, 0x9a, 0xb1, 0xeb, 0x77, 0x02, 0x75, + 0x79, 0x0e, 0x0a, 0x8b, 0xba, 0xb3, 0x42, 0x3d, 0x94, 0xc5, 0xe0, 0xd5, 0xb1, 0xcb, 0xfc, 0xb4, + 0x99, 0x11, 0x71, 0xc4, 0xf8, 0x88, 0x98, 0x0d, 0x0a, 0x1e, 0xfe, 0xd6, 0x44, 0x01, 0xf5, 0xab, + 0xbd, 0x30, 0x24, 0x4e, 0x46, 0x71, 0x36, 0x27, 0xcf, 0x87, 0x67, 0xcd, 0x62, 0xfa, 0x0a, 0x4e, + 0x87, 0x82, 0x53, 0xad, 0x21, 0xc6, 0xec, 0xb7, 0x37, 0x8a, 0x99, 0xcd, 0x8d, 0x62, 0x8f, 0xd6, + 0x2f, 0x6d, 0x2a, 0xc3, 0xf5, 0x46, 0x5a, 0x60, 0xe5, 0xb3, 0xce, 0x58, 0x59, 0xbe, 0xfe, 0xbc, + 0x0c, 0x7d, 0xa2, 0x0d, 0x42, 0xe3, 0x4e, 0x87, 0x67, 0x19, 0x91, 0x13, 0xde, 0x58, 0x69, 0xbf, + 0x14, 0x79, 0x11, 0x0a, 0x7c, 0x6f, 0x2f, 0x04, 0x70, 0x2a, 0xfd, 0x2c, 0x24, 0x56, 0x5c, 0x94, + 0x21, 0xd3, 0x00, 0xe1, 0xbe, 0x3e, 0x38, 0xd0, 0x16, 0x1c, 0x92, 0x3b, 0xfe, 0x18, 0x17, 0xa9, + 0x2c, 0x79, 0x06, 0x86, 0x16, 0xa9, 0xd3, 0x34, 0x2d, 0xbd, 0x51, 0x35, 0xdf, 0xf4, 0xcf, 0xb4, + 0x71, 0xe1, 0x75, 0xcd, 0x37, 0xe5, 0x91, 0x1b, 0xa1, 0x23, 0x1f, 0x49, 0xdb, 0x37, 0xf7, 0x61, + 0x43, 0x1e, 0xde, 0x72, 0x43, 0x19, 0x6b, 0x4f, 0xca, 0x36, 0xfa, 0x35, 0x18, 0x8e, 0x6c, 0x99, + 0xc4, 0xa1, 0xe5, 0xb9, 0x24, 0x6b, 0x69, 0xff, 0x17, 0x63, 0x1b, 0xe5, 0xc0, 0x34, 0xb9, 0x62, + 0x99, 0x9e, 0xa9, 0x37, 0x26, 0xec, 0x66, 0x53, 0xb7, 0x0c, 0x65, 0x20, 0xd4, 0x64, 0x93, 0x63, + 0x6a, 0x75, 0x8e, 0x92, 0x35, 0x39, 0x5a, 0x88, 0x6d, 0xcb, 0x45, 0x1f, 0x6a, 0xb4, 0x6e, 0x3b, + 0xcc, 0x16, 0xc0, 0x33, 0x49, 0xb1, 0x2d, 0x77, 0x39, 0xae, 0xe6, 0xf8, 0x48, 0xd9, 0xd8, 0x8e, + 0x17, 0x7c, 0x35, 0xdf, 0x3f, 0x38, 0x3a, 0x14, 0x3f, 0x46, 0x56, 0x7f, 0x3a, 0x07, 0x83, 0x82, + 0x94, 0x2d, 0xa5, 0x47, 0x0a, 0xbe, 0x17, 0x05, 0x4f, 0x55, 0xd4, 0xc2, 0x7e, 0x29, 0xaa, 0xfa, + 0xa9, 0x6c, 0x30, 0x1b, 0x2d, 0x38, 0xa6, 0xb5, 0xb7, 0xd9, 0xe8, 0x02, 0xc0, 0xc4, 0x6a, 0xdb, + 0xba, 0xc3, 0xaf, 0xcb, 0xb2, 0xe1, 0x75, 0x59, 0xdd, 0xd4, 0x24, 0x0c, 0x39, 0x07, 0xf9, 0x32, + 0xe3, 0xcf, 0x7a, 0x66, 0x68, 0x7c, 0xe0, 0x2d, 0xce, 0x29, 0xf3, 0x84, 0x86, 0x60, 0xb6, 0xb9, + 0x1a, 0x5f, 0xf7, 0x28, 0x37, 0x67, 0x73, 0x7c, 0x73, 0xb5, 0xc4, 0x00, 0x1a, 0x87, 0x93, 0x6b, + 0x30, 0x56, 0xa6, 0x0d, 0x7d, 0x7d, 0xd6, 0x6c, 0x34, 0x4c, 0x97, 0xd6, 0x6d, 0xcb, 0x70, 0x51, + 0xc8, 0xa2, 0xba, 0xa6, 0xab, 0x25, 0x09, 0x88, 0x0a, 0x85, 0xf9, 0xe5, 0x65, 0x97, 0x7a, 0x28, + 0xbe, 0xdc, 0x38, 0xb0, 0xc9, 0xd9, 0x46, 0x88, 0x26, 0x30, 0xea, 0xcf, 0x67, 0xd8, 0xee, 0xc5, + 0xbd, 0xe3, 0xd9, 0xad, 0x40, 0xcb, 0xf7, 0x24, 0x92, 0x4b, 0xa1, 0x5d, 0x91, 0xc5, 0xaf, 0x3d, + 0x26, 0xbe, 0xb6, 0x4f, 0xd8, 0x16, 0xa1, 0x45, 0x91, 0xfa, 0x55, 0xb9, 0x2d, 0xbe, 0x4a, 0xfd, + 0x93, 0x2c, 0x9c, 0x16, 0x2d, 0x9e, 0x68, 0x98, 0xad, 0x25, 0x5b, 0x77, 0x0c, 0x8d, 0xd6, 0xa9, + 0x79, 0x97, 0x1e, 0xce, 0x81, 0x17, 0x1d, 0x3a, 0xf9, 0x3d, 0x0c, 0x9d, 0xab, 0xb8, 0x11, 0x64, + 0x92, 0xc1, 0x03, 0x5f, 0x6e, 0x54, 0x8c, 0x6e, 0x6e, 0x14, 0x87, 0x0c, 0x0e, 0xc6, 0x23, 0x7f, + 0x4d, 0x26, 0x62, 0x4a, 0x32, 0x43, 0xad, 0x15, 0x6f, 0x15, 0x95, 0xa4, 0x97, 0x2b, 0x49, 0x03, + 0x21, 0x9a, 0xc0, 0xa8, 0xff, 0x35, 0x0b, 0x27, 0xe2, 0x22, 0xaf, 0x52, 0xcb, 0x38, 0x92, 0xf7, + 0xdb, 0x23, 0xef, 0xaf, 0xe7, 0xe0, 0x41, 0x51, 0xa6, 0xba, 0xaa, 0x3b, 0xd4, 0x28, 0x9b, 0x0e, + 0xad, 0x7b, 0xb6, 0xb3, 0x7e, 0x88, 0x0d, 0xa8, 0xfd, 0x13, 0xfb, 0x35, 0x28, 0x88, 0xed, 0x3f, + 0x5f, 0x67, 0x46, 0x82, 0x96, 0x20, 0x34, 0xb1, 0x42, 0xf1, 0xa3, 0x83, 0x58, 0x67, 0x15, 0xb6, + 0xd3, 0x59, 0xef, 0x83, 0xe1, 0x40, 0xf4, 0xb8, 0x11, 0xed, 0x0b, 0xad, 0x2d, 0xc3, 0x47, 0xe0, + 0x5e, 0x54, 0x8b, 0x12, 0x62, 0x6d, 0x3e, 0xa0, 0x52, 0x46, 0x6b, 0x68, 0x58, 0xd4, 0x16, 0x94, + 0x33, 0x0d, 0x4d, 0x26, 0x52, 0x37, 0xf2, 0x70, 0x26, 0xbd, 0xdb, 0x35, 0xaa, 0x1b, 0x47, 0xbd, + 0xfe, 0x4d, 0xd9, 0xeb, 0xe4, 0x61, 0xc8, 0x2f, 0xe8, 0xde, 0xaa, 0xb8, 0x7e, 0xc7, 0x3b, 0xe1, + 0x65, 0xb3, 0x41, 0x6b, 0x2d, 0xdd, 0x5b, 0xd5, 0x10, 0x25, 0xcd, 0x19, 0x80, 0x1c, 0x53, 0xe6, + 0x0c, 0x69, 0xb1, 0x1f, 0x7c, 0x28, 0x73, 0x31, 0x9f, 0xba, 0xd8, 0x7f, 0x35, 0xdf, 0x69, 0x5e, + 0xb9, 0xed, 0x98, 0x1e, 0x3d, 0xd2, 0xb0, 0x23, 0x0d, 0xdb, 0xa3, 0x86, 0xfd, 0x6e, 0x16, 0x86, + 0x83, 0x4d, 0xd3, 0x1b, 0xb4, 0x7e, 0x30, 0x6b, 0x55, 0xb8, 0x95, 0xc9, 0xed, 0x79, 0x2b, 0xb3, + 0x17, 0x85, 0x52, 0x83, 0x23, 0x4f, 0x6e, 0x1a, 0xa0, 0xc4, 0xf8, 0x91, 0x67, 0x70, 0xd0, 0xf9, + 0x30, 0xf4, 0xcd, 0xea, 0xf7, 0xcc, 0x66, 0xbb, 0x29, 0xac, 0x74, 0x74, 0x27, 0x6b, 0xea, 0xf7, + 0x34, 0x1f, 0xae, 0xfe, 0x9b, 0x0c, 0x8c, 0x08, 0xa1, 0x0a, 0xe6, 0x7b, 0x92, 0x6a, 0x28, 0x9d, + 0xec, 0x9e, 0xa5, 0x93, 0xdb, 0xbd, 0x74, 0xd4, 0x1f, 0xc9, 0x81, 0x32, 0x65, 0x36, 0xe8, 0xa2, + 0xa3, 0x5b, 0xee, 0x32, 0x75, 0xc4, 0x76, 0x7a, 0x92, 0xb1, 0xda, 0xd3, 0x07, 0x4a, 0x53, 0x4a, + 0x76, 0x57, 0x53, 0xca, 0x7b, 0x60, 0x40, 0x34, 0x26, 0x70, 0x65, 0xc4, 0x51, 0xe3, 0xf8, 0x40, + 0x2d, 0xc4, 0x33, 0xe2, 0x52, 0xab, 0xe5, 0xd8, 0x77, 0xa9, 0xc3, 0x6f, 0xa9, 0x04, 0xb1, 0xee, + 0x03, 0xb5, 0x10, 0x2f, 0x71, 0xa6, 0xbe, 0xbd, 0x28, 0x73, 0xa6, 0x8e, 0x16, 0xe2, 0xc9, 0x45, + 0xe8, 0x9f, 0xb1, 0xeb, 0x3a, 0x0a, 0x9a, 0x4f, 0x2b, 0x43, 0x9b, 0x1b, 0xc5, 0xfe, 0x86, 0x80, + 0x69, 0x01, 0x96, 0x51, 0x96, 0xed, 0x35, 0xab, 0x61, 0xeb, 0xdc, 0xf9, 0xa5, 0x9f, 0x53, 0x1a, + 0x02, 0xa6, 0x05, 0x58, 0x46, 0xc9, 0x64, 0x8e, 0x4e, 0x45, 0xfd, 0x21, 0xcf, 0x65, 0x01, 0xd3, + 0x02, 0xac, 0xfa, 0xf3, 0x79, 0xa6, 0xbd, 0xae, 0xf9, 0xe6, 0x7d, 0xbf, 0x2e, 0x84, 0x03, 0xa6, + 0x77, 0x17, 0x03, 0xe6, 0xbe, 0x39, 0xb0, 0x53, 0xff, 0xb4, 0x0f, 0x40, 0x48, 0x7f, 0xf2, 0x68, + 0x73, 0xb8, 0x37, 0xad, 0x29, 0xc3, 0xd8, 0xa4, 0xb5, 0xaa, 0x5b, 0x75, 0x6a, 0x84, 0xc7, 0x96, + 0x05, 0x1c, 0xda, 0xe8, 0x04, 0x49, 0x05, 0x32, 0x3c, 0xb7, 0xd4, 0x92, 0x05, 0xc8, 0x93, 0x30, + 0x58, 0xb1, 0x3c, 0xea, 0xe8, 0x75, 0xcf, 0xbc, 0x4b, 0xc5, 0xd4, 0x80, 0x37, 0xc3, 0x66, 0x08, + 0xd6, 0x64, 0x1a, 0x72, 0x0d, 0x86, 0x16, 0x74, 0xc7, 0x33, 0xeb, 0x66, 0x4b, 0xb7, 0x3c, 0x57, + 0xe9, 0xc7, 0x19, 0x0d, 0x2d, 0x8c, 0x96, 0x04, 0xd7, 0x22, 0x54, 0xe4, 0x23, 0x30, 0x80, 0x5b, + 0x53, 0xf4, 0xd7, 0x1e, 0xd8, 0xf2, 0xe2, 0xf0, 0x91, 0xd0, 0x3d, 0x90, 0x9f, 0xbe, 0xe2, 0x0d, + 0x70, 0xfc, 0xee, 0x30, 0xe0, 0x48, 0x3e, 0x00, 0x7d, 0x93, 0x96, 0x81, 0xcc, 0x61, 0x4b, 0xe6, + 0xaa, 0x60, 0x7e, 0x2a, 0x64, 0x6e, 0xb7, 0x62, 0xbc, 0x7d, 0x76, 0xe9, 0xa3, 0x6c, 0xf0, 0xed, + 0x1b, 0x65, 0x43, 0x6f, 0xc3, 0xb1, 0xf8, 0xf0, 0x7e, 0x1d, 0x8b, 0x8f, 0xec, 0xf2, 0x58, 0x5c, + 0x7d, 0x13, 0x06, 0xc7, 0x17, 0xa6, 0x82, 0xd1, 0xfb, 0x00, 0xe4, 0x16, 0x84, 0xa7, 0x42, 0x9e, + 0xdb, 0x33, 0x2d, 0xd3, 0xd0, 0x18, 0x8c, 0x5c, 0x82, 0xfe, 0x09, 0x74, 0x7f, 0x13, 0xb7, 0x88, + 0x79, 0xbe, 0xfe, 0xd5, 0x11, 0x86, 0x5e, 0xb0, 0x3e, 0x9a, 0x3c, 0x0a, 0x7d, 0x0b, 0x8e, 0xbd, + 0xe2, 0xe8, 0x4d, 0xb1, 0x06, 0xa3, 0xab, 0x48, 0x8b, 0x83, 0x34, 0x1f, 0xa7, 0x7e, 0x6f, 0xc6, + 0x37, 0xdb, 0x59, 0x89, 0x6a, 0x1b, 0x8f, 0xe6, 0xb1, 0xee, 0x7e, 0x5e, 0xc2, 0xe5, 0x20, 0xcd, + 0xc7, 0x91, 0x4b, 0xd0, 0x3b, 0xe9, 0x38, 0xb6, 0x23, 0xfb, 0xb8, 0x53, 0x06, 0x90, 0xaf, 0x7b, + 0x91, 0x82, 0x3c, 0x0b, 0x83, 0x7c, 0xce, 0xe1, 0x27, 0x9a, 0xb9, 0x6e, 0x37, 0xa5, 0x32, 0xa5, + 0xfa, 0xe5, 0x9c, 0x64, 0xb3, 0x71, 0x89, 0xdf, 0x87, 0xb7, 0x02, 0x4f, 0x41, 0x6e, 0x7c, 0x61, + 0x4a, 0x4c, 0x80, 0xc7, 0xfd, 0xa2, 0x92, 0xaa, 0xc4, 0xca, 0x31, 0x6a, 0x72, 0x16, 0xf2, 0x0b, + 0x4c, 0x7d, 0x0a, 0xa8, 0x1e, 0xfd, 0x9b, 0x1b, 0xc5, 0x7c, 0x8b, 0xe9, 0x0f, 0x42, 0x11, 0xcb, + 0x36, 0x33, 0x7c, 0xc7, 0xc4, 0xb1, 0xe1, 0x3e, 0xe6, 0x2c, 0xe4, 0x4b, 0xce, 0xca, 0x5d, 0x31, + 0x6b, 0x21, 0x56, 0x77, 0x56, 0xee, 0x6a, 0x08, 0x25, 0x57, 0x00, 0x34, 0xea, 0xb5, 0x1d, 0x0b, + 0x9f, 0x9f, 0x0c, 0xe0, 0xf9, 0x1b, 0xce, 0x86, 0x0e, 0x42, 0x6b, 0x75, 0xdb, 0xa0, 0x9a, 0x44, + 0xa2, 0xfe, 0x64, 0x78, 0xb1, 0x53, 0x36, 0xdd, 0x3b, 0x47, 0x5d, 0xb8, 0x83, 0x2e, 0xd4, 0xc5, + 0x11, 0x67, 0xb2, 0x93, 0x8a, 0xd0, 0x3b, 0xd5, 0xd0, 0x57, 0x5c, 0xec, 0x43, 0xe1, 0x4b, 0xb6, + 0xcc, 0x00, 0x1a, 0x87, 0xc7, 0xfa, 0xa9, 0x7f, 0xeb, 0x7e, 0xfa, 0x7c, 0x6f, 0x30, 0xda, 0xe6, + 0xa8, 0xb7, 0x66, 0x3b, 0x47, 0x5d, 0xb5, 0xdd, 0xae, 0xba, 0x00, 0x7d, 0x55, 0xa7, 0x2e, 0x1d, + 0x5d, 0xe0, 0x7e, 0xc0, 0x75, 0xea, 0xfc, 0xd8, 0xc2, 0x47, 0x32, 0xba, 0xb2, 0xeb, 0x21, 0x5d, + 0x5f, 0x48, 0x67, 0xb8, 0x9e, 0xa0, 0x13, 0x48, 0x41, 0xb7, 0x60, 0x3b, 0x9e, 0xe8, 0xb8, 0x80, + 0xae, 0x65, 0x3b, 0x9e, 0xe6, 0x23, 0xc9, 0x7b, 0x00, 0x16, 0x27, 0x16, 0x7c, 0x67, 0xfb, 0x81, + 0xd0, 0x17, 0x50, 0x78, 0xd9, 0x6b, 0x12, 0x9a, 0x2c, 0xc2, 0xc0, 0x7c, 0x8b, 0x3a, 0x7c, 0x2b, + 0xc4, 0x1f, 0x94, 0xbc, 0x3b, 0x26, 0x5a, 0xd1, 0xef, 0x97, 0xc5, 0xff, 0x01, 0x39, 0x5f, 0x5f, + 0x6c, 0xff, 0xa7, 0x16, 0x32, 0x22, 0xcf, 0x42, 0xa1, 0xc4, 0xed, 0xbc, 0x41, 0x64, 0x19, 0x88, + 0x0c, 0xb7, 0xa0, 0x1c, 0xc5, 0xf7, 0xec, 0x3a, 0xfe, 0xad, 0x09, 0x72, 0xf5, 0x12, 0x8c, 0xc6, + 0xab, 0x21, 0x83, 0xd0, 0x37, 0x31, 0x3f, 0x37, 0x37, 0x39, 0xb1, 0x38, 0xda, 0x43, 0xfa, 0x21, + 0x5f, 0x9d, 0x9c, 0x2b, 0x8f, 0x66, 0xd4, 0x9f, 0x95, 0x66, 0x10, 0xa6, 0x5a, 0x47, 0x57, 0xc3, + 0x7b, 0xba, 0x6f, 0x19, 0xc5, 0xfb, 0x50, 0x3c, 0x31, 0x68, 0x9a, 0x9e, 0x47, 0x0d, 0xb1, 0x4a, + 0xe0, 0x7d, 0xa1, 0x77, 0x4f, 0x4b, 0xe0, 0xc9, 0xe3, 0x30, 0x8c, 0x30, 0x71, 0x45, 0xc8, 0xf7, + 0xc7, 0xa2, 0x80, 0x73, 0x4f, 0x8b, 0x22, 0xd5, 0xaf, 0x84, 0xb7, 0xc3, 0x33, 0x54, 0x3f, 0xac, + 0x37, 0x8a, 0xef, 0x90, 0xfe, 0x52, 0xff, 0x3c, 0xcf, 0x9f, 0x80, 0xf0, 0xf7, 0x82, 0x07, 0x21, + 0xca, 0xf0, 0x48, 0x37, 0xb7, 0x83, 0x23, 0xdd, 0xc7, 0xa1, 0x30, 0x4b, 0xbd, 0x55, 0xdb, 0x77, + 0xfc, 0x42, 0x0f, 0xbd, 0x26, 0x42, 0x64, 0x0f, 0x3d, 0x4e, 0x43, 0xee, 0x00, 0xf1, 0x1f, 0x03, + 0x06, 0x8e, 0xd8, 0xfe, 0x11, 0xf2, 0xe9, 0xc4, 0x3e, 0xa5, 0x8a, 0x2f, 0x81, 0xd1, 0xc7, 0xfe, + 0x44, 0xe0, 0xe8, 0x2d, 0x79, 0x62, 0xfd, 0xd9, 0x46, 0xb1, 0xc0, 0x69, 0xb4, 0x14, 0xb6, 0xe4, + 0x35, 0x18, 0x98, 0x9d, 0x2a, 0x89, 0x87, 0x81, 0xdc, 0x2b, 0xe2, 0x81, 0x40, 0x8a, 0x3e, 0x22, + 0x10, 0x09, 0xbe, 0xb7, 0x69, 0x2e, 0xeb, 0xc9, 0x77, 0x81, 0x21, 0x17, 0xa6, 0x2d, 0xfc, 0xe5, + 0x8e, 0x38, 0x5d, 0x08, 0xb4, 0x25, 0xfa, 0x9e, 0x27, 0x2e, 0x2b, 0x8e, 0x8d, 0x69, 0x4b, 0xff, + 0x1e, 0x46, 0xf7, 0x3c, 0x8c, 0x95, 0x5a, 0xad, 0x86, 0x49, 0x0d, 0xd4, 0x17, 0xad, 0xdd, 0xa0, + 0xae, 0x70, 0xf9, 0xc1, 0xc7, 0x20, 0x3a, 0x47, 0xd6, 0xf0, 0x39, 0x6a, 0xcd, 0x69, 0x47, 0xfd, + 0x33, 0x93, 0x65, 0xd5, 0xef, 0xcf, 0xc2, 0xa9, 0x09, 0x87, 0xea, 0x1e, 0x9d, 0x9d, 0x2a, 0x95, + 0xda, 0xe8, 0x23, 0xd7, 0x68, 0x50, 0x6b, 0xe5, 0x60, 0x86, 0xf5, 0x0b, 0x30, 0x12, 0x34, 0xa0, + 0x5a, 0xb7, 0x5b, 0x54, 0x7e, 0x58, 0x55, 0xf7, 0x31, 0x35, 0x97, 0xa1, 0xb4, 0x18, 0x29, 0xb9, + 0x01, 0xc7, 0x03, 0x48, 0xa9, 0xd1, 0xb0, 0xd7, 0x34, 0xda, 0x76, 0xb9, 0x63, 0x6c, 0x3f, 0x77, + 0x8c, 0x0d, 0x39, 0xe8, 0x0c, 0x5f, 0x73, 0x18, 0x81, 0x96, 0x56, 0x4a, 0xfd, 0x42, 0x0e, 0x4e, + 0xdf, 0xd2, 0x1b, 0xa6, 0x11, 0x8a, 0x46, 0xa3, 0x6e, 0xcb, 0xb6, 0x5c, 0x7a, 0x88, 0x46, 0x69, + 0x64, 0x28, 0xe4, 0xf7, 0x65, 0x28, 0x24, 0xbb, 0xa8, 0x77, 0xcf, 0x5d, 0x54, 0xd8, 0x55, 0x17, + 0xfd, 0x97, 0x0c, 0x8c, 0xfa, 0x8e, 0xff, 0xf2, 0x23, 0x6e, 0xc9, 0x2b, 0x1d, 0x8f, 0x10, 0x63, + 0x7e, 0xd0, 0x88, 0x27, 0x55, 0xe8, 0x9b, 0xbc, 0xd7, 0x32, 0x1d, 0xea, 0x6e, 0xc3, 0x89, 0xfb, + 0x9c, 0x38, 0x2e, 0x19, 0xa3, 0xbc, 0x48, 0xe2, 0xa4, 0x84, 0x83, 0xf1, 0x39, 0x1f, 0x7f, 0xfa, + 0x30, 0xee, 0xbf, 0x4c, 0xe7, 0xcf, 0xf9, 0xc4, 0x13, 0x89, 0xc8, 0xfb, 0xcc, 0x90, 0x94, 0x3c, + 0x02, 0xb9, 0xc5, 0xc5, 0x19, 0x31, 0x93, 0x62, 0x44, 0x00, 0xcf, 0x93, 0xdf, 0x2b, 0x32, 0xac, + 0xfa, 0x87, 0x59, 0x00, 0xa6, 0x0a, 0x7c, 0xb8, 0x1e, 0x88, 0x12, 0x8e, 0x43, 0xbf, 0x2f, 0x70, + 0xa1, 0x86, 0x81, 0xd7, 0x7e, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x34, 0x8a, 0xbe, 0x23, 0x39, + 0xbf, 0x07, 0xc0, 0x9d, 0x0d, 0x3a, 0x92, 0xfb, 0xee, 0xe3, 0xef, 0x81, 0x01, 0x31, 0xe3, 0xd9, + 0x91, 0xf3, 0xff, 0xba, 0x0f, 0xd4, 0x42, 0x7c, 0x6c, 0x6a, 0x2d, 0xec, 0x61, 0x21, 0xf6, 0xc5, + 0xcb, 0x7b, 0xe5, 0x48, 0xbc, 0xfb, 0x2c, 0xde, 0xcf, 0x08, 0xf1, 0xf2, 0x17, 0x3c, 0x87, 0x56, + 0xbc, 0xfb, 0x76, 0xf6, 0xad, 0xfe, 0x6e, 0x06, 0x08, 0x6b, 0xd6, 0x82, 0xee, 0xba, 0x6b, 0xb6, + 0x63, 0x70, 0xe7, 0xf4, 0x03, 0x11, 0xcc, 0xfe, 0xdd, 0x57, 0x7e, 0xb9, 0x1f, 0x8e, 0x47, 0x1c, + 0x7f, 0x0f, 0xf9, 0x64, 0x75, 0x29, 0x3a, 0x9a, 0xba, 0xbd, 0x7a, 0x79, 0x97, 0x7c, 0x21, 0xda, + 0x1b, 0x79, 0x80, 0x26, 0xdd, 0x84, 0x3e, 0x01, 0x43, 0xe2, 0x07, 0x5b, 0xa1, 0xfd, 0x9b, 0x2e, + 0x1c, 0xa5, 0x2e, 0x03, 0x68, 0x11, 0x34, 0x79, 0x1a, 0x06, 0xd8, 0x80, 0x59, 0xc1, 0xe0, 0x21, + 0x7d, 0xe1, 0x8b, 0x12, 0xc3, 0x07, 0xca, 0xeb, 0x49, 0x40, 0x29, 0xbd, 0x23, 0xea, 0xdf, 0xc6, + 0x3b, 0xa2, 0x8f, 0xc2, 0x60, 0xc9, 0xb2, 0x6c, 0x0f, 0x37, 0xe9, 0xae, 0xb8, 0x9a, 0xe8, 0x68, + 0x95, 0x3f, 0x82, 0x8f, 0xe3, 0x43, 0xfa, 0x54, 0xb3, 0x5c, 0x66, 0x48, 0xae, 0xfa, 0xaf, 0x62, + 0xa8, 0x23, 0xbc, 0xca, 0xf1, 0x7a, 0xc6, 0x11, 0xb0, 0xe4, 0xa3, 0x18, 0xec, 0xbc, 0xe1, 0x05, + 0xc7, 0x6e, 0xd9, 0x2e, 0x35, 0xb8, 0xa0, 0x06, 0xc3, 0x50, 0x03, 0x2d, 0x81, 0xc0, 0x77, 0x6c, + 0x91, 0x40, 0x1e, 0x91, 0x22, 0x64, 0x19, 0x4e, 0xf8, 0x17, 0xc5, 0xc1, 0x8b, 0xc1, 0x4a, 0xd9, + 0x55, 0x86, 0xf0, 0x55, 0x12, 0x89, 0x2b, 0x43, 0xa5, 0x3c, 0x7e, 0xde, 0xbf, 0x16, 0xf1, 0x9f, + 0x1c, 0xd6, 0x4c, 0x43, 0xee, 0xea, 0x54, 0x7e, 0xe4, 0x5b, 0x60, 0x70, 0x56, 0xbf, 0x57, 0x6e, + 0x8b, 0xb3, 0x97, 0xe1, 0xed, 0xdf, 0xbe, 0x34, 0xf5, 0x7b, 0x35, 0x43, 0x94, 0x8b, 0xd9, 0x14, + 0x32, 0x4b, 0x52, 0x83, 0x53, 0x0b, 0x8e, 0xdd, 0xb4, 0x3d, 0x6a, 0xc4, 0x1e, 0xdf, 0x1d, 0x0b, + 0x5f, 0xeb, 0xb6, 0x04, 0x45, 0xad, 0xcb, 0x2b, 0xbc, 0x0e, 0x6c, 0x48, 0x13, 0x8e, 0x95, 0x5c, + 0xb7, 0xdd, 0xa4, 0xe1, 0x0d, 0xd5, 0xe8, 0x96, 0x9f, 0xf1, 0x6e, 0xe1, 0xb5, 0xfc, 0xa0, 0x8e, + 0x45, 0xf9, 0x05, 0x55, 0xcd, 0x33, 0xe5, 0x1a, 0xf1, 0x5b, 0xe2, 0xbc, 0x5f, 0xcd, 0xf7, 0x8f, + 0x8c, 0x1e, 0xd3, 0x4e, 0x27, 0x1b, 0xb3, 0x68, 0x7a, 0x0d, 0xaa, 0x7e, 0x29, 0x03, 0x10, 0x0a, + 0x98, 0x3c, 0x11, 0x8d, 0x50, 0x94, 0x09, 0x2f, 0x3a, 0x44, 0xf4, 0x82, 0x48, 0x48, 0x22, 0x72, + 0x16, 0xf2, 0x18, 0xe1, 0x22, 0x1b, 0x1e, 0xac, 0xde, 0x31, 0x2d, 0x43, 0x43, 0x28, 0xc3, 0x4a, + 0x4f, 0xd1, 0x11, 0x8b, 0x97, 0xfa, 0xdc, 0x2a, 0x2c, 0xc3, 0xb1, 0x6a, 0x7b, 0xc9, 0xaf, 0x5b, + 0x7a, 0x57, 0x87, 0x81, 0x36, 0xdc, 0xf6, 0x52, 0xf0, 0x18, 0x35, 0x12, 0xc6, 0x24, 0x5a, 0x44, + 0xfd, 0xf9, 0x4c, 0x6c, 0x16, 0x3c, 0xc0, 0x45, 0xef, 0x5d, 0x49, 0x3f, 0x8d, 0xe4, 0xb4, 0xa4, + 0xfe, 0x68, 0x16, 0x06, 0x17, 0x6c, 0xc7, 0x13, 0x21, 0x43, 0x0e, 0xf7, 0x2a, 0x24, 0xed, 0x95, + 0xf2, 0x3b, 0xd8, 0x2b, 0x9d, 0x85, 0xbc, 0xe4, 0xa2, 0xcc, 0xef, 0x45, 0x0c, 0xc3, 0xd1, 0x10, + 0xaa, 0x7e, 0x6b, 0x16, 0xe0, 0x03, 0x4f, 0x3e, 0x79, 0x1f, 0x0b, 0x48, 0xfd, 0xe1, 0x0c, 0x1c, + 0x13, 0x17, 0x75, 0x52, 0xac, 0xaf, 0x3e, 0xff, 0x8a, 0x55, 0x1e, 0x97, 0x1c, 0xa4, 0xf9, 0x38, + 0xb6, 0x04, 0x4c, 0xde, 0x33, 0x3d, 0xbc, 0xab, 0x90, 0x82, 0x7d, 0x51, 0x01, 0x93, 0x97, 0x00, + 0x9f, 0x8e, 0x3c, 0xe1, 0x5f, 0x41, 0xe6, 0xc2, 0x75, 0x8f, 0x15, 0x98, 0x4c, 0xbd, 0x86, 0x54, + 0x7f, 0x29, 0x0f, 0xf9, 0xc9, 0x7b, 0xb4, 0x7e, 0xc8, 0xbb, 0x46, 0x3a, 0xd8, 0xcc, 0xef, 0xf1, + 0x60, 0x73, 0x37, 0x3e, 0x15, 0x2f, 0x87, 0xfd, 0x59, 0x88, 0x56, 0x1f, 0xeb, 0xf9, 0x78, 0xf5, + 0x7e, 0x4f, 0x1f, 0x3e, 0x97, 0x9c, 0x7f, 0x96, 0x83, 0x5c, 0x75, 0x62, 0xe1, 0x48, 0x6f, 0x0e, + 0x54, 0x6f, 0xba, 0xdf, 0x59, 0xab, 0xc1, 0x35, 0x54, 0x7f, 0xe8, 0x25, 0x1a, 0xbb, 0x71, 0xfa, + 0x7a, 0x0e, 0x46, 0xaa, 0x53, 0x8b, 0x0b, 0xd2, 0x49, 0xf0, 0x0d, 0xee, 0xc9, 0x87, 0x3e, 0x65, + 0xbc, 0x4b, 0xcf, 0x26, 0xec, 0x99, 0x9b, 0x15, 0xcb, 0x7b, 0xe6, 0xda, 0x2d, 0xbd, 0xd1, 0xa6, + 0x78, 0xf4, 0xc2, 0xfd, 0x7e, 0x5d, 0xf3, 0x4d, 0xfa, 0x05, 0x7c, 0xf8, 0xef, 0x33, 0x20, 0x2f, + 0x40, 0xee, 0xa6, 0xf0, 0xc8, 0xe8, 0xc4, 0xe7, 0xa9, 0xab, 0x9c, 0x0f, 0x9b, 0x04, 0x73, 0x6d, + 0xd3, 0x40, 0x0e, 0xac, 0x14, 0x2b, 0x7c, 0x5d, 0x2c, 0xc0, 0xdb, 0x2a, 0xbc, 0xe2, 0x17, 0xbe, + 0x5e, 0x29, 0x93, 0x2a, 0x0c, 0x2e, 0x50, 0xa7, 0x69, 0x62, 0x47, 0xf9, 0x73, 0x76, 0x77, 0x26, + 0x6c, 0xa7, 0x32, 0xd8, 0x0a, 0x0b, 0x21, 0x33, 0x99, 0x0b, 0x79, 0x1d, 0x80, 0xdb, 0x28, 0xdb, + 0x8c, 0x1f, 0x79, 0x0e, 0xed, 0x7e, 0x6e, 0x5a, 0xa6, 0xd8, 0x78, 0x12, 0x33, 0x72, 0x07, 0x46, + 0x67, 0x6d, 0xc3, 0x5c, 0x36, 0xb9, 0xeb, 0x25, 0x56, 0x50, 0xd8, 0xda, 0xe1, 0x89, 0x99, 0x92, + 0x4d, 0xa9, 0x5c, 0x5a, 0x35, 0x09, 0xc6, 0xea, 0x3f, 0xee, 0x85, 0x3c, 0xeb, 0xf6, 0xa3, 0xf1, + 0xbb, 0x97, 0xf1, 0x5b, 0x82, 0xd1, 0xdb, 0xb6, 0x73, 0xc7, 0xb4, 0x56, 0x02, 0xaf, 0x78, 0xb1, + 0x37, 0x45, 0x4f, 0x9e, 0x35, 0x8e, 0xab, 0x05, 0x0e, 0xf4, 0x5a, 0x82, 0x7c, 0x8b, 0x11, 0xfc, + 0x1c, 0x00, 0x7f, 0xeb, 0x8e, 0x34, 0xfd, 0x61, 0xb0, 0x0a, 0xfe, 0x12, 0x1e, 0x1d, 0xed, 0xe5, + 0x60, 0x15, 0x21, 0x31, 0xdb, 0x84, 0x73, 0x5f, 0x88, 0x01, 0xf4, 0xbb, 0xc7, 0x4d, 0x38, 0xfa, + 0x42, 0xc8, 0x46, 0x00, 0xf7, 0x8a, 0x58, 0x00, 0x90, 0xee, 0x97, 0x20, 0x26, 0x88, 0xc8, 0xe4, + 0x20, 0xc2, 0xc3, 0xa5, 0x5c, 0x2f, 0x69, 0x12, 0x0f, 0xf2, 0x4c, 0xec, 0x02, 0x9c, 0x44, 0xb8, + 0x75, 0xbc, 0xff, 0x0e, 0x1d, 0xa8, 0x86, 0xb6, 0x72, 0xa0, 0x52, 0x3f, 0x95, 0x85, 0x81, 0x6a, + 0x7b, 0xc9, 0x5d, 0x77, 0x3d, 0xda, 0x3c, 0xe4, 0x6a, 0xec, 0x6f, 0xaf, 0xf2, 0xa9, 0xdb, 0xab, + 0x47, 0x7c, 0xa1, 0x48, 0xe7, 0x8e, 0x81, 0x49, 0xe7, 0x8b, 0xe3, 0x1f, 0x64, 0x61, 0x94, 0x5f, + 0x9c, 0x95, 0x4d, 0xb7, 0xbe, 0x0f, 0xce, 0xfc, 0x07, 0x2f, 0x95, 0xbd, 0x5d, 0x36, 0x6f, 0xe3, + 0x89, 0x84, 0xfa, 0xf1, 0x2c, 0x0c, 0x96, 0xda, 0xde, 0x6a, 0xc9, 0x43, 0xdd, 0xba, 0x2f, 0xf7, + 0x27, 0xbf, 0x99, 0x81, 0x63, 0xac, 0x21, 0x8b, 0xf6, 0x1d, 0x6a, 0xed, 0xc3, 0xc1, 0xa3, 0x7c, + 0x80, 0x98, 0xdd, 0xe5, 0x01, 0xa2, 0x2f, 0xcb, 0xdc, 0xce, 0x64, 0x89, 0xc7, 0xe5, 0x9a, 0xdd, + 0xa0, 0x87, 0xfb, 0x33, 0xf6, 0xf1, 0xb8, 0xdc, 0x17, 0xc8, 0x3e, 0x5c, 0xcf, 0x7c, 0x73, 0x09, + 0x64, 0x1f, 0xce, 0x96, 0xbe, 0x39, 0x04, 0xf2, 0xe5, 0x0c, 0x0c, 0x8c, 0xdb, 0xde, 0x21, 0x1f, + 0xf8, 0xe2, 0x2b, 0x0e, 0xb7, 0x9a, 0xfb, 0x5f, 0x71, 0xb8, 0x75, 0x53, 0xfd, 0x81, 0x2c, 0x9c, + 0x10, 0xb1, 0xc1, 0xc5, 0xf9, 0xc3, 0xd1, 0x74, 0x2c, 0x06, 0x5b, 0x52, 0x34, 0x47, 0xf3, 0x90, + 0x10, 0xcd, 0x4f, 0xe5, 0xe0, 0x04, 0x86, 0x32, 0x65, 0xdb, 0xb2, 0x6f, 0x02, 0x5b, 0x84, 0xd4, + 0xa3, 0x97, 0xa0, 0xb3, 0x29, 0x97, 0xa0, 0x7f, 0xb6, 0x51, 0x7c, 0x66, 0xc5, 0xf4, 0x56, 0xdb, + 0x4b, 0x97, 0xeb, 0x76, 0xf3, 0xca, 0x8a, 0xa3, 0xdf, 0x35, 0xf9, 0xf5, 0x9f, 0xde, 0xb8, 0x12, + 0xa4, 0xd9, 0xd0, 0x5b, 0xa6, 0x48, 0xc0, 0x51, 0xc5, 0xbd, 0x0e, 0xe3, 0xea, 0x5f, 0x9f, 0xba, + 0x00, 0xaf, 0xda, 0xa6, 0x25, 0x7c, 0x0a, 0xb9, 0xa1, 0x5b, 0x65, 0xfb, 0xc3, 0x37, 0x6c, 0xd3, + 0xaa, 0xc5, 0x1d, 0x0b, 0x77, 0x5a, 0x5f, 0xc8, 0x5a, 0x93, 0xaa, 0x51, 0xff, 0x75, 0x06, 0x1e, + 0x88, 0x6a, 0xf1, 0x37, 0x83, 0xed, 0xf8, 0x83, 0x59, 0x38, 0x79, 0x1d, 0x85, 0x13, 0x38, 0x72, + 0x1c, 0xcd, 0x5b, 0x62, 0x70, 0xa6, 0xc8, 0xe6, 0xc8, 0xa2, 0xec, 0x2c, 0x9b, 0xa3, 0x49, 0x5d, + 0xc8, 0xe6, 0xb7, 0x32, 0x70, 0x7c, 0xbe, 0x52, 0x9e, 0xf8, 0x26, 0x19, 0x51, 0xc9, 0xef, 0x39, + 0xe4, 0x06, 0x67, 0xe2, 0x7b, 0x0e, 0xb9, 0xe9, 0xf9, 0xb9, 0x2c, 0x1c, 0xaf, 0x96, 0x66, 0x67, + 0xbe, 0x59, 0x66, 0xf0, 0x09, 0xd9, 0xeb, 0xd0, 0x3f, 0x04, 0x13, 0xb6, 0x80, 0xfc, 0x99, 0xb7, + 0xae, 0x76, 0xf6, 0x46, 0x4c, 0x0a, 0xe5, 0x90, 0x4f, 0xdd, 0xfb, 0x22, 0x14, 0xa6, 0xf9, 0x11, + 0xea, 0x43, 0xae, 0xf9, 0xff, 0xb4, 0x00, 0x83, 0x37, 0xda, 0x4b, 0x54, 0x38, 0xa7, 0xdc, 0xd7, + 0x27, 0xbf, 0x57, 0x61, 0x50, 0x88, 0x01, 0x6f, 0x4d, 0xa4, 0xe0, 0x79, 0x22, 0x18, 0x0a, 0x8f, + 0x4f, 0x24, 0x13, 0x91, 0xb3, 0x90, 0xbf, 0x45, 0x9d, 0x25, 0xf9, 0x5d, 0xe9, 0x5d, 0xea, 0x2c, + 0x69, 0x08, 0x25, 0x33, 0xa1, 0xcb, 0x7c, 0x69, 0xa1, 0x82, 0x89, 0x54, 0xc4, 0x85, 0x0d, 0x66, + 0x86, 0x09, 0xfc, 0xde, 0xf4, 0x96, 0xc9, 0x53, 0xb0, 0xc8, 0x6f, 0xda, 0xe3, 0x25, 0xc9, 0x1c, + 0x8c, 0xc9, 0x8e, 0x4f, 0x3c, 0x8b, 0x48, 0x7f, 0x0a, 0xbb, 0xb4, 0xfc, 0x21, 0xc9, 0xa2, 0xe4, + 0x65, 0x18, 0xf2, 0x81, 0xe8, 0xc2, 0x35, 0x10, 0x86, 0xae, 0x0f, 0x58, 0xc5, 0x52, 0x14, 0x45, + 0x0a, 0xc8, 0x0c, 0xf0, 0x1a, 0x02, 0x52, 0x18, 0xc4, 0x5c, 0xe2, 0x22, 0x05, 0xc8, 0xd3, 0xc8, + 0x00, 0x9f, 0x79, 0xa0, 0xb3, 0xca, 0x20, 0x3e, 0xba, 0x44, 0x97, 0x7c, 0x47, 0xc0, 0xf9, 0xd3, + 0xda, 0x08, 0x19, 0x99, 0x07, 0x08, 0x9d, 0x0a, 0x44, 0x00, 0x83, 0x1d, 0xbb, 0x3b, 0x48, 0x2c, + 0xe4, 0xeb, 0xc0, 0xe1, 0xdd, 0x5c, 0x07, 0xaa, 0xbf, 0x93, 0x85, 0xc1, 0x52, 0xab, 0x15, 0x0c, + 0x85, 0x27, 0xa0, 0x50, 0x6a, 0xb5, 0x6e, 0x6a, 0x15, 0x39, 0x94, 0xb9, 0xde, 0x6a, 0xd5, 0xda, + 0x8e, 0x29, 0xfb, 0x84, 0x72, 0x22, 0x32, 0x01, 0xc3, 0xa5, 0x56, 0x6b, 0xa1, 0xbd, 0xd4, 0x30, + 0xeb, 0x52, 0x66, 0x24, 0x9e, 0x3b, 0xae, 0xd5, 0xaa, 0xb5, 0x10, 0x13, 0x4f, 0x8f, 0x15, 0x2d, + 0x43, 0x3e, 0x8a, 0x61, 0x7f, 0x44, 0x62, 0x1e, 0x9e, 0xfa, 0x43, 0x0d, 0x82, 0x98, 0x87, 0x6d, + 0xbb, 0x1c, 0x10, 0xf1, 0x60, 0xef, 0x67, 0xfd, 0x90, 0xf9, 0xac, 0xa2, 0x44, 0x02, 0x9e, 0x90, + 0x25, 0x79, 0x2f, 0xf4, 0x95, 0x5a, 0x2d, 0xe9, 0xbe, 0x09, 0x9d, 0x8a, 0x58, 0xa9, 0x78, 0xee, + 0x33, 0x41, 0x76, 0xe6, 0x45, 0x18, 0x89, 0x56, 0xb6, 0xa3, 0x60, 0xf1, 0xdf, 0xc8, 0xe0, 0x07, + 0x1d, 0x72, 0x9f, 0xe6, 0xa7, 0x20, 0x57, 0x6a, 0xb5, 0xc4, 0x7c, 0x74, 0x3c, 0xa5, 0x3f, 0xe2, + 0x4f, 0xa0, 0x4b, 0xad, 0x96, 0xff, 0xe9, 0x87, 0xfc, 0x71, 0xc4, 0xae, 0x3e, 0xfd, 0xcb, 0xfc, + 0xd3, 0x0f, 0xf7, 0xc3, 0x05, 0xf5, 0x97, 0x72, 0x70, 0xac, 0xd4, 0x6a, 0x1d, 0x05, 0x99, 0xdf, + 0xaf, 0x87, 0xd6, 0x4f, 0x02, 0x48, 0xd3, 0x63, 0x5f, 0xf0, 0x74, 0x6b, 0x50, 0x9a, 0x1a, 0x95, + 0x8c, 0x26, 0x11, 0xf9, 0xea, 0xd7, 0xbf, 0x23, 0xf5, 0xfb, 0x78, 0x0e, 0xa7, 0xe2, 0xc3, 0x1e, + 0x34, 0xea, 0x9d, 0xd2, 0x6d, 0xa2, 0x0f, 0x0a, 0x3b, 0xea, 0x83, 0xdf, 0x88, 0x0c, 0x1e, 0x0c, + 0x5a, 0x7e, 0xd4, 0x0b, 0xbd, 0x7b, 0x32, 0x8b, 0x47, 0x64, 0x61, 0x8a, 0x48, 0x36, 0x7e, 0x22, + 0x25, 0x11, 0x57, 0xa9, 0xce, 0x50, 0x35, 0xd3, 0xd0, 0x62, 0xb4, 0x7e, 0x1f, 0xf6, 0xed, 0xa8, + 0x0f, 0x37, 0xb2, 0xf8, 0x76, 0x3a, 0x88, 0xcb, 0xb4, 0xf7, 0xdd, 0xc5, 0x15, 0x00, 0xee, 0x79, + 0x10, 0xb8, 0x35, 0x0f, 0xf3, 0x10, 0x2c, 0x3c, 0xbf, 0x92, 0x08, 0xc1, 0x12, 0x92, 0x04, 0x1e, + 0x52, 0xb9, 0x54, 0x0f, 0xa9, 0x4b, 0xd0, 0xaf, 0xe9, 0x6b, 0xaf, 0xb5, 0xa9, 0xb3, 0x2e, 0xcc, + 0x19, 0x1e, 0xf6, 0x50, 0x5f, 0xab, 0x7d, 0x8c, 0x01, 0xb5, 0x00, 0x4d, 0xd4, 0xe0, 0xf1, 0xbd, + 0xe4, 0x11, 0xc2, 0xcf, 0xc8, 0x83, 0x27, 0xf7, 0xbb, 0x51, 0x74, 0xf2, 0x3c, 0xe4, 0x4a, 0xb7, + 0xab, 0x42, 0xb2, 0x41, 0xd7, 0x96, 0x6e, 0x57, 0x85, 0xbc, 0x3a, 0x96, 0xbd, 0x5d, 0x55, 0x3f, + 0x9e, 0x05, 0x92, 0xa4, 0x24, 0xcf, 0xc0, 0x00, 0x42, 0x57, 0x98, 0xce, 0xc8, 0x89, 0x39, 0xd7, + 0xdc, 0x9a, 0x83, 0xd0, 0x88, 0x71, 0xe7, 0x93, 0x92, 0xe7, 0x30, 0xf5, 0xb1, 0x48, 0x0d, 0x17, + 0x49, 0xcc, 0xb9, 0xe6, 0xfa, 0xc9, 0x82, 0x63, 0x99, 0x8f, 0x05, 0x31, 0xda, 0x85, 0xb7, 0xab, + 0xd3, 0xb6, 0xeb, 0x09, 0x51, 0x73, 0xbb, 0x70, 0xcd, 0xc5, 0x8c, 0xb0, 0x11, 0xbb, 0x90, 0x93, + 0x61, 0x56, 0xab, 0xdb, 0x55, 0xfe, 0x4c, 0xc5, 0xd0, 0xec, 0x86, 0x6f, 0x50, 0xf2, 0xac, 0x56, + 0x6b, 0x6e, 0x8d, 0x3f, 0x71, 0x31, 0x30, 0xe7, 0x72, 0x24, 0xab, 0x55, 0xa4, 0x94, 0xfa, 0xe9, + 0x7e, 0x18, 0x2d, 0xeb, 0x9e, 0xbe, 0xa4, 0xbb, 0x54, 0xda, 0x4d, 0x1f, 0xf3, 0x61, 0xfe, 0xe7, + 0x48, 0x72, 0x30, 0x96, 0x52, 0xbe, 0x26, 0x5e, 0x80, 0xbc, 0x10, 0xf2, 0x0d, 0x72, 0x8e, 0xca, + 0x49, 0xcc, 0x96, 0x6a, 0x2d, 0x01, 0xd6, 0x12, 0x84, 0xe4, 0x71, 0x18, 0xf4, 0x61, 0x6c, 0x03, + 0x90, 0x0b, 0x75, 0xc6, 0x58, 0x62, 0xf6, 0xbf, 0x26, 0xa3, 0xc9, 0x73, 0x30, 0xe4, 0xff, 0x94, + 0x4c, 0x6b, 0x9e, 0x91, 0x6d, 0x29, 0xb1, 0x7b, 0x92, 0x49, 0xe5, 0xa2, 0x38, 0xbf, 0xf5, 0x46, + 0x8a, 0xc6, 0x92, 0x9e, 0x45, 0x48, 0xc9, 0xc7, 0x60, 0xc4, 0xff, 0x2d, 0x36, 0x0c, 0x3c, 0x3f, + 0xdc, 0xe3, 0x41, 0x4a, 0xe7, 0x98, 0x58, 0x2f, 0x47, 0xc9, 0xf9, 0xd6, 0xe1, 0x41, 0x3f, 0x8f, + 0x97, 0xb1, 0x94, 0xdc, 0x39, 0xc4, 0x2a, 0x20, 0x15, 0x18, 0xf3, 0x21, 0xa1, 0x86, 0xf6, 0x85, + 0x3b, 0x46, 0x63, 0xa9, 0x96, 0xaa, 0xa4, 0xc9, 0x52, 0xa4, 0x01, 0x67, 0x23, 0x40, 0xc3, 0x5d, + 0x35, 0x97, 0x3d, 0xb1, 0xdd, 0x13, 0x31, 0x88, 0x45, 0xe2, 0xc6, 0x80, 0x2b, 0xa7, 0xf1, 0x33, + 0xb0, 0x46, 0xb3, 0x43, 0x75, 0xe5, 0x46, 0xaa, 0x70, 0xc2, 0xc7, 0x5f, 0x9f, 0x58, 0x58, 0x70, + 0xec, 0x37, 0x68, 0xdd, 0xab, 0x94, 0xc5, 0x76, 0x19, 0x63, 0xd3, 0x19, 0x4b, 0xb5, 0x95, 0x7a, + 0x8b, 0x29, 0x05, 0xc3, 0x45, 0x99, 0xa7, 0x16, 0x26, 0xb7, 0xe0, 0xa4, 0x04, 0x97, 0xd2, 0x43, + 0x43, 0xb8, 0x9f, 0x17, 0x5c, 0xd3, 0x33, 0x44, 0xa7, 0x17, 0x27, 0x2f, 0xc2, 0xb0, 0x8f, 0xe0, + 0xb7, 0x88, 0x83, 0x78, 0x8b, 0x88, 0x43, 0xd2, 0x58, 0xaa, 0xc5, 0x5f, 0x53, 0x46, 0x89, 0x65, + 0x8d, 0xc2, 0x8c, 0xfa, 0x43, 0x11, 0x8d, 0xf2, 0xd6, 0x5b, 0xa9, 0xca, 0x88, 0x59, 0xf6, 0x5f, + 0x0e, 0x35, 0x6a, 0xde, 0x31, 0x57, 0x4c, 0xbe, 0x93, 0xf6, 0x1f, 0x50, 0x2e, 0xd5, 0x6c, 0x04, + 0xa6, 0xe9, 0x07, 0x27, 0x3f, 0x53, 0x82, 0xe3, 0x29, 0x3a, 0xb6, 0xa3, 0x1d, 0xe3, 0xa7, 0xb2, + 0x61, 0x23, 0x0e, 0xf9, 0xb6, 0x71, 0x1c, 0xfa, 0xfd, 0x2f, 0x11, 0xc6, 0x83, 0xd2, 0x69, 0x68, + 0xc6, 0x79, 0xf8, 0xf8, 0x88, 0x38, 0x0e, 0xf9, 0x56, 0x72, 0x3f, 0xc4, 0xf1, 0x56, 0x26, 0x14, + 0xc7, 0x21, 0xdf, 0x5e, 0xfe, 0x56, 0x2e, 0x9c, 0x93, 0x8e, 0xf6, 0x98, 0xfb, 0x65, 0x26, 0x87, + 0x7e, 0xb0, 0x85, 0x1d, 0x3c, 0x64, 0x94, 0x55, 0xb3, 0x6f, 0x97, 0xaa, 0xf9, 0x7b, 0xc9, 0xfe, + 0xe4, 0xa6, 0xe7, 0xa1, 0xec, 0xcf, 0x7d, 0x18, 0xac, 0xe4, 0x6a, 0xb8, 0x8e, 0x71, 0x1b, 0xbd, + 0x57, 0x0a, 0xf1, 0xb7, 0x24, 0x4c, 0xf4, 0x28, 0x09, 0xf9, 0x10, 0x9c, 0x8e, 0x00, 0x16, 0x74, + 0x47, 0x6f, 0x52, 0x2f, 0xcc, 0x38, 0x88, 0x41, 0x9b, 0xfc, 0xd2, 0xb5, 0x56, 0x80, 0x96, 0xb3, + 0x18, 0x76, 0xe0, 0x20, 0x29, 0x47, 0xdf, 0x0e, 0x9c, 0xa4, 0x3f, 0x9f, 0x0b, 0x4d, 0x95, 0x68, + 0xf0, 0x55, 0x8d, 0xba, 0xed, 0x86, 0x77, 0xff, 0x76, 0xf0, 0xee, 0x52, 0x5b, 0x4c, 0xc3, 0xb1, + 0xd2, 0xf2, 0x32, 0xad, 0x7b, 0x7e, 0x4c, 0x69, 0x57, 0x84, 0xdb, 0xe3, 0x5b, 0x07, 0x81, 0x12, + 0x31, 0x82, 0x23, 0xb9, 0xf1, 0x63, 0xc5, 0xd4, 0xdf, 0xcf, 0x83, 0x12, 0x98, 0xee, 0xc1, 0x43, + 0xad, 0x03, 0x5c, 0x26, 0xdf, 0x11, 0xbd, 0x62, 0xc2, 0x58, 0x28, 0x8c, 0x6a, 0xbb, 0xd9, 0xd4, + 0x71, 0xe8, 0xb1, 0xad, 0x41, 0x31, 0xce, 0x2c, 0x24, 0xe4, 0xbb, 0x81, 0x33, 0x62, 0x37, 0x40, + 0xc2, 0x87, 0x70, 0x35, 0x97, 0xb3, 0xd0, 0x92, 0x5c, 0xc9, 0x67, 0x32, 0x70, 0xc2, 0xef, 0x94, + 0xf9, 0x25, 0x66, 0x16, 0x4f, 0xd8, 0x6d, 0xcb, 0xf3, 0x77, 0x22, 0xcf, 0x77, 0xae, 0x8e, 0x77, + 0xd2, 0xe5, 0xb4, 0xc2, 0xbc, 0x25, 0x41, 0x60, 0x89, 0x40, 0x21, 0x6c, 0xa4, 0xa9, 0xd5, 0x91, + 0x48, 0x4b, 0xad, 0xf7, 0xcc, 0x75, 0x78, 0xa0, 0x23, 0xcb, 0xad, 0xcc, 0xd0, 0x5e, 0xd9, 0x0c, + 0xfd, 0xb7, 0x99, 0x70, 0x22, 0x8a, 0x09, 0x89, 0x5c, 0x06, 0x08, 0x41, 0x62, 0x63, 0x3a, 0xb2, + 0xb9, 0x51, 0x84, 0x50, 0x68, 0x9a, 0x44, 0x41, 0xe6, 0xa1, 0x20, 0xc4, 0xc2, 0xb3, 0xfb, 0xbe, + 0x67, 0x8b, 0x5e, 0xb8, 0x2c, 0xcb, 0x01, 0x37, 0x9d, 0xe2, 0x9b, 0x05, 0x9b, 0x33, 0xcf, 0xc1, + 0xe0, 0x6e, 0xbf, 0xeb, 0x33, 0x39, 0x20, 0xf2, 0x2e, 0xf2, 0x00, 0x4d, 0xec, 0x43, 0x3c, 0x85, + 0x5d, 0x84, 0x7e, 0xf6, 0x09, 0x98, 0xef, 0x42, 0x8a, 0x6f, 0xdb, 0x16, 0x30, 0x2d, 0xc0, 0x86, + 0xc1, 0xa5, 0xfa, 0xd2, 0x83, 0x4b, 0xa9, 0xdf, 0x97, 0x83, 0x53, 0x72, 0x87, 0x94, 0x29, 0x86, + 0xcc, 0x3f, 0xea, 0x94, 0xb7, 0xb1, 0x53, 0x54, 0x28, 0xf0, 0xcd, 0x83, 0xc8, 0x5d, 0xc0, 0x0f, + 0x76, 0x10, 0xa2, 0x09, 0x8c, 0xfa, 0x1f, 0xb3, 0x30, 0xbc, 0x60, 0xbb, 0xde, 0x8a, 0x43, 0xdd, + 0x05, 0xdd, 0x71, 0xef, 0xe3, 0xee, 0x78, 0x1f, 0x0c, 0x63, 0x78, 0xa0, 0x26, 0xb5, 0x78, 0x08, + 0x9d, 0x5e, 0x29, 0xd9, 0x88, 0x8f, 0x10, 0x79, 0xa5, 0x22, 0x84, 0x4c, 0xfb, 0xb9, 0xe5, 0x27, + 0x05, 0x6d, 0xe2, 0x66, 0x1f, 0x87, 0xab, 0x3f, 0x9e, 0x83, 0x21, 0x5f, 0xca, 0xe3, 0xe6, 0x61, + 0xbd, 0xa9, 0x39, 0x58, 0x21, 0x5f, 0x01, 0x58, 0xb0, 0x1d, 0x4f, 0x6f, 0xcc, 0x85, 0x9a, 0x8f, + 0x47, 0x9c, 0x2d, 0x84, 0xf2, 0x32, 0x12, 0x09, 0xae, 0x5f, 0xa1, 0x59, 0xcd, 0x27, 0x26, 0xbe, + 0x7e, 0x05, 0x50, 0x4d, 0xa2, 0x50, 0x7f, 0x2d, 0x0b, 0xc7, 0xfc, 0x4e, 0x9a, 0xbc, 0x47, 0xeb, + 0xed, 0xfb, 0x79, 0x6e, 0x8a, 0x4a, 0xbb, 0x77, 0x4b, 0x69, 0xab, 0xff, 0x43, 0x9a, 0x48, 0x26, + 0x1a, 0xf6, 0xd1, 0x44, 0xf2, 0x17, 0xa1, 0xe3, 0xea, 0xb7, 0xe7, 0xe0, 0x84, 0x2f, 0xf5, 0xa9, + 0xb6, 0x85, 0x87, 0x03, 0x13, 0x7a, 0xa3, 0x71, 0x3f, 0xef, 0xc6, 0x07, 0x7d, 0x41, 0xcc, 0x8b, + 0x78, 0x7b, 0x22, 0xc7, 0xdf, 0xb2, 0x00, 0xd7, 0x6c, 0xd3, 0xd0, 0x64, 0x22, 0xf2, 0x32, 0x0c, + 0xf9, 0x3f, 0x4b, 0xce, 0x8a, 0xbf, 0x05, 0xc7, 0xa3, 0xfe, 0xa0, 0x90, 0xee, 0x44, 0xc2, 0x0a, + 0x44, 0x0a, 0xa8, 0xff, 0xb9, 0x00, 0x67, 0x6e, 0x9b, 0x96, 0x61, 0xaf, 0xb9, 0x7e, 0x8a, 0xc8, + 0x43, 0x7f, 0xd4, 0x75, 0xd0, 0xa9, 0x21, 0x5f, 0x83, 0x93, 0x71, 0x91, 0x3a, 0x41, 0xe0, 0x6e, + 0xd1, 0x3b, 0x6b, 0x9c, 0xa0, 0xe6, 0x27, 0x8b, 0x14, 0xf7, 0x65, 0x5a, 0x7a, 0xc9, 0x78, 0xb6, + 0xc9, 0xbe, 0xed, 0x64, 0x9b, 0x7c, 0x0c, 0x0a, 0x65, 0xbb, 0xa9, 0x9b, 0x7e, 0x80, 0x19, 0x1c, + 0xc5, 0x41, 0xbd, 0x88, 0xd1, 0x04, 0x05, 0xe3, 0x2f, 0x2a, 0xc6, 0x2e, 0x1b, 0x08, 0xf9, 0xfb, + 0x05, 0x98, 0x95, 0xa6, 0xc9, 0x44, 0xc4, 0x86, 0x61, 0x51, 0x9d, 0xb8, 0xdd, 0x02, 0xdc, 0x3c, + 0x3d, 0xed, 0xcb, 0xa8, 0xb3, 0x5a, 0x5d, 0x8e, 0x94, 0xe3, 0xdb, 0x28, 0x9e, 0x04, 0x53, 0x7c, + 0x0c, 0xbf, 0xe7, 0xd2, 0xa2, 0xfc, 0x25, 0x21, 0xe0, 0x24, 0x33, 0x98, 0x14, 0x02, 0xce, 0x32, + 0x32, 0x11, 0x99, 0x84, 0x31, 0x0c, 0xaf, 0x1c, 0x6c, 0xa5, 0x98, 0x4a, 0x0c, 0xa1, 0x51, 0x89, + 0x97, 0x26, 0x3c, 0x22, 0x33, 0xfb, 0xb8, 0x5a, 0x5d, 0xa0, 0xb5, 0x64, 0x89, 0x33, 0xaf, 0x00, + 0x49, 0xb6, 0x79, 0x47, 0xd7, 0x26, 0xff, 0x5c, 0xda, 0xd7, 0x1d, 0x76, 0xc7, 0x97, 0xfd, 0x98, + 0xed, 0x22, 0xa9, 0xc3, 0x7a, 0xdf, 0xce, 0xd4, 0x61, 0x85, 0x7d, 0x4d, 0x1d, 0xa6, 0xfe, 0x5c, + 0x06, 0xc6, 0x12, 0x71, 0xc6, 0xc9, 0x53, 0x00, 0x1c, 0x22, 0xc5, 0x73, 0xc4, 0x00, 0x29, 0x61, + 0xec, 0x71, 0xb1, 0x06, 0x86, 0x64, 0xe4, 0x0a, 0xf4, 0xf3, 0x5f, 0x22, 0x06, 0x53, 0xb2, 0x48, + 0xbb, 0x6d, 0x1a, 0x5a, 0x40, 0x14, 0xd6, 0x82, 0x17, 0x87, 0xb9, 0xd4, 0x22, 0xde, 0x7a, 0x2b, + 0xa8, 0x85, 0x91, 0xa9, 0x9f, 0xce, 0xc2, 0x50, 0xd0, 0xe0, 0x92, 0x71, 0x50, 0x3a, 0x57, 0x10, + 0x21, 0xdb, 0x73, 0x5b, 0x85, 0x6c, 0x8f, 0x4d, 0xaa, 0x22, 0x46, 0xfb, 0xfe, 0xbd, 0x7b, 0xfa, + 0x6c, 0x16, 0x8e, 0x05, 0xb5, 0x1e, 0xe0, 0x1d, 0xd5, 0x3b, 0x48, 0x24, 0x9f, 0xc9, 0x80, 0x32, + 0x6e, 0x36, 0x1a, 0xa6, 0xb5, 0x52, 0xb1, 0x96, 0x6d, 0xa7, 0x89, 0xb3, 0xde, 0xc1, 0x9d, 0xd3, + 0xaa, 0xdf, 0x95, 0x81, 0x31, 0xd1, 0xa0, 0x09, 0xdd, 0x31, 0x0e, 0xee, 0x10, 0x2c, 0xde, 0x92, + 0x83, 0xd3, 0x17, 0xf5, 0x8b, 0x59, 0x80, 0x19, 0xbb, 0x7e, 0xe7, 0x90, 0x3f, 0x9b, 0x7a, 0x01, + 0x0a, 0x3c, 0x10, 0x96, 0xd0, 0xd8, 0x31, 0xf1, 0x3c, 0x88, 0x7d, 0x1a, 0x47, 0x8c, 0x8f, 0x8a, + 0xf9, 0xb8, 0xc0, 0x03, 0x69, 0x29, 0x19, 0x4d, 0x14, 0x61, 0x95, 0x32, 0x3a, 0xb1, 0x60, 0x04, + 0x95, 0x32, 0x58, 0xb4, 0xd2, 0xcd, 0x8d, 0x62, 0xbe, 0x61, 0xd7, 0xef, 0x68, 0x48, 0xaf, 0xfe, + 0x79, 0x86, 0xcb, 0xee, 0x90, 0x3f, 0xfe, 0xf4, 0x3f, 0x3f, 0xbf, 0xc3, 0xcf, 0xff, 0xee, 0x0c, + 0x9c, 0xd0, 0x68, 0xdd, 0xbe, 0x4b, 0x9d, 0xf5, 0x09, 0xdb, 0xa0, 0xd7, 0xa9, 0x45, 0x9d, 0x83, + 0x1a, 0x51, 0xff, 0x08, 0x73, 0x5c, 0x84, 0x8d, 0xb9, 0xe9, 0x52, 0xe3, 0xf0, 0xe4, 0x1f, 0x51, + 0x7f, 0xb1, 0x0f, 0x94, 0x54, 0xd3, 0xf6, 0xd0, 0x9a, 0x73, 0x1d, 0xf7, 0x2b, 0xf9, 0xfd, 0xda, + 0xaf, 0xf4, 0xee, 0x6c, 0xbf, 0x52, 0xd8, 0xe9, 0x7e, 0xa5, 0x6f, 0x3b, 0xfb, 0x95, 0x66, 0x7c, + 0xbf, 0xd2, 0x8f, 0xfb, 0x95, 0xa7, 0xba, 0xee, 0x57, 0x26, 0x2d, 0x63, 0x97, 0xbb, 0x95, 0x43, + 0x9b, 0x1b, 0x77, 0x37, 0xdb, 0xac, 0x8b, 0x6c, 0x52, 0xac, 0xdb, 0x8e, 0x41, 0x0d, 0xb1, 0xbb, + 0xc2, 0xa3, 0x7d, 0x47, 0xc0, 0xb4, 0x00, 0x9b, 0x48, 0x34, 0x3c, 0xbc, 0x9d, 0x44, 0xc3, 0xfb, + 0xb0, 0xff, 0xfa, 0x54, 0x16, 0xc6, 0x26, 0xa8, 0xe3, 0xf1, 0x48, 0x9b, 0xfb, 0xe1, 0xb9, 0x56, + 0x82, 0x63, 0x12, 0x43, 0xb4, 0xc8, 0xb3, 0xa1, 0x37, 0x5e, 0x9d, 0x3a, 0x5e, 0xdc, 0x99, 0x2f, + 0x4e, 0xcf, 0xaa, 0xf7, 0x93, 0x7d, 0x89, 0xb1, 0x1b, 0x54, 0xef, 0xc3, 0xb9, 0x20, 0x4d, 0xf1, + 0x4b, 0x0b, 0xe8, 0xa5, 0xfc, 0x5d, 0xf9, 0x9d, 0xe7, 0xef, 0x52, 0x7f, 0x36, 0x03, 0x17, 0x34, + 0x6a, 0xd1, 0x35, 0x7d, 0xa9, 0x41, 0xa5, 0x66, 0x89, 0x95, 0x81, 0xcd, 0x1a, 0xa6, 0xdb, 0xd4, + 0xbd, 0xfa, 0xea, 0x9e, 0x64, 0x34, 0x05, 0x43, 0xf2, 0xfc, 0xb5, 0x83, 0xb9, 0x2d, 0x52, 0x4e, + 0xfd, 0xc5, 0x3c, 0xf4, 0x8d, 0xdb, 0xde, 0xab, 0xf6, 0x1e, 0x13, 0xca, 0x85, 0x53, 0x7e, 0x76, + 0x07, 0x07, 0x3a, 0xef, 0xc5, 0xca, 0xa5, 0x18, 0xfb, 0xe8, 0xe9, 0xb9, 0x64, 0x27, 0x72, 0x11, + 0xf8, 0x64, 0x3b, 0x4c, 0x25, 0xf7, 0x0c, 0x0c, 0x60, 0x90, 0x16, 0xe9, 0xc8, 0x15, 0xfd, 0xa8, + 0x3d, 0x06, 0x8c, 0xd7, 0x11, 0x92, 0x92, 0x0f, 0x45, 0x42, 0x83, 0x16, 0xf6, 0x9e, 0x7a, 0x4e, + 0x8e, 0x12, 0xfa, 0x14, 0xbf, 0xad, 0xc3, 0x36, 0x49, 0x69, 0x3a, 0xf0, 0xa8, 0x24, 0xd6, 0xa4, + 0x80, 0x70, 0x1f, 0xd3, 0xc2, 0x4d, 0xc0, 0xf0, 0xb8, 0xed, 0x49, 0x3e, 0xbb, 0x03, 0xe1, 0x6b, + 0x4d, 0x26, 0xf9, 0x74, 0x87, 0xdd, 0x68, 0x19, 0xf5, 0xeb, 0x79, 0x18, 0xf2, 0x7f, 0x1e, 0x90, + 0xee, 0x3c, 0x01, 0x85, 0x69, 0x5b, 0xca, 0x54, 0x80, 0x7e, 0xbe, 0xab, 0xb6, 0x1b, 0x73, 0x60, + 0x16, 0x44, 0x4c, 0xea, 0x73, 0xb6, 0x21, 0x7b, 0xa9, 0xa3, 0xd4, 0x2d, 0xdb, 0x48, 0xbc, 0xf2, + 0x0d, 0x08, 0xc9, 0x05, 0xc8, 0xa3, 0x83, 0xbf, 0x74, 0x5a, 0x1f, 0x73, 0xea, 0x47, 0xbc, 0xa4, + 0x95, 0x85, 0x9d, 0x6a, 0x65, 0xdf, 0x6e, 0xb5, 0xb2, 0x7f, 0x7f, 0xb5, 0xf2, 0x75, 0x18, 0xc2, + 0x9a, 0xfc, 0x44, 0x67, 0x5b, 0x2f, 0xac, 0x0f, 0x88, 0xb5, 0x6f, 0x98, 0xb7, 0x5b, 0xa4, 0x3b, + 0xc3, 0x25, 0x2f, 0xc2, 0x2a, 0xa6, 0xbb, 0xb0, 0x87, 0xed, 0xf4, 0xef, 0x65, 0xa0, 0xef, 0xa6, + 0x75, 0xc7, 0xb2, 0xd7, 0xf6, 0xa6, 0x71, 0x4f, 0xc1, 0xa0, 0x60, 0x23, 0xad, 0x2e, 0xf8, 0x70, + 0xbb, 0xcd, 0xc1, 0x35, 0xe4, 0xa4, 0xc9, 0x54, 0xe4, 0xc5, 0xa0, 0x10, 0xbe, 0xe1, 0xc9, 0x85, + 0xb9, 0x3e, 0xfc, 0x42, 0xf5, 0x68, 0x7a, 0x02, 0x99, 0x9c, 0x9c, 0x85, 0x7c, 0x99, 0x35, 0x55, + 0x0a, 0x76, 0xcb, 0x9a, 0xa2, 0x21, 0x54, 0xfd, 0x54, 0x1e, 0x46, 0x62, 0x07, 0x5f, 0x8f, 0xc1, + 0x80, 0x38, 0x78, 0x32, 0xfd, 0x7c, 0x09, 0xf8, 0xc6, 0x27, 0x00, 0x6a, 0xfd, 0xfc, 0xcf, 0x8a, + 0x41, 0xde, 0x0f, 0x7d, 0xb6, 0x8b, 0x8b, 0x22, 0x7e, 0xcb, 0x48, 0x38, 0x84, 0xe6, 0xab, 0xac, + 0xed, 0x7c, 0x70, 0x08, 0x12, 0x59, 0x23, 0x6d, 0x17, 0x3f, 0xed, 0x1a, 0x0c, 0xe8, 0xae, 0x4b, + 0xbd, 0x9a, 0xa7, 0xaf, 0xc8, 0x29, 0x14, 0x02, 0xa0, 0x3c, 0x3a, 0x10, 0xb8, 0xa8, 0xaf, 0x90, + 0x57, 0x60, 0xb8, 0xee, 0x50, 0x5c, 0x36, 0xf5, 0x06, 0x6b, 0xa5, 0x64, 0xd6, 0x46, 0x10, 0xf2, + 0x25, 0x49, 0x88, 0xa8, 0x18, 0xe4, 0x16, 0x0c, 0x8b, 0xcf, 0xe1, 0x0e, 0xf6, 0x38, 0xd0, 0x46, + 0xc2, 0x65, 0x8c, 0x8b, 0x84, 0xbb, 0xd8, 0x8b, 0x77, 0x16, 0x32, 0xb9, 0xcc, 0xd7, 0x90, 0x48, + 0xc9, 0x3c, 0x90, 0x35, 0xba, 0x54, 0xd3, 0xdb, 0xde, 0x2a, 0xab, 0x8b, 0x47, 0x00, 0x17, 0x99, + 0x03, 0xf1, 0x71, 0x42, 0x12, 0x2b, 0xbf, 0xd9, 0x58, 0xa3, 0x4b, 0xa5, 0x08, 0x92, 0xdc, 0x86, + 0x93, 0xc9, 0x22, 0xec, 0x93, 0xf9, 0x0d, 0xc0, 0x23, 0x9b, 0x1b, 0xc5, 0x62, 0x2a, 0x81, 0xc4, + 0xf6, 0x78, 0x82, 0x6d, 0xc5, 0x78, 0x35, 0xdf, 0xdf, 0x37, 0xda, 0xaf, 0x8d, 0xb0, 0xb2, 0xbe, + 0x09, 0x69, 0x1a, 0xea, 0x57, 0x32, 0xcc, 0x54, 0x64, 0x1f, 0x84, 0xa9, 0x93, 0x99, 0xae, 0x37, + 0x77, 0xa8, 0xeb, 0xcd, 0x30, 0xc9, 0x61, 0xc1, 0xed, 0x32, 0xbb, 0x6a, 0x02, 0x4b, 0x2e, 0x43, + 0xc1, 0x90, 0x4f, 0xcd, 0x4e, 0x45, 0x3b, 0xc1, 0xaf, 0x47, 0x13, 0x54, 0xe4, 0x22, 0xe4, 0xd9, + 0x92, 0x15, 0xdf, 0x32, 0xcb, 0xd6, 0x85, 0x86, 0x14, 0xea, 0xb7, 0x66, 0x61, 0x48, 0xfa, 0x9a, + 0xab, 0x7b, 0xfa, 0x9c, 0xe7, 0xb7, 0xd7, 0x4c, 0xdf, 0xb3, 0x05, 0xf7, 0x52, 0x7e, 0x93, 0xaf, + 0x05, 0xa2, 0xd8, 0xd6, 0xad, 0x93, 0x10, 0xcc, 0x33, 0xe2, 0x43, 0x0b, 0xdb, 0xdf, 0x3e, 0x32, + 0xfa, 0x57, 0xf3, 0xfd, 0xd9, 0xd1, 0xdc, 0xab, 0xf9, 0xfe, 0xfc, 0x68, 0x2f, 0x86, 0xcb, 0xc2, + 0x08, 0xd5, 0x7c, 0x6f, 0x6e, 0x2d, 0x9b, 0x2b, 0x87, 0xfc, 0x89, 0xc7, 0xfe, 0x86, 0x12, 0x8b, + 0xc9, 0xe6, 0x90, 0xbf, 0xf7, 0x78, 0x5b, 0x65, 0x73, 0x94, 0x14, 0x51, 0xc8, 0xe6, 0xf7, 0x33, + 0xa0, 0xa4, 0xca, 0xa6, 0x74, 0x40, 0xce, 0x0e, 0xfb, 0x97, 0x1a, 0xf1, 0x6b, 0x59, 0x18, 0xab, + 0x58, 0x1e, 0x5d, 0xe1, 0x3b, 0xc6, 0x43, 0x3e, 0x55, 0xdc, 0x80, 0x41, 0xe9, 0x63, 0x44, 0x9f, + 0x3f, 0x18, 0xec, 0xc7, 0x43, 0x54, 0x07, 0x4e, 0x72, 0xe9, 0x7d, 0xcc, 0xa6, 0x1e, 0x13, 0xf2, + 0x21, 0x9f, 0x73, 0x0e, 0x87, 0x90, 0x0f, 0xf9, 0xe4, 0xf5, 0x0e, 0x15, 0xf2, 0x7f, 0xcb, 0xc0, + 0xf1, 0x94, 0xca, 0xc9, 0x05, 0xe8, 0xab, 0xb6, 0x97, 0x30, 0x3a, 0x56, 0x26, 0x74, 0x0b, 0x76, + 0xdb, 0x4b, 0x18, 0x18, 0x4b, 0xf3, 0x91, 0x64, 0x11, 0xdf, 0xc0, 0xcf, 0x57, 0xca, 0x13, 0x42, + 0xaa, 0xaa, 0xf4, 0x9a, 0x9f, 0x81, 0xd3, 0xbe, 0x2c, 0x78, 0x27, 0x6f, 0x9b, 0x46, 0x3d, 0xf6, + 0x4e, 0x9e, 0x95, 0x21, 0x1f, 0x86, 0x81, 0xd2, 0x9b, 0x6d, 0x87, 0x22, 0x5f, 0x2e, 0xf1, 0x77, + 0x05, 0x7c, 0x7d, 0x44, 0x1a, 0x67, 0xfe, 0xe4, 0x9f, 0x51, 0xc4, 0x79, 0x87, 0x0c, 0xd5, 0x4f, + 0x67, 0xe0, 0x4c, 0xe7, 0xd6, 0x91, 0xf7, 0x42, 0x1f, 0xdb, 0x99, 0x97, 0xb4, 0x39, 0xf1, 0xe9, + 0x3c, 0x8d, 0xa8, 0xdd, 0xa0, 0x35, 0xdd, 0x91, 0x8d, 0x7d, 0x9f, 0x8c, 0xbc, 0x04, 0x83, 0x15, + 0xd7, 0x6d, 0x53, 0xa7, 0xfa, 0xd4, 0x4d, 0xad, 0x22, 0xf6, 0x84, 0xb8, 0xe7, 0x30, 0x11, 0x5c, + 0x73, 0x9f, 0x8a, 0xc5, 0xbf, 0x92, 0xe9, 0xd5, 0x4f, 0x64, 0xe0, 0x6c, 0xb7, 0xaf, 0x22, 0x4f, + 0x41, 0xff, 0x22, 0xb5, 0x74, 0xcb, 0xab, 0x94, 0x45, 0x93, 0x70, 0x8b, 0xe5, 0x21, 0x2c, 0xba, + 0x53, 0x08, 0x08, 0x59, 0x21, 0x7e, 0xae, 0x18, 0x38, 0x32, 0xf0, 0x33, 0x50, 0x84, 0xc5, 0x0a, + 0xf9, 0x84, 0xea, 0x1f, 0xd4, 0xa1, 0x77, 0xde, 0xa2, 0xf3, 0xcb, 0xe4, 0x49, 0x18, 0x60, 0xba, + 0x8f, 0x39, 0xfc, 0xc5, 0x40, 0x1b, 0x93, 0x07, 0x0c, 0x22, 0xa6, 0x7b, 0xb4, 0x90, 0x8a, 0x5c, + 0x93, 0x13, 0x87, 0x0b, 0x75, 0x20, 0x72, 0x19, 0x8e, 0x99, 0xee, 0xd1, 0xe4, 0x04, 0xe3, 0xd7, + 0xe4, 0x84, 0xcd, 0xa2, 0xb3, 0x23, 0xa5, 0x38, 0xc6, 0x2f, 0x25, 0xa6, 0x81, 0x99, 0xb4, 0xac, + 0xc6, 0x71, 0x9b, 0x20, 0x49, 0x31, 0xdd, 0xa3, 0xa5, 0x67, 0x43, 0x1e, 0x92, 0x7d, 0xa1, 0xe2, + 0x57, 0x99, 0x32, 0x6e, 0xba, 0x47, 0x8b, 0xd0, 0x92, 0x67, 0x61, 0x50, 0xfc, 0x7e, 0xd5, 0x36, + 0xad, 0x78, 0x20, 0x0c, 0x09, 0x35, 0xdd, 0xa3, 0xc9, 0x94, 0x52, 0xa5, 0x0b, 0x8e, 0x69, 0x79, + 0xe2, 0x79, 0x5d, 0xbc, 0x52, 0xc4, 0x49, 0x95, 0xe2, 0x6f, 0xf2, 0x12, 0x0c, 0x07, 0x11, 0x46, + 0xde, 0xa0, 0x75, 0x4f, 0x1c, 0xe9, 0x9c, 0x8c, 0x15, 0xe6, 0xc8, 0xe9, 0x1e, 0x2d, 0x4a, 0x4d, + 0x2e, 0x42, 0x41, 0xa3, 0xae, 0xf9, 0xa6, 0x7f, 0x09, 0x32, 0x22, 0x4d, 0x67, 0xe6, 0x9b, 0x4c, + 0x4a, 0x02, 0xcf, 0x7a, 0x27, 0xbc, 0x75, 0x11, 0x07, 0x30, 0x24, 0x56, 0xcb, 0xa4, 0x65, 0xb0, + 0xde, 0x91, 0xae, 0xdc, 0x5e, 0x09, 0xe3, 0xae, 0x88, 0x6c, 0x6d, 0x83, 0xf1, 0x07, 0xae, 0x32, + 0x76, 0xba, 0x47, 0x8b, 0xd1, 0x4b, 0x52, 0x2d, 0x9b, 0xee, 0x1d, 0x11, 0xea, 0x2e, 0x2e, 0x55, + 0x86, 0x92, 0xa4, 0xca, 0x7e, 0x4a, 0x55, 0xcf, 0x51, 0x6f, 0xcd, 0x76, 0xee, 0x88, 0xc0, 0x76, + 0xf1, 0xaa, 0x05, 0x56, 0xaa, 0x5a, 0x40, 0xe4, 0xaa, 0xd9, 0x22, 0x33, 0x92, 0x5e, 0xb5, 0xee, + 0xe9, 0x72, 0xd5, 0x7c, 0x7f, 0xe9, 0x77, 0xd2, 0x0c, 0xd5, 0xef, 0xf2, 0xa4, 0xb9, 0xc9, 0x0e, + 0x45, 0x9c, 0xd4, 0xa1, 0xf8, 0x9b, 0x55, 0x2a, 0x25, 0x46, 0x15, 0x59, 0x71, 0x83, 0x4a, 0x25, + 0x14, 0xab, 0x54, 0x4e, 0xa1, 0x7a, 0x4d, 0xce, 0x17, 0xaa, 0x8c, 0x45, 0x3b, 0x28, 0xc4, 0xb0, + 0x0e, 0x92, 0xf2, 0x8a, 0x16, 0x31, 0x17, 0xa1, 0x42, 0x90, 0x7c, 0x30, 0x68, 0xe1, 0xc4, 0xc2, + 0x74, 0x8f, 0x86, 0x59, 0x0a, 0x55, 0x9e, 0xe5, 0x52, 0x39, 0x8e, 0x14, 0x43, 0x3e, 0x05, 0x83, + 0x4d, 0xf7, 0x68, 0x3c, 0x03, 0xe6, 0x93, 0x52, 0x3e, 0x29, 0xe5, 0x44, 0x74, 0x8a, 0x08, 0x10, + 0x6c, 0x8a, 0x08, 0xb3, 0x4e, 0x4d, 0x25, 0x73, 0x2e, 0x29, 0x27, 0xa3, 0x2b, 0x6a, 0x1c, 0x3f, + 0xdd, 0xa3, 0x25, 0xf3, 0x34, 0x3d, 0x1b, 0x49, 0x43, 0xa4, 0x9c, 0x8a, 0x45, 0x9f, 0x09, 0x51, + 0x4c, 0x5c, 0x72, 0xc2, 0xa2, 0xf9, 0xd4, 0xc4, 0xe1, 0xca, 0xe9, 0xe8, 0x72, 0x9c, 0x42, 0x32, + 0xdd, 0xa3, 0xa5, 0xa6, 0x1c, 0x9f, 0x48, 0x24, 0x03, 0x52, 0x94, 0xe8, 0x8d, 0x6f, 0x0c, 0x3d, + 0xdd, 0xa3, 0x25, 0xd2, 0x07, 0x5d, 0x93, 0xb3, 0xf0, 0x28, 0x0f, 0x44, 0x3b, 0x31, 0xc4, 0xb0, + 0x4e, 0x94, 0xb2, 0xf5, 0x5c, 0x93, 0x33, 0xb3, 0x28, 0x67, 0x92, 0xa5, 0xc2, 0x99, 0x53, 0xca, + 0xe0, 0xa2, 0xa5, 0x27, 0x9b, 0x50, 0x1e, 0x14, 0xe9, 0xfe, 0x44, 0xf9, 0x34, 0x9a, 0xe9, 0x1e, + 0x2d, 0x3d, 0x51, 0x85, 0x96, 0x9e, 0xa5, 0x41, 0x39, 0xdb, 0x8d, 0x67, 0xd0, 0xba, 0xf4, 0x0c, + 0x0f, 0x7a, 0x97, 0x98, 0xf9, 0xca, 0xb9, 0x68, 0xe8, 0xcb, 0x8e, 0x84, 0xd3, 0x3d, 0x5a, 0x97, + 0xc8, 0xfb, 0x37, 0x3b, 0x04, 0xb0, 0x57, 0xce, 0x47, 0xb3, 0x7d, 0xa6, 0x12, 0x4d, 0xf7, 0x68, + 0x1d, 0xc2, 0xdf, 0xdf, 0xec, 0x10, 0xdf, 0x5c, 0x29, 0x76, 0x65, 0x1b, 0xc8, 0xa3, 0x43, 0x74, + 0xf4, 0xf9, 0xd4, 0xd0, 0xe0, 0xca, 0x43, 0x51, 0xd5, 0x4d, 0x21, 0x61, 0xaa, 0x9b, 0x16, 0x54, + 0x7c, 0x3e, 0x35, 0x96, 0xb5, 0xf2, 0x70, 0x17, 0x86, 0x41, 0x1b, 0x53, 0xa3, 0x60, 0xcf, 0xa7, + 0x06, 0x93, 0x56, 0xd4, 0x28, 0xc3, 0x14, 0x12, 0xc6, 0x30, 0x2d, 0x0c, 0xf5, 0x7c, 0x6a, 0xcc, + 0x61, 0xe5, 0x91, 0x2e, 0x0c, 0xc3, 0x16, 0xa6, 0x45, 0x2b, 0x7e, 0x36, 0x12, 0xf4, 0x57, 0x79, + 0x57, 0x74, 0xde, 0x90, 0x50, 0x6c, 0xde, 0x90, 0xc3, 0x03, 0x4f, 0x24, 0xc2, 0x1a, 0x2a, 0x8f, + 0x46, 0x87, 0x79, 0x0c, 0xcd, 0x86, 0x79, 0x3c, 0x10, 0xe2, 0x44, 0x22, 0xbc, 0x9b, 0x72, 0xa1, + 0x13, 0x13, 0x44, 0x47, 0x99, 0xf0, 0x80, 0x70, 0x95, 0x94, 0xf8, 0x62, 0xca, 0xbb, 0xa3, 0xde, + 0x8a, 0x09, 0x82, 0xe9, 0x1e, 0x2d, 0x25, 0x2a, 0x99, 0x96, 0x1e, 0x4c, 0x43, 0xb9, 0x18, 0x1d, + 0xb6, 0x69, 0x34, 0x6c, 0xd8, 0xa6, 0x06, 0xe2, 0x98, 0x49, 0x73, 0xa9, 0x56, 0x2e, 0x45, 0x0d, + 0xb3, 0x24, 0x05, 0x33, 0xcc, 0x52, 0x5c, 0xb1, 0xb5, 0xf4, 0xf0, 0x10, 0xca, 0x63, 0x5d, 0x5b, + 0x88, 0x34, 0x29, 0x2d, 0xe4, 0xd1, 0x12, 0x42, 0xdb, 0xe9, 0x66, 0xab, 0x61, 0xeb, 0x86, 0xf2, + 0x9e, 0x54, 0xdb, 0x89, 0x23, 0x25, 0xdb, 0x89, 0x03, 0xd8, 0x2a, 0x2f, 0x7b, 0xee, 0x2a, 0x8f, + 0x47, 0x57, 0x79, 0x19, 0xc7, 0x56, 0xf9, 0x88, 0x97, 0xef, 0x44, 0xc2, 0xcb, 0x55, 0x79, 0x22, + 0xaa, 0x00, 0x31, 0x34, 0x53, 0x80, 0xb8, 0x5f, 0xec, 0x47, 0x3b, 0xfb, 0x85, 0x2a, 0x97, 0x91, + 0xdb, 0x43, 0x3e, 0xb7, 0x4e, 0x74, 0xd3, 0x3d, 0x5a, 0x67, 0xdf, 0xd2, 0x4a, 0x8a, 0x9b, 0xa7, + 0x72, 0x25, 0xaa, 0x60, 0x09, 0x02, 0xa6, 0x60, 0x49, 0xe7, 0xd0, 0x4a, 0x8a, 0x9f, 0xa6, 0xf2, + 0xde, 0x8e, 0xac, 0x82, 0x6f, 0x4e, 0xf1, 0xee, 0xbc, 0x26, 0x3b, 0x5a, 0x2a, 0x4f, 0x46, 0x17, + 0xbb, 0x10, 0xc3, 0x16, 0x3b, 0xc9, 0x21, 0xf3, 0x9a, 0xec, 0x62, 0xa8, 0x5c, 0x4d, 0x96, 0x0a, + 0x97, 0x48, 0xc9, 0x15, 0x51, 0x4b, 0xf7, 0xcc, 0x53, 0x9e, 0x8a, 0x6a, 0x5d, 0x1a, 0x0d, 0xd3, + 0xba, 0x54, 0xaf, 0xbe, 0xa9, 0xa4, 0x83, 0x9d, 0x72, 0x2d, 0x7e, 0x96, 0x10, 0xc5, 0x33, 0xcb, + 0x27, 0xe1, 0x94, 0xf7, 0x4a, 0x3c, 0xd2, 0x93, 0xf2, 0x74, 0xec, 0x32, 0x23, 0x82, 0x65, 0xf6, + 0x6d, 0x2c, 0x32, 0xd4, 0x2b, 0xf1, 0xe0, 0x48, 0xca, 0x33, 0xe9, 0x1c, 0x02, 0x5d, 0x89, 0x07, + 0x53, 0x7a, 0x25, 0x1e, 0x4f, 0x48, 0x79, 0x36, 0x9d, 0x43, 0x20, 0xdd, 0x78, 0xfc, 0xa1, 0x27, + 0xa5, 0x08, 0xc7, 0xca, 0xfb, 0xa2, 0xa6, 0x63, 0x80, 0x60, 0xa6, 0x63, 0x18, 0x07, 0xf9, 0x49, + 0x29, 0x32, 0xb0, 0xf2, 0x5c, 0xa2, 0x48, 0xd0, 0x58, 0x29, 0x7e, 0xf0, 0x93, 0x52, 0x44, 0x5d, + 0xe5, 0xf9, 0x44, 0x91, 0xa0, 0x75, 0x52, 0xdc, 0x5d, 0xa3, 0xdb, 0xd3, 0x2b, 0xe5, 0x85, 0xe8, + 0x11, 0x47, 0x67, 0xca, 0xe9, 0x1e, 0xad, 0xdb, 0x13, 0xae, 0x8f, 0x76, 0x76, 0x57, 0x54, 0x5e, + 0x8c, 0x0e, 0xe1, 0x4e, 0x74, 0x6c, 0x08, 0x77, 0x74, 0x79, 0x7c, 0x29, 0xf6, 0x0c, 0x5b, 0x79, + 0x29, 0x3a, 0xc5, 0x45, 0x90, 0x6c, 0x8a, 0x8b, 0x3f, 0xda, 0x8e, 0xbc, 0x2f, 0x56, 0xde, 0x1f, + 0x9d, 0xe2, 0x64, 0x1c, 0x9b, 0xe2, 0x22, 0x6f, 0x91, 0x27, 0x12, 0xcf, 0x5e, 0x95, 0x97, 0xa3, + 0x53, 0x5c, 0x0c, 0xcd, 0xa6, 0xb8, 0xf8, 0x43, 0xd9, 0x97, 0x62, 0xaf, 0x3f, 0x95, 0x57, 0xd2, + 0xdb, 0x8f, 0x48, 0xb9, 0xfd, 0xfc, 0xad, 0xa8, 0x96, 0xfe, 0x8c, 0x51, 0x29, 0x45, 0xc7, 0x6f, + 0x1a, 0x0d, 0x1b, 0xbf, 0xa9, 0x4f, 0x20, 0xe3, 0x1b, 0x07, 0xa1, 0x55, 0xe3, 0x5d, 0x36, 0x0e, + 0xa1, 0x29, 0x92, 0x02, 0x8e, 0xec, 0x91, 0xf9, 0x46, 0x68, 0xa2, 0xc3, 0x1e, 0xd9, 0xdf, 0x06, + 0xc5, 0xe8, 0xd9, 0xec, 0x9a, 0xf0, 0x9e, 0x53, 0xca, 0xd1, 0xd9, 0x35, 0x41, 0xc0, 0x66, 0xd7, + 0xa4, 0xcf, 0xdd, 0x14, 0x8c, 0x0a, 0x2d, 0xe2, 0x4e, 0x81, 0xa6, 0xb5, 0xa2, 0x4c, 0xc6, 0x5e, + 0x11, 0xc5, 0xf0, 0x6c, 0x76, 0x8a, 0xc3, 0x70, 0xbd, 0xe6, 0xb0, 0x89, 0x86, 0xd9, 0x5a, 0xb2, + 0x75, 0xc7, 0xa8, 0x52, 0xcb, 0x50, 0xa6, 0x62, 0xeb, 0x75, 0x0a, 0x0d, 0xae, 0xd7, 0x29, 0x70, + 0x8c, 0x6e, 0x14, 0x83, 0x6b, 0xb4, 0x4e, 0xcd, 0xbb, 0x54, 0xb9, 0x8e, 0x6c, 0x8b, 0x9d, 0xd8, + 0x0a, 0xb2, 0xe9, 0x1e, 0xad, 0x13, 0x07, 0x66, 0xab, 0xcf, 0xae, 0x57, 0x5f, 0x9b, 0x09, 0x5e, + 0xce, 0x2e, 0x38, 0xb4, 0xa5, 0x3b, 0x54, 0x99, 0x8e, 0xda, 0xea, 0xa9, 0x44, 0xcc, 0x56, 0x4f, + 0x45, 0x24, 0xd9, 0xfa, 0x63, 0xa1, 0xd2, 0x8d, 0x6d, 0x38, 0x22, 0xd2, 0x4b, 0xb3, 0xd9, 0x29, + 0x8a, 0x60, 0x02, 0x9a, 0xb1, 0xad, 0x15, 0x3c, 0xa9, 0x78, 0x35, 0x3a, 0x3b, 0x75, 0xa6, 0x64, + 0xb3, 0x53, 0x67, 0x2c, 0x53, 0xf5, 0x28, 0x96, 0x8f, 0xc1, 0x1b, 0x51, 0x55, 0x4f, 0x21, 0x61, + 0xaa, 0x9e, 0x02, 0x4e, 0x32, 0xd4, 0xa8, 0x4b, 0x3d, 0x65, 0xa6, 0x1b, 0x43, 0x24, 0x49, 0x32, + 0x44, 0x70, 0x92, 0xe1, 0x14, 0xf5, 0xea, 0xab, 0xca, 0x6c, 0x37, 0x86, 0x48, 0x92, 0x64, 0x88, + 0x60, 0xb6, 0xd9, 0x8c, 0x82, 0xc7, 0xdb, 0x8d, 0x3b, 0x7e, 0x9f, 0xcd, 0x45, 0x37, 0x9b, 0x1d, + 0x09, 0xd9, 0x66, 0xb3, 0x23, 0x92, 0x7c, 0x62, 0xdb, 0xde, 0x9d, 0xca, 0x3c, 0x56, 0x78, 0x39, + 0xb4, 0x0b, 0xb6, 0x53, 0x6a, 0xba, 0x47, 0xdb, 0xae, 0xf7, 0xe8, 0x7b, 0x02, 0x57, 0x28, 0x65, + 0x01, 0xab, 0x3a, 0x16, 0x9c, 0x55, 0x70, 0xf0, 0x74, 0x8f, 0x16, 0x38, 0x4b, 0x3d, 0x0b, 0x83, + 0xf8, 0x51, 0x15, 0xcb, 0xf4, 0xca, 0xe3, 0xca, 0x6b, 0xd1, 0x2d, 0x93, 0x84, 0x62, 0x5b, 0x26, + 0xe9, 0x27, 0x9b, 0xc4, 0xf1, 0x27, 0x9f, 0x62, 0xca, 0xe3, 0x8a, 0x16, 0x9d, 0xc4, 0x23, 0x48, + 0x36, 0x89, 0x47, 0x00, 0x41, 0xbd, 0x65, 0xc7, 0x6e, 0x95, 0xc7, 0x95, 0x6a, 0x4a, 0xbd, 0x1c, + 0x15, 0xd4, 0xcb, 0x7f, 0x06, 0xf5, 0x56, 0x57, 0xdb, 0x5e, 0x99, 0x7d, 0xe3, 0x62, 0x4a, 0xbd, + 0x3e, 0x32, 0xa8, 0xd7, 0x07, 0xb0, 0xa9, 0x10, 0x01, 0x0b, 0x8e, 0xcd, 0x26, 0xed, 0x1b, 0x66, + 0xa3, 0xa1, 0xdc, 0x8c, 0x4e, 0x85, 0x71, 0x3c, 0x9b, 0x0a, 0xe3, 0x30, 0x66, 0x7a, 0xf2, 0x56, + 0xd1, 0xa5, 0xf6, 0x8a, 0x72, 0x2b, 0x6a, 0x7a, 0x86, 0x18, 0x66, 0x7a, 0x86, 0xbf, 0x70, 0x77, + 0xc1, 0x7e, 0x69, 0x74, 0xd9, 0xa1, 0xee, 0xaa, 0x72, 0x3b, 0xb6, 0xbb, 0x90, 0x70, 0xb8, 0xbb, + 0x90, 0x7e, 0x93, 0x15, 0x78, 0x30, 0xb2, 0xd0, 0xf8, 0x77, 0x4f, 0x55, 0xaa, 0x3b, 0xf5, 0x55, + 0xe5, 0x03, 0xc8, 0xea, 0x91, 0xd4, 0xa5, 0x2a, 0x4a, 0x3a, 0xdd, 0xa3, 0x75, 0xe3, 0x84, 0xdb, + 0xf2, 0xd7, 0x66, 0x78, 0x18, 0x42, 0x6d, 0x61, 0xc2, 0xdf, 0x84, 0xbe, 0x1e, 0xdb, 0x96, 0x27, + 0x49, 0x70, 0x5b, 0x9e, 0x04, 0x93, 0x16, 0x9c, 0x8f, 0x6d, 0xd5, 0x66, 0xf5, 0x06, 0xdb, 0x97, + 0x50, 0x63, 0x41, 0xaf, 0xdf, 0xa1, 0x9e, 0xf2, 0x41, 0xe4, 0x7d, 0xa1, 0xc3, 0x86, 0x2f, 0x46, + 0x3d, 0xdd, 0xa3, 0x6d, 0xc1, 0x8f, 0xa8, 0x90, 0xaf, 0x4e, 0x2d, 0x2e, 0x28, 0x1f, 0x8a, 0x9e, + 0x6f, 0x32, 0xd8, 0x74, 0x8f, 0x86, 0x38, 0x66, 0xa5, 0xdd, 0x6c, 0xad, 0x38, 0xba, 0x41, 0xb9, + 0xa1, 0x85, 0xb6, 0x9b, 0x30, 0x40, 0x3f, 0x1c, 0xb5, 0xd2, 0x3a, 0xd1, 0x31, 0x2b, 0xad, 0x13, + 0x8e, 0x29, 0x6a, 0x24, 0xe2, 0xbe, 0xf2, 0x91, 0xa8, 0xa2, 0x46, 0x90, 0x4c, 0x51, 0xa3, 0xf1, + 0xf9, 0x3f, 0x00, 0xa7, 0x82, 0xfd, 0xbc, 0x58, 0x7f, 0x79, 0xa7, 0x29, 0x1f, 0x45, 0x3e, 0xe7, + 0x13, 0x97, 0x01, 0x11, 0xaa, 0xe9, 0x1e, 0xad, 0x43, 0x79, 0xb6, 0xe2, 0x26, 0x92, 0xc9, 0x08, + 0xf3, 0xe2, 0x5b, 0xa2, 0x2b, 0x6e, 0x07, 0x32, 0xb6, 0xe2, 0x76, 0x40, 0xa5, 0x32, 0x17, 0x42, + 0xd5, 0xb7, 0x60, 0x1e, 0xc8, 0xb4, 0x13, 0x87, 0x54, 0xe6, 0xc2, 0x52, 0x5b, 0xda, 0x82, 0x79, + 0x60, 0xad, 0x75, 0xe2, 0x40, 0x2e, 0x42, 0xa1, 0x5a, 0x9d, 0xd5, 0xda, 0x96, 0x52, 0x8f, 0xf9, + 0x80, 0x21, 0x74, 0xba, 0x47, 0x13, 0x78, 0x66, 0x06, 0x4d, 0x36, 0x74, 0xd7, 0x33, 0xeb, 0x2e, + 0x8e, 0x18, 0x7f, 0x84, 0x18, 0x51, 0x33, 0x28, 0x8d, 0x86, 0x99, 0x41, 0x69, 0x70, 0x66, 0x2f, + 0x4e, 0xe8, 0xae, 0xab, 0x5b, 0x86, 0xa3, 0x8f, 0xe3, 0x32, 0x41, 0x63, 0x6f, 0x0c, 0x22, 0x58, + 0x66, 0x2f, 0x46, 0x21, 0x78, 0xf8, 0xee, 0x43, 0x7c, 0x33, 0x67, 0x39, 0x76, 0xf8, 0x1e, 0xc3, + 0xe3, 0xe1, 0x7b, 0x0c, 0x86, 0x76, 0xa7, 0x0f, 0xd3, 0xe8, 0x8a, 0xc9, 0x44, 0xa4, 0xac, 0xc4, + 0xec, 0xce, 0x38, 0x01, 0xda, 0x9d, 0x71, 0x60, 0xa4, 0x49, 0xfe, 0x72, 0xbb, 0xda, 0xa1, 0x49, + 0xe1, 0x2a, 0x9b, 0x28, 0xc3, 0xd6, 0xef, 0x70, 0x70, 0x94, 0xd7, 0x2d, 0xbd, 0x69, 0x97, 0xc7, + 0x7d, 0xa9, 0x9b, 0xd1, 0xf5, 0xbb, 0x23, 0x21, 0x5b, 0xbf, 0x3b, 0x22, 0xd9, 0xec, 0xea, 0x6f, + 0xb4, 0x56, 0x75, 0x87, 0x1a, 0x65, 0xd3, 0xc1, 0x93, 0xc5, 0x75, 0xbe, 0x35, 0x7c, 0x23, 0x3a, + 0xbb, 0x76, 0x21, 0x65, 0xb3, 0x6b, 0x17, 0x34, 0x33, 0xf2, 0xd2, 0xd1, 0x1a, 0xd5, 0x0d, 0xe5, + 0x4e, 0xd4, 0xc8, 0xeb, 0x4c, 0xc9, 0x8c, 0xbc, 0xce, 0xd8, 0xce, 0x9f, 0x73, 0xdb, 0x31, 0x3d, + 0xaa, 0x34, 0xb6, 0xf3, 0x39, 0x48, 0xda, 0xf9, 0x73, 0x10, 0xcd, 0x36, 0x84, 0xf1, 0x0e, 0x69, + 0x46, 0x37, 0x84, 0xc9, 0x6e, 0x88, 0x97, 0x60, 0x16, 0x8b, 0x78, 0x6a, 0xa2, 0x58, 0x51, 0x8b, + 0x45, 0x80, 0x99, 0xc5, 0x12, 0x3e, 0x46, 0x89, 0x3c, 0x30, 0x50, 0xec, 0xe8, 0x1a, 0x2a, 0xe3, + 0xd8, 0x1a, 0x1a, 0x79, 0x8c, 0xf0, 0x6c, 0xc4, 0x7b, 0x56, 0x69, 0x45, 0xad, 0x0e, 0x09, 0xc5, + 0xac, 0x0e, 0xd9, 0xcf, 0x76, 0x02, 0x8e, 0xe1, 0x2d, 0xb8, 0xd6, 0x0e, 0xee, 0x71, 0x3e, 0x16, + 0xfd, 0xcc, 0x18, 0x9a, 0x7d, 0x66, 0x0c, 0x14, 0x61, 0x22, 0xa6, 0x2d, 0xa7, 0x03, 0x93, 0xf0, + 0x7c, 0x30, 0x06, 0x22, 0x33, 0x40, 0xaa, 0xa5, 0xd9, 0x99, 0x8a, 0xb1, 0x20, 0x5f, 0x91, 0xb9, + 0xd1, 0x13, 0xd8, 0x24, 0xc5, 0x74, 0x8f, 0x96, 0x52, 0x8e, 0xbc, 0x01, 0x67, 0x05, 0x54, 0xbc, + 0x23, 0xc4, 0x9c, 0xd3, 0x46, 0xb0, 0x20, 0x78, 0x51, 0xef, 0x8c, 0x6e, 0xb4, 0xd3, 0x3d, 0x5a, + 0x57, 0x5e, 0x9d, 0xeb, 0x12, 0xeb, 0x43, 0x7b, 0x3b, 0x75, 0x05, 0x8b, 0x44, 0x57, 0x5e, 0x9d, + 0xeb, 0x12, 0x72, 0xbf, 0xbb, 0x9d, 0xba, 0x82, 0x4e, 0xe8, 0xca, 0x8b, 0xb8, 0x50, 0xec, 0x86, + 0x2f, 0x35, 0x1a, 0xca, 0x1a, 0x56, 0xf7, 0xee, 0xed, 0x54, 0x57, 0x42, 0x83, 0x73, 0x2b, 0x8e, + 0x6c, 0x96, 0x9e, 0x6f, 0x51, 0xab, 0x1a, 0x59, 0x80, 0xee, 0x45, 0x67, 0xe9, 0x04, 0x01, 0x9b, + 0xa5, 0x13, 0x40, 0x36, 0xa0, 0x64, 0x27, 0x6c, 0x65, 0x3d, 0x3a, 0xa0, 0x64, 0x1c, 0x1b, 0x50, + 0x11, 0x87, 0xed, 0x79, 0x38, 0x3e, 0x7f, 0xc7, 0xd3, 0x7d, 0x0b, 0xd2, 0x15, 0x5d, 0xf9, 0x66, + 0xec, 0x92, 0x29, 0x49, 0x82, 0x97, 0x4c, 0x49, 0x30, 0x1b, 0x23, 0x0c, 0x5c, 0x5d, 0xb7, 0xea, + 0x53, 0xba, 0xd9, 0x68, 0x3b, 0x54, 0xf9, 0xff, 0xa2, 0x63, 0x24, 0x86, 0x66, 0x63, 0x24, 0x06, + 0x62, 0x0b, 0x34, 0x03, 0x95, 0x5c, 0xd7, 0x5c, 0xb1, 0xc4, 0xbe, 0xb2, 0xdd, 0xf0, 0x94, 0xff, + 0x3f, 0xba, 0x40, 0xa7, 0xd1, 0xb0, 0x05, 0x3a, 0x0d, 0x8e, 0xa7, 0x4e, 0x29, 0xf9, 0xd8, 0x95, + 0xbf, 0x14, 0x3b, 0x75, 0x4a, 0xa1, 0xc1, 0x53, 0xa7, 0xb4, 0x5c, 0xee, 0x53, 0x30, 0xca, 0x6d, + 0xb2, 0x19, 0x33, 0xb8, 0xab, 0xfe, 0xcb, 0xd1, 0xf5, 0x31, 0x8e, 0x67, 0xeb, 0x63, 0x1c, 0x16, + 0xe5, 0x23, 0xba, 0xe0, 0xaf, 0x74, 0xe2, 0x13, 0xc8, 0x3f, 0x51, 0x86, 0x5c, 0x97, 0xf9, 0x88, + 0x91, 0xf2, 0xad, 0x99, 0x4e, 0x8c, 0x82, 0xe1, 0x91, 0x28, 0x14, 0x65, 0xa4, 0xd1, 0xbb, 0x26, + 0x5d, 0x53, 0x3e, 0xde, 0x91, 0x11, 0x27, 0x88, 0x32, 0xe2, 0x30, 0xf2, 0x3a, 0x9c, 0x0a, 0x61, + 0xb3, 0xb4, 0xb9, 0x14, 0xcc, 0x4c, 0xdf, 0x96, 0x89, 0x9a, 0xc1, 0xe9, 0x64, 0xcc, 0x0c, 0x4e, + 0xc7, 0xa4, 0xb1, 0x16, 0xa2, 0xfb, 0xab, 0x5b, 0xb0, 0x0e, 0x24, 0xd8, 0x81, 0x41, 0x1a, 0x6b, + 0x21, 0xcd, 0x6f, 0xdf, 0x82, 0x75, 0x20, 0xd3, 0x0e, 0x0c, 0xc8, 0x27, 0x33, 0x70, 0x21, 0x1d, + 0x55, 0x6a, 0x34, 0xa6, 0x6c, 0x27, 0xc4, 0x29, 0xdf, 0x91, 0x89, 0x1e, 0x34, 0x6c, 0xaf, 0xd8, + 0x74, 0x8f, 0xb6, 0xcd, 0x0a, 0xc8, 0xfb, 0x61, 0xb8, 0xd4, 0x36, 0x4c, 0x0f, 0x2f, 0xde, 0x98, + 0xe1, 0xfc, 0x9d, 0x99, 0xd8, 0x16, 0x47, 0xc6, 0xe2, 0x16, 0x47, 0x06, 0x90, 0x57, 0x61, 0xac, + 0x4a, 0xeb, 0x6d, 0xc7, 0xf4, 0xd6, 0x35, 0xcc, 0xb5, 0xcf, 0x78, 0x7c, 0x57, 0x26, 0x3a, 0x89, + 0x25, 0x28, 0xd8, 0x24, 0x96, 0x00, 0x92, 0x5b, 0x1d, 0x32, 0xb2, 0x2b, 0x9f, 0xc8, 0x74, 0xbd, + 0x96, 0x0f, 0xfa, 0xb2, 0x43, 0x42, 0xf7, 0x85, 0xd4, 0x0c, 0xd7, 0xca, 0x27, 0x33, 0x5d, 0xae, + 0xd1, 0xa5, 0x19, 0x2e, 0x25, 0x39, 0xf6, 0x42, 0x6a, 0xfa, 0x61, 0xe5, 0xbb, 0x33, 0x5d, 0xae, + 0xbd, 0x43, 0x8e, 0x69, 0x99, 0x8b, 0x9f, 0xe6, 0x9e, 0x22, 0x82, 0xd1, 0x5f, 0xcb, 0x24, 0x5d, + 0x45, 0x82, 0xf2, 0x12, 0x21, 0x2b, 0x76, 0xd3, 0x0d, 0x94, 0xfe, 0x53, 0x99, 0xa4, 0x6f, 0x5e, + 0x58, 0x2c, 0xfc, 0x45, 0x28, 0x9c, 0x99, 0xbc, 0xe7, 0x51, 0xc7, 0xd2, 0x1b, 0xd8, 0x9d, 0x55, + 0xcf, 0x76, 0xf4, 0x15, 0x3a, 0x69, 0xe9, 0x4b, 0x0d, 0xaa, 0x7c, 0x3a, 0x13, 0xb5, 0x60, 0x3b, + 0x93, 0x32, 0x0b, 0xb6, 0x33, 0x96, 0xac, 0xc2, 0x83, 0x69, 0xd8, 0xb2, 0xe9, 0x62, 0x3d, 0x9f, + 0xc9, 0x44, 0x4d, 0xd8, 0x2e, 0xb4, 0xcc, 0x84, 0xed, 0x82, 0x26, 0x57, 0x61, 0x60, 0xdc, 0xf6, + 0xa7, 0xdf, 0xef, 0x89, 0x39, 0x43, 0x06, 0x98, 0xe9, 0x1e, 0x2d, 0x24, 0x13, 0x65, 0xc4, 0xa0, + 0xfe, 0x6c, 0xb2, 0x4c, 0x78, 0xf9, 0x14, 0xfc, 0x10, 0x65, 0x84, 0xb8, 0xff, 0x7a, 0xb2, 0x4c, + 0x78, 0xc7, 0x15, 0xfc, 0x60, 0x33, 0x09, 0xaf, 0x71, 0x76, 0xaa, 0xc4, 0xec, 0xb6, 0x89, 0x55, + 0xbd, 0xd1, 0xa0, 0xd6, 0x0a, 0x55, 0x3e, 0x17, 0x9b, 0x49, 0xd2, 0xc9, 0xd8, 0x4c, 0x92, 0x8e, + 0x21, 0x1f, 0x86, 0xd3, 0xb7, 0xf4, 0x86, 0x69, 0x84, 0x38, 0x3f, 0x19, 0xad, 0xf2, 0xbd, 0x99, + 0xe8, 0x6e, 0xba, 0x03, 0x1d, 0xdb, 0x4d, 0x77, 0x40, 0x91, 0x59, 0x20, 0xb8, 0x8c, 0x06, 0xb3, + 0x05, 0x5b, 0x9f, 0x95, 0xbf, 0x91, 0x89, 0xda, 0xa9, 0x49, 0x12, 0x66, 0xa7, 0x26, 0xa1, 0xa4, + 0xd6, 0x39, 0xaa, 0xbd, 0xf2, 0x7d, 0x99, 0xe8, 0x69, 0x4d, 0x27, 0xc2, 0xe9, 0x1e, 0xad, 0x73, + 0x68, 0xfc, 0xeb, 0x30, 0x5a, 0x5d, 0xa8, 0x4c, 0x4d, 0x4d, 0x56, 0x6f, 0x55, 0xca, 0xe8, 0xbe, + 0x6b, 0x28, 0xdf, 0x1f, 0x5b, 0xb1, 0xe2, 0x04, 0x6c, 0xc5, 0x8a, 0xc3, 0xc8, 0x0b, 0x30, 0xc4, + 0xda, 0xcf, 0x06, 0x0c, 0x7e, 0xf2, 0xe7, 0x33, 0x51, 0x73, 0x4a, 0x46, 0x32, 0x73, 0x4a, 0xfe, + 0x4d, 0xaa, 0x70, 0x82, 0x49, 0x71, 0xc1, 0xa1, 0xcb, 0xd4, 0xa1, 0x56, 0xdd, 0x1f, 0xd3, 0x3f, + 0x90, 0x89, 0x5a, 0x19, 0x69, 0x44, 0xcc, 0xca, 0x48, 0x83, 0x93, 0x3b, 0x70, 0x36, 0x7e, 0x12, + 0x24, 0x3f, 0xa6, 0x52, 0x7e, 0x30, 0x13, 0x33, 0x86, 0xbb, 0x10, 0xa3, 0x31, 0xdc, 0x05, 0x4f, + 0x2c, 0x38, 0x27, 0x8e, 0x55, 0x84, 0xc3, 0x65, 0xbc, 0xb6, 0x1f, 0xe2, 0xb5, 0x3d, 0x1a, 0x3a, + 0x04, 0x76, 0xa1, 0x9e, 0xee, 0xd1, 0xba, 0xb3, 0x63, 0x7a, 0x96, 0x8c, 0xdd, 0xae, 0xfc, 0x70, + 0x26, 0xdd, 0x23, 0x25, 0xe2, 0xa6, 0x9c, 0x16, 0xf4, 0xfd, 0xf5, 0x4e, 0x91, 0xc7, 0x95, 0x1f, + 0x89, 0x8d, 0xb7, 0x74, 0x32, 0x36, 0xde, 0x3a, 0x84, 0x2e, 0x7f, 0x15, 0xc6, 0xb8, 0x52, 0x2f, + 0xe8, 0x38, 0x0c, 0xad, 0x15, 0x6a, 0x28, 0x7f, 0x33, 0xb6, 0xda, 0x25, 0x28, 0xd0, 0xb5, 0x27, + 0x0e, 0x64, 0x53, 0x77, 0xb5, 0xa5, 0x5b, 0x16, 0x1e, 0xb3, 0x2a, 0x7f, 0x2b, 0x36, 0x75, 0x87, + 0x28, 0x74, 0xdc, 0x0d, 0x7e, 0x31, 0x4d, 0xe8, 0x96, 0xb5, 0x43, 0xf9, 0xd1, 0x98, 0x26, 0x74, + 0x23, 0x66, 0x9a, 0xd0, 0x35, 0x05, 0xc8, 0xad, 0x0e, 0x0f, 0x1b, 0x95, 0x2f, 0xc4, 0x56, 0xe4, + 0x54, 0x2a, 0xb6, 0x22, 0xa7, 0xbf, 0x8b, 0xbc, 0xd5, 0xe1, 0x51, 0xa0, 0xf2, 0x63, 0xdd, 0xf9, + 0x86, 0x2b, 0x7d, 0xfa, 0x9b, 0xc2, 0x5b, 0x1d, 0x1e, 0xd4, 0x29, 0x3f, 0xde, 0x9d, 0x6f, 0xe8, + 0xd8, 0x97, 0xfe, 0x1e, 0xaf, 0xd6, 0xf9, 0x31, 0x9a, 0xf2, 0x13, 0xf1, 0xa9, 0xab, 0x03, 0x21, + 0x4e, 0x5d, 0x9d, 0x5e, 0xb4, 0x2d, 0xc1, 0x03, 0x5c, 0x43, 0xae, 0x3b, 0x7a, 0x6b, 0xb5, 0x4a, + 0x3d, 0xcf, 0xb4, 0x56, 0xfc, 0x9d, 0xd8, 0xdf, 0xce, 0xc4, 0x8e, 0xc7, 0x3a, 0x51, 0xe2, 0xf1, + 0x58, 0x27, 0x24, 0x53, 0xde, 0xc4, 0xb3, 0x33, 0xe5, 0x27, 0x63, 0xca, 0x9b, 0xa0, 0x60, 0xca, + 0x9b, 0x7c, 0xad, 0xf6, 0x6a, 0xca, 0xeb, 0x2a, 0xe5, 0xef, 0x74, 0xe6, 0x15, 0xb4, 0x2f, 0xe5, + 0x51, 0xd6, 0xab, 0x29, 0x8f, 0x88, 0x94, 0xbf, 0xdb, 0x99, 0x57, 0xe8, 0x83, 0x94, 0x7c, 0x7b, + 0xf4, 0x3a, 0x9c, 0xe2, 0xb3, 0xf9, 0x14, 0x35, 0x68, 0xe4, 0x43, 0x7f, 0x2a, 0x36, 0xf6, 0xd3, + 0xc9, 0xf0, 0xc8, 0x3d, 0x15, 0x93, 0xc6, 0x5a, 0xb4, 0xf5, 0xa7, 0xb7, 0x60, 0x1d, 0x6e, 0x08, + 0xd2, 0x31, 0xe3, 0x7d, 0xd0, 0x8b, 0x7b, 0x71, 0xf5, 0x0b, 0x19, 0x18, 0xaa, 0x7a, 0x0e, 0xd5, + 0x9b, 0x22, 0x0e, 0xc6, 0x19, 0xe8, 0xe7, 0x4e, 0x6d, 0xfe, 0xbb, 0x12, 0x2d, 0xf8, 0x4d, 0x2e, + 0xc0, 0xc8, 0x8c, 0xee, 0x7a, 0x58, 0xb2, 0x62, 0x19, 0xf4, 0x1e, 0x3e, 0xe8, 0xc8, 0x69, 0x31, + 0x28, 0x99, 0xe1, 0x74, 0xbc, 0x1c, 0x86, 0x3e, 0xca, 0x6d, 0x19, 0xfe, 0xa1, 0xff, 0xad, 0x8d, + 0x62, 0x0f, 0x46, 0x7b, 0x88, 0x95, 0x55, 0xbf, 0x92, 0x81, 0x84, 0xbb, 0xdd, 0xee, 0xdf, 0x7b, + 0xcd, 0xc3, 0xb1, 0x58, 0xb8, 0x2d, 0xf1, 0x2a, 0x65, 0x9b, 0xd1, 0xb8, 0xe2, 0xa5, 0xc9, 0xbb, + 0x83, 0xd7, 0x10, 0x37, 0xb5, 0x19, 0x11, 0xda, 0xa3, 0x6f, 0x73, 0xa3, 0x98, 0x6b, 0x3b, 0x0d, + 0x4d, 0x42, 0x89, 0xa7, 0xdb, 0xdf, 0x18, 0x0d, 0x63, 0x09, 0x91, 0x0b, 0xe2, 0xf1, 0x59, 0x26, + 0x0c, 0x08, 0x12, 0xcb, 0x54, 0xc9, 0x1f, 0x9b, 0xbd, 0x1f, 0x86, 0x2a, 0xcd, 0x16, 0x75, 0x5c, + 0xdb, 0xd2, 0x3d, 0xdb, 0xcf, 0x88, 0x8f, 0xc1, 0x22, 0x4c, 0x09, 0x2e, 0x07, 0x30, 0x90, 0xe9, + 0xc9, 0x25, 0x3f, 0x79, 0x46, 0x0e, 0xa3, 0x38, 0x61, 0x28, 0xd2, 0x78, 0xf6, 0x43, 0x4e, 0xc1, + 0x48, 0x6f, 0xba, 0x3a, 0xbe, 0x9b, 0x09, 0x48, 0xdb, 0x0c, 0x20, 0x93, 0x22, 0x05, 0x79, 0x1c, + 0x0a, 0x78, 0xce, 0xe8, 0x62, 0x52, 0x1c, 0x11, 0xa6, 0xa4, 0x81, 0x10, 0x39, 0x28, 0x04, 0xa7, + 0x21, 0x37, 0x60, 0x34, 0xbc, 0x44, 0xb9, 0xee, 0xd8, 0xed, 0x96, 0x1f, 0x06, 0x1b, 0xb3, 0x46, + 0xde, 0x09, 0x70, 0xb5, 0x15, 0x44, 0x4a, 0x2c, 0x12, 0x05, 0xc9, 0x34, 0x1c, 0x0b, 0x61, 0x4c, + 0x44, 0x7e, 0xf8, 0x7d, 0x4c, 0x7d, 0x24, 0xf1, 0x62, 0xe2, 0x8c, 0xa4, 0x3e, 0x8a, 0x15, 0x23, + 0x15, 0xe8, 0xf3, 0x63, 0x94, 0xf4, 0x6f, 0xa9, 0xa4, 0xc7, 0x45, 0x8c, 0x92, 0x3e, 0x39, 0x3a, + 0x89, 0x5f, 0x9e, 0x4c, 0xc1, 0x88, 0x66, 0xb7, 0x3d, 0xba, 0x68, 0x0b, 0xeb, 0x43, 0xc4, 0xc2, + 0xc1, 0x36, 0x39, 0x0c, 0x53, 0xf3, 0x6c, 0x3f, 0xe9, 0xa6, 0x9c, 0xfc, 0x31, 0x5a, 0x8a, 0xcc, + 0xc1, 0x58, 0xe2, 0xba, 0x49, 0x4e, 0x85, 0x29, 0x7d, 0x5e, 0x92, 0x59, 0xb2, 0x28, 0xf9, 0xce, + 0x0c, 0x14, 0x16, 0x1d, 0xdd, 0xf4, 0x5c, 0xf1, 0xe4, 0xe6, 0xe4, 0xe5, 0x35, 0x47, 0x6f, 0x31, + 0xfd, 0xb8, 0x8c, 0x61, 0xba, 0x6e, 0xe9, 0x8d, 0x36, 0x75, 0xc7, 0x6f, 0xb3, 0xaf, 0xfb, 0x83, + 0x8d, 0xe2, 0x0b, 0x2b, 0xb8, 0xa9, 0xbd, 0x5c, 0xb7, 0x9b, 0x57, 0x56, 0x1c, 0xfd, 0xae, 0xe9, + 0xe1, 0xd4, 0xa1, 0x37, 0xae, 0x78, 0xb4, 0x81, 0x7b, 0xe7, 0x2b, 0x7a, 0xcb, 0xbc, 0x82, 0xe1, + 0x20, 0xaf, 0x04, 0x9c, 0x78, 0x0d, 0x4c, 0x05, 0x3c, 0xfc, 0x4b, 0x56, 0x01, 0x8e, 0x23, 0x73, + 0x6c, 0xcb, 0x89, 0x9f, 0x5a, 0x6a, 0xb5, 0xc4, 0xfb, 0x1d, 0x69, 0xc7, 0xe9, 0x63, 0xb8, 0x62, + 0x07, 0x02, 0xd3, 0x5b, 0x2d, 0x39, 0xd9, 0x6e, 0x48, 0xc7, 0xb4, 0x60, 0x51, 0xb4, 0xc8, 0x17, + 0xd3, 0x70, 0x28, 0x71, 0xbf, 0xb1, 0x29, 0x42, 0x8a, 0x17, 0x23, 0x4b, 0x70, 0x4c, 0xf0, 0x0d, + 0x02, 0x26, 0x8f, 0x44, 0x67, 0x85, 0x18, 0x9a, 0x2b, 0x6d, 0xd0, 0x46, 0x43, 0x80, 0xe5, 0x3a, + 0x62, 0x25, 0xc8, 0x78, 0x98, 0xc5, 0x6d, 0x4e, 0x6f, 0x52, 0x57, 0x39, 0x86, 0x1a, 0x7b, 0x76, + 0x73, 0xa3, 0xa8, 0xf8, 0xe5, 0x31, 0x5c, 0x4f, 0x6a, 0x4e, 0x52, 0x2c, 0x22, 0xf3, 0xe0, 0x5a, + 0x3f, 0x9a, 0xc2, 0x23, 0xae, 0xf3, 0xd1, 0x22, 0x64, 0x02, 0x86, 0x03, 0xf7, 0xe1, 0x9b, 0x37, + 0x2b, 0x65, 0x7c, 0x20, 0x24, 0x22, 0x36, 0xc5, 0x42, 0x1a, 0xcb, 0x4c, 0x22, 0x65, 0xa4, 0x97, + 0x84, 0xfc, 0xc5, 0x50, 0xec, 0x25, 0x61, 0x2b, 0xe5, 0x25, 0xe1, 0x02, 0x79, 0x09, 0x06, 0x4b, + 0xb7, 0xab, 0xe2, 0x85, 0xa4, 0xab, 0x1c, 0x0f, 0x83, 0xe0, 0x63, 0x5a, 0x5a, 0xf1, 0x9a, 0x52, + 0x6e, 0xba, 0x4c, 0x4f, 0x26, 0x61, 0x24, 0xe2, 0x81, 0xe0, 0x2a, 0x27, 0x90, 0x03, 0xb6, 0x5c, + 0x47, 0x4c, 0xcd, 0x11, 0xa8, 0x48, 0xa2, 0xe4, 0x48, 0x21, 0xa6, 0x35, 0x6c, 0x13, 0xdf, 0x68, + 0xd8, 0x6b, 0x1a, 0xc5, 0xc7, 0x98, 0xf8, 0xdc, 0xa8, 0x9f, 0x6b, 0x8d, 0x21, 0x50, 0x35, 0x87, + 0xe3, 0x22, 0x99, 0x91, 0xa3, 0xc5, 0xc8, 0x1b, 0x40, 0x30, 0x04, 0x39, 0x35, 0xfc, 0x03, 0xe9, + 0x4a, 0xd9, 0x55, 0x4e, 0x61, 0xb8, 0x42, 0x12, 0x7f, 0x0d, 0x5c, 0x29, 0x8f, 0x5f, 0x10, 0xd3, + 0xc7, 0x79, 0x9d, 0x97, 0xaa, 0x39, 0x02, 0x57, 0x33, 0x23, 0xf9, 0xd9, 0x52, 0xb8, 0x92, 0x35, + 0x38, 0xbd, 0xe0, 0xd0, 0xbb, 0xa6, 0xdd, 0x76, 0xfd, 0xe5, 0xc3, 0x9f, 0xb7, 0x4e, 0x6f, 0x39, + 0x6f, 0x3d, 0x2c, 0x2a, 0x3e, 0xd9, 0x72, 0xe8, 0xdd, 0x9a, 0x1f, 0xa4, 0x2e, 0x12, 0x63, 0xa9, + 0x13, 0x77, 0xcc, 0x32, 0xf7, 0x66, 0xdb, 0xa1, 0x02, 0x6e, 0x52, 0x57, 0x51, 0xc2, 0xa9, 0x96, + 0xbf, 0xab, 0x35, 0x03, 0x5c, 0x24, 0xcb, 0x5c, 0xb4, 0x18, 0xd1, 0x80, 0x5c, 0x9f, 0xf0, 0x2f, + 0x27, 0x4a, 0x75, 0x9e, 0x8b, 0x4b, 0x79, 0x00, 0x99, 0xa9, 0x4c, 0x2c, 0x2b, 0xf5, 0x20, 0x60, + 0x65, 0x4d, 0x17, 0x78, 0x59, 0x2c, 0xc9, 0xd2, 0x64, 0x06, 0x46, 0x17, 0x1c, 0xdc, 0x2a, 0xdd, + 0xa0, 0xeb, 0x0b, 0x76, 0xc3, 0xac, 0xaf, 0xe3, 0xab, 0x27, 0x31, 0x55, 0xb6, 0x38, 0xae, 0x76, + 0x87, 0xae, 0xd7, 0x5a, 0x88, 0x95, 0x97, 0x95, 0x78, 0x49, 0x39, 0x80, 0xdc, 0x83, 0xdb, 0x0b, + 0x20, 0x47, 0x61, 0x54, 0x5c, 0x6d, 0xdc, 0xf3, 0xa8, 0xc5, 0x96, 0x7a, 0x57, 0xbc, 0x70, 0x52, + 0x62, 0x57, 0x21, 0x01, 0x5e, 0x64, 0x49, 0xe6, 0xa3, 0x8c, 0x06, 0x60, 0xb9, 0x61, 0xf1, 0x22, + 0xc9, 0x28, 0x6b, 0xe7, 0x76, 0x11, 0x65, 0xed, 0x1f, 0xe6, 0xe4, 0xf9, 0x97, 0x9c, 0x85, 0xbc, + 0x14, 0x04, 0x1d, 0x43, 0x48, 0x61, 0xc0, 0xc8, 0xbc, 0x88, 0x8c, 0x37, 0x20, 0x6c, 0x97, 0xe0, + 0xad, 0x30, 0xa6, 0xb6, 0x09, 0xc3, 0x0a, 0x69, 0x21, 0x01, 0xa6, 0x15, 0x69, 0x2f, 0x35, 0xcc, + 0x3a, 0x86, 0x11, 0xcd, 0x49, 0x69, 0x45, 0x10, 0xca, 0xa3, 0x88, 0x4a, 0x24, 0xe4, 0x2a, 0x0c, + 0xfa, 0x5b, 0xf4, 0x30, 0x84, 0x1a, 0x46, 0x97, 0xf4, 0x93, 0x52, 0xf3, 0xe0, 0x95, 0x12, 0x11, + 0x79, 0x1e, 0xd3, 0xb2, 0xfb, 0xef, 0xb0, 0x7b, 0x43, 0x1b, 0x48, 0x9e, 0x3d, 0x62, 0x79, 0xd9, + 0xfd, 0xe7, 0xd8, 0xe3, 0x30, 0x2c, 0xab, 0xa3, 0x9f, 0x48, 0x09, 0x27, 0xce, 0x88, 0x0e, 0xcb, + 0x0a, 0x12, 0x2d, 0x42, 0xe6, 0x61, 0x2c, 0xa1, 0x81, 0x22, 0xe0, 0x1a, 0x26, 0xd3, 0x4c, 0x51, + 0x5f, 0x79, 0x61, 0x4e, 0x94, 0x25, 0x8f, 0x40, 0xee, 0xa6, 0x56, 0x11, 0x41, 0x9f, 0x78, 0xbc, + 0xb0, 0xc8, 0x8b, 0x70, 0x86, 0x55, 0xbf, 0x2d, 0x9b, 0x58, 0x9b, 0x98, 0xf4, 0x04, 0x2b, 0xa9, + 0x07, 0x51, 0x7a, 0x7e, 0xfd, 0x5c, 0x7a, 0x12, 0x11, 0xb9, 0x08, 0xfd, 0xb1, 0xf4, 0xed, 0xf8, + 0x7c, 0x3f, 0xc8, 0xdd, 0x1e, 0x60, 0xc9, 0x55, 0x29, 0xff, 0x97, 0x14, 0x47, 0xd1, 0xcf, 0xff, + 0x15, 0x0f, 0x28, 0x88, 0x99, 0xc0, 0xae, 0xc6, 0x52, 0x0d, 0xf8, 0x59, 0xb6, 0x93, 0xeb, 0x62, + 0x98, 0x5a, 0x20, 0xb0, 0x4a, 0x7b, 0xb7, 0xb2, 0x4a, 0xd5, 0x5f, 0xcf, 0x24, 0xc7, 0x19, 0xb9, + 0x96, 0x0c, 0x69, 0xc6, 0x13, 0x6c, 0xfb, 0x40, 0xb9, 0xd6, 0x20, 0xb8, 0x59, 0x24, 0x38, 0x59, + 0x76, 0xd7, 0xc1, 0xc9, 0x72, 0x3b, 0x0c, 0x4e, 0xa6, 0xfe, 0xef, 0x7c, 0x57, 0x57, 0xbc, 0x03, + 0x09, 0x62, 0xf1, 0x1c, 0xdb, 0x59, 0xb1, 0xda, 0x4b, 0x6e, 0x62, 0x7f, 0xc0, 0x3d, 0x8d, 0x6a, + 0x3a, 0x1f, 0x5a, 0xae, 0x16, 0xa5, 0x24, 0x2f, 0xc3, 0x90, 0xff, 0x01, 0x18, 0xf4, 0x4e, 0x0a, + 0xd6, 0x16, 0xac, 0x6a, 0xf1, 0x1c, 0xe9, 0x72, 0x01, 0xf2, 0x34, 0x0c, 0xa0, 0x4d, 0xd3, 0xd2, + 0xeb, 0x7e, 0x44, 0x44, 0x1e, 0x42, 0xd1, 0x07, 0xca, 0x81, 0x1a, 0x02, 0x4a, 0xf2, 0x11, 0x28, + 0x44, 0x92, 0xf4, 0x5f, 0xd9, 0x86, 0xef, 0xe2, 0x65, 0x39, 0x24, 0x30, 0xdf, 0xa5, 0xc4, 0x13, + 0xf4, 0x0b, 0xa6, 0x64, 0x11, 0x8e, 0x2f, 0x38, 0xd4, 0x40, 0x2f, 0xd9, 0xc9, 0x7b, 0x2d, 0x47, + 0x04, 0x6c, 0xe6, 0xa3, 0x1c, 0x17, 0xa9, 0x96, 0x8f, 0x66, 0xcb, 0xa7, 0xc0, 0xcb, 0x61, 0xd9, + 0x52, 0x8a, 0x33, 0xcb, 0x85, 0xb7, 0xe4, 0x06, 0x5d, 0x5f, 0xc3, 0x44, 0xad, 0xfd, 0xa1, 0xe5, + 0x22, 0x04, 0x7d, 0x47, 0xa0, 0x64, 0xcb, 0x25, 0x5a, 0xe8, 0xcc, 0x73, 0x30, 0xb8, 0xdb, 0xb0, + 0xba, 0xbf, 0x90, 0xed, 0xe0, 0xd4, 0x7e, 0xff, 0x66, 0x36, 0x09, 0x72, 0xea, 0xf5, 0x76, 0xc8, + 0xa9, 0xf7, 0xf5, 0x6c, 0x07, 0x8f, 0xfd, 0xfb, 0x3a, 0xf7, 0x55, 0x20, 0x8c, 0x68, 0xee, 0xab, + 0x30, 0xed, 0x98, 0x69, 0x68, 0x32, 0x51, 0x2c, 0x4b, 0x5e, 0x61, 0xcb, 0x2c, 0x79, 0x3f, 0x95, + 0xeb, 0xf6, 0xa2, 0xe1, 0x48, 0xf6, 0x3b, 0x91, 0xfd, 0x55, 0x18, 0x0c, 0x24, 0x5b, 0x29, 0xa3, + 0xd1, 0x33, 0x1c, 0x04, 0xf1, 0xe6, 0x60, 0x2c, 0x23, 0x11, 0x91, 0x4b, 0xbc, 0xad, 0x55, 0xf3, + 0x4d, 0x1e, 0x4e, 0x76, 0x58, 0x04, 0x0a, 0xd5, 0x3d, 0xbd, 0xe6, 0x9a, 0x6f, 0x52, 0x2d, 0x40, + 0xab, 0xff, 0x24, 0x9b, 0xfa, 0x2c, 0xe4, 0xa8, 0x8f, 0x76, 0xd0, 0x47, 0x29, 0x42, 0xe4, 0x0f, + 0x5a, 0x8e, 0x84, 0xb8, 0x03, 0x21, 0xfe, 0x49, 0x36, 0xf5, 0xf9, 0xcf, 0x91, 0x10, 0x77, 0x32, + 0x5b, 0x3c, 0x0e, 0x03, 0x9a, 0xbd, 0xe6, 0x62, 0x4a, 0x6c, 0x31, 0x57, 0xe0, 0x44, 0xed, 0xd8, + 0x6b, 0x2e, 0x4f, 0x17, 0xae, 0x85, 0x04, 0xea, 0x37, 0xb2, 0x5d, 0x1e, 0x48, 0x1d, 0x09, 0xfe, + 0xed, 0x5c, 0x22, 0x7f, 0x39, 0x1b, 0x79, 0x80, 0x75, 0x5f, 0x27, 0x91, 0xad, 0xd6, 0x57, 0x69, + 0x53, 0x8f, 0x27, 0x91, 0x75, 0x11, 0x2a, 0x52, 0xb9, 0x85, 0x24, 0xea, 0x17, 0xb3, 0xb1, 0x17, + 0x68, 0x47, 0xb2, 0xdb, 0xb6, 0xec, 0x02, 0xad, 0x13, 0x8f, 0xea, 0x8e, 0x24, 0xb7, 0x5d, 0xc9, + 0x7d, 0x22, 0x1b, 0x7b, 0x7f, 0x78, 0xdf, 0xca, 0x8e, 0x0d, 0xc0, 0xe4, 0xbb, 0xc8, 0xfb, 0x56, + 0x93, 0x1e, 0x87, 0x01, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, 0x07, 0xe2, 0x29, 0x6b, 0x40, + 0xa0, 0x7e, 0x47, 0x16, 0xa2, 0xef, 0x42, 0xef, 0x53, 0x1d, 0xfa, 0xe5, 0x6c, 0xf4, 0x45, 0xec, + 0xfd, 0xab, 0x3f, 0x97, 0x01, 0xaa, 0xed, 0xa5, 0xba, 0x08, 0xa8, 0xd8, 0x2b, 0x1d, 0xd3, 0x07, + 0x50, 0x4d, 0xa2, 0x50, 0xff, 0x4f, 0x36, 0xf5, 0x99, 0xee, 0xfd, 0x2b, 0xc0, 0xa7, 0xf0, 0x54, + 0xbc, 0x6e, 0x85, 0x13, 0x39, 0x1e, 0x42, 0xb2, 0xf1, 0x97, 0xc8, 0xe3, 0xe2, 0x13, 0x92, 0xf7, + 0xa5, 0x98, 0x6b, 0x18, 0x65, 0x36, 0x34, 0xd7, 0xe4, 0x6b, 0x08, 0xc9, 0x70, 0xfb, 0x97, 0xd9, + 0xad, 0x5e, 0x35, 0xdf, 0xcf, 0xab, 0x6a, 0xdf, 0x82, 0xbe, 0x8e, 0xd1, 0xb7, 0x58, 0x4f, 0x0c, + 0xf1, 0x2c, 0x23, 0x2d, 0x0e, 0x92, 0xef, 0xde, 0x04, 0x95, 0xfa, 0xc7, 0xbd, 0xe9, 0x4f, 0x6a, + 0xef, 0x5f, 0x11, 0x9e, 0x85, 0xfc, 0x82, 0xee, 0xad, 0x0a, 0x4d, 0xc6, 0x2b, 0xbd, 0x96, 0xee, + 0xad, 0x6a, 0x08, 0x25, 0x97, 0xa0, 0x5f, 0xd3, 0xd7, 0xf8, 0x99, 0x67, 0x21, 0xcc, 0x00, 0xe3, + 0xe8, 0x6b, 0x35, 0x7e, 0xee, 0x19, 0xa0, 0x89, 0x1a, 0x64, 0x20, 0xe2, 0x27, 0xdf, 0x98, 0xfe, + 0x82, 0x67, 0x20, 0x0a, 0xf2, 0x0e, 0x9d, 0x85, 0xfc, 0xb8, 0x6d, 0xac, 0xe3, 0xf5, 0xd5, 0x10, + 0xaf, 0x6c, 0xc9, 0x36, 0xd6, 0x35, 0x84, 0x92, 0x4f, 0x66, 0xa0, 0x6f, 0x9a, 0xea, 0x06, 0x1b, + 0x21, 0x03, 0xdd, 0xbc, 0x4e, 0x3e, 0xb0, 0x3f, 0x5e, 0x27, 0x63, 0xab, 0xbc, 0x32, 0x59, 0x51, + 0x44, 0xfd, 0xe4, 0x3a, 0xf4, 0x4f, 0xe8, 0x1e, 0x5d, 0xb1, 0x9d, 0x75, 0xf4, 0xa3, 0x19, 0x09, + 0xdd, 0x32, 0x23, 0xfa, 0xe3, 0x13, 0xf1, 0x9b, 0xb1, 0xba, 0xf8, 0xa5, 0x05, 0x85, 0x99, 0x58, + 0x44, 0x4e, 0xd4, 0xc1, 0x50, 0x2c, 0x3c, 0xf9, 0x69, 0x90, 0xfa, 0x34, 0x38, 0x56, 0x1e, 0x4a, + 0x3f, 0x56, 0x46, 0xeb, 0x11, 0x7d, 0xed, 0x30, 0xef, 0xcf, 0x30, 0x2e, 0xfa, 0xdc, 0x7a, 0x44, + 0x28, 0xa6, 0xfd, 0xd1, 0x24, 0x12, 0xf5, 0xab, 0xbd, 0x90, 0xfa, 0x00, 0xef, 0x48, 0xc9, 0x8f, + 0x94, 0x3c, 0x54, 0xf2, 0x72, 0x42, 0xc9, 0xcf, 0x24, 0x9f, 0x74, 0xbe, 0x43, 0x35, 0xfc, 0xf3, + 0xf9, 0xc4, 0x83, 0xf0, 0xfb, 0x7b, 0x77, 0x19, 0x4a, 0xaf, 0x77, 0x4b, 0xe9, 0x05, 0x03, 0xa2, + 0xb0, 0xe5, 0x80, 0xe8, 0xdb, 0xee, 0x80, 0xe8, 0xef, 0x38, 0x20, 0x42, 0x05, 0x19, 0xe8, 0xa8, + 0x20, 0x15, 0x31, 0x68, 0xa0, 0x7b, 0x4e, 0xb9, 0xb3, 0x9b, 0x1b, 0xc5, 0x11, 0x36, 0x9a, 0x52, + 0xb3, 0xc9, 0x21, 0x0b, 0xf5, 0x2b, 0xf9, 0x2e, 0x51, 0x1c, 0x0e, 0x44, 0x47, 0x9e, 0x82, 0x5c, + 0xa9, 0xd5, 0x12, 0xfa, 0x71, 0x5c, 0x0a, 0x20, 0xd1, 0xa1, 0x14, 0xa3, 0x26, 0xcf, 0x43, 0xae, + 0x74, 0xbb, 0x1a, 0x8f, 0x45, 0x5f, 0xba, 0x5d, 0x15, 0x5f, 0xd2, 0xb1, 0xec, 0xed, 0x2a, 0x79, + 0x31, 0x0c, 0x0a, 0xb7, 0xda, 0xb6, 0xee, 0x88, 0x8d, 0xa2, 0x70, 0xb7, 0xf5, 0xdd, 0x71, 0xea, + 0x0c, 0xc5, 0xb6, 0x8b, 0x31, 0xda, 0x98, 0x36, 0x15, 0xb6, 0xaf, 0x4d, 0x7d, 0x5b, 0x6a, 0x53, + 0xff, 0x76, 0xb5, 0x69, 0x60, 0x1b, 0xda, 0x04, 0x5b, 0x6a, 0xd3, 0xe0, 0xde, 0xb5, 0xa9, 0x05, + 0x67, 0x92, 0x91, 0x77, 0x02, 0x8d, 0xd0, 0x80, 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, 0xdb, + 0x1c, 0x5b, 0xe3, 0xb9, 0x8b, 0xe3, 0x99, 0x7f, 0xb5, 0x94, 0xd2, 0xea, 0x2f, 0x64, 0x3b, 0x07, + 0x0c, 0x3a, 0x9c, 0x53, 0xdc, 0xb7, 0xa4, 0x4a, 0x29, 0x1f, 0x7d, 0xc0, 0xd9, 0x59, 0xca, 0x31, + 0xb6, 0x69, 0x32, 0xfb, 0x72, 0xa6, 0x53, 0x14, 0xa3, 0x3d, 0x49, 0xec, 0xd1, 0xa4, 0x47, 0x1b, + 0xfa, 0xe9, 0xbb, 0x51, 0x57, 0xb6, 0x78, 0x2a, 0xdc, 0xdc, 0x2e, 0x53, 0xe1, 0xfe, 0x7a, 0x06, + 0x8e, 0xdf, 0x68, 0x2f, 0x51, 0xe1, 0xc1, 0x16, 0x34, 0xe3, 0x0d, 0x00, 0x06, 0x16, 0x4e, 0x2c, + 0x19, 0x74, 0x62, 0x79, 0x8f, 0x1c, 0x81, 0x28, 0x56, 0xe0, 0x72, 0x48, 0xcd, 0x1d, 0x58, 0xce, + 0xf9, 0xce, 0x9c, 0x77, 0xda, 0x4b, 0xb4, 0x96, 0xf0, 0x64, 0x91, 0xb8, 0x9f, 0x79, 0x89, 0xbb, + 0xc9, 0xef, 0xd6, 0x69, 0xe4, 0xe7, 0xb2, 0x1d, 0x83, 0x3e, 0x1d, 0xda, 0x9c, 0x3b, 0x1f, 0x4a, + 0xed, 0x95, 0x78, 0xee, 0x9d, 0x14, 0x92, 0x18, 0xc7, 0x34, 0x2e, 0xe9, 0x02, 0x3b, 0xe4, 0x99, + 0xa0, 0xde, 0x56, 0x81, 0xfd, 0x4e, 0xa6, 0x63, 0x70, 0xae, 0xc3, 0x2a, 0x30, 0xf5, 0x3f, 0xe5, + 0xfc, 0x98, 0x60, 0x7b, 0xfa, 0x84, 0xc7, 0x61, 0x40, 0x3c, 0x8d, 0x8c, 0x3a, 0xe0, 0x8a, 0xa3, + 0x3c, 0x3c, 0x1a, 0x0e, 0x08, 0xd8, 0x32, 0x2f, 0x79, 0x07, 0x4b, 0x0e, 0xb8, 0x92, 0x67, 0xb0, + 0x26, 0x91, 0xb0, 0x85, 0x7c, 0xf2, 0x9e, 0xe9, 0xa1, 0x55, 0xc0, 0xfa, 0x32, 0xc7, 0x17, 0x72, + 0x7a, 0xcf, 0xf4, 0xb8, 0x4d, 0x10, 0xa0, 0xd9, 0x22, 0x5d, 0x0d, 0xf3, 0x5c, 0x8a, 0x45, 0xda, + 0x15, 0xe9, 0x3e, 0xc5, 0xb3, 0xb1, 0xc7, 0x61, 0x40, 0x78, 0xb5, 0x0a, 0x37, 0x13, 0xd1, 0x5a, + 0xe1, 0x07, 0x8b, 0xad, 0x0d, 0x08, 0x18, 0x47, 0x8d, 0xae, 0x84, 0x8e, 0x75, 0xc8, 0xd1, 0x41, + 0x88, 0x26, 0x30, 0xe4, 0x2a, 0x8c, 0x54, 0x3d, 0xdd, 0x32, 0x74, 0xc7, 0x98, 0x6f, 0x7b, 0xad, + 0xb6, 0x27, 0x1b, 0xa5, 0xae, 0x67, 0xd8, 0x6d, 0x4f, 0x8b, 0x51, 0x90, 0xf7, 0xc2, 0xb0, 0x0f, + 0x99, 0x74, 0x1c, 0xdb, 0x91, 0x2d, 0x0f, 0xd7, 0x33, 0xa8, 0xe3, 0x68, 0x51, 0x02, 0xf2, 0x3e, + 0x18, 0xae, 0x58, 0x77, 0x6d, 0x9e, 0x40, 0xf5, 0xa6, 0x36, 0x23, 0xec, 0x10, 0x7c, 0x8a, 0x65, + 0x06, 0x88, 0x5a, 0xdb, 0x69, 0x68, 0x51, 0x42, 0x75, 0x33, 0x9b, 0x0c, 0x9d, 0x76, 0xff, 0x6e, + 0x5a, 0x2e, 0x45, 0x9d, 0xe9, 0xd0, 0x83, 0x14, 0x0d, 0x42, 0xd9, 0x97, 0x97, 0xdb, 0x85, 0x57, + 0xa1, 0xff, 0x06, 0x5d, 0xe7, 0x7e, 0x9f, 0x85, 0xd0, 0x55, 0xf8, 0x8e, 0x80, 0xc9, 0x27, 0xae, + 0x3e, 0x9d, 0xfa, 0xa5, 0x6c, 0x32, 0x28, 0xdc, 0xfd, 0x2b, 0xec, 0xf7, 0x42, 0x1f, 0x8a, 0xb2, + 0xe2, 0x1f, 0xf9, 0xa3, 0x00, 0x51, 0xdc, 0x51, 0x0f, 0x64, 0x9f, 0x4c, 0xfd, 0xb1, 0x42, 0x3c, + 0x52, 0xe0, 0xfd, 0x2b, 0xbd, 0x17, 0x60, 0x70, 0xc2, 0xb6, 0x5c, 0xd3, 0xf5, 0xa8, 0x55, 0xf7, + 0x15, 0xf6, 0x01, 0x66, 0x50, 0xd5, 0x43, 0xb0, 0xfc, 0x06, 0x49, 0xa2, 0xde, 0x8d, 0xf2, 0x92, + 0x67, 0x60, 0x00, 0x45, 0x8e, 0x7e, 0xd2, 0x52, 0x82, 0xf6, 0x25, 0x06, 0x8c, 0x3b, 0x49, 0x87, + 0xa4, 0xe4, 0x26, 0xf4, 0x4f, 0xac, 0x9a, 0x0d, 0xc3, 0xa1, 0x16, 0xfa, 0x0b, 0x4b, 0x0f, 0xb2, + 0xa3, 0x7d, 0x79, 0x19, 0xff, 0x45, 0x5a, 0xde, 0x9c, 0xba, 0x28, 0x16, 0x79, 0x85, 0x25, 0x60, + 0x67, 0xbe, 0x2f, 0x0b, 0x10, 0x16, 0x20, 0x0f, 0x41, 0x36, 0x48, 0x21, 0x87, 0x6e, 0x2a, 0x11, + 0x0d, 0xca, 0xe2, 0x52, 0x21, 0xc6, 0x76, 0x76, 0xcb, 0xb1, 0x7d, 0x13, 0x0a, 0xfc, 0xc4, 0x0b, + 0x3d, 0xc9, 0xa5, 0xe0, 0x65, 0x1d, 0x1b, 0x7c, 0x19, 0xe9, 0xf9, 0x66, 0x16, 0x2d, 0xcf, 0x88, + 0x57, 0x36, 0x67, 0x76, 0xa6, 0x0e, 0xbd, 0xf8, 0x17, 0xb9, 0x00, 0x79, 0x94, 0x62, 0x06, 0xf7, + 0xb1, 0x38, 0x4b, 0xc7, 0xe4, 0x87, 0x78, 0xd6, 0x4d, 0x13, 0xb6, 0xe5, 0xb1, 0xaa, 0xb1, 0xd5, + 0x43, 0x42, 0x2e, 0x02, 0x16, 0x91, 0x8b, 0x80, 0xa9, 0xff, 0x22, 0x9b, 0x12, 0xc3, 0xf2, 0xfe, + 0x1d, 0x26, 0xcf, 0x01, 0xe0, 0x93, 0x6e, 0x26, 0x4f, 0xff, 0x89, 0x06, 0x8e, 0x12, 0x64, 0x84, + 0x6a, 0x1b, 0xd9, 0x76, 0x84, 0xc4, 0xea, 0x6f, 0x66, 0x12, 0x81, 0x0f, 0xf7, 0x24, 0x47, 0xd9, + 0x2a, 0xcb, 0xee, 0xd2, 0x8c, 0xf5, 0xfb, 0x22, 0xb7, 0xb3, 0xbe, 0x88, 0x7e, 0xcb, 0x3e, 0x58, + 0xa6, 0x07, 0xf9, 0x2d, 0x5f, 0xcd, 0xa6, 0x85, 0x81, 0x3c, 0x9c, 0x2a, 0x7e, 0x2d, 0x30, 0x4a, + 0xf3, 0xdb, 0x49, 0xbe, 0x2e, 0xcc, 0xd4, 0x8f, 0xc2, 0xb1, 0x58, 0x70, 0x44, 0x91, 0xd7, 0xf1, + 0x42, 0xf7, 0x28, 0x8b, 0x9d, 0x83, 0x01, 0x44, 0xc8, 0xd4, 0xff, 0x9b, 0xe9, 0x1e, 0x1a, 0xf3, + 0xc0, 0x55, 0x27, 0x45, 0x00, 0xb9, 0xbf, 0x18, 0x01, 0xec, 0xc3, 0x36, 0xf8, 0x70, 0x0b, 0xe0, + 0x1d, 0x32, 0x79, 0xbc, 0xdd, 0x02, 0xf8, 0xb1, 0xcc, 0x96, 0x91, 0x4d, 0x0f, 0x5a, 0x06, 0xea, + 0xbf, 0xcf, 0xa4, 0x46, 0x20, 0xdd, 0x53, 0xbb, 0x5e, 0x84, 0x02, 0x77, 0xab, 0x11, 0xad, 0x92, + 0x72, 0xb6, 0x30, 0x68, 0x87, 0xf2, 0xa2, 0x0c, 0x99, 0x81, 0x3e, 0xde, 0x06, 0x23, 0x9e, 0xdb, + 0x38, 0xa5, 0x9d, 0x46, 0xa7, 0xc9, 0x51, 0xa0, 0xd5, 0xdf, 0xc8, 0x24, 0x02, 0xa2, 0x1e, 0xe0, + 0xb7, 0x85, 0x53, 0x75, 0x6e, 0xfb, 0x53, 0xb5, 0xfa, 0x47, 0xd9, 0xf4, 0x78, 0xac, 0x07, 0xf8, + 0x21, 0xfb, 0x71, 0x9c, 0xb6, 0xbb, 0x75, 0x6b, 0x11, 0x46, 0xa2, 0xb2, 0x10, 0xcb, 0xd6, 0xf9, + 0xf4, 0xa8, 0xb4, 0x1d, 0x5a, 0x11, 0xe3, 0xa1, 0xbe, 0x95, 0x49, 0x86, 0x92, 0x3d, 0xf0, 0xf9, + 0x69, 0x77, 0xda, 0x12, 0xfd, 0x94, 0x77, 0xc8, 0x5a, 0xb3, 0x1f, 0x9f, 0xf2, 0x0e, 0x59, 0x35, + 0x76, 0xf7, 0x29, 0x3f, 0x93, 0xed, 0x14, 0x89, 0xf7, 0xc0, 0x3f, 0xe8, 0x83, 0xb2, 0x90, 0x79, + 0xcb, 0xc4, 0xa7, 0x3d, 0xd4, 0x29, 0xf4, 0x6d, 0x07, 0x9e, 0x09, 0x3e, 0xbb, 0x1b, 0xe3, 0xa9, + 0xc2, 0x7a, 0x87, 0x28, 0xf2, 0xe1, 0x10, 0xd6, 0x3b, 0x64, 0xa8, 0xbc, 0xf3, 0x84, 0xf5, 0xab, + 0xd9, 0xed, 0x86, 0x7f, 0x3e, 0x12, 0x5e, 0x42, 0x78, 0x9f, 0xcd, 0x26, 0xc3, 0x92, 0x1f, 0xb8, + 0x98, 0xa6, 0xa0, 0x20, 0x02, 0xa4, 0x77, 0x14, 0x0e, 0xc7, 0x77, 0xb2, 0x68, 0xc4, 0x77, 0x5c, + 0x03, 0x71, 0x91, 0xb3, 0x3d, 0x91, 0x70, 0x5a, 0xf5, 0x1b, 0x99, 0x58, 0x0c, 0xef, 0x03, 0x39, + 0x42, 0xd8, 0xd5, 0x92, 0x44, 0x5e, 0xf2, 0x0f, 0x33, 0xf3, 0xb1, 0x18, 0xaa, 0xc1, 0xf7, 0x94, + 0xa9, 0xa7, 0x9b, 0x8d, 0x78, 0x79, 0x11, 0x13, 0xe0, 0x4b, 0x59, 0x18, 0x4b, 0x90, 0x92, 0x0b, + 0x91, 0x50, 0x3a, 0x78, 0x2c, 0x19, 0x73, 0x1e, 0xe7, 0x41, 0x75, 0x76, 0x70, 0x92, 0x7a, 0x01, + 0xf2, 0x65, 0x7d, 0x9d, 0x7f, 0x5b, 0x2f, 0x67, 0x69, 0xe8, 0xeb, 0xf2, 0x89, 0x1b, 0xe2, 0xc9, + 0x12, 0x9c, 0xe4, 0xf7, 0x21, 0xa6, 0x6d, 0x2d, 0x9a, 0x4d, 0x5a, 0xb1, 0x66, 0xcd, 0x46, 0xc3, + 0x74, 0xc5, 0xa5, 0xde, 0xe3, 0x9b, 0x1b, 0xc5, 0x8b, 0x9e, 0xed, 0xe9, 0x8d, 0x1a, 0xf5, 0xc9, + 0x6a, 0x9e, 0xd9, 0xa4, 0x35, 0xd3, 0xaa, 0x35, 0x91, 0x52, 0x62, 0x99, 0xce, 0x8a, 0x54, 0x78, + 0xb8, 0xdc, 0x6a, 0x5d, 0xb7, 0x2c, 0x6a, 0x54, 0xac, 0xf1, 0x75, 0x8f, 0xf2, 0xcb, 0xc0, 0x1c, + 0x3f, 0x12, 0xe4, 0x6f, 0xc3, 0x39, 0x9a, 0x31, 0x5e, 0x62, 0x04, 0x5a, 0x4a, 0x21, 0xf5, 0xd7, + 0xf2, 0x29, 0xe1, 0xdb, 0x0f, 0x91, 0xfa, 0xf8, 0x3d, 0x9d, 0xdf, 0xa2, 0xa7, 0xaf, 0x40, 0xdf, + 0x2d, 0xea, 0xe0, 0xf9, 0x16, 0xbf, 0x60, 0x40, 0x67, 0xf6, 0xbb, 0x1c, 0x24, 0xdf, 0xd0, 0x08, + 0x2a, 0xd2, 0x80, 0x33, 0x8b, 0xac, 0x9b, 0xd2, 0x3b, 0xb3, 0xb0, 0x8b, 0xce, 0xec, 0xc2, 0x8f, + 0xbc, 0x0e, 0xa7, 0x11, 0x9b, 0xd2, 0xad, 0x7d, 0x58, 0x15, 0xc6, 0xa8, 0xe2, 0x55, 0xa5, 0x77, + 0x6e, 0xa7, 0xf2, 0xe4, 0x83, 0x30, 0x14, 0x0c, 0x10, 0x93, 0xba, 0xe2, 0xe6, 0xa2, 0xcb, 0x38, + 0xe3, 0x01, 0xe0, 0x18, 0x18, 0x5d, 0xc8, 0xa2, 0x41, 0xc4, 0x22, 0xbc, 0xd4, 0x7f, 0x97, 0xe9, + 0x16, 0x46, 0xfe, 0xc0, 0x67, 0xe5, 0x97, 0xa0, 0xcf, 0xe0, 0x1f, 0x25, 0x74, 0xaa, 0x7b, 0xa0, + 0x79, 0x4e, 0xaa, 0xf9, 0x65, 0xd4, 0x3f, 0xcc, 0x74, 0x8d, 0x5e, 0x7f, 0xd8, 0x3f, 0xef, 0xb3, + 0xb9, 0x0e, 0x9f, 0x27, 0x26, 0xd1, 0x4b, 0x30, 0x6a, 0x86, 0xe1, 0x75, 0x6b, 0x61, 0xf8, 0x29, + 0xed, 0x98, 0x04, 0xc7, 0xd1, 0x75, 0x0d, 0x4e, 0xf9, 0x8e, 0x8f, 0x8e, 0xef, 0x21, 0xe6, 0xd6, + 0xda, 0x8e, 0xc9, 0xc7, 0xa5, 0x76, 0xc2, 0x8d, 0xb9, 0x8f, 0xb9, 0x37, 0x1d, 0x93, 0x55, 0xa0, + 0x7b, 0xab, 0xd4, 0xd2, 0x6b, 0x6b, 0xb6, 0x73, 0x07, 0xa3, 0x8c, 0xf2, 0xc1, 0xa9, 0x1d, 0xe3, + 0xf0, 0xdb, 0x3e, 0x98, 0x3c, 0x02, 0xc3, 0x2b, 0x8d, 0x36, 0x0d, 0xe2, 0x3a, 0xf2, 0xbb, 0x3e, + 0x6d, 0x88, 0x01, 0x83, 0x1b, 0x92, 0x73, 0x00, 0x48, 0xe4, 0x61, 0x6e, 0x01, 0xbc, 0xd8, 0xd3, + 0x06, 0x18, 0x64, 0x51, 0x74, 0xd7, 0x19, 0xae, 0xd5, 0x5c, 0x48, 0xb5, 0x86, 0x6d, 0xad, 0xd4, + 0x3c, 0xea, 0x34, 0xb1, 0xa1, 0xe8, 0xcc, 0xa0, 0x9d, 0x42, 0x0a, 0xbc, 0x3a, 0x71, 0x67, 0x6c, + 0x6b, 0x65, 0x91, 0x3a, 0x4d, 0xd6, 0xd4, 0xc7, 0x81, 0x88, 0xa6, 0x3a, 0x78, 0xe8, 0xc1, 0x3f, + 0x0e, 0xbd, 0x19, 0x34, 0xf1, 0x11, 0xfc, 0x34, 0x04, 0x3f, 0xac, 0x08, 0x83, 0x3c, 0xb8, 0x1d, + 0x17, 0x1a, 0xba, 0x30, 0x68, 0xc0, 0x41, 0x28, 0xaf, 0x53, 0x20, 0xbc, 0x2b, 0xb8, 0x57, 0xb7, + 0x26, 0x7e, 0xa9, 0x9f, 0xca, 0xa5, 0x05, 0xdc, 0xdf, 0x93, 0xa2, 0x85, 0xd3, 0x6a, 0x76, 0x47, + 0xd3, 0xea, 0x31, 0xab, 0xdd, 0xac, 0xe9, 0xad, 0x56, 0x6d, 0xd9, 0x6c, 0xe0, 0xb3, 0x2a, 0x5c, + 0xf8, 0xb4, 0x61, 0xab, 0xdd, 0x2c, 0xb5, 0x5a, 0x53, 0x1c, 0x48, 0x1e, 0x83, 0x31, 0x46, 0x87, + 0x9d, 0x14, 0x50, 0xe6, 0x91, 0x92, 0x31, 0xc0, 0xe8, 0xb0, 0x3e, 0xed, 0x03, 0xd0, 0x2f, 0x78, + 0xf2, 0xb5, 0xaa, 0x57, 0xeb, 0xe3, 0xcc, 0x5c, 0xd6, 0x73, 0x01, 0x1b, 0x3e, 0xb9, 0xf6, 0x6a, + 0x03, 0x7e, 0x79, 0x8c, 0x81, 0x6c, 0xb5, 0x9b, 0x3c, 0x22, 0x56, 0x1f, 0x22, 0x83, 0xdf, 0xe4, + 0x02, 0x8c, 0x30, 0x2e, 0x81, 0xc0, 0x78, 0xd8, 0xd8, 0x5e, 0x2d, 0x06, 0x25, 0x57, 0xe1, 0x44, + 0x04, 0xc2, 0x6d, 0x50, 0xfe, 0x4c, 0xa0, 0x57, 0x4b, 0xc5, 0xa9, 0x5f, 0xcc, 0x45, 0xd3, 0x00, + 0x1c, 0x40, 0x47, 0x9c, 0x86, 0x3e, 0xdb, 0x59, 0xa9, 0xb5, 0x9d, 0x86, 0x18, 0x7b, 0x05, 0xdb, + 0x59, 0xb9, 0xe9, 0x34, 0xc8, 0x49, 0x28, 0xb0, 0xde, 0x31, 0x0d, 0x31, 0xc4, 0x7a, 0xf5, 0x56, + 0xab, 0x62, 0x90, 0x12, 0xef, 0x10, 0x0c, 0x39, 0x5a, 0xab, 0xe3, 0xd6, 0x9e, 0x3b, 0x25, 0xf4, + 0xf2, 0x15, 0x2f, 0x81, 0xc4, 0x7e, 0xc2, 0x40, 0xa4, 0xfc, 0x20, 0x20, 0xc6, 0xc2, 0xc0, 0x6d, + 0x89, 0xc1, 0xfb, 0x24, 0xce, 0x42, 0x20, 0x43, 0x16, 0x7c, 0x13, 0x63, 0x90, 0x32, 0x90, 0x90, + 0xaa, 0x69, 0x1b, 0xe6, 0xb2, 0x49, 0xf9, 0xab, 0x8e, 0x5e, 0x7e, 0xf1, 0x9b, 0xc4, 0x6a, 0xa3, + 0x3e, 0x93, 0x59, 0x01, 0x21, 0x2f, 0x70, 0x25, 0xe4, 0x74, 0xb8, 0xf6, 0xf1, 0xbe, 0xe5, 0x76, + 0x5a, 0x0c, 0x85, 0x9a, 0x89, 0xe5, 0x71, 0x21, 0x54, 0xdf, 0xca, 0x25, 0x73, 0x41, 0x1c, 0x88, + 0x5d, 0x33, 0x0d, 0x20, 0x52, 0xbd, 0x84, 0x97, 0x6b, 0x81, 0xc7, 0x79, 0x88, 0xe9, 0xc0, 0x43, + 0x2a, 0x4b, 0x2e, 0x41, 0x3f, 0xff, 0xa2, 0x4a, 0x59, 0xd8, 0x3b, 0xe8, 0x22, 0xe6, 0xb6, 0xcc, + 0xe5, 0x65, 0xf4, 0x27, 0x0b, 0xd0, 0xe4, 0x02, 0xf4, 0x95, 0xe7, 0xaa, 0xd5, 0xd2, 0x9c, 0x7f, + 0x53, 0x8c, 0xef, 0x4b, 0x0c, 0xcb, 0xad, 0xb9, 0xba, 0xe5, 0x6a, 0x3e, 0x92, 0x3c, 0x02, 0x85, + 0xca, 0x02, 0x92, 0xf1, 0x57, 0x93, 0x83, 0x9b, 0x1b, 0xc5, 0x3e, 0xb3, 0xc5, 0xa9, 0x04, 0x0a, + 0xeb, 0xbd, 0x55, 0x29, 0x4b, 0xee, 0x12, 0xbc, 0xde, 0xbb, 0xa6, 0x81, 0xd7, 0xce, 0x5a, 0x80, + 0x26, 0x4f, 0xc3, 0x50, 0x95, 0x3a, 0xa6, 0xde, 0x98, 0x6b, 0xe3, 0x56, 0x51, 0x0a, 0xa5, 0xe8, + 0x22, 0xbc, 0x66, 0x21, 0x42, 0x8b, 0x90, 0x91, 0xb3, 0x90, 0x9f, 0x36, 0x2d, 0xff, 0x09, 0x03, + 0xfa, 0xb8, 0xaf, 0x9a, 0x96, 0xa7, 0x21, 0x54, 0xfd, 0xef, 0xd9, 0xf4, 0x84, 0x1a, 0x07, 0x30, + 0x1c, 0x77, 0x79, 0xd3, 0x1b, 0x53, 0x82, 0xfc, 0x1e, 0x94, 0x60, 0x19, 0x8e, 0x95, 0x8c, 0xa6, + 0x69, 0x95, 0xf0, 0xa7, 0x3b, 0x3b, 0x55, 0xc2, 0xe1, 0x2d, 0x3d, 0xa1, 0x8b, 0xa1, 0xc5, 0xf7, + 0xf0, 0xa0, 0xbc, 0x0c, 0x55, 0xd3, 0x39, 0xae, 0xd6, 0x5c, 0xd6, 0x6b, 0x75, 0x9e, 0x8b, 0x42, + 0x8b, 0x33, 0x55, 0xbf, 0x37, 0xbb, 0x45, 0x0e, 0x90, 0xfb, 0x51, 0xfa, 0xea, 0xe7, 0xb2, 0xdd, + 0xd3, 0xb0, 0xdc, 0x97, 0x42, 0xf9, 0x93, 0x6c, 0x4a, 0x52, 0x94, 0x3d, 0x49, 0xe2, 0x12, 0xf4, + 0x73, 0x36, 0x81, 0xab, 0x2d, 0xce, 0x38, 0x5c, 0x59, 0x71, 0xa6, 0xf3, 0xd1, 0x64, 0x0e, 0x4e, + 0x94, 0x96, 0x97, 0x69, 0xdd, 0x0b, 0xc3, 0x33, 0xcf, 0x85, 0x81, 0x52, 0x79, 0x38, 0x5a, 0x81, + 0x0f, 0xc3, 0x3b, 0x63, 0x40, 0x90, 0xd4, 0x72, 0x64, 0x11, 0x4e, 0xc5, 0xe1, 0x55, 0x6e, 0xa6, + 0xe7, 0xa5, 0x08, 0xb5, 0x09, 0x8e, 0xfc, 0x3f, 0xad, 0x43, 0xd9, 0xb4, 0x56, 0xe2, 0x74, 0xda, + 0xdb, 0xad, 0x95, 0x38, 0xb7, 0xa6, 0x96, 0x53, 0xbf, 0x94, 0x93, 0x73, 0xc7, 0xdc, 0xbf, 0x4e, + 0x51, 0xd7, 0x22, 0xae, 0xd0, 0xdb, 0x1d, 0x32, 0x4f, 0x8b, 0x28, 0x1f, 0x46, 0xdb, 0xf1, 0xbd, + 0x06, 0x83, 0x28, 0x03, 0x08, 0x94, 0xfd, 0xff, 0x02, 0x4a, 0x52, 0x81, 0x7c, 0xc9, 0x59, 0xe1, + 0x26, 0xe8, 0x56, 0x0f, 0x9f, 0x74, 0x67, 0xc5, 0x4d, 0x7f, 0xf8, 0xc4, 0x58, 0xa8, 0xdf, 0x93, + 0xed, 0x92, 0xee, 0xe5, 0xbe, 0x9c, 0x44, 0x7e, 0x28, 0xdb, 0x29, 0x71, 0xcb, 0x61, 0x75, 0xef, + 0x7a, 0x9b, 0x85, 0x73, 0xb8, 0x7d, 0xdf, 0xf6, 0x4f, 0x38, 0x8f, 0xcd, 0xf2, 0xf0, 0xd8, 0x37, + 0x4c, 0xcb, 0x20, 0x0f, 0xc0, 0xc9, 0x9b, 0xd5, 0x49, 0xad, 0x76, 0xa3, 0x32, 0x57, 0xae, 0xdd, + 0x9c, 0xab, 0x2e, 0x4c, 0x4e, 0x54, 0xa6, 0x2a, 0x93, 0xe5, 0xd1, 0x1e, 0x72, 0x1c, 0x8e, 0x85, + 0xa8, 0xe9, 0x9b, 0xb3, 0xa5, 0xb9, 0xd1, 0x0c, 0x19, 0x83, 0xe1, 0x10, 0x38, 0x3e, 0xbf, 0x38, + 0x9a, 0x7d, 0xec, 0xdd, 0x30, 0x88, 0xfb, 0x7f, 0x6e, 0x0b, 0x91, 0x21, 0xe8, 0x9f, 0x1f, 0xaf, + 0x4e, 0x6a, 0xb7, 0x90, 0x09, 0x40, 0xa1, 0x3c, 0x39, 0xc7, 0x18, 0x66, 0x1e, 0xfb, 0x5f, 0x19, + 0x80, 0xea, 0xd4, 0xe2, 0x82, 0x20, 0x1c, 0x84, 0xbe, 0xca, 0xdc, 0xad, 0xd2, 0x4c, 0x85, 0xd1, + 0xf5, 0x43, 0x7e, 0x7e, 0x61, 0x92, 0xd5, 0x30, 0x00, 0xbd, 0x13, 0x33, 0xf3, 0xd5, 0xc9, 0xd1, + 0x2c, 0x03, 0x6a, 0x93, 0xa5, 0xf2, 0x68, 0x8e, 0x01, 0x6f, 0x6b, 0x95, 0xc5, 0xc9, 0xd1, 0x3c, + 0xfb, 0x73, 0xa6, 0xba, 0x58, 0x5a, 0x1c, 0xed, 0x65, 0x7f, 0x4e, 0xe1, 0x9f, 0x05, 0xc6, 0xac, + 0x3a, 0xb9, 0x88, 0x3f, 0xfa, 0x58, 0x13, 0xa6, 0xfc, 0x5f, 0xfd, 0x0c, 0xc5, 0x58, 0x97, 0x2b, + 0xda, 0xe8, 0x00, 0xfb, 0xc1, 0x58, 0xb2, 0x1f, 0xc0, 0x1a, 0xa7, 0x4d, 0xce, 0xce, 0xdf, 0x9a, + 0x1c, 0x1d, 0x64, 0xbc, 0x66, 0x6f, 0x30, 0xf0, 0x10, 0xfb, 0x53, 0x9b, 0x65, 0x7f, 0x0e, 0x33, + 0x4e, 0xda, 0x64, 0x69, 0x66, 0xa1, 0xb4, 0x38, 0x3d, 0x3a, 0xc2, 0xda, 0x83, 0x3c, 0x8f, 0xf1, + 0x92, 0x73, 0xa5, 0xd9, 0xc9, 0xd1, 0x51, 0x41, 0x53, 0x9e, 0xa9, 0xcc, 0xdd, 0x18, 0x1d, 0xc3, + 0x86, 0xbc, 0x3e, 0x8b, 0x3f, 0x08, 0x2b, 0x80, 0x7f, 0x1d, 0x7f, 0xec, 0xc3, 0x50, 0x98, 0xaf, + 0xa2, 0xc5, 0x7f, 0x1a, 0x8e, 0xcf, 0x57, 0x6b, 0x8b, 0xaf, 0x2f, 0x4c, 0xc6, 0xe4, 0x3d, 0x06, + 0xc3, 0x3e, 0x62, 0xa6, 0x32, 0x77, 0xf3, 0x03, 0x5c, 0xda, 0x3e, 0x68, 0xb6, 0x34, 0x31, 0x5f, + 0x1d, 0xcd, 0xb2, 0x5e, 0xf1, 0x41, 0xb7, 0x2b, 0x73, 0xe5, 0xf9, 0xdb, 0xd5, 0xd1, 0xdc, 0x63, + 0x77, 0xfd, 0x5c, 0xc6, 0xf3, 0x8e, 0xb9, 0x62, 0x5a, 0xe4, 0x1c, 0x3c, 0x50, 0x9e, 0xbc, 0x55, + 0x99, 0x98, 0xac, 0xcd, 0x6b, 0x95, 0xeb, 0x95, 0xb9, 0x58, 0x4d, 0x27, 0x61, 0x2c, 0x8a, 0x2e, + 0x2d, 0x54, 0x46, 0x33, 0xe4, 0x14, 0x90, 0x28, 0xf8, 0xd5, 0xd2, 0xec, 0xd4, 0x68, 0x96, 0x28, + 0x70, 0x22, 0x0a, 0xaf, 0xcc, 0x2d, 0xde, 0x9c, 0x9b, 0x1c, 0xcd, 0x3d, 0xf6, 0x13, 0x19, 0x38, + 0x99, 0x1a, 0x80, 0x82, 0xa8, 0x70, 0x7e, 0x72, 0xa6, 0x54, 0x5d, 0xac, 0x4c, 0x54, 0x27, 0x4b, + 0xda, 0xc4, 0x74, 0x6d, 0xa2, 0xb4, 0x38, 0x79, 0x7d, 0x5e, 0x7b, 0xbd, 0x76, 0x7d, 0x72, 0x6e, + 0x52, 0x2b, 0xcd, 0x8c, 0xf6, 0x90, 0x47, 0xa0, 0xd8, 0x81, 0xa6, 0x3a, 0x39, 0x71, 0x53, 0xab, + 0x2c, 0xbe, 0x3e, 0x9a, 0x21, 0x0f, 0xc3, 0xb9, 0x8e, 0x44, 0xec, 0xf7, 0x68, 0x96, 0x9c, 0x87, + 0x33, 0x9d, 0x48, 0x5e, 0x9b, 0x19, 0xcd, 0x3d, 0xf6, 0x03, 0x19, 0x20, 0xc9, 0x08, 0x02, 0xe4, + 0x21, 0x38, 0xcb, 0xf4, 0xa2, 0xd6, 0xb9, 0x81, 0x0f, 0xc3, 0xb9, 0x54, 0x0a, 0xa9, 0x79, 0x45, + 0x78, 0xb0, 0x03, 0x89, 0x68, 0xdc, 0x59, 0x50, 0xd2, 0x09, 0xb0, 0x69, 0xbf, 0x94, 0x81, 0x93, + 0xa9, 0xdb, 0x0f, 0x72, 0x11, 0xde, 0x55, 0x2a, 0xcf, 0xb2, 0xbe, 0x99, 0x58, 0xac, 0xcc, 0xcf, + 0x55, 0x6b, 0xb3, 0x53, 0xa5, 0x1a, 0xd3, 0xbe, 0x9b, 0xd5, 0x58, 0x6f, 0x5e, 0x00, 0xb5, 0x0b, + 0xe5, 0xc4, 0x74, 0x69, 0xee, 0x3a, 0x1b, 0x7e, 0xe4, 0x5d, 0xf0, 0x50, 0x47, 0xba, 0xc9, 0xb9, + 0xd2, 0xf8, 0xcc, 0x64, 0x79, 0x34, 0x4b, 0x1e, 0x85, 0x87, 0x3b, 0x52, 0x95, 0x2b, 0x55, 0x4e, + 0x96, 0x1b, 0x2f, 0xbf, 0xf5, 0x1f, 0xce, 0xf7, 0xbc, 0xf5, 0xb5, 0xf3, 0x99, 0xdf, 0xfe, 0xda, + 0xf9, 0xcc, 0x1f, 0x7d, 0xed, 0x7c, 0xe6, 0x83, 0x57, 0x77, 0x12, 0x19, 0x82, 0x4f, 0x5b, 0x4b, + 0x05, 0x34, 0x05, 0x9e, 0xfa, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xff, 0x14, 0x9e, 0x19, + 0x5b, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -28630,6 +28757,52 @@ func (m *OneOf_IntegrationDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) } return len(dAtA) - i, nil } +func (m *OneOf_SPIFFEFederationCreate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OneOf_SPIFFEFederationCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SPIFFEFederationCreate != nil { + { + size, err := m.SPIFFEFederationCreate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + i-- + dAtA[i] = 0xc2 + } + return len(dAtA) - i, nil +} +func (m *OneOf_SPIFFEFederationDelete) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OneOf_SPIFFEFederationDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SPIFFEFederationDelete != nil { + { + size, err := m.SPIFFEFederationDelete.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + i-- + dAtA[i] = 0xca + } + return len(dAtA) - i, nil +} func (m *StreamStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -28654,12 +28827,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n612, err612 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err612 != nil { - return 0, err612 + n614, err614 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err614 != nil { + return 0, err614 } - i -= n612 - i = encodeVarintEvents(dAtA, i, uint64(n612)) + i -= n614 + i = encodeVarintEvents(dAtA, i, uint64(n614)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -28818,12 +28991,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n616, err616 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err616 != nil { - return 0, err616 + n618, err618 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err618 != nil { + return 0, err618 } - i -= n616 - i = encodeVarintEvents(dAtA, i, uint64(n616)) + i -= n618 + i = encodeVarintEvents(dAtA, i, uint64(n618)) i-- dAtA[i] = 0x1 i-- @@ -28971,12 +29144,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n620, err620 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err620 != nil { - return 0, err620 + n622, err622 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err622 != nil { + return 0, err622 } - i -= n620 - i = encodeVarintEvents(dAtA, i, uint64(n620)) + i -= n622 + i = encodeVarintEvents(dAtA, i, uint64(n622)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -34177,6 +34350,140 @@ func (m *AccessGraphSettingsUpdate) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *SPIFFEFederationCreate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SPIFFEFederationCreate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SPIFFEFederationCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SPIFFEFederationDelete) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SPIFFEFederationDelete) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SPIFFEFederationDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { offset -= sovEvents(v) base := offset @@ -39903,6 +40210,30 @@ func (m *OneOf_IntegrationDelete) Size() (n int) { } return n } +func (m *OneOf_SPIFFEFederationCreate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SPIFFEFederationCreate != nil { + l = m.SPIFFEFederationCreate.Size() + n += 2 + l + sovEvents(uint64(l)) + } + return n +} +func (m *OneOf_SPIFFEFederationDelete) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SPIFFEFederationDelete != nil { + l = m.SPIFFEFederationDelete.Size() + n += 2 + l + sovEvents(uint64(l)) + } + return n +} func (m *StreamStatus) Size() (n int) { if m == nil { return 0 @@ -41950,6 +42281,46 @@ func (m *AccessGraphSettingsUpdate) Size() (n int) { return n } +func (m *SPIFFEFederationCreate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ResourceMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.UserMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ConnectionMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *SPIFFEFederationDelete) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ResourceMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.UserMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ConnectionMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovEvents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -78525,6 +78896,76 @@ func (m *OneOf) Unmarshal(dAtA []byte) error { } m.Event = &OneOf_IntegrationDelete{v} iNdEx = postIndex + case 168: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SPIFFEFederationCreate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &SPIFFEFederationCreate{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &OneOf_SPIFFEFederationCreate{v} + iNdEx = postIndex + case 169: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SPIFFEFederationDelete", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &SPIFFEFederationDelete{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &OneOf_SPIFFEFederationDelete{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -95041,6 +95482,372 @@ func (m *AccessGraphSettingsUpdate) Unmarshal(dAtA []byte) error { } return nil } +func (m *SPIFFEFederationCreate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SPIFFEFederationCreate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SPIFFEFederationCreate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConnectionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SPIFFEFederationDelete) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SPIFFEFederationDelete: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SPIFFEFederationDelete: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConnectionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvents(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/api/types/events/oneof.go b/api/types/events/oneof.go index 76c0f408c3437..3f8971e15dba6 100644 --- a/api/types/events/oneof.go +++ b/api/types/events/oneof.go @@ -704,6 +704,14 @@ func ToOneOf(in AuditEvent) (*OneOf, error) { out.Event = &OneOf_IntegrationDelete{ IntegrationDelete: e, } + case *SPIFFEFederationCreate: + out.Event = &OneOf_SPIFFEFederationCreate{ + SPIFFEFederationCreate: e, + } + case *SPIFFEFederationDelete: + out.Event = &OneOf_SPIFFEFederationDelete{ + SPIFFEFederationDelete: e, + } default: slog.ErrorContext(context.Background(), "Attempted to convert dynamic event of unknown type into protobuf event.", "event_type", in.GetType()) diff --git a/lib/auth/accesspoint/accesspoint.go b/lib/auth/accesspoint/accesspoint.go index 9ed7fb66097c4..bab6caf387e3d 100644 --- a/lib/auth/accesspoint/accesspoint.go +++ b/lib/auth/accesspoint/accesspoint.go @@ -154,6 +154,7 @@ func NewAccessCache(cfg AccessCacheConfig) (*cache.Cache, error) { WebSession: cfg.Services.WebSessions(), WebToken: cfg.Services.WebTokens(), KubeWaitingContainers: cfg.Services, + SPIFFEFederations: nil, // TODO(noah) Component: teleport.Component(component...), MetricComponent: teleport.Component(metricComponent...), Tracer: tracer, diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 8d395e3977246..ce117a30b30c2 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -342,6 +342,12 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { return nil, trace.Wrap(err) } } + if cfg.SPIFFEFederations == nil { + cfg.SPIFFEFederations, err = local.NewSPIFFEFederationService(cfg.Backend) + if err != nil { + return nil, trace.Wrap(err) + } + } limiter, err := limiter.NewConnectionsLimiter(limiter.Config{ MaxConnections: defaults.LimiterMaxConcurrentSignatures, @@ -428,6 +434,7 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { AccessMonitoringRules: cfg.AccessMonitoringRules, CrownJewels: cfg.CrownJewels, BotInstance: cfg.BotInstance, + SPIFFEFederations: cfg.SPIFFEFederations, } as := Server{ @@ -619,6 +626,7 @@ type Services struct { services.BotInstance services.AccessGraphSecretsGetter services.DevicesGetter + services.SPIFFEFederations } // SecReportsClient returns the security reports client. diff --git a/lib/auth/authclient/api.go b/lib/auth/authclient/api.go index 7f0f89ab4e81b..7b9edd0712ec3 100644 --- a/lib/auth/authclient/api.go +++ b/lib/auth/authclient/api.go @@ -32,6 +32,7 @@ import ( crownjewelv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/crownjewel/v1" integrationpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1" kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1" + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/accesslist" @@ -1176,6 +1177,12 @@ type Cache interface { // GetAccessGraphSettings returns the access graph settings. GetAccessGraphSettings(context.Context) (*clusterconfigpb.AccessGraphSettings, error) + + // GetSPIFFEFederation gets a SPIFFE Federation by name. + GetSPIFFEFederation(ctx context.Context, name string) (*machineidv1.SPIFFEFederation, error) + // ListSPIFFEFederations lists all SPIFFE Federations using Google style + // pagination. + ListSPIFFEFederations(ctx context.Context, pageSize int, lastToken string) ([]*machineidv1.SPIFFEFederation, string, error) } type NodeWrapper struct { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 368bf60215f85..48b26e56271bc 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -5192,6 +5192,18 @@ func NewGRPCServer(cfg GRPCServerConfig) (*GRPCServer, error) { } machineidv1pb.RegisterWorkloadIdentityServiceServer(server, workloadIdentityService) + spiffeFederationService, err := machineidv1.NewSPIFFEFederationService(machineidv1.SPIFFEFederationServiceConfig{ + Authorizer: cfg.Authorizer, + Backend: cfg.AuthServer.Services.SPIFFEFederations, + Cache: cfg.AuthServer.Cache, + Clock: cfg.AuthServer.GetClock(), + Emitter: cfg.Emitter, + }) + if err != nil { + return nil, trace.Wrap(err, "creating SPIFFE federation service") + } + machineidv1pb.RegisterSPIFFEFederationServiceServer(server, spiffeFederationService) + dbObjectImportRuleService, err := dbobjectimportrulev1.NewDatabaseObjectImportRuleService(dbobjectimportrulev1.DatabaseObjectImportRuleServiceConfig{ Authorizer: cfg.Authorizer, Backend: cfg.AuthServer.Services, diff --git a/lib/auth/init.go b/lib/auth/init.go index 02e598816eb47..40ffecd563591 100644 --- a/lib/auth/init.go +++ b/lib/auth/init.go @@ -306,6 +306,9 @@ type InitConfig struct { // BotInstance is a service that manages Machine ID bot instances BotInstance services.BotInstance + + // SPIFFEFederations is a service that manages storing SPIFFE federations. + SPIFFEFederations services.SPIFFEFederations } // Init instantiates and configures an instance of AuthServer diff --git a/lib/auth/machineid/machineidv1/spiffe_federation_service.go b/lib/auth/machineid/machineidv1/spiffe_federation_service.go new file mode 100644 index 0000000000000..796da7b2b3c9a --- /dev/null +++ b/lib/auth/machineid/machineidv1/spiffe_federation_service.go @@ -0,0 +1,235 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package machineidv1 + +import ( + "context" + "log/slog" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "google.golang.org/protobuf/types/known/emptypb" + + "github.com/gravitational/teleport" + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" + "github.com/gravitational/teleport/api/types" + apievents "github.com/gravitational/teleport/api/types/events" + "github.com/gravitational/teleport/lib/authz" + "github.com/gravitational/teleport/lib/events" +) + +type spiffeFederationReader interface { + ListSPIFFEFederations(ctx context.Context, limit int, token string) ([]*machineidv1.SPIFFEFederation, string, error) + GetSPIFFEFederation(ctx context.Context, name string) (*machineidv1.SPIFFEFederation, error) +} + +type spiffeFederationReadWriter interface { + spiffeFederationReader + CreateSPIFFEFederation(ctx context.Context, federation *machineidv1.SPIFFEFederation) (*machineidv1.SPIFFEFederation, error) + DeleteSPIFFEFederation(ctx context.Context, name string) error +} + +// SPIFFEFederationServiceConfig holds configuration options for +// NewSPIFFEFederationService +type SPIFFEFederationServiceConfig struct { + Authorizer authz.Authorizer + Backend spiffeFederationReadWriter + Cache spiffeFederationReader + Logger *slog.Logger + Clock clockwork.Clock + Emitter apievents.Emitter +} + +// NewSPIFFEFederationService returns a new instance of the SPIFFEFederationService. +func NewSPIFFEFederationService( + cfg SPIFFEFederationServiceConfig, +) (*SPIFFEFederationService, error) { + switch { + case cfg.Backend == nil: + return nil, trace.BadParameter("backend service is required") + case cfg.Authorizer == nil: + return nil, trace.BadParameter("authorizer is required") + case cfg.Emitter == nil: + return nil, trace.BadParameter("emitter is required") + } + + if cfg.Logger == nil { + cfg.Logger = slog.With(teleport.ComponentKey, "spiffe_federation.service") + } + if cfg.Clock == nil { + cfg.Clock = clockwork.NewRealClock() + } + + return &SPIFFEFederationService{ + authorizer: cfg.Authorizer, + store: cfg.Backend, + logger: cfg.Logger, + clock: cfg.Clock, + }, nil +} + +// SPIFFEFederationService is an implementation of +// teleport.machineid.v1.SPIFFEFederationService +type SPIFFEFederationService struct { + machineidv1.UnimplementedSPIFFEFederationServiceServer + + authorizer authz.Authorizer + store spiffeFederationReadWriter + cache spiffeFederationReader + logger *slog.Logger + clock clockwork.Clock + emitter apievents.Emitter +} + +// GetSPIFFEFederation returns a SPIFFE Federation by name. +// Implements teleport.machineid.v1.SPIFFEFederationService/GetSPIFFEFederation +func (s *SPIFFEFederationService) GetSPIFFEFederation( + ctx context.Context, req *machineidv1.GetSPIFFEFederationRequest, +) (*machineidv1.SPIFFEFederation, error) { + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindSPIFFEFederation, types.VerbRead); err != nil { + return nil, trace.Wrap(err) + } + + if req.Name == "" { + return nil, trace.BadParameter("name: must be non-empty") + } + + federation, err := s.cache.GetSPIFFEFederation(ctx, req.Name) + if err != nil { + return nil, trace.Wrap(err) + } + + return federation, nil +} + +// ListSPIFFEFederations returns a list of SPIFFE Federations. It follows the +// Google API design guidelines for list pagination. +// Implements teleport.machineid.v1.SPIFFEFederationService/ListSPIFFEFederations +func (s *SPIFFEFederationService) ListSPIFFEFederations( + ctx context.Context, req *machineidv1.ListSPIFFEFederationsRequest, +) (*machineidv1.ListSPIFFEFederationsResponse, error) { + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindSPIFFEFederation, types.VerbRead, types.VerbList); err != nil { + return nil, trace.Wrap(err) + } + + federations, nextToken, err := s.cache.ListSPIFFEFederations( + ctx, + int(req.PageSize), + req.PageToken, + ) + if err != nil { + return nil, trace.Wrap(err) + } + + return &machineidv1.ListSPIFFEFederationsResponse{ + SpiffeFederations: federations, + NextPageToken: nextToken, + }, nil +} + +// DeleteSPIFFEFederation deletes a SPIFFE Federation by name. +// Implements teleport.machineid.v1.SPIFFEFederationService/DeleteSPIFFEFederation +func (s *SPIFFEFederationService) DeleteSPIFFEFederation( + ctx context.Context, req *machineidv1.DeleteSPIFFEFederationRequest, +) (*emptypb.Empty, error) { + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindSPIFFEFederation, types.VerbDelete); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.AuthorizeAdminAction(); err != nil { + return nil, trace.Wrap(err) + } + + if req.Name == "" { + return nil, trace.BadParameter("name: must be non-empty") + } + + if err := s.store.DeleteSPIFFEFederation(ctx, req.Name); err != nil { + return nil, trace.Wrap(err) + } + + if err := s.emitter.EmitAuditEvent(ctx, &apievents.SPIFFEFederationDelete{ + Metadata: apievents.Metadata{ + Code: events.SPIFFEFederationDeleteCode, + Type: events.SPIFFEFederationDeleteEvent, + }, + UserMetadata: authz.ClientUserMetadata(ctx), + ConnectionMetadata: authz.ConnectionMetadata(ctx), + ResourceMetadata: apievents.ResourceMetadata{ + Name: req.Name, + }, + }); err != nil { + s.logger.ErrorContext( + ctx, "Failed to emit audit event for deletion", + "error", err, + ) + } + + return &emptypb.Empty{}, nil +} + +// CreateSPIFFEFederation creates a new SPIFFE Federation. +// Implements teleport.machineid.v1.SPIFFEFederationService/CreateSPIFFEFederation +func (s *SPIFFEFederationService) CreateSPIFFEFederation( + ctx context.Context, req *machineidv1.CreateSPIFFEFederationRequest, +) (*machineidv1.SPIFFEFederation, error) { + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindSPIFFEFederation, types.VerbCreate); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.AuthorizeAdminAction(); err != nil { + return nil, trace.Wrap(err) + } + + created, err := s.store.CreateSPIFFEFederation(ctx, req.SpiffeFederation) + if err != nil { + return nil, trace.Wrap(err) + } + + if err := s.emitter.EmitAuditEvent(ctx, &apievents.SPIFFEFederationCreate{ + Metadata: apievents.Metadata{ + Code: events.SPIFFEFederationCreateCode, + Type: events.SPIFFEFederationCreateEvent, + }, + UserMetadata: authz.ClientUserMetadata(ctx), + ConnectionMetadata: authz.ConnectionMetadata(ctx), + ResourceMetadata: apievents.ResourceMetadata{ + Name: req.SpiffeFederation.Metadata.Name, + }, + }); err != nil { + s.logger.ErrorContext( + ctx, "Failed to emit audit event for creation", + "error", err, + ) + } + + return created, nil +} diff --git a/lib/cache/cache.go b/lib/cache/cache.go index a744ea0df5f25..6c938f571d0d5 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -182,6 +182,7 @@ func ForAuth(cfg Config) Config { {Kind: types.KindAccessMonitoringRule}, {Kind: types.KindDatabaseObject}, {Kind: types.KindAccessGraphSettings}, + {Kind: types.KindSPIFFEFederation}, } cfg.QueueSize = defaults.AuthQueueSize // We don't want to enable partial health for auth cache because auth uses an event stream @@ -519,6 +520,7 @@ type Cache struct { kubeWaitingContsCache *local.KubeWaitingContainerService notificationsCache services.Notifications accessMontoringRuleCache services.AccessMonitoringRules + spiffeFederationCache spiffeFederationCacher // closed indicates that the cache has been closed closed atomic.Bool @@ -691,6 +693,8 @@ type Config struct { Notifications services.Notifications // AccessMonitoringRules is the access monitoring rules service. AccessMonitoringRules services.AccessMonitoringRules + // SPIFFEFederations is the SPIFFE federations service. + SPIFFEFederations spiffeFederationReader // Backend is a backend for local cache Backend backend.Backend // MaxRetryPeriod is the maximum period between cache retries on failures @@ -926,6 +930,12 @@ func New(config Config) (*Cache, error) { return nil, trace.Wrap(err) } + spiffeFederationCache, err := local.NewSPIFFEFederationService(config.Backend) + if err != nil { + cancel() + return nil, trace.Wrap(err) + } + cs := &Cache{ ctx: ctx, cancel: cancel, @@ -966,6 +976,7 @@ func New(config Config) (*Cache, error) { eventsFanout: fanout, lowVolumeEventsFanout: utils.NewRoundRobin(lowVolumeFanouts), kubeWaitingContsCache: kubeWaitingContsCache, + spiffeFederationCache: spiffeFederationCache, Logger: log.WithFields(log.Fields{ teleport.ComponentKey: config.Component, }), diff --git a/lib/cache/collections.go b/lib/cache/collections.go index f4e8592c53d85..7ba7d5511297f 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -33,6 +33,7 @@ import ( crownjewelv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/crownjewel/v1" dbobjectv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/dbobject/v1" kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1" + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1" userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1" "github.com/gravitational/teleport/api/types" @@ -250,6 +251,7 @@ type cacheCollections struct { accessGraphSettings collectionReader[accessGraphSettingsGetter] globalNotifications collectionReader[notificationGetter] accessMonitoringRules collectionReader[accessMonitoringRuleGetter] + spiffeFederations collectionReader[spiffeFederationReader] } // setupCollections returns a registry of collections. @@ -742,6 +744,15 @@ func setupCollections(c *Cache, watches []types.WatchKind) (*cacheCollections, e watch: watch, } collections.byKind[resourceKind] = collections.accessGraphSettings + case types.KindSPIFFEFederation: + if c.Config.SPIFFEFederations == nil { + return nil, trace.BadParameter("missing parameter SPIFFEFederations") + } + collections.spiffeFederations = &genericCollection[*machineidv1.SPIFFEFederation, spiffeFederationReader, spiffeFederationExecutor]{ + cache: c, + watch: watch, + } + collections.byKind[resourceKind] = collections.spiffeFederations default: return nil, trace.BadParameter("resource %q is not supported", watch.Kind) } diff --git a/lib/cache/resource_spiffe_federation.go b/lib/cache/resource_spiffe_federation.go new file mode 100644 index 0000000000000..33a52dcd3038c --- /dev/null +++ b/lib/cache/resource_spiffe_federation.go @@ -0,0 +1,121 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package cache + +import ( + "context" + + "github.com/gravitational/trace" + + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" + "github.com/gravitational/teleport/api/types" +) + +// spiffeFederationReader is an interface that defines the methods for getting +// SPIFFE federations. This is returned as the reader for the SPIFFEFederations +// collection but is also used by the executor to read the full list of +// SPIFFE Federations on initialization. +type spiffeFederationReader interface { + ListSPIFFEFederations(ctx context.Context, pageSize int, nextToken string) ([]*machineidv1.SPIFFEFederation, string, error) + GetSPIFFEFederation(ctx context.Context, name string) (*machineidv1.SPIFFEFederation, error) +} + +// spiffeFederationCacher is used for storing and retrieving SPIFFE federations +// from the cache's local backend. +type spiffeFederationCacher interface { + spiffeFederationReader + UpsertSPIFFEFederation(ctx context.Context, federation *machineidv1.SPIFFEFederation) (*machineidv1.SPIFFEFederation, error) + DeleteSPIFFEFederation(ctx context.Context, name string) error + DeleteAllSPIFFEFederations(ctx context.Context) error +} + +type spiffeFederationExecutor struct{} + +var _ executor[*machineidv1.SPIFFEFederation, spiffeFederationReader] = spiffeFederationExecutor{} + +func (spiffeFederationExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*machineidv1.SPIFFEFederation, error) { + var out []*machineidv1.SPIFFEFederation + var nextToken string + for { + var page []*machineidv1.SPIFFEFederation + var err error + + page, nextToken, err = cache.Config.SPIFFEFederations.ListSPIFFEFederations(ctx, 0 /* default page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + out = append(out, page...) + if nextToken == "" { + break + } + } + return out, nil +} + +func (spiffeFederationExecutor) upsert(ctx context.Context, cache *Cache, resource *machineidv1.SPIFFEFederation) error { + _, err := cache.spiffeFederationCache.UpsertSPIFFEFederation(ctx, resource) + return trace.Wrap(err) +} + +func (spiffeFederationExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return trace.Wrap(cache.spiffeFederationCache.DeleteAllSPIFFEFederations(ctx)) +} + +func (spiffeFederationExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return trace.Wrap(cache.spiffeFederationCache.DeleteSPIFFEFederation(ctx, resource.GetName())) +} + +func (spiffeFederationExecutor) isSingleton() bool { return false } + +func (spiffeFederationExecutor) getReader(cache *Cache, cacheOK bool) spiffeFederationReader { + if cacheOK { + return cache.spiffeFederationCache + } + return cache.Config.SPIFFEFederations +} + +// ListSPIFFEFederations returns a paginated list of SPIFFE federations +func (c *Cache) ListSPIFFEFederations(ctx context.Context, pageSize int, nextToken string) ([]*machineidv1.SPIFFEFederation, string, error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListSPIFFEFederations") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.spiffeFederations) + + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + out, nextKey, err := rg.reader.ListSPIFFEFederations(ctx, pageSize, nextToken) + return out, nextKey, trace.Wrap(err) +} + +// GetSPIFFEFederation returns a single SPIFFE federation by name +func (c *Cache) GetSPIFFEFederation(ctx context.Context, name string) (*machineidv1.SPIFFEFederation, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetSPIFFEFederation") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.spiffeFederations) + + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + out, err := rg.reader.GetSPIFFEFederation(ctx, name) + return out, trace.Wrap(err) +} diff --git a/lib/events/api.go b/lib/events/api.go index 8ac05d415ddde..4a579a9348b87 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -757,6 +757,10 @@ const ( // SPIFFESVIDIssuedEvent is emitted when a SPIFFE SVID is issued. SPIFFESVIDIssuedEvent = "spiffe.svid.issued" + // SPIFFEFederationCreateEvent is emitted when a SPIFFE federation is created. + SPIFFEFederationCreateEvent = "spiffe.federation.create" + // SPIFFEFederationDeleteEvent is emitted when a SPIFFE federation is deleted. + SPIFFEFederationDeleteEvent = "spiffe.federation.delete" // AuthPreferenceUpdateEvent is emitted when a user updates the cluster authentication preferences. AuthPreferenceUpdateEvent = "auth_preference.update" diff --git a/lib/events/codes.go b/lib/events/codes.go index 50f0d56147a93..253769fc4ffc6 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -609,6 +609,10 @@ const ( SPIFFESVIDIssuedSuccessCode = "TSPIFFE000I" // SPIFFESVIDIssuedFailureCode is the SPIFFE SVID issued failure code. SPIFFESVIDIssuedFailureCode = "TSPIFFE000E" + // SPIFFEFederationCreateCode is the SPIFFE Federation created code. + SPIFFEFederationCreateCode = "TSPIFFE001I" + // SPIFFEFederationDeleteCode is the SPIFFE Federation deleted code. + SPIFFEFederationDeleteCode = "TSPIFFE002I" // AuthPreferenceUpdateCode is the auth preference updated event code. AuthPreferenceUpdateCode = "TCAUTH001I" diff --git a/lib/services/local/events.go b/lib/services/local/events.go index 0cc0d9938a10c..913e574c389a3 100644 --- a/lib/services/local/events.go +++ b/lib/services/local/events.go @@ -224,6 +224,8 @@ func (e *EventsService) NewWatcher(ctx context.Context, watch types.Watch) (type parser = newAccessGraphSecretAuthorizedKeyParser() case types.KindAccessGraphSettings: parser = newAccessGraphSettingsParser() + case types.KindSPIFFEFederation: + parser = newSPIFFEFederationParser() default: if watch.AllowPartialSuccess { continue @@ -2174,6 +2176,34 @@ func (p *botInstanceParser) parse(event backend.Event) (types.Resource, error) { } } +func newSPIFFEFederationParser() *spiffeFederationParser { + return &spiffeFederationParser{ + baseParser: newBaseParser(backend.Key(spiffeFederationPrefix)), + } +} + +type spiffeFederationParser struct { + baseParser +} + +func (p *spiffeFederationParser) parse(event backend.Event) (types.Resource, error) { + switch event.Type { + case types.OpDelete: + return resourceHeader(event, types.KindSPIFFEFederation, types.V1, 0) + case types.OpPut: + spiffeFed, err := services.UnmarshalSPIFFEFederation( + event.Item.Value, + services.WithExpires(event.Item.Expires), + services.WithRevision(event.Item.Revision)) + if err != nil { + return nil, trace.Wrap(err) + } + return types.Resource153ToLegacy(spiffeFed), nil + default: + return nil, trace.BadParameter("event %v is not supported", event.Type) + } +} + func newInstanceParser() *instanceParser { return &instanceParser{ baseParser: newBaseParser(backend.Key(instancePrefix)), diff --git a/lib/services/local/spiffe_federation.go b/lib/services/local/spiffe_federation.go new file mode 100644 index 0000000000000..e3b925d9dc3b0 --- /dev/null +++ b/lib/services/local/spiffe_federation.go @@ -0,0 +1,112 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package local + +import ( + "context" + + "github.com/gravitational/trace" + + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/services/local/generic" +) + +const ( + spiffeFederationPrefix = "spiffe_federation" +) + +// SPIFFEFederationService exposes backend functionality for storing +// SPIFFEFederations +type SPIFFEFederationService struct { + service *generic.ServiceWrapper[*machineidv1.SPIFFEFederation] +} + +// NewSPIFFEFederationService creates a new SPIFFEFederationService. +func NewSPIFFEFederationService( + backend backend.Backend, +) (*SPIFFEFederationService, error) { + service, err := generic.NewServiceWrapper(backend, + types.KindSPIFFEFederation, + spiffeFederationPrefix, + services.MarshalSPIFFEFederation, + services.UnmarshalSPIFFEFederation, + ) + if err != nil { + return nil, trace.Wrap(err) + } + return &SPIFFEFederationService{ + service: service, + }, nil +} + +// CreateSPIFFEFederation inserts a new SPIFFEFederations into the backend. +func (b *SPIFFEFederationService) CreateSPIFFEFederation( + ctx context.Context, federation *machineidv1.SPIFFEFederation, +) (*machineidv1.SPIFFEFederation, error) { + if err := services.ValidateSPIFFEFederation(federation); err != nil { + return nil, trace.Wrap(err) + } + created, err := b.service.CreateResource(ctx, federation) + return created, trace.Wrap(err) +} + +// GetSPIFFEFederation retrieves a specific SPIFFEFederations given a name +func (b *SPIFFEFederationService) GetSPIFFEFederation( + ctx context.Context, name string, +) (*machineidv1.SPIFFEFederation, error) { + federation, err := b.service.GetResource(ctx, name) + return federation, trace.Wrap(err) +} + +// ListSPIFFEFederations lists all SPIFFEFederations using a given page size +// and last key. +func (b *SPIFFEFederationService) ListSPIFFEFederations( + ctx context.Context, pageSize int, currentToken string, +) ([]*machineidv1.SPIFFEFederation, string, error) { + r, nextToken, err := b.service.ListResources(ctx, pageSize, currentToken) + return r, nextToken, trace.Wrap(err) +} + +// DeleteSPIFFEFederation deletes a specific SPIFFEFederations. +func (b *SPIFFEFederationService) DeleteSPIFFEFederation( + ctx context.Context, name string, +) error { + return trace.Wrap(b.service.DeleteResource(ctx, name)) +} + +// DeleteAllSPIFFEFederations deletes all SPIFFE federations, this is typically +// only meant to be used by the cache. +func (b *SPIFFEFederationService) DeleteAllSPIFFEFederations( + ctx context.Context, +) error { + return trace.Wrap(b.service.DeleteAllResources(ctx)) +} + +// UpsertSPIFFEFederation upserts a SPIFFEFederations. Prefer using +// CreateSPIFFEFederation. This is only designed for usage by the cache. +func (b *SPIFFEFederationService) UpsertSPIFFEFederation( + ctx context.Context, federation *machineidv1.SPIFFEFederation, +) (*machineidv1.SPIFFEFederation, error) { + if err := services.ValidateSPIFFEFederation(federation); err != nil { + return nil, trace.Wrap(err) + } + upserted, err := b.service.UpsertResource(ctx, federation) + return upserted, trace.Wrap(err) +} diff --git a/lib/services/presets.go b/lib/services/presets.go index b24c51af4d3dc..bbb2bb5abc696 100644 --- a/lib/services/presets.go +++ b/lib/services/presets.go @@ -178,6 +178,7 @@ func NewPresetEditorRole() types.Role { types.NewRule(types.KindVnetConfig, RW()), types.NewRule(types.KindBotInstance, RW()), types.NewRule(types.KindAccessGraphSettings, RW()), + types.NewRule(types.KindSPIFFEFederation, RW()), }, }, }, diff --git a/lib/services/role.go b/lib/services/role.go index 8c760d56e98e6..5ed07c9e61b85 100644 --- a/lib/services/role.go +++ b/lib/services/role.go @@ -76,6 +76,7 @@ var DefaultImplicitRules = []types.Rule{ types.NewRule(types.KindKubernetesCluster, RO()), types.NewRule(types.KindUsageEvent, []string{types.VerbCreate}), types.NewRule(types.KindVnetConfig, RO()), + types.NewRule(types.KindSPIFFEFederation, RO()), } // DefaultCertAuthorityRules provides access the minimal set of resources diff --git a/lib/services/spiffe_federation.go b/lib/services/spiffe_federation.go new file mode 100644 index 0000000000000..05a4e2554494f --- /dev/null +++ b/lib/services/spiffe_federation.go @@ -0,0 +1,111 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package services + +import ( + "context" + "net/url" + "strings" + + "github.com/gravitational/trace" + "github.com/spiffe/go-spiffe/v2/bundle/spiffebundle" + "github.com/spiffe/go-spiffe/v2/spiffeid" + + machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" + "github.com/gravitational/teleport/api/types" +) + +// SPIFFEFederations is an interface for the SPIFFEFederations service. +type SPIFFEFederations interface { + // GetSPIFFEFederation gets a SPIFFE Federation by name. + GetSPIFFEFederation(ctx context.Context, name string) (*machineidv1.SPIFFEFederation, error) + // ListSPIFFEFederations lists all SPIFFE Federations using Google style + // pagination. + ListSPIFFEFederations(ctx context.Context, pageSize int, lastToken string) ([]*machineidv1.SPIFFEFederation, string, error) + // CreateSPIFFEFederation creates a new SPIFFE Federation. + CreateSPIFFEFederation(ctx context.Context, spiffeFederation *machineidv1.SPIFFEFederation) (*machineidv1.SPIFFEFederation, error) + // DeleteSPIFFEFederation deletes a SPIFFE Federation by name. + DeleteSPIFFEFederation(ctx context.Context, name string) error +} + +// MarshalSPIFFEFederation marshals the SPIFFEFederations object into a JSON byte array. +func MarshalSPIFFEFederation(object *machineidv1.SPIFFEFederation, opts ...MarshalOption) ([]byte, error) { + object.Version = types.V1 + object.Kind = types.KindSPIFFEFederation + return MarshalProtoResource(object, opts...) +} + +// UnmarshalSPIFFEFederation unmarshals the SPIFFEFederations object from a JSON byte array. +func UnmarshalSPIFFEFederation(data []byte, opts ...MarshalOption) (*machineidv1.SPIFFEFederation, error) { + return UnmarshalProtoResource[*machineidv1.SPIFFEFederation](data, opts...) +} + +// ValidateSPIFFEFederation validates the SPIFFEFederations object. +func ValidateSPIFFEFederation(s *machineidv1.SPIFFEFederation) error { + switch { + case s == nil: + return trace.BadParameter("object cannot be nil") + case s.Metadata.Name == "": + return trace.BadParameter("metadata.name: is required") + case s.Spec == nil: + return trace.BadParameter("spec: is required") + case s.Spec.BundleSource == nil: + return trace.BadParameter("spec.bundle_source: is required") + case s.Spec.BundleSource.HttpsWeb != nil && s.Spec.BundleSource.Static != nil: + return trace.BadParameter("spec.bundle_source: at most one of https_web or static can be set") + case s.Spec.BundleSource.HttpsWeb == nil && s.Spec.BundleSource.Static == nil: + return trace.BadParameter("spec.bundle_source: at least one of https_web or static must be set") + } + + // Validate name is valid SPIFFE Trust Domain name without the "spiffe://" + name := s.Metadata.Name + if strings.HasPrefix(name, "spiffe://") { + return trace.BadParameter("metadata.name: must not include the spiffe:// prefix") + } + td, err := spiffeid.TrustDomainFromString(name) + if err != nil { + return trace.Wrap(err, "validating metadata.name") + } + + // Validate Static + if s.Spec.BundleSource.Static != nil { + if s.Spec.BundleSource.Static.Bundle == "" { + return trace.BadParameter("spec.bundle_source.static.bundle: is required") + } + // Validate contents + // TODO(noah): Is this a bit intense to run on every validation? + // This could easily be moved into reconciliation... + _, err := spiffebundle.Parse(td, []byte(s.Spec.BundleSource.Static.Bundle)) + if err != nil { + return trace.Wrap(err, "validating spec.bundle_source.static.bundle") + } + } + + // Validate HTTPSWeb + if s.Spec.BundleSource.HttpsWeb != nil { + if s.Spec.BundleSource.HttpsWeb.BundleEndpointUrl == "" { + return trace.BadParameter("spec.bundle_source.https_web.bundle_endpoint_url: is required") + } + _, err := url.Parse(s.Spec.BundleSource.HttpsWeb.BundleEndpointUrl) + if err != nil { + return trace.Wrap(err, "validating spec.bundle_source.https_web.bundle_endpoint_url") + } + // TODO: Enforce HTTPS?? + } + + return nil +}