From 233c32ae6326da542f8a1215376365de3b34a1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pab=C3=B3n?= Date: Wed, 9 Jan 2019 03:06:00 -0500 Subject: [PATCH] Ownership support for volumes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ownership adds the management of the Ownership object in the volume spec, which is used to determine permissions on access to a volume. Signed-off-by: Luis Pabón --- SDK_CHANGELOG.md | 7 +- api/api.go | 29 + api/api.pb.go | 2168 +++++++++-------- api/api.proto | 53 +- api/ownership.go | 229 ++ api/ownership_test.go | 448 ++++ api/server/sdk/api/api.swagger.json | 52 +- api/server/sdk/cloud_backup.go | 28 + api/server/sdk/cloud_backup_test.go | 30 +- api/server/sdk/server_interceptors.go | 37 +- api/server/sdk/utils.go | 25 + api/server/sdk/volume.go | 11 + api/server/sdk/volume_node_ops.go | 41 +- api/server/sdk/volume_node_ops_test.go | 120 +- api/server/sdk/volume_ops.go | 90 +- api/server/sdk/volume_ops_test.go | 41 +- api/server/sdk/volume_snapshot.go | 32 +- api/server/sdk/volume_snapshot_test.go | 36 + api/server/testutils_test.go | 5 +- api/server/volume_test.go | 13 + cmd/osd-token-generator/main.go | 6 + pkg/auth/auth.go | 7 + pkg/auth/token.go | 2 +- pkg/auth/userinfo.go | 22 +- pkg/auth/userinfo_test.go | 4 +- .../common/default_store_enumerator.go | 9 + volume/drivers/fake/fake.go | 1 + 27 files changed, 2456 insertions(+), 1090 deletions(-) create mode 100644 api/ownership.go create mode 100644 api/ownership_test.go diff --git a/SDK_CHANGELOG.md b/SDK_CHANGELOG.md index 6b8f1f20c..26b4e1cc4 100644 --- a/SDK_CHANGELOG.md +++ b/SDK_CHANGELOG.md @@ -1,10 +1,11 @@ # Changelog -> NOTE: The SDK is still in tech preview. Once officially released, this changelog will also -> use the SDK version numbers. - ## Releases +### v0.37.0 - Tech Preview (1/16/2019) + +* Ownership support in the VolumeSpec + ### v0.36.0 - Tech Preview (1/7/2019) * Refactor confusing labels. diff --git a/api/api.go b/api/api.go index 93bb27f02..e8f77c864 100644 --- a/api/api.go +++ b/api/api.go @@ -1,6 +1,7 @@ package api import ( + "context" "fmt" "math" "strconv" @@ -8,6 +9,7 @@ import ( "time" "github.com/golang/protobuf/ptypes" + "github.com/libopenstorage/openstorage/pkg/auth" "github.com/mohae/deepcopy" ) @@ -943,3 +945,30 @@ func (l *VolumeLocator) MergeVolumeSpecLabels(s *VolumeSpec) *VolumeLocator { return l } + +func (v *Volume) IsPermitted(ctx context.Context) bool { + return v.GetSpec().IsPermitted(ctx) +} + +func (v *VolumeSpec) IsPermitted(ctx context.Context) bool { + if v.GetOwnership() != nil { + if userinfo, ok := auth.NewUserInfoFromContext(ctx); ok { + // Check Access + return v.IsPermittedFromUserInfo(userinfo) + } else { + // There is no user information in the context so + // authorization is not running + return true + } + } + + // There is no ownership on this volume, so allow access + return true +} + +func (v *VolumeSpec) IsPermittedFromUserInfo(user *auth.UserInfo) bool { + if v.GetOwnership() != nil { + return v.GetOwnership().IsPermitted(user) + } + return true +} diff --git a/api/api.pb.go b/api/api.pb.go index 02dd171a2..a74f0c9c0 100644 --- a/api/api.pb.go +++ b/api/api.pb.go @@ -85,7 +85,7 @@ func (x Status) String() string { return proto.EnumName(Status_name, int32(x)) } func (Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{0} + return fileDescriptor_api_2699f5da74147c2d, []int{0} } type DriverType int32 @@ -120,7 +120,7 @@ func (x DriverType) String() string { return proto.EnumName(DriverType_name, int32(x)) } func (DriverType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{1} + return fileDescriptor_api_2699f5da74147c2d, []int{1} } type FSType int32 @@ -164,7 +164,7 @@ func (x FSType) String() string { return proto.EnumName(FSType_name, int32(x)) } func (FSType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{2} + return fileDescriptor_api_2699f5da74147c2d, []int{2} } type GraphDriverChangeType int32 @@ -193,7 +193,7 @@ func (x GraphDriverChangeType) String() string { return proto.EnumName(GraphDriverChangeType_name, int32(x)) } func (GraphDriverChangeType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{3} + return fileDescriptor_api_2699f5da74147c2d, []int{3} } type SeverityType int32 @@ -222,7 +222,7 @@ func (x SeverityType) String() string { return proto.EnumName(SeverityType_name, int32(x)) } func (SeverityType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{4} + return fileDescriptor_api_2699f5da74147c2d, []int{4} } type ResourceType int32 @@ -254,7 +254,7 @@ func (x ResourceType) String() string { return proto.EnumName(ResourceType_name, int32(x)) } func (ResourceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{5} + return fileDescriptor_api_2699f5da74147c2d, []int{5} } type AlertActionType int32 @@ -283,7 +283,7 @@ func (x AlertActionType) String() string { return proto.EnumName(AlertActionType_name, int32(x)) } func (AlertActionType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{6} + return fileDescriptor_api_2699f5da74147c2d, []int{6} } type VolumeActionParam int32 @@ -311,7 +311,7 @@ func (x VolumeActionParam) String() string { return proto.EnumName(VolumeActionParam_name, int32(x)) } func (VolumeActionParam) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{7} + return fileDescriptor_api_2699f5da74147c2d, []int{7} } type CosType int32 @@ -340,7 +340,7 @@ func (x CosType) String() string { return proto.EnumName(CosType_name, int32(x)) } func (CosType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{8} + return fileDescriptor_api_2699f5da74147c2d, []int{8} } type IoProfile int32 @@ -372,7 +372,7 @@ func (x IoProfile) String() string { return proto.EnumName(IoProfile_name, int32(x)) } func (IoProfile) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{9} + return fileDescriptor_api_2699f5da74147c2d, []int{9} } // VolumeState represents the state of a volume. @@ -430,7 +430,7 @@ func (x VolumeState) String() string { return proto.EnumName(VolumeState_name, int32(x)) } func (VolumeState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{10} + return fileDescriptor_api_2699f5da74147c2d, []int{10} } // VolumeStatus represents a health status for a volume. @@ -468,7 +468,7 @@ func (x VolumeStatus) String() string { return proto.EnumName(VolumeStatus_name, int32(x)) } func (VolumeStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{11} + return fileDescriptor_api_2699f5da74147c2d, []int{11} } type StorageMedium int32 @@ -497,7 +497,7 @@ func (x StorageMedium) String() string { return proto.EnumName(StorageMedium_name, int32(x)) } func (StorageMedium) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{12} + return fileDescriptor_api_2699f5da74147c2d, []int{12} } type ClusterNotify int32 @@ -518,7 +518,7 @@ func (x ClusterNotify) String() string { return proto.EnumName(ClusterNotify_name, int32(x)) } func (ClusterNotify) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{13} + return fileDescriptor_api_2699f5da74147c2d, []int{13} } type AttachState int32 @@ -547,7 +547,7 @@ func (x AttachState) String() string { return proto.EnumName(AttachState_name, int32(x)) } func (AttachState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{14} + return fileDescriptor_api_2699f5da74147c2d, []int{14} } type OperationFlags int32 @@ -574,7 +574,7 @@ func (x OperationFlags) String() string { return proto.EnumName(OperationFlags_name, int32(x)) } func (OperationFlags) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{15} + return fileDescriptor_api_2699f5da74147c2d, []int{15} } // Defines times of day @@ -620,7 +620,7 @@ func (x SdkTimeWeekday) String() string { return proto.EnumName(SdkTimeWeekday_name, int32(x)) } func (SdkTimeWeekday) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{16} + return fileDescriptor_api_2699f5da74147c2d, []int{16} } // CloudBackup operations types @@ -650,7 +650,7 @@ func (x SdkCloudBackupOpType) String() string { return proto.EnumName(SdkCloudBackupOpType_name, int32(x)) } func (SdkCloudBackupOpType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{17} + return fileDescriptor_api_2699f5da74147c2d, []int{17} } // CloudBackup status types @@ -700,7 +700,7 @@ func (x SdkCloudBackupStatusType) String() string { return proto.EnumName(SdkCloudBackupStatusType_name, int32(x)) } func (SdkCloudBackupStatusType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{18} + return fileDescriptor_api_2699f5da74147c2d, []int{18} } // SdkCloudBackupRequestedState defines states to set a specified backup or restore @@ -735,7 +735,7 @@ func (x SdkCloudBackupRequestedState) String() string { return proto.EnumName(SdkCloudBackupRequestedState_name, int32(x)) } func (SdkCloudBackupRequestedState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{19} + return fileDescriptor_api_2699f5da74147c2d, []int{19} } type SdkServiceCapability_OpenStorageService_Type int32 @@ -804,7 +804,7 @@ func (x SdkServiceCapability_OpenStorageService_Type) String() string { return proto.EnumName(SdkServiceCapability_OpenStorageService_Type_name, int32(x)) } func (SdkServiceCapability_OpenStorageService_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{176, 0, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{177, 0, 0} } // These values are constants that can be used by the @@ -817,7 +817,7 @@ const ( // SDK version major value of this specification SdkVersion_Major SdkVersion_Version = 0 // SDK version minor value of this specification - SdkVersion_Minor SdkVersion_Version = 36 + SdkVersion_Minor SdkVersion_Version = 37 // SDK version patch value of this specification SdkVersion_Patch SdkVersion_Version = 0 ) @@ -825,13 +825,13 @@ const ( var SdkVersion_Version_name = map[int32]string{ 0: "MUST_HAVE_ZERO_VALUE", // Duplicate value: 0: "Major", - 36: "Minor", + 37: "Minor", // Duplicate value: 0: "Patch", } var SdkVersion_Version_value = map[string]int32{ "MUST_HAVE_ZERO_VALUE": 0, "Major": 0, - "Minor": 36, + "Minor": 37, "Patch": 0, } @@ -839,7 +839,7 @@ func (x SdkVersion_Version) String() string { return proto.EnumName(SdkVersion_Version_name, int32(x)) } func (SdkVersion_Version) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{177, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{178, 0} } type CloudMigrate_OperationType int32 @@ -871,7 +871,7 @@ func (x CloudMigrate_OperationType) String() string { return proto.EnumName(CloudMigrate_OperationType_name, int32(x)) } func (CloudMigrate_OperationType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{179, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{180, 0} } type CloudMigrate_Stage int32 @@ -903,7 +903,7 @@ func (x CloudMigrate_Stage) String() string { return proto.EnumName(CloudMigrate_Stage_name, int32(x)) } func (CloudMigrate_Stage) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{179, 1} + return fileDescriptor_api_2699f5da74147c2d, []int{180, 1} } type CloudMigrate_Status int32 @@ -941,7 +941,7 @@ func (x CloudMigrate_Status) String() string { return proto.EnumName(CloudMigrate_Status_name, int32(x)) } func (CloudMigrate_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{179, 2} + return fileDescriptor_api_2699f5da74147c2d, []int{180, 2} } // Defines the types of enforcement on the given rules @@ -967,7 +967,7 @@ func (x VolumePlacementRule_EnforcementType) String() string { return proto.EnumName(VolumePlacementRule_EnforcementType_name, int32(x)) } func (VolumePlacementRule_EnforcementType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{218, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{219, 0} } // This specifies the type an affinity rule can take @@ -993,7 +993,7 @@ func (x VolumePlacementRule_AffinityRuleType) String() string { return proto.EnumName(VolumePlacementRule_AffinityRuleType_name, int32(x)) } func (VolumePlacementRule_AffinityRuleType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{218, 1} + return fileDescriptor_api_2699f5da74147c2d, []int{219, 1} } // This defines operator types used in a label matching rule @@ -1035,7 +1035,7 @@ func (x LabelSelectorRequirement_Operator) String() string { return proto.EnumName(LabelSelectorRequirement_Operator_name, int32(x)) } func (LabelSelectorRequirement_Operator) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{219, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{220, 0} } // StorageResource groups properties of a storage device. @@ -1077,7 +1077,7 @@ func (m *StorageResource) Reset() { *m = StorageResource{} } func (m *StorageResource) String() string { return proto.CompactTextString(m) } func (*StorageResource) ProtoMessage() {} func (*StorageResource) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{0} + return fileDescriptor_api_2699f5da74147c2d, []int{0} } func (m *StorageResource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StorageResource.Unmarshal(m, b) @@ -1220,7 +1220,7 @@ func (m *StoragePool) Reset() { *m = StoragePool{} } func (m *StoragePool) String() string { return proto.CompactTextString(m) } func (*StoragePool) ProtoMessage() {} func (*StoragePool) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{1} + return fileDescriptor_api_2699f5da74147c2d, []int{1} } func (m *StoragePool) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StoragePool.Unmarshal(m, b) @@ -1295,17 +1295,19 @@ type VolumeLocator struct { // User friendly identifier Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // A set of name-value pairs that acts as search filters - VolumeLabels map[string]string `protobuf:"bytes,2,rep,name=volume_labels,json=volumeLabels" json:"volume_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VolumeLabels map[string]string `protobuf:"bytes,2,rep,name=volume_labels,json=volumeLabels" json:"volume_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Filter with ownership + Ownership *Ownership `protobuf:"bytes,3,opt,name=ownership" json:"ownership,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *VolumeLocator) Reset() { *m = VolumeLocator{} } func (m *VolumeLocator) String() string { return proto.CompactTextString(m) } func (*VolumeLocator) ProtoMessage() {} func (*VolumeLocator) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{2} + return fileDescriptor_api_2699f5da74147c2d, []int{2} } func (m *VolumeLocator) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeLocator.Unmarshal(m, b) @@ -1339,6 +1341,13 @@ func (m *VolumeLocator) GetVolumeLabels() map[string]string { return nil } +func (m *VolumeLocator) GetOwnership() *Ownership { + if m != nil { + return m.Ownership + } + return nil +} + // Source is a structure that can be given to a volume // to seed the volume with data. type Source struct { @@ -1356,7 +1365,7 @@ func (m *Source) Reset() { *m = Source{} } func (m *Source) String() string { return proto.CompactTextString(m) } func (*Source) ProtoMessage() {} func (*Source) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{3} + return fileDescriptor_api_2699f5da74147c2d, []int{3} } func (m *Source) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Source.Unmarshal(m, b) @@ -1404,7 +1413,7 @@ func (m *Group) Reset() { *m = Group{} } func (m *Group) String() string { return proto.CompactTextString(m) } func (*Group) ProtoMessage() {} func (*Group) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{4} + return fileDescriptor_api_2699f5da74147c2d, []int{4} } func (m *Group) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Group.Unmarshal(m, b) @@ -1446,7 +1455,7 @@ func (m *IoStrategy) Reset() { *m = IoStrategy{} } func (m *IoStrategy) String() string { return proto.CompactTextString(m) } func (*IoStrategy) ProtoMessage() {} func (*IoStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{5} + return fileDescriptor_api_2699f5da74147c2d, []int{5} } func (m *IoStrategy) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IoStrategy.Unmarshal(m, b) @@ -1541,17 +1550,19 @@ type VolumeSpec struct { // IoStrategy preferred strategy for I/O. IoStrategy *IoStrategy `protobuf:"bytes,30,opt,name=io_strategy,json=ioStrategy" json:"io_strategy,omitempty"` // PlacementStrategy specifies a spec to indicate where to place the volume. - PlacementStrategy *VolumePlacementStrategy `protobuf:"bytes,31,opt,name=placement_strategy,json=placementStrategy" json:"placement_strategy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + PlacementStrategy *VolumePlacementStrategy `protobuf:"bytes,31,opt,name=placement_strategy,json=placementStrategy" json:"placement_strategy,omitempty"` + // Owner + Ownership *Ownership `protobuf:"bytes,32,opt,name=ownership" json:"ownership,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *VolumeSpec) Reset() { *m = VolumeSpec{} } func (m *VolumeSpec) String() string { return proto.CompactTextString(m) } func (*VolumeSpec) ProtoMessage() {} func (*VolumeSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{6} + return fileDescriptor_api_2699f5da74147c2d, []int{6} } func (m *VolumeSpec) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeSpec.Unmarshal(m, b) @@ -1774,6 +1785,13 @@ func (m *VolumeSpec) GetPlacementStrategy() *VolumePlacementStrategy { return nil } +func (m *VolumeSpec) GetOwnership() *Ownership { + if m != nil { + return m.Ownership + } + return nil +} + // VolumeSpecUpdate provides a method to set any of the VolumeSpec of an existing volume type VolumeSpecUpdate struct { // Size specifies the thin provisioned volume size in bytes @@ -1852,17 +1870,23 @@ type VolumeSpecUpdate struct { // // Types that are valid to be assigned to QueueDepthOpt: // *VolumeSpecUpdate_QueueDepth - QueueDepthOpt isVolumeSpecUpdate_QueueDepthOpt `protobuf_oneof:"queue_depth_opt"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + QueueDepthOpt isVolumeSpecUpdate_QueueDepthOpt `protobuf_oneof:"queue_depth_opt"` + // Ownership + // + // If the value of `owner` in the `ownership` message is an empty string + // then the value of `owner` in the `VolumeSpec.Ownership.owner` will not + // be updated. + Ownership *Ownership `protobuf:"bytes,26,opt,name=ownership" json:"ownership,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *VolumeSpecUpdate) Reset() { *m = VolumeSpecUpdate{} } func (m *VolumeSpecUpdate) String() string { return proto.CompactTextString(m) } func (*VolumeSpecUpdate) ProtoMessage() {} func (*VolumeSpecUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{7} + return fileDescriptor_api_2699f5da74147c2d, []int{7} } func (m *VolumeSpecUpdate) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeSpecUpdate.Unmarshal(m, b) @@ -2193,6 +2217,13 @@ func (m *VolumeSpecUpdate) GetQueueDepth() uint32 { return 0 } +func (m *VolumeSpecUpdate) GetOwnership() *Ownership { + if m != nil { + return m.Ownership + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*VolumeSpecUpdate) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _VolumeSpecUpdate_OneofMarshaler, _VolumeSpecUpdate_OneofUnmarshaler, _VolumeSpecUpdate_OneofSizer, []interface{}{ @@ -2647,7 +2678,7 @@ func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } func (m *ReplicaSet) String() string { return proto.CompactTextString(m) } func (*ReplicaSet) ProtoMessage() {} func (*ReplicaSet) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{8} + return fileDescriptor_api_2699f5da74147c2d, []int{8} } func (m *ReplicaSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReplicaSet.Unmarshal(m, b) @@ -2687,7 +2718,7 @@ func (m *RuntimeStateMap) Reset() { *m = RuntimeStateMap{} } func (m *RuntimeStateMap) String() string { return proto.CompactTextString(m) } func (*RuntimeStateMap) ProtoMessage() {} func (*RuntimeStateMap) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{9} + return fileDescriptor_api_2699f5da74147c2d, []int{9} } func (m *RuntimeStateMap) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RuntimeStateMap.Unmarshal(m, b) @@ -2714,6 +2745,127 @@ func (m *RuntimeStateMap) GetRuntimeState() map[string]string { return nil } +// Ownership information for resource +// Administrators are users who belong to the group `*`, meaning, every group. +type Ownership struct { + // Username of owner. + // + // The storage system uses the username taken from the security authorization + // token and is saved on this field. Only users with system administration + // can edit this value. + Owner string `protobuf:"bytes,1,opt,name=owner" json:"owner,omitempty"` + // Permissions to share resource which can be set by the owner. + // + // NOTE: To create an "admin" user which has access to any resource set the group value + // in the token of the user to `*`. + Acls *Ownership_AccessControl `protobuf:"bytes,2,opt,name=acls" json:"acls,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Ownership) Reset() { *m = Ownership{} } +func (m *Ownership) String() string { return proto.CompactTextString(m) } +func (*Ownership) ProtoMessage() {} +func (*Ownership) Descriptor() ([]byte, []int) { + return fileDescriptor_api_2699f5da74147c2d, []int{10} +} +func (m *Ownership) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Ownership.Unmarshal(m, b) +} +func (m *Ownership) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Ownership.Marshal(b, m, deterministic) +} +func (dst *Ownership) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ownership.Merge(dst, src) +} +func (m *Ownership) XXX_Size() int { + return xxx_messageInfo_Ownership.Size(m) +} +func (m *Ownership) XXX_DiscardUnknown() { + xxx_messageInfo_Ownership.DiscardUnknown(m) +} + +var xxx_messageInfo_Ownership proto.InternalMessageInfo + +func (m *Ownership) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *Ownership) GetAcls() *Ownership_AccessControl { + if m != nil { + return m.Acls + } + return nil +} + +type Ownership_AccessControl struct { + // Group access to resource which must be set in the authorization token. + // + // Can be set by the owner or the system administrator only. + // Possible values are: + // * an empty list: An empty list means no groups are allowed + // * `["*"]`: All groups are allowed + // * `["group1", "group2"]`: Only certain groups are allowed. In this example only + // _group1_ and _group2_ are allowed. + // + Groups []string `protobuf:"bytes,2,rep,name=groups" json:"groups,omitempty"` + // Collaborator access to resource gives access to other usernames. + // Must be the username set in the authorization token. + // + // The owner or the system administrator can set this value. + // Possible values are: + // * an empty list: An empty list means no users are allowed + // * `["*"]`: All users are allowed + // * `["username1", "username2"]`: Only certain usernames are allowed. In this example only + // _username1_ and _username2_ are allowed. + Collaborators []string `protobuf:"bytes,3,rep,name=collaborators" json:"collaborators,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Ownership_AccessControl) Reset() { *m = Ownership_AccessControl{} } +func (m *Ownership_AccessControl) String() string { return proto.CompactTextString(m) } +func (*Ownership_AccessControl) ProtoMessage() {} +func (*Ownership_AccessControl) Descriptor() ([]byte, []int) { + return fileDescriptor_api_2699f5da74147c2d, []int{10, 0} +} +func (m *Ownership_AccessControl) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Ownership_AccessControl.Unmarshal(m, b) +} +func (m *Ownership_AccessControl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Ownership_AccessControl.Marshal(b, m, deterministic) +} +func (dst *Ownership_AccessControl) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ownership_AccessControl.Merge(dst, src) +} +func (m *Ownership_AccessControl) XXX_Size() int { + return xxx_messageInfo_Ownership_AccessControl.Size(m) +} +func (m *Ownership_AccessControl) XXX_DiscardUnknown() { + xxx_messageInfo_Ownership_AccessControl.DiscardUnknown(m) +} + +var xxx_messageInfo_Ownership_AccessControl proto.InternalMessageInfo + +func (m *Ownership_AccessControl) GetGroups() []string { + if m != nil { + return m.Groups + } + return nil +} + +func (m *Ownership_AccessControl) GetCollaborators() []string { + if m != nil { + return m.Collaborators + } + return nil +} + // Volume represents an abstract storage volume. type Volume struct { // Self referential volume ID. @@ -2772,7 +2924,7 @@ func (m *Volume) Reset() { *m = Volume{} } func (m *Volume) String() string { return proto.CompactTextString(m) } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{10} + return fileDescriptor_api_2699f5da74147c2d, []int{11} } func (m *Volume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Volume.Unmarshal(m, b) @@ -2984,7 +3136,7 @@ func (m *Stats) Reset() { *m = Stats{} } func (m *Stats) String() string { return proto.CompactTextString(m) } func (*Stats) ProtoMessage() {} func (*Stats) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{11} + return fileDescriptor_api_2699f5da74147c2d, []int{12} } func (m *Stats) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Stats.Unmarshal(m, b) @@ -3095,7 +3247,7 @@ func (m *CapacityUsageInfo) Reset() { *m = CapacityUsageInfo{} } func (m *CapacityUsageInfo) String() string { return proto.CompactTextString(m) } func (*CapacityUsageInfo) ProtoMessage() {} func (*CapacityUsageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{12} + return fileDescriptor_api_2699f5da74147c2d, []int{13} } func (m *CapacityUsageInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CapacityUsageInfo.Unmarshal(m, b) @@ -3171,7 +3323,7 @@ func (m *Alert) Reset() { *m = Alert{} } func (m *Alert) String() string { return proto.CompactTextString(m) } func (*Alert) ProtoMessage() {} func (*Alert) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{13} + return fileDescriptor_api_2699f5da74147c2d, []int{14} } func (m *Alert) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Alert.Unmarshal(m, b) @@ -3290,7 +3442,7 @@ func (m *SdkAlertsTimeSpan) Reset() { *m = SdkAlertsTimeSpan{} } func (m *SdkAlertsTimeSpan) String() string { return proto.CompactTextString(m) } func (*SdkAlertsTimeSpan) ProtoMessage() {} func (*SdkAlertsTimeSpan) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{14} + return fileDescriptor_api_2699f5da74147c2d, []int{15} } func (m *SdkAlertsTimeSpan) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsTimeSpan.Unmarshal(m, b) @@ -3339,7 +3491,7 @@ func (m *SdkAlertsCountSpan) Reset() { *m = SdkAlertsCountSpan{} } func (m *SdkAlertsCountSpan) String() string { return proto.CompactTextString(m) } func (*SdkAlertsCountSpan) ProtoMessage() {} func (*SdkAlertsCountSpan) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{15} + return fileDescriptor_api_2699f5da74147c2d, []int{16} } func (m *SdkAlertsCountSpan) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsCountSpan.Unmarshal(m, b) @@ -3390,7 +3542,7 @@ func (m *SdkAlertsOption) Reset() { *m = SdkAlertsOption{} } func (m *SdkAlertsOption) String() string { return proto.CompactTextString(m) } func (*SdkAlertsOption) ProtoMessage() {} func (*SdkAlertsOption) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{16} + return fileDescriptor_api_2699f5da74147c2d, []int{17} } func (m *SdkAlertsOption) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsOption.Unmarshal(m, b) @@ -3586,7 +3738,7 @@ func (m *SdkAlertsResourceTypeQuery) Reset() { *m = SdkAlertsResourceTyp func (m *SdkAlertsResourceTypeQuery) String() string { return proto.CompactTextString(m) } func (*SdkAlertsResourceTypeQuery) ProtoMessage() {} func (*SdkAlertsResourceTypeQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{17} + return fileDescriptor_api_2699f5da74147c2d, []int{18} } func (m *SdkAlertsResourceTypeQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsResourceTypeQuery.Unmarshal(m, b) @@ -3629,7 +3781,7 @@ func (m *SdkAlertsAlertTypeQuery) Reset() { *m = SdkAlertsAlertTypeQuery func (m *SdkAlertsAlertTypeQuery) String() string { return proto.CompactTextString(m) } func (*SdkAlertsAlertTypeQuery) ProtoMessage() {} func (*SdkAlertsAlertTypeQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{18} + return fileDescriptor_api_2699f5da74147c2d, []int{19} } func (m *SdkAlertsAlertTypeQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsAlertTypeQuery.Unmarshal(m, b) @@ -3682,7 +3834,7 @@ func (m *SdkAlertsResourceIdQuery) Reset() { *m = SdkAlertsResourceIdQue func (m *SdkAlertsResourceIdQuery) String() string { return proto.CompactTextString(m) } func (*SdkAlertsResourceIdQuery) ProtoMessage() {} func (*SdkAlertsResourceIdQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{19} + return fileDescriptor_api_2699f5da74147c2d, []int{20} } func (m *SdkAlertsResourceIdQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsResourceIdQuery.Unmarshal(m, b) @@ -3745,7 +3897,7 @@ func (m *SdkAlertsQuery) Reset() { *m = SdkAlertsQuery{} } func (m *SdkAlertsQuery) String() string { return proto.CompactTextString(m) } func (*SdkAlertsQuery) ProtoMessage() {} func (*SdkAlertsQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{20} + return fileDescriptor_api_2699f5da74147c2d, []int{21} } func (m *SdkAlertsQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsQuery.Unmarshal(m, b) @@ -3928,7 +4080,7 @@ func (m *SdkAlertsEnumerateWithFiltersRequest) Reset() { *m = SdkAlertsE func (m *SdkAlertsEnumerateWithFiltersRequest) String() string { return proto.CompactTextString(m) } func (*SdkAlertsEnumerateWithFiltersRequest) ProtoMessage() {} func (*SdkAlertsEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{21} + return fileDescriptor_api_2699f5da74147c2d, []int{22} } func (m *SdkAlertsEnumerateWithFiltersRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsEnumerateWithFiltersRequest.Unmarshal(m, b) @@ -3968,7 +4120,7 @@ func (m *SdkAlertsEnumerateWithFiltersResponse) Reset() { *m = SdkAlerts func (m *SdkAlertsEnumerateWithFiltersResponse) String() string { return proto.CompactTextString(m) } func (*SdkAlertsEnumerateWithFiltersResponse) ProtoMessage() {} func (*SdkAlertsEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{22} + return fileDescriptor_api_2699f5da74147c2d, []int{23} } func (m *SdkAlertsEnumerateWithFiltersResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsEnumerateWithFiltersResponse.Unmarshal(m, b) @@ -4009,7 +4161,7 @@ func (m *SdkAlertsDeleteRequest) Reset() { *m = SdkAlertsDeleteRequest{} func (m *SdkAlertsDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkAlertsDeleteRequest) ProtoMessage() {} func (*SdkAlertsDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{23} + return fileDescriptor_api_2699f5da74147c2d, []int{24} } func (m *SdkAlertsDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsDeleteRequest.Unmarshal(m, b) @@ -4047,7 +4199,7 @@ func (m *SdkAlertsDeleteResponse) Reset() { *m = SdkAlertsDeleteResponse func (m *SdkAlertsDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkAlertsDeleteResponse) ProtoMessage() {} func (*SdkAlertsDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{24} + return fileDescriptor_api_2699f5da74147c2d, []int{25} } func (m *SdkAlertsDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAlertsDeleteResponse.Unmarshal(m, b) @@ -4080,7 +4232,7 @@ func (m *SdkSchedulePolicyCreateRequest) Reset() { *m = SdkSchedulePolic func (m *SdkSchedulePolicyCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyCreateRequest) ProtoMessage() {} func (*SdkSchedulePolicyCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{25} + return fileDescriptor_api_2699f5da74147c2d, []int{26} } func (m *SdkSchedulePolicyCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyCreateRequest.Unmarshal(m, b) @@ -4119,7 +4271,7 @@ func (m *Alerts) Reset() { *m = Alerts{} } func (m *Alerts) String() string { return proto.CompactTextString(m) } func (*Alerts) ProtoMessage() {} func (*Alerts) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{26} + return fileDescriptor_api_2699f5da74147c2d, []int{27} } func (m *Alerts) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Alerts.Unmarshal(m, b) @@ -4179,7 +4331,7 @@ func (m *ObjectstoreInfo) Reset() { *m = ObjectstoreInfo{} } func (m *ObjectstoreInfo) String() string { return proto.CompactTextString(m) } func (*ObjectstoreInfo) ProtoMessage() {} func (*ObjectstoreInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{27} + return fileDescriptor_api_2699f5da74147c2d, []int{28} } func (m *ObjectstoreInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectstoreInfo.Unmarshal(m, b) @@ -4294,7 +4446,7 @@ func (m *VolumeCreateRequest) Reset() { *m = VolumeCreateRequest{} } func (m *VolumeCreateRequest) String() string { return proto.CompactTextString(m) } func (*VolumeCreateRequest) ProtoMessage() {} func (*VolumeCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{28} + return fileDescriptor_api_2699f5da74147c2d, []int{29} } func (m *VolumeCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCreateRequest.Unmarshal(m, b) @@ -4351,7 +4503,7 @@ func (m *VolumeResponse) Reset() { *m = VolumeResponse{} } func (m *VolumeResponse) String() string { return proto.CompactTextString(m) } func (*VolumeResponse) ProtoMessage() {} func (*VolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{29} + return fileDescriptor_api_2699f5da74147c2d, []int{30} } func (m *VolumeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeResponse.Unmarshal(m, b) @@ -4399,7 +4551,7 @@ func (m *VolumeCreateResponse) Reset() { *m = VolumeCreateResponse{} } func (m *VolumeCreateResponse) String() string { return proto.CompactTextString(m) } func (*VolumeCreateResponse) ProtoMessage() {} func (*VolumeCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{30} + return fileDescriptor_api_2699f5da74147c2d, []int{31} } func (m *VolumeCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeCreateResponse.Unmarshal(m, b) @@ -4452,7 +4604,7 @@ func (m *VolumeStateAction) Reset() { *m = VolumeStateAction{} } func (m *VolumeStateAction) String() string { return proto.CompactTextString(m) } func (*VolumeStateAction) ProtoMessage() {} func (*VolumeStateAction) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{31} + return fileDescriptor_api_2699f5da74147c2d, []int{32} } func (m *VolumeStateAction) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeStateAction.Unmarshal(m, b) @@ -4520,7 +4672,7 @@ func (m *VolumeSetRequest) Reset() { *m = VolumeSetRequest{} } func (m *VolumeSetRequest) String() string { return proto.CompactTextString(m) } func (*VolumeSetRequest) ProtoMessage() {} func (*VolumeSetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{32} + return fileDescriptor_api_2699f5da74147c2d, []int{33} } func (m *VolumeSetRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeSetRequest.Unmarshal(m, b) @@ -4589,7 +4741,7 @@ func (m *VolumeSetResponse) Reset() { *m = VolumeSetResponse{} } func (m *VolumeSetResponse) String() string { return proto.CompactTextString(m) } func (*VolumeSetResponse) ProtoMessage() {} func (*VolumeSetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{33} + return fileDescriptor_api_2699f5da74147c2d, []int{34} } func (m *VolumeSetResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeSetResponse.Unmarshal(m, b) @@ -4640,7 +4792,7 @@ func (m *SnapCreateRequest) Reset() { *m = SnapCreateRequest{} } func (m *SnapCreateRequest) String() string { return proto.CompactTextString(m) } func (*SnapCreateRequest) ProtoMessage() {} func (*SnapCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{34} + return fileDescriptor_api_2699f5da74147c2d, []int{35} } func (m *SnapCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SnapCreateRequest.Unmarshal(m, b) @@ -4704,7 +4856,7 @@ func (m *SnapCreateResponse) Reset() { *m = SnapCreateResponse{} } func (m *SnapCreateResponse) String() string { return proto.CompactTextString(m) } func (*SnapCreateResponse) ProtoMessage() {} func (*SnapCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{35} + return fileDescriptor_api_2699f5da74147c2d, []int{36} } func (m *SnapCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SnapCreateResponse.Unmarshal(m, b) @@ -4745,7 +4897,7 @@ func (m *VolumeInfo) Reset() { *m = VolumeInfo{} } func (m *VolumeInfo) String() string { return proto.CompactTextString(m) } func (*VolumeInfo) ProtoMessage() {} func (*VolumeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{36} + return fileDescriptor_api_2699f5da74147c2d, []int{37} } func (m *VolumeInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeInfo.Unmarshal(m, b) @@ -4816,7 +4968,7 @@ func (m *VolumeConsumer) Reset() { *m = VolumeConsumer{} } func (m *VolumeConsumer) String() string { return proto.CompactTextString(m) } func (*VolumeConsumer) ProtoMessage() {} func (*VolumeConsumer) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{37} + return fileDescriptor_api_2699f5da74147c2d, []int{38} } func (m *VolumeConsumer) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumeConsumer.Unmarshal(m, b) @@ -4894,7 +5046,7 @@ func (m *GraphDriverChanges) Reset() { *m = GraphDriverChanges{} } func (m *GraphDriverChanges) String() string { return proto.CompactTextString(m) } func (*GraphDriverChanges) ProtoMessage() {} func (*GraphDriverChanges) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{38} + return fileDescriptor_api_2699f5da74147c2d, []int{39} } func (m *GraphDriverChanges) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GraphDriverChanges.Unmarshal(m, b) @@ -4943,7 +5095,7 @@ func (m *ClusterResponse) Reset() { *m = ClusterResponse{} } func (m *ClusterResponse) String() string { return proto.CompactTextString(m) } func (*ClusterResponse) ProtoMessage() {} func (*ClusterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{39} + return fileDescriptor_api_2699f5da74147c2d, []int{40} } func (m *ClusterResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterResponse.Unmarshal(m, b) @@ -4982,7 +5134,7 @@ func (m *ActiveRequest) Reset() { *m = ActiveRequest{} } func (m *ActiveRequest) String() string { return proto.CompactTextString(m) } func (*ActiveRequest) ProtoMessage() {} func (*ActiveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{40} + return fileDescriptor_api_2699f5da74147c2d, []int{41} } func (m *ActiveRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ActiveRequest.Unmarshal(m, b) @@ -5022,7 +5174,7 @@ func (m *ActiveRequests) Reset() { *m = ActiveRequests{} } func (m *ActiveRequests) String() string { return proto.CompactTextString(m) } func (*ActiveRequests) ProtoMessage() {} func (*ActiveRequests) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{41} + return fileDescriptor_api_2699f5da74147c2d, []int{42} } func (m *ActiveRequests) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ActiveRequests.Unmarshal(m, b) @@ -5070,7 +5222,7 @@ func (m *GroupSnapCreateRequest) Reset() { *m = GroupSnapCreateRequest{} func (m *GroupSnapCreateRequest) String() string { return proto.CompactTextString(m) } func (*GroupSnapCreateRequest) ProtoMessage() {} func (*GroupSnapCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{42} + return fileDescriptor_api_2699f5da74147c2d, []int{43} } func (m *GroupSnapCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupSnapCreateRequest.Unmarshal(m, b) @@ -5132,7 +5284,7 @@ func (m *GroupSnapCreateResponse) Reset() { *m = GroupSnapCreateResponse func (m *GroupSnapCreateResponse) String() string { return proto.CompactTextString(m) } func (*GroupSnapCreateResponse) ProtoMessage() {} func (*GroupSnapCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{43} + return fileDescriptor_api_2699f5da74147c2d, []int{44} } func (m *GroupSnapCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupSnapCreateResponse.Unmarshal(m, b) @@ -5206,7 +5358,7 @@ func (m *StorageNode) Reset() { *m = StorageNode{} } func (m *StorageNode) String() string { return proto.CompactTextString(m) } func (*StorageNode) ProtoMessage() {} func (*StorageNode) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{44} + return fileDescriptor_api_2699f5da74147c2d, []int{45} } func (m *StorageNode) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StorageNode.Unmarshal(m, b) @@ -5341,7 +5493,7 @@ func (m *StorageCluster) Reset() { *m = StorageCluster{} } func (m *StorageCluster) String() string { return proto.CompactTextString(m) } func (*StorageCluster) ProtoMessage() {} func (*StorageCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{45} + return fileDescriptor_api_2699f5da74147c2d, []int{46} } func (m *StorageCluster) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StorageCluster.Unmarshal(m, b) @@ -5393,7 +5545,7 @@ func (m *SdkSchedulePolicyCreateResponse) Reset() { *m = SdkSchedulePoli func (m *SdkSchedulePolicyCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyCreateResponse) ProtoMessage() {} func (*SdkSchedulePolicyCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{46} + return fileDescriptor_api_2699f5da74147c2d, []int{47} } func (m *SdkSchedulePolicyCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyCreateResponse.Unmarshal(m, b) @@ -5426,7 +5578,7 @@ func (m *SdkSchedulePolicyUpdateRequest) Reset() { *m = SdkSchedulePolic func (m *SdkSchedulePolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyUpdateRequest) ProtoMessage() {} func (*SdkSchedulePolicyUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{47} + return fileDescriptor_api_2699f5da74147c2d, []int{48} } func (m *SdkSchedulePolicyUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyUpdateRequest.Unmarshal(m, b) @@ -5464,7 +5616,7 @@ func (m *SdkSchedulePolicyUpdateResponse) Reset() { *m = SdkSchedulePoli func (m *SdkSchedulePolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyUpdateResponse) ProtoMessage() {} func (*SdkSchedulePolicyUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{48} + return fileDescriptor_api_2699f5da74147c2d, []int{49} } func (m *SdkSchedulePolicyUpdateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyUpdateResponse.Unmarshal(m, b) @@ -5495,7 +5647,7 @@ func (m *SdkSchedulePolicyEnumerateRequest) Reset() { *m = SdkSchedulePo func (m *SdkSchedulePolicyEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyEnumerateRequest) ProtoMessage() {} func (*SdkSchedulePolicyEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{49} + return fileDescriptor_api_2699f5da74147c2d, []int{50} } func (m *SdkSchedulePolicyEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyEnumerateRequest.Unmarshal(m, b) @@ -5528,7 +5680,7 @@ func (m *SdkSchedulePolicyEnumerateResponse) Reset() { *m = SdkScheduleP func (m *SdkSchedulePolicyEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyEnumerateResponse) ProtoMessage() {} func (*SdkSchedulePolicyEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{50} + return fileDescriptor_api_2699f5da74147c2d, []int{51} } func (m *SdkSchedulePolicyEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyEnumerateResponse.Unmarshal(m, b) @@ -5568,7 +5720,7 @@ func (m *SdkSchedulePolicyInspectRequest) Reset() { *m = SdkSchedulePoli func (m *SdkSchedulePolicyInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyInspectRequest) ProtoMessage() {} func (*SdkSchedulePolicyInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{51} + return fileDescriptor_api_2699f5da74147c2d, []int{52} } func (m *SdkSchedulePolicyInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyInspectRequest.Unmarshal(m, b) @@ -5608,7 +5760,7 @@ func (m *SdkSchedulePolicyInspectResponse) Reset() { *m = SdkSchedulePol func (m *SdkSchedulePolicyInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyInspectResponse) ProtoMessage() {} func (*SdkSchedulePolicyInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{52} + return fileDescriptor_api_2699f5da74147c2d, []int{53} } func (m *SdkSchedulePolicyInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyInspectResponse.Unmarshal(m, b) @@ -5648,7 +5800,7 @@ func (m *SdkSchedulePolicyDeleteRequest) Reset() { *m = SdkSchedulePolic func (m *SdkSchedulePolicyDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyDeleteRequest) ProtoMessage() {} func (*SdkSchedulePolicyDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{53} + return fileDescriptor_api_2699f5da74147c2d, []int{54} } func (m *SdkSchedulePolicyDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyDeleteRequest.Unmarshal(m, b) @@ -5686,7 +5838,7 @@ func (m *SdkSchedulePolicyDeleteResponse) Reset() { *m = SdkSchedulePoli func (m *SdkSchedulePolicyDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyDeleteResponse) ProtoMessage() {} func (*SdkSchedulePolicyDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{54} + return fileDescriptor_api_2699f5da74147c2d, []int{55} } func (m *SdkSchedulePolicyDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyDeleteResponse.Unmarshal(m, b) @@ -5721,7 +5873,7 @@ func (m *SdkSchedulePolicyIntervalDaily) Reset() { *m = SdkSchedulePolic func (m *SdkSchedulePolicyIntervalDaily) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyIntervalDaily) ProtoMessage() {} func (*SdkSchedulePolicyIntervalDaily) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{55} + return fileDescriptor_api_2699f5da74147c2d, []int{56} } func (m *SdkSchedulePolicyIntervalDaily) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyIntervalDaily.Unmarshal(m, b) @@ -5771,7 +5923,7 @@ func (m *SdkSchedulePolicyIntervalWeekly) Reset() { *m = SdkSchedulePoli func (m *SdkSchedulePolicyIntervalWeekly) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyIntervalWeekly) ProtoMessage() {} func (*SdkSchedulePolicyIntervalWeekly) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{56} + return fileDescriptor_api_2699f5da74147c2d, []int{57} } func (m *SdkSchedulePolicyIntervalWeekly) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyIntervalWeekly.Unmarshal(m, b) @@ -5829,7 +5981,7 @@ func (m *SdkSchedulePolicyIntervalMonthly) Reset() { *m = SdkSchedulePol func (m *SdkSchedulePolicyIntervalMonthly) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyIntervalMonthly) ProtoMessage() {} func (*SdkSchedulePolicyIntervalMonthly) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{57} + return fileDescriptor_api_2699f5da74147c2d, []int{58} } func (m *SdkSchedulePolicyIntervalMonthly) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyIntervalMonthly.Unmarshal(m, b) @@ -5883,7 +6035,7 @@ func (m *SdkSchedulePolicyIntervalPeriodic) Reset() { *m = SdkSchedulePo func (m *SdkSchedulePolicyIntervalPeriodic) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyIntervalPeriodic) ProtoMessage() {} func (*SdkSchedulePolicyIntervalPeriodic) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{58} + return fileDescriptor_api_2699f5da74147c2d, []int{59} } func (m *SdkSchedulePolicyIntervalPeriodic) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyIntervalPeriodic.Unmarshal(m, b) @@ -5931,7 +6083,7 @@ func (m *SdkSchedulePolicyInterval) Reset() { *m = SdkSchedulePolicyInte func (m *SdkSchedulePolicyInterval) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicyInterval) ProtoMessage() {} func (*SdkSchedulePolicyInterval) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{59} + return fileDescriptor_api_2699f5da74147c2d, []int{60} } func (m *SdkSchedulePolicyInterval) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicyInterval.Unmarshal(m, b) @@ -6142,7 +6294,7 @@ func (m *SdkSchedulePolicy) Reset() { *m = SdkSchedulePolicy{} } func (m *SdkSchedulePolicy) String() string { return proto.CompactTextString(m) } func (*SdkSchedulePolicy) ProtoMessage() {} func (*SdkSchedulePolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{60} + return fileDescriptor_api_2699f5da74147c2d, []int{61} } func (m *SdkSchedulePolicy) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkSchedulePolicy.Unmarshal(m, b) @@ -6200,7 +6352,7 @@ func (m *SdkCredentialCreateRequest) Reset() { *m = SdkCredentialCreateR func (m *SdkCredentialCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCredentialCreateRequest) ProtoMessage() {} func (*SdkCredentialCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{61} + return fileDescriptor_api_2699f5da74147c2d, []int{62} } func (m *SdkCredentialCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialCreateRequest.Unmarshal(m, b) @@ -6393,7 +6545,7 @@ func (m *SdkCredentialCreateResponse) Reset() { *m = SdkCredentialCreate func (m *SdkCredentialCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCredentialCreateResponse) ProtoMessage() {} func (*SdkCredentialCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{62} + return fileDescriptor_api_2699f5da74147c2d, []int{63} } func (m *SdkCredentialCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialCreateResponse.Unmarshal(m, b) @@ -6441,7 +6593,7 @@ func (m *SdkAwsCredentialRequest) Reset() { *m = SdkAwsCredentialRequest func (m *SdkAwsCredentialRequest) String() string { return proto.CompactTextString(m) } func (*SdkAwsCredentialRequest) ProtoMessage() {} func (*SdkAwsCredentialRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{63} + return fileDescriptor_api_2699f5da74147c2d, []int{64} } func (m *SdkAwsCredentialRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAwsCredentialRequest.Unmarshal(m, b) @@ -6511,7 +6663,7 @@ func (m *SdkAzureCredentialRequest) Reset() { *m = SdkAzureCredentialReq func (m *SdkAzureCredentialRequest) String() string { return proto.CompactTextString(m) } func (*SdkAzureCredentialRequest) ProtoMessage() {} func (*SdkAzureCredentialRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{64} + return fileDescriptor_api_2699f5da74147c2d, []int{65} } func (m *SdkAzureCredentialRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAzureCredentialRequest.Unmarshal(m, b) @@ -6560,7 +6712,7 @@ func (m *SdkGoogleCredentialRequest) Reset() { *m = SdkGoogleCredentialR func (m *SdkGoogleCredentialRequest) String() string { return proto.CompactTextString(m) } func (*SdkGoogleCredentialRequest) ProtoMessage() {} func (*SdkGoogleCredentialRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{65} + return fileDescriptor_api_2699f5da74147c2d, []int{66} } func (m *SdkGoogleCredentialRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkGoogleCredentialRequest.Unmarshal(m, b) @@ -6613,7 +6765,7 @@ func (m *SdkAwsCredentialResponse) Reset() { *m = SdkAwsCredentialRespon func (m *SdkAwsCredentialResponse) String() string { return proto.CompactTextString(m) } func (*SdkAwsCredentialResponse) ProtoMessage() {} func (*SdkAwsCredentialResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{66} + return fileDescriptor_api_2699f5da74147c2d, []int{67} } func (m *SdkAwsCredentialResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAwsCredentialResponse.Unmarshal(m, b) @@ -6674,7 +6826,7 @@ func (m *SdkAzureCredentialResponse) Reset() { *m = SdkAzureCredentialRe func (m *SdkAzureCredentialResponse) String() string { return proto.CompactTextString(m) } func (*SdkAzureCredentialResponse) ProtoMessage() {} func (*SdkAzureCredentialResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{67} + return fileDescriptor_api_2699f5da74147c2d, []int{68} } func (m *SdkAzureCredentialResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkAzureCredentialResponse.Unmarshal(m, b) @@ -6714,7 +6866,7 @@ func (m *SdkGoogleCredentialResponse) Reset() { *m = SdkGoogleCredential func (m *SdkGoogleCredentialResponse) String() string { return proto.CompactTextString(m) } func (*SdkGoogleCredentialResponse) ProtoMessage() {} func (*SdkGoogleCredentialResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{68} + return fileDescriptor_api_2699f5da74147c2d, []int{69} } func (m *SdkGoogleCredentialResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkGoogleCredentialResponse.Unmarshal(m, b) @@ -6752,7 +6904,7 @@ func (m *SdkCredentialEnumerateRequest) Reset() { *m = SdkCredentialEnum func (m *SdkCredentialEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCredentialEnumerateRequest) ProtoMessage() {} func (*SdkCredentialEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{69} + return fileDescriptor_api_2699f5da74147c2d, []int{70} } func (m *SdkCredentialEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialEnumerateRequest.Unmarshal(m, b) @@ -6785,7 +6937,7 @@ func (m *SdkCredentialEnumerateResponse) Reset() { *m = SdkCredentialEnu func (m *SdkCredentialEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCredentialEnumerateResponse) ProtoMessage() {} func (*SdkCredentialEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{70} + return fileDescriptor_api_2699f5da74147c2d, []int{71} } func (m *SdkCredentialEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialEnumerateResponse.Unmarshal(m, b) @@ -6825,7 +6977,7 @@ func (m *SdkCredentialInspectRequest) Reset() { *m = SdkCredentialInspec func (m *SdkCredentialInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkCredentialInspectRequest) ProtoMessage() {} func (*SdkCredentialInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{71} + return fileDescriptor_api_2699f5da74147c2d, []int{72} } func (m *SdkCredentialInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialInspectRequest.Unmarshal(m, b) @@ -6878,7 +7030,7 @@ func (m *SdkCredentialInspectResponse) Reset() { *m = SdkCredentialInspe func (m *SdkCredentialInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkCredentialInspectResponse) ProtoMessage() {} func (*SdkCredentialInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{72} + return fileDescriptor_api_2699f5da74147c2d, []int{73} } func (m *SdkCredentialInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialInspectResponse.Unmarshal(m, b) @@ -7072,7 +7224,7 @@ func (m *SdkCredentialDeleteRequest) Reset() { *m = SdkCredentialDeleteR func (m *SdkCredentialDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkCredentialDeleteRequest) ProtoMessage() {} func (*SdkCredentialDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{73} + return fileDescriptor_api_2699f5da74147c2d, []int{74} } func (m *SdkCredentialDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialDeleteRequest.Unmarshal(m, b) @@ -7110,7 +7262,7 @@ func (m *SdkCredentialDeleteResponse) Reset() { *m = SdkCredentialDelete func (m *SdkCredentialDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkCredentialDeleteResponse) ProtoMessage() {} func (*SdkCredentialDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{74} + return fileDescriptor_api_2699f5da74147c2d, []int{75} } func (m *SdkCredentialDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialDeleteResponse.Unmarshal(m, b) @@ -7143,7 +7295,7 @@ func (m *SdkCredentialValidateRequest) Reset() { *m = SdkCredentialValid func (m *SdkCredentialValidateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCredentialValidateRequest) ProtoMessage() {} func (*SdkCredentialValidateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{75} + return fileDescriptor_api_2699f5da74147c2d, []int{76} } func (m *SdkCredentialValidateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialValidateRequest.Unmarshal(m, b) @@ -7181,7 +7333,7 @@ func (m *SdkCredentialValidateResponse) Reset() { *m = SdkCredentialVali func (m *SdkCredentialValidateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCredentialValidateResponse) ProtoMessage() {} func (*SdkCredentialValidateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{76} + return fileDescriptor_api_2699f5da74147c2d, []int{77} } func (m *SdkCredentialValidateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCredentialValidateResponse.Unmarshal(m, b) @@ -7221,7 +7373,7 @@ func (m *SdkVolumeAttachOptions) Reset() { *m = SdkVolumeAttachOptions{} func (m *SdkVolumeAttachOptions) String() string { return proto.CompactTextString(m) } func (*SdkVolumeAttachOptions) ProtoMessage() {} func (*SdkVolumeAttachOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{77} + return fileDescriptor_api_2699f5da74147c2d, []int{78} } func (m *SdkVolumeAttachOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeAttachOptions.Unmarshal(m, b) @@ -7279,7 +7431,7 @@ func (m *SdkVolumeMountRequest) Reset() { *m = SdkVolumeMountRequest{} } func (m *SdkVolumeMountRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeMountRequest) ProtoMessage() {} func (*SdkVolumeMountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{78} + return fileDescriptor_api_2699f5da74147c2d, []int{79} } func (m *SdkVolumeMountRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeMountRequest.Unmarshal(m, b) @@ -7331,7 +7483,7 @@ func (m *SdkVolumeMountResponse) Reset() { *m = SdkVolumeMountResponse{} func (m *SdkVolumeMountResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeMountResponse) ProtoMessage() {} func (*SdkVolumeMountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{79} + return fileDescriptor_api_2699f5da74147c2d, []int{80} } func (m *SdkVolumeMountResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeMountResponse.Unmarshal(m, b) @@ -7370,7 +7522,7 @@ func (m *SdkVolumeUnmountOptions) Reset() { *m = SdkVolumeUnmountOptions func (m *SdkVolumeUnmountOptions) String() string { return proto.CompactTextString(m) } func (*SdkVolumeUnmountOptions) ProtoMessage() {} func (*SdkVolumeUnmountOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{80} + return fileDescriptor_api_2699f5da74147c2d, []int{81} } func (m *SdkVolumeUnmountOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeUnmountOptions.Unmarshal(m, b) @@ -7421,7 +7573,7 @@ func (m *SdkVolumeUnmountRequest) Reset() { *m = SdkVolumeUnmountRequest func (m *SdkVolumeUnmountRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeUnmountRequest) ProtoMessage() {} func (*SdkVolumeUnmountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{81} + return fileDescriptor_api_2699f5da74147c2d, []int{82} } func (m *SdkVolumeUnmountRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeUnmountRequest.Unmarshal(m, b) @@ -7473,7 +7625,7 @@ func (m *SdkVolumeUnmountResponse) Reset() { *m = SdkVolumeUnmountRespon func (m *SdkVolumeUnmountResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeUnmountResponse) ProtoMessage() {} func (*SdkVolumeUnmountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{82} + return fileDescriptor_api_2699f5da74147c2d, []int{83} } func (m *SdkVolumeUnmountResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeUnmountResponse.Unmarshal(m, b) @@ -7508,7 +7660,7 @@ func (m *SdkVolumeAttachRequest) Reset() { *m = SdkVolumeAttachRequest{} func (m *SdkVolumeAttachRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeAttachRequest) ProtoMessage() {} func (*SdkVolumeAttachRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{83} + return fileDescriptor_api_2699f5da74147c2d, []int{84} } func (m *SdkVolumeAttachRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeAttachRequest.Unmarshal(m, b) @@ -7555,7 +7707,7 @@ func (m *SdkVolumeAttachResponse) Reset() { *m = SdkVolumeAttachResponse func (m *SdkVolumeAttachResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeAttachResponse) ProtoMessage() {} func (*SdkVolumeAttachResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{84} + return fileDescriptor_api_2699f5da74147c2d, []int{85} } func (m *SdkVolumeAttachResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeAttachResponse.Unmarshal(m, b) @@ -7596,7 +7748,7 @@ func (m *SdkVolumeDetachOptions) Reset() { *m = SdkVolumeDetachOptions{} func (m *SdkVolumeDetachOptions) String() string { return proto.CompactTextString(m) } func (*SdkVolumeDetachOptions) ProtoMessage() {} func (*SdkVolumeDetachOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{85} + return fileDescriptor_api_2699f5da74147c2d, []int{86} } func (m *SdkVolumeDetachOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeDetachOptions.Unmarshal(m, b) @@ -7645,7 +7797,7 @@ func (m *SdkVolumeDetachRequest) Reset() { *m = SdkVolumeDetachRequest{} func (m *SdkVolumeDetachRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeDetachRequest) ProtoMessage() {} func (*SdkVolumeDetachRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{86} + return fileDescriptor_api_2699f5da74147c2d, []int{87} } func (m *SdkVolumeDetachRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeDetachRequest.Unmarshal(m, b) @@ -7690,7 +7842,7 @@ func (m *SdkVolumeDetachResponse) Reset() { *m = SdkVolumeDetachResponse func (m *SdkVolumeDetachResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeDetachResponse) ProtoMessage() {} func (*SdkVolumeDetachResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{87} + return fileDescriptor_api_2699f5da74147c2d, []int{88} } func (m *SdkVolumeDetachResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeDetachResponse.Unmarshal(m, b) @@ -7728,7 +7880,7 @@ func (m *SdkVolumeCreateRequest) Reset() { *m = SdkVolumeCreateRequest{} func (m *SdkVolumeCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCreateRequest) ProtoMessage() {} func (*SdkVolumeCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{88} + return fileDescriptor_api_2699f5da74147c2d, []int{89} } func (m *SdkVolumeCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCreateRequest.Unmarshal(m, b) @@ -7782,7 +7934,7 @@ func (m *SdkVolumeCreateResponse) Reset() { *m = SdkVolumeCreateResponse func (m *SdkVolumeCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCreateResponse) ProtoMessage() {} func (*SdkVolumeCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{89} + return fileDescriptor_api_2699f5da74147c2d, []int{90} } func (m *SdkVolumeCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCreateResponse.Unmarshal(m, b) @@ -7824,7 +7976,7 @@ func (m *SdkVolumeCloneRequest) Reset() { *m = SdkVolumeCloneRequest{} } func (m *SdkVolumeCloneRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCloneRequest) ProtoMessage() {} func (*SdkVolumeCloneRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{90} + return fileDescriptor_api_2699f5da74147c2d, []int{91} } func (m *SdkVolumeCloneRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCloneRequest.Unmarshal(m, b) @@ -7871,7 +8023,7 @@ func (m *SdkVolumeCloneResponse) Reset() { *m = SdkVolumeCloneResponse{} func (m *SdkVolumeCloneResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCloneResponse) ProtoMessage() {} func (*SdkVolumeCloneResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{91} + return fileDescriptor_api_2699f5da74147c2d, []int{92} } func (m *SdkVolumeCloneResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCloneResponse.Unmarshal(m, b) @@ -7911,7 +8063,7 @@ func (m *SdkVolumeDeleteRequest) Reset() { *m = SdkVolumeDeleteRequest{} func (m *SdkVolumeDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeDeleteRequest) ProtoMessage() {} func (*SdkVolumeDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{92} + return fileDescriptor_api_2699f5da74147c2d, []int{93} } func (m *SdkVolumeDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeDeleteRequest.Unmarshal(m, b) @@ -7949,7 +8101,7 @@ func (m *SdkVolumeDeleteResponse) Reset() { *m = SdkVolumeDeleteResponse func (m *SdkVolumeDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeDeleteResponse) ProtoMessage() {} func (*SdkVolumeDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{93} + return fileDescriptor_api_2699f5da74147c2d, []int{94} } func (m *SdkVolumeDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeDeleteResponse.Unmarshal(m, b) @@ -7982,7 +8134,7 @@ func (m *SdkVolumeInspectRequest) Reset() { *m = SdkVolumeInspectRequest func (m *SdkVolumeInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeInspectRequest) ProtoMessage() {} func (*SdkVolumeInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{94} + return fileDescriptor_api_2699f5da74147c2d, []int{95} } func (m *SdkVolumeInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeInspectRequest.Unmarshal(m, b) @@ -8026,7 +8178,7 @@ func (m *SdkVolumeInspectResponse) Reset() { *m = SdkVolumeInspectRespon func (m *SdkVolumeInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeInspectResponse) ProtoMessage() {} func (*SdkVolumeInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{95} + return fileDescriptor_api_2699f5da74147c2d, []int{96} } func (m *SdkVolumeInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeInspectResponse.Unmarshal(m, b) @@ -8096,7 +8248,7 @@ func (m *SdkVolumeUpdateRequest) Reset() { *m = SdkVolumeUpdateRequest{} func (m *SdkVolumeUpdateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeUpdateRequest) ProtoMessage() {} func (*SdkVolumeUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{96} + return fileDescriptor_api_2699f5da74147c2d, []int{97} } func (m *SdkVolumeUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeUpdateRequest.Unmarshal(m, b) @@ -8148,7 +8300,7 @@ func (m *SdkVolumeUpdateResponse) Reset() { *m = SdkVolumeUpdateResponse func (m *SdkVolumeUpdateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeUpdateResponse) ProtoMessage() {} func (*SdkVolumeUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{97} + return fileDescriptor_api_2699f5da74147c2d, []int{98} } func (m *SdkVolumeUpdateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeUpdateResponse.Unmarshal(m, b) @@ -8184,7 +8336,7 @@ func (m *SdkVolumeStatsRequest) Reset() { *m = SdkVolumeStatsRequest{} } func (m *SdkVolumeStatsRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeStatsRequest) ProtoMessage() {} func (*SdkVolumeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{98} + return fileDescriptor_api_2699f5da74147c2d, []int{99} } func (m *SdkVolumeStatsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeStatsRequest.Unmarshal(m, b) @@ -8231,7 +8383,7 @@ func (m *SdkVolumeStatsResponse) Reset() { *m = SdkVolumeStatsResponse{} func (m *SdkVolumeStatsResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeStatsResponse) ProtoMessage() {} func (*SdkVolumeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{99} + return fileDescriptor_api_2699f5da74147c2d, []int{100} } func (m *SdkVolumeStatsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeStatsResponse.Unmarshal(m, b) @@ -8271,7 +8423,7 @@ func (m *SdkVolumeCapacityUsageRequest) Reset() { *m = SdkVolumeCapacity func (m *SdkVolumeCapacityUsageRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCapacityUsageRequest) ProtoMessage() {} func (*SdkVolumeCapacityUsageRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{100} + return fileDescriptor_api_2699f5da74147c2d, []int{101} } func (m *SdkVolumeCapacityUsageRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCapacityUsageRequest.Unmarshal(m, b) @@ -8311,7 +8463,7 @@ func (m *SdkVolumeCapacityUsageResponse) Reset() { *m = SdkVolumeCapacit func (m *SdkVolumeCapacityUsageResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeCapacityUsageResponse) ProtoMessage() {} func (*SdkVolumeCapacityUsageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{101} + return fileDescriptor_api_2699f5da74147c2d, []int{102} } func (m *SdkVolumeCapacityUsageResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeCapacityUsageResponse.Unmarshal(m, b) @@ -8349,7 +8501,7 @@ func (m *SdkVolumeEnumerateRequest) Reset() { *m = SdkVolumeEnumerateReq func (m *SdkVolumeEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeEnumerateRequest) ProtoMessage() {} func (*SdkVolumeEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{102} + return fileDescriptor_api_2699f5da74147c2d, []int{103} } func (m *SdkVolumeEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeEnumerateRequest.Unmarshal(m, b) @@ -8382,7 +8534,7 @@ func (m *SdkVolumeEnumerateResponse) Reset() { *m = SdkVolumeEnumerateRe func (m *SdkVolumeEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeEnumerateResponse) ProtoMessage() {} func (*SdkVolumeEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{103} + return fileDescriptor_api_2699f5da74147c2d, []int{104} } func (m *SdkVolumeEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeEnumerateResponse.Unmarshal(m, b) @@ -8414,17 +8566,19 @@ type SdkVolumeEnumerateWithFiltersRequest struct { // (optional) Name to search Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` // (optional) Labels to search - Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // (optional) Ownership to match + Ownership *Ownership `protobuf:"bytes,4,opt,name=ownership" json:"ownership,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *SdkVolumeEnumerateWithFiltersRequest) Reset() { *m = SdkVolumeEnumerateWithFiltersRequest{} } func (m *SdkVolumeEnumerateWithFiltersRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeEnumerateWithFiltersRequest) ProtoMessage() {} func (*SdkVolumeEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{104} + return fileDescriptor_api_2699f5da74147c2d, []int{105} } func (m *SdkVolumeEnumerateWithFiltersRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeEnumerateWithFiltersRequest.Unmarshal(m, b) @@ -8458,6 +8612,13 @@ func (m *SdkVolumeEnumerateWithFiltersRequest) GetLabels() map[string]string { return nil } +func (m *SdkVolumeEnumerateWithFiltersRequest) GetOwnership() *Ownership { + if m != nil { + return m.Ownership + } + return nil +} + // Defines the response when listing volumes type SdkVolumeEnumerateWithFiltersResponse struct { // List of volumes matching label @@ -8471,7 +8632,7 @@ func (m *SdkVolumeEnumerateWithFiltersResponse) Reset() { *m = SdkVolume func (m *SdkVolumeEnumerateWithFiltersResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeEnumerateWithFiltersResponse) ProtoMessage() {} func (*SdkVolumeEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{105} + return fileDescriptor_api_2699f5da74147c2d, []int{106} } func (m *SdkVolumeEnumerateWithFiltersResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeEnumerateWithFiltersResponse.Unmarshal(m, b) @@ -8515,7 +8676,7 @@ func (m *SdkVolumeSnapshotCreateRequest) Reset() { *m = SdkVolumeSnapsho func (m *SdkVolumeSnapshotCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotCreateRequest) ProtoMessage() {} func (*SdkVolumeSnapshotCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{106} + return fileDescriptor_api_2699f5da74147c2d, []int{107} } func (m *SdkVolumeSnapshotCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotCreateRequest.Unmarshal(m, b) @@ -8569,7 +8730,7 @@ func (m *SdkVolumeSnapshotCreateResponse) Reset() { *m = SdkVolumeSnapsh func (m *SdkVolumeSnapshotCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotCreateResponse) ProtoMessage() {} func (*SdkVolumeSnapshotCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{107} + return fileDescriptor_api_2699f5da74147c2d, []int{108} } func (m *SdkVolumeSnapshotCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotCreateResponse.Unmarshal(m, b) @@ -8611,7 +8772,7 @@ func (m *SdkVolumeSnapshotRestoreRequest) Reset() { *m = SdkVolumeSnapsh func (m *SdkVolumeSnapshotRestoreRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotRestoreRequest) ProtoMessage() {} func (*SdkVolumeSnapshotRestoreRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{108} + return fileDescriptor_api_2699f5da74147c2d, []int{109} } func (m *SdkVolumeSnapshotRestoreRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotRestoreRequest.Unmarshal(m, b) @@ -8656,7 +8817,7 @@ func (m *SdkVolumeSnapshotRestoreResponse) Reset() { *m = SdkVolumeSnaps func (m *SdkVolumeSnapshotRestoreResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotRestoreResponse) ProtoMessage() {} func (*SdkVolumeSnapshotRestoreResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{109} + return fileDescriptor_api_2699f5da74147c2d, []int{110} } func (m *SdkVolumeSnapshotRestoreResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotRestoreResponse.Unmarshal(m, b) @@ -8689,7 +8850,7 @@ func (m *SdkVolumeSnapshotEnumerateRequest) Reset() { *m = SdkVolumeSnap func (m *SdkVolumeSnapshotEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotEnumerateRequest) ProtoMessage() {} func (*SdkVolumeSnapshotEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{110} + return fileDescriptor_api_2699f5da74147c2d, []int{111} } func (m *SdkVolumeSnapshotEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotEnumerateRequest.Unmarshal(m, b) @@ -8729,7 +8890,7 @@ func (m *SdkVolumeSnapshotEnumerateResponse) Reset() { *m = SdkVolumeSna func (m *SdkVolumeSnapshotEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotEnumerateResponse) ProtoMessage() {} func (*SdkVolumeSnapshotEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{111} + return fileDescriptor_api_2699f5da74147c2d, []int{112} } func (m *SdkVolumeSnapshotEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotEnumerateResponse.Unmarshal(m, b) @@ -8775,7 +8936,7 @@ func (m *SdkVolumeSnapshotEnumerateWithFiltersRequest) String() string { } func (*SdkVolumeSnapshotEnumerateWithFiltersRequest) ProtoMessage() {} func (*SdkVolumeSnapshotEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{112} + return fileDescriptor_api_2699f5da74147c2d, []int{113} } func (m *SdkVolumeSnapshotEnumerateWithFiltersRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotEnumerateWithFiltersRequest.Unmarshal(m, b) @@ -8826,7 +8987,7 @@ func (m *SdkVolumeSnapshotEnumerateWithFiltersResponse) String() string { } func (*SdkVolumeSnapshotEnumerateWithFiltersResponse) ProtoMessage() {} func (*SdkVolumeSnapshotEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{113} + return fileDescriptor_api_2699f5da74147c2d, []int{114} } func (m *SdkVolumeSnapshotEnumerateWithFiltersResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotEnumerateWithFiltersResponse.Unmarshal(m, b) @@ -8870,7 +9031,7 @@ func (m *SdkVolumeSnapshotScheduleUpdateRequest) Reset() { func (m *SdkVolumeSnapshotScheduleUpdateRequest) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotScheduleUpdateRequest) ProtoMessage() {} func (*SdkVolumeSnapshotScheduleUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{114} + return fileDescriptor_api_2699f5da74147c2d, []int{115} } func (m *SdkVolumeSnapshotScheduleUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotScheduleUpdateRequest.Unmarshal(m, b) @@ -8917,7 +9078,7 @@ func (m *SdkVolumeSnapshotScheduleUpdateResponse) Reset() { func (m *SdkVolumeSnapshotScheduleUpdateResponse) String() string { return proto.CompactTextString(m) } func (*SdkVolumeSnapshotScheduleUpdateResponse) ProtoMessage() {} func (*SdkVolumeSnapshotScheduleUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{115} + return fileDescriptor_api_2699f5da74147c2d, []int{116} } func (m *SdkVolumeSnapshotScheduleUpdateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVolumeSnapshotScheduleUpdateResponse.Unmarshal(m, b) @@ -8948,7 +9109,7 @@ func (m *SdkClusterInspectCurrentRequest) Reset() { *m = SdkClusterInspe func (m *SdkClusterInspectCurrentRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterInspectCurrentRequest) ProtoMessage() {} func (*SdkClusterInspectCurrentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{116} + return fileDescriptor_api_2699f5da74147c2d, []int{117} } func (m *SdkClusterInspectCurrentRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterInspectCurrentRequest.Unmarshal(m, b) @@ -8981,7 +9142,7 @@ func (m *SdkClusterInspectCurrentResponse) Reset() { *m = SdkClusterInsp func (m *SdkClusterInspectCurrentResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterInspectCurrentResponse) ProtoMessage() {} func (*SdkClusterInspectCurrentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{117} + return fileDescriptor_api_2699f5da74147c2d, []int{118} } func (m *SdkClusterInspectCurrentResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterInspectCurrentResponse.Unmarshal(m, b) @@ -9021,7 +9182,7 @@ func (m *SdkNodeInspectRequest) Reset() { *m = SdkNodeInspectRequest{} } func (m *SdkNodeInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkNodeInspectRequest) ProtoMessage() {} func (*SdkNodeInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{118} + return fileDescriptor_api_2699f5da74147c2d, []int{119} } func (m *SdkNodeInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeInspectRequest.Unmarshal(m, b) @@ -9061,7 +9222,7 @@ func (m *SdkNodeInspectResponse) Reset() { *m = SdkNodeInspectResponse{} func (m *SdkNodeInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkNodeInspectResponse) ProtoMessage() {} func (*SdkNodeInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{119} + return fileDescriptor_api_2699f5da74147c2d, []int{120} } func (m *SdkNodeInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeInspectResponse.Unmarshal(m, b) @@ -9099,7 +9260,7 @@ func (m *SdkNodeInspectCurrentRequest) Reset() { *m = SdkNodeInspectCurr func (m *SdkNodeInspectCurrentRequest) String() string { return proto.CompactTextString(m) } func (*SdkNodeInspectCurrentRequest) ProtoMessage() {} func (*SdkNodeInspectCurrentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{120} + return fileDescriptor_api_2699f5da74147c2d, []int{121} } func (m *SdkNodeInspectCurrentRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeInspectCurrentRequest.Unmarshal(m, b) @@ -9132,7 +9293,7 @@ func (m *SdkNodeInspectCurrentResponse) Reset() { *m = SdkNodeInspectCur func (m *SdkNodeInspectCurrentResponse) String() string { return proto.CompactTextString(m) } func (*SdkNodeInspectCurrentResponse) ProtoMessage() {} func (*SdkNodeInspectCurrentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{121} + return fileDescriptor_api_2699f5da74147c2d, []int{122} } func (m *SdkNodeInspectCurrentResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeInspectCurrentResponse.Unmarshal(m, b) @@ -9170,7 +9331,7 @@ func (m *SdkNodeEnumerateRequest) Reset() { *m = SdkNodeEnumerateRequest func (m *SdkNodeEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkNodeEnumerateRequest) ProtoMessage() {} func (*SdkNodeEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{122} + return fileDescriptor_api_2699f5da74147c2d, []int{123} } func (m *SdkNodeEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeEnumerateRequest.Unmarshal(m, b) @@ -9203,7 +9364,7 @@ func (m *SdkNodeEnumerateResponse) Reset() { *m = SdkNodeEnumerateRespon func (m *SdkNodeEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkNodeEnumerateResponse) ProtoMessage() {} func (*SdkNodeEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{123} + return fileDescriptor_api_2699f5da74147c2d, []int{124} } func (m *SdkNodeEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkNodeEnumerateResponse.Unmarshal(m, b) @@ -9243,7 +9404,7 @@ func (m *SdkObjectstoreInspectRequest) Reset() { *m = SdkObjectstoreInsp func (m *SdkObjectstoreInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreInspectRequest) ProtoMessage() {} func (*SdkObjectstoreInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{124} + return fileDescriptor_api_2699f5da74147c2d, []int{125} } func (m *SdkObjectstoreInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreInspectRequest.Unmarshal(m, b) @@ -9283,7 +9444,7 @@ func (m *SdkObjectstoreInspectResponse) Reset() { *m = SdkObjectstoreIns func (m *SdkObjectstoreInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreInspectResponse) ProtoMessage() {} func (*SdkObjectstoreInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{125} + return fileDescriptor_api_2699f5da74147c2d, []int{126} } func (m *SdkObjectstoreInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreInspectResponse.Unmarshal(m, b) @@ -9323,7 +9484,7 @@ func (m *SdkObjectstoreCreateRequest) Reset() { *m = SdkObjectstoreCreat func (m *SdkObjectstoreCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreCreateRequest) ProtoMessage() {} func (*SdkObjectstoreCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{126} + return fileDescriptor_api_2699f5da74147c2d, []int{127} } func (m *SdkObjectstoreCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreCreateRequest.Unmarshal(m, b) @@ -9364,7 +9525,7 @@ func (m *SdkObjectstoreCreateResponse) Reset() { *m = SdkObjectstoreCrea func (m *SdkObjectstoreCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreCreateResponse) ProtoMessage() {} func (*SdkObjectstoreCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{127} + return fileDescriptor_api_2699f5da74147c2d, []int{128} } func (m *SdkObjectstoreCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreCreateResponse.Unmarshal(m, b) @@ -9404,7 +9565,7 @@ func (m *SdkObjectstoreDeleteRequest) Reset() { *m = SdkObjectstoreDelet func (m *SdkObjectstoreDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreDeleteRequest) ProtoMessage() {} func (*SdkObjectstoreDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{128} + return fileDescriptor_api_2699f5da74147c2d, []int{129} } func (m *SdkObjectstoreDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreDeleteRequest.Unmarshal(m, b) @@ -9442,7 +9603,7 @@ func (m *SdkObjectstoreDeleteResponse) Reset() { *m = SdkObjectstoreDele func (m *SdkObjectstoreDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreDeleteResponse) ProtoMessage() {} func (*SdkObjectstoreDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{129} + return fileDescriptor_api_2699f5da74147c2d, []int{130} } func (m *SdkObjectstoreDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreDeleteResponse.Unmarshal(m, b) @@ -9477,7 +9638,7 @@ func (m *SdkObjectstoreUpdateRequest) Reset() { *m = SdkObjectstoreUpdat func (m *SdkObjectstoreUpdateRequest) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreUpdateRequest) ProtoMessage() {} func (*SdkObjectstoreUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{130} + return fileDescriptor_api_2699f5da74147c2d, []int{131} } func (m *SdkObjectstoreUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreUpdateRequest.Unmarshal(m, b) @@ -9522,7 +9683,7 @@ func (m *SdkObjectstoreUpdateResponse) Reset() { *m = SdkObjectstoreUpda func (m *SdkObjectstoreUpdateResponse) String() string { return proto.CompactTextString(m) } func (*SdkObjectstoreUpdateResponse) ProtoMessage() {} func (*SdkObjectstoreUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{131} + return fileDescriptor_api_2699f5da74147c2d, []int{132} } func (m *SdkObjectstoreUpdateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkObjectstoreUpdateResponse.Unmarshal(m, b) @@ -9565,7 +9726,7 @@ func (m *SdkCloudBackupCreateRequest) Reset() { *m = SdkCloudBackupCreat func (m *SdkCloudBackupCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupCreateRequest) ProtoMessage() {} func (*SdkCloudBackupCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{132} + return fileDescriptor_api_2699f5da74147c2d, []int{133} } func (m *SdkCloudBackupCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupCreateRequest.Unmarshal(m, b) @@ -9633,7 +9794,7 @@ func (m *SdkCloudBackupCreateResponse) Reset() { *m = SdkCloudBackupCrea func (m *SdkCloudBackupCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupCreateResponse) ProtoMessage() {} func (*SdkCloudBackupCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{133} + return fileDescriptor_api_2699f5da74147c2d, []int{134} } func (m *SdkCloudBackupCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupCreateResponse.Unmarshal(m, b) @@ -9684,7 +9845,7 @@ func (m *SdkCloudBackupRestoreRequest) Reset() { *m = SdkCloudBackupRest func (m *SdkCloudBackupRestoreRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupRestoreRequest) ProtoMessage() {} func (*SdkCloudBackupRestoreRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{134} + return fileDescriptor_api_2699f5da74147c2d, []int{135} } func (m *SdkCloudBackupRestoreRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupRestoreRequest.Unmarshal(m, b) @@ -9755,7 +9916,7 @@ func (m *SdkCloudBackupRestoreResponse) Reset() { *m = SdkCloudBackupRes func (m *SdkCloudBackupRestoreResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupRestoreResponse) ProtoMessage() {} func (*SdkCloudBackupRestoreResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{135} + return fileDescriptor_api_2699f5da74147c2d, []int{136} } func (m *SdkCloudBackupRestoreResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupRestoreResponse.Unmarshal(m, b) @@ -9808,7 +9969,7 @@ func (m *SdkCloudBackupDeleteRequest) Reset() { *m = SdkCloudBackupDelet func (m *SdkCloudBackupDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupDeleteRequest) ProtoMessage() {} func (*SdkCloudBackupDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{136} + return fileDescriptor_api_2699f5da74147c2d, []int{137} } func (m *SdkCloudBackupDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupDeleteRequest.Unmarshal(m, b) @@ -9860,7 +10021,7 @@ func (m *SdkCloudBackupDeleteResponse) Reset() { *m = SdkCloudBackupDele func (m *SdkCloudBackupDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupDeleteResponse) ProtoMessage() {} func (*SdkCloudBackupDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{137} + return fileDescriptor_api_2699f5da74147c2d, []int{138} } func (m *SdkCloudBackupDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupDeleteResponse.Unmarshal(m, b) @@ -9896,7 +10057,7 @@ func (m *SdkCloudBackupDeleteAllRequest) Reset() { *m = SdkCloudBackupDe func (m *SdkCloudBackupDeleteAllRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupDeleteAllRequest) ProtoMessage() {} func (*SdkCloudBackupDeleteAllRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{138} + return fileDescriptor_api_2699f5da74147c2d, []int{139} } func (m *SdkCloudBackupDeleteAllRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupDeleteAllRequest.Unmarshal(m, b) @@ -9941,7 +10102,7 @@ func (m *SdkCloudBackupDeleteAllResponse) Reset() { *m = SdkCloudBackupD func (m *SdkCloudBackupDeleteAllResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupDeleteAllResponse) ProtoMessage() {} func (*SdkCloudBackupDeleteAllResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{139} + return fileDescriptor_api_2699f5da74147c2d, []int{140} } func (m *SdkCloudBackupDeleteAllResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupDeleteAllResponse.Unmarshal(m, b) @@ -9994,7 +10155,7 @@ func (m *SdkCloudBackupEnumerateWithFiltersRequest) Reset() { func (m *SdkCloudBackupEnumerateWithFiltersRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupEnumerateWithFiltersRequest) ProtoMessage() {} func (*SdkCloudBackupEnumerateWithFiltersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{140} + return fileDescriptor_api_2699f5da74147c2d, []int{141} } func (m *SdkCloudBackupEnumerateWithFiltersRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupEnumerateWithFiltersRequest.Unmarshal(m, b) @@ -10066,7 +10227,7 @@ func (m *SdkCloudBackupInfo) Reset() { *m = SdkCloudBackupInfo{} } func (m *SdkCloudBackupInfo) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupInfo) ProtoMessage() {} func (*SdkCloudBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{141} + return fileDescriptor_api_2699f5da74147c2d, []int{142} } func (m *SdkCloudBackupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupInfo.Unmarshal(m, b) @@ -10144,7 +10305,7 @@ func (m *SdkCloudBackupEnumerateWithFiltersResponse) String() string { } func (*SdkCloudBackupEnumerateWithFiltersResponse) ProtoMessage() {} func (*SdkCloudBackupEnumerateWithFiltersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{142} + return fileDescriptor_api_2699f5da74147c2d, []int{143} } func (m *SdkCloudBackupEnumerateWithFiltersResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupEnumerateWithFiltersResponse.Unmarshal(m, b) @@ -10207,7 +10368,7 @@ func (m *SdkCloudBackupStatus) Reset() { *m = SdkCloudBackupStatus{} } func (m *SdkCloudBackupStatus) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupStatus) ProtoMessage() {} func (*SdkCloudBackupStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{143} + return fileDescriptor_api_2699f5da74147c2d, []int{144} } func (m *SdkCloudBackupStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupStatus.Unmarshal(m, b) @@ -10333,7 +10494,7 @@ func (m *SdkCloudBackupStatusRequest) Reset() { *m = SdkCloudBackupStatu func (m *SdkCloudBackupStatusRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupStatusRequest) ProtoMessage() {} func (*SdkCloudBackupStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{144} + return fileDescriptor_api_2699f5da74147c2d, []int{145} } func (m *SdkCloudBackupStatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupStatusRequest.Unmarshal(m, b) @@ -10388,7 +10549,7 @@ func (m *SdkCloudBackupStatusResponse) Reset() { *m = SdkCloudBackupStat func (m *SdkCloudBackupStatusResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupStatusResponse) ProtoMessage() {} func (*SdkCloudBackupStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{145} + return fileDescriptor_api_2699f5da74147c2d, []int{146} } func (m *SdkCloudBackupStatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupStatusResponse.Unmarshal(m, b) @@ -10430,7 +10591,7 @@ func (m *SdkCloudBackupCatalogRequest) Reset() { *m = SdkCloudBackupCata func (m *SdkCloudBackupCatalogRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupCatalogRequest) ProtoMessage() {} func (*SdkCloudBackupCatalogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{146} + return fileDescriptor_api_2699f5da74147c2d, []int{147} } func (m *SdkCloudBackupCatalogRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupCatalogRequest.Unmarshal(m, b) @@ -10477,7 +10638,7 @@ func (m *SdkCloudBackupCatalogResponse) Reset() { *m = SdkCloudBackupCat func (m *SdkCloudBackupCatalogResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupCatalogResponse) ProtoMessage() {} func (*SdkCloudBackupCatalogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{147} + return fileDescriptor_api_2699f5da74147c2d, []int{148} } func (m *SdkCloudBackupCatalogResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupCatalogResponse.Unmarshal(m, b) @@ -10522,7 +10683,7 @@ func (m *SdkCloudBackupHistoryItem) Reset() { *m = SdkCloudBackupHistory func (m *SdkCloudBackupHistoryItem) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupHistoryItem) ProtoMessage() {} func (*SdkCloudBackupHistoryItem) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{148} + return fileDescriptor_api_2699f5da74147c2d, []int{149} } func (m *SdkCloudBackupHistoryItem) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupHistoryItem.Unmarshal(m, b) @@ -10578,7 +10739,7 @@ func (m *SdkCloudBackupHistoryRequest) Reset() { *m = SdkCloudBackupHist func (m *SdkCloudBackupHistoryRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupHistoryRequest) ProtoMessage() {} func (*SdkCloudBackupHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{149} + return fileDescriptor_api_2699f5da74147c2d, []int{150} } func (m *SdkCloudBackupHistoryRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupHistoryRequest.Unmarshal(m, b) @@ -10618,7 +10779,7 @@ func (m *SdkCloudBackupHistoryResponse) Reset() { *m = SdkCloudBackupHis func (m *SdkCloudBackupHistoryResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupHistoryResponse) ProtoMessage() {} func (*SdkCloudBackupHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{150} + return fileDescriptor_api_2699f5da74147c2d, []int{151} } func (m *SdkCloudBackupHistoryResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupHistoryResponse.Unmarshal(m, b) @@ -10662,7 +10823,7 @@ func (m *SdkCloudBackupStateChangeRequest) Reset() { *m = SdkCloudBackup func (m *SdkCloudBackupStateChangeRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupStateChangeRequest) ProtoMessage() {} func (*SdkCloudBackupStateChangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{151} + return fileDescriptor_api_2699f5da74147c2d, []int{152} } func (m *SdkCloudBackupStateChangeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupStateChangeRequest.Unmarshal(m, b) @@ -10707,7 +10868,7 @@ func (m *SdkCloudBackupStateChangeResponse) Reset() { *m = SdkCloudBacku func (m *SdkCloudBackupStateChangeResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupStateChangeResponse) ProtoMessage() {} func (*SdkCloudBackupStateChangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{152} + return fileDescriptor_api_2699f5da74147c2d, []int{153} } func (m *SdkCloudBackupStateChangeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupStateChangeResponse.Unmarshal(m, b) @@ -10750,7 +10911,7 @@ func (m *SdkCloudBackupScheduleInfo) Reset() { *m = SdkCloudBackupSchedu func (m *SdkCloudBackupScheduleInfo) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupScheduleInfo) ProtoMessage() {} func (*SdkCloudBackupScheduleInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{153} + return fileDescriptor_api_2699f5da74147c2d, []int{154} } func (m *SdkCloudBackupScheduleInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupScheduleInfo.Unmarshal(m, b) @@ -10819,7 +10980,7 @@ func (m *SdkCloudBackupSchedCreateRequest) Reset() { *m = SdkCloudBackup func (m *SdkCloudBackupSchedCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedCreateRequest) ProtoMessage() {} func (*SdkCloudBackupSchedCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{154} + return fileDescriptor_api_2699f5da74147c2d, []int{155} } func (m *SdkCloudBackupSchedCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedCreateRequest.Unmarshal(m, b) @@ -10860,7 +11021,7 @@ func (m *SdkCloudBackupSchedCreateResponse) Reset() { *m = SdkCloudBacku func (m *SdkCloudBackupSchedCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedCreateResponse) ProtoMessage() {} func (*SdkCloudBackupSchedCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{155} + return fileDescriptor_api_2699f5da74147c2d, []int{156} } func (m *SdkCloudBackupSchedCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedCreateResponse.Unmarshal(m, b) @@ -10900,7 +11061,7 @@ func (m *SdkCloudBackupSchedDeleteRequest) Reset() { *m = SdkCloudBackup func (m *SdkCloudBackupSchedDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedDeleteRequest) ProtoMessage() {} func (*SdkCloudBackupSchedDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{156} + return fileDescriptor_api_2699f5da74147c2d, []int{157} } func (m *SdkCloudBackupSchedDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedDeleteRequest.Unmarshal(m, b) @@ -10938,7 +11099,7 @@ func (m *SdkCloudBackupSchedDeleteResponse) Reset() { *m = SdkCloudBacku func (m *SdkCloudBackupSchedDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedDeleteResponse) ProtoMessage() {} func (*SdkCloudBackupSchedDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{157} + return fileDescriptor_api_2699f5da74147c2d, []int{158} } func (m *SdkCloudBackupSchedDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedDeleteResponse.Unmarshal(m, b) @@ -10969,7 +11130,7 @@ func (m *SdkCloudBackupSchedEnumerateRequest) Reset() { *m = SdkCloudBac func (m *SdkCloudBackupSchedEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedEnumerateRequest) ProtoMessage() {} func (*SdkCloudBackupSchedEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{158} + return fileDescriptor_api_2699f5da74147c2d, []int{159} } func (m *SdkCloudBackupSchedEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedEnumerateRequest.Unmarshal(m, b) @@ -11003,7 +11164,7 @@ func (m *SdkCloudBackupSchedEnumerateResponse) Reset() { *m = SdkCloudBa func (m *SdkCloudBackupSchedEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudBackupSchedEnumerateResponse) ProtoMessage() {} func (*SdkCloudBackupSchedEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{159} + return fileDescriptor_api_2699f5da74147c2d, []int{160} } func (m *SdkCloudBackupSchedEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudBackupSchedEnumerateResponse.Unmarshal(m, b) @@ -11083,7 +11244,7 @@ func (m *SdkRule) Reset() { *m = SdkRule{} } func (m *SdkRule) String() string { return proto.CompactTextString(m) } func (*SdkRule) ProtoMessage() {} func (*SdkRule) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{160} + return fileDescriptor_api_2699f5da74147c2d, []int{161} } func (m *SdkRule) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRule.Unmarshal(m, b) @@ -11129,7 +11290,7 @@ func (m *SdkRole) Reset() { *m = SdkRole{} } func (m *SdkRole) String() string { return proto.CompactTextString(m) } func (*SdkRole) ProtoMessage() {} func (*SdkRole) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{161} + return fileDescriptor_api_2699f5da74147c2d, []int{162} } func (m *SdkRole) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRole.Unmarshal(m, b) @@ -11176,7 +11337,7 @@ func (m *SdkRoleCreateRequest) Reset() { *m = SdkRoleCreateRequest{} } func (m *SdkRoleCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkRoleCreateRequest) ProtoMessage() {} func (*SdkRoleCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{162} + return fileDescriptor_api_2699f5da74147c2d, []int{163} } func (m *SdkRoleCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleCreateRequest.Unmarshal(m, b) @@ -11216,7 +11377,7 @@ func (m *SdkRoleCreateResponse) Reset() { *m = SdkRoleCreateResponse{} } func (m *SdkRoleCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkRoleCreateResponse) ProtoMessage() {} func (*SdkRoleCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{163} + return fileDescriptor_api_2699f5da74147c2d, []int{164} } func (m *SdkRoleCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleCreateResponse.Unmarshal(m, b) @@ -11254,7 +11415,7 @@ func (m *SdkRoleEnumerateRequest) Reset() { *m = SdkRoleEnumerateRequest func (m *SdkRoleEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkRoleEnumerateRequest) ProtoMessage() {} func (*SdkRoleEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{164} + return fileDescriptor_api_2699f5da74147c2d, []int{165} } func (m *SdkRoleEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleEnumerateRequest.Unmarshal(m, b) @@ -11287,7 +11448,7 @@ func (m *SdkRoleEnumerateResponse) Reset() { *m = SdkRoleEnumerateRespon func (m *SdkRoleEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkRoleEnumerateResponse) ProtoMessage() {} func (*SdkRoleEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{165} + return fileDescriptor_api_2699f5da74147c2d, []int{166} } func (m *SdkRoleEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleEnumerateResponse.Unmarshal(m, b) @@ -11327,7 +11488,7 @@ func (m *SdkRoleInspectRequest) Reset() { *m = SdkRoleInspectRequest{} } func (m *SdkRoleInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkRoleInspectRequest) ProtoMessage() {} func (*SdkRoleInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{166} + return fileDescriptor_api_2699f5da74147c2d, []int{167} } func (m *SdkRoleInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleInspectRequest.Unmarshal(m, b) @@ -11367,7 +11528,7 @@ func (m *SdkRoleInspectResponse) Reset() { *m = SdkRoleInspectResponse{} func (m *SdkRoleInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkRoleInspectResponse) ProtoMessage() {} func (*SdkRoleInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{167} + return fileDescriptor_api_2699f5da74147c2d, []int{168} } func (m *SdkRoleInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleInspectResponse.Unmarshal(m, b) @@ -11406,7 +11567,7 @@ func (m *SdkRoleDeleteRequest) Reset() { *m = SdkRoleDeleteRequest{} } func (m *SdkRoleDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkRoleDeleteRequest) ProtoMessage() {} func (*SdkRoleDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{168} + return fileDescriptor_api_2699f5da74147c2d, []int{169} } func (m *SdkRoleDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleDeleteRequest.Unmarshal(m, b) @@ -11444,7 +11605,7 @@ func (m *SdkRoleDeleteResponse) Reset() { *m = SdkRoleDeleteResponse{} } func (m *SdkRoleDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkRoleDeleteResponse) ProtoMessage() {} func (*SdkRoleDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{169} + return fileDescriptor_api_2699f5da74147c2d, []int{170} } func (m *SdkRoleDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleDeleteResponse.Unmarshal(m, b) @@ -11477,7 +11638,7 @@ func (m *SdkRoleUpdateRequest) Reset() { *m = SdkRoleUpdateRequest{} } func (m *SdkRoleUpdateRequest) String() string { return proto.CompactTextString(m) } func (*SdkRoleUpdateRequest) ProtoMessage() {} func (*SdkRoleUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{170} + return fileDescriptor_api_2699f5da74147c2d, []int{171} } func (m *SdkRoleUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleUpdateRequest.Unmarshal(m, b) @@ -11517,7 +11678,7 @@ func (m *SdkRoleUpdateResponse) Reset() { *m = SdkRoleUpdateResponse{} } func (m *SdkRoleUpdateResponse) String() string { return proto.CompactTextString(m) } func (*SdkRoleUpdateResponse) ProtoMessage() {} func (*SdkRoleUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{171} + return fileDescriptor_api_2699f5da74147c2d, []int{172} } func (m *SdkRoleUpdateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkRoleUpdateResponse.Unmarshal(m, b) @@ -11555,7 +11716,7 @@ func (m *SdkIdentityCapabilitiesRequest) Reset() { *m = SdkIdentityCapab func (m *SdkIdentityCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*SdkIdentityCapabilitiesRequest) ProtoMessage() {} func (*SdkIdentityCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{172} + return fileDescriptor_api_2699f5da74147c2d, []int{173} } func (m *SdkIdentityCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkIdentityCapabilitiesRequest.Unmarshal(m, b) @@ -11588,7 +11749,7 @@ func (m *SdkIdentityCapabilitiesResponse) Reset() { *m = SdkIdentityCapa func (m *SdkIdentityCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*SdkIdentityCapabilitiesResponse) ProtoMessage() {} func (*SdkIdentityCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{173} + return fileDescriptor_api_2699f5da74147c2d, []int{174} } func (m *SdkIdentityCapabilitiesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkIdentityCapabilitiesResponse.Unmarshal(m, b) @@ -11626,7 +11787,7 @@ func (m *SdkIdentityVersionRequest) Reset() { *m = SdkIdentityVersionReq func (m *SdkIdentityVersionRequest) String() string { return proto.CompactTextString(m) } func (*SdkIdentityVersionRequest) ProtoMessage() {} func (*SdkIdentityVersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{174} + return fileDescriptor_api_2699f5da74147c2d, []int{175} } func (m *SdkIdentityVersionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkIdentityVersionRequest.Unmarshal(m, b) @@ -11661,7 +11822,7 @@ func (m *SdkIdentityVersionResponse) Reset() { *m = SdkIdentityVersionRe func (m *SdkIdentityVersionResponse) String() string { return proto.CompactTextString(m) } func (*SdkIdentityVersionResponse) ProtoMessage() {} func (*SdkIdentityVersionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{175} + return fileDescriptor_api_2699f5da74147c2d, []int{176} } func (m *SdkIdentityVersionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkIdentityVersionResponse.Unmarshal(m, b) @@ -11712,7 +11873,7 @@ func (m *SdkServiceCapability) Reset() { *m = SdkServiceCapability{} } func (m *SdkServiceCapability) String() string { return proto.CompactTextString(m) } func (*SdkServiceCapability) ProtoMessage() {} func (*SdkServiceCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{176} + return fileDescriptor_api_2699f5da74147c2d, []int{177} } func (m *SdkServiceCapability) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkServiceCapability.Unmarshal(m, b) @@ -11825,7 +11986,7 @@ func (m *SdkServiceCapability_OpenStorageService) Reset() { func (m *SdkServiceCapability_OpenStorageService) String() string { return proto.CompactTextString(m) } func (*SdkServiceCapability_OpenStorageService) ProtoMessage() {} func (*SdkServiceCapability_OpenStorageService) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{176, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{177, 0} } func (m *SdkServiceCapability_OpenStorageService) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkServiceCapability_OpenStorageService.Unmarshal(m, b) @@ -11874,7 +12035,7 @@ func (m *SdkVersion) Reset() { *m = SdkVersion{} } func (m *SdkVersion) String() string { return proto.CompactTextString(m) } func (*SdkVersion) ProtoMessage() {} func (*SdkVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{177} + return fileDescriptor_api_2699f5da74147c2d, []int{178} } func (m *SdkVersion) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkVersion.Unmarshal(m, b) @@ -11939,7 +12100,7 @@ func (m *StorageVersion) Reset() { *m = StorageVersion{} } func (m *StorageVersion) String() string { return proto.CompactTextString(m) } func (*StorageVersion) ProtoMessage() {} func (*StorageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{178} + return fileDescriptor_api_2699f5da74147c2d, []int{179} } func (m *StorageVersion) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StorageVersion.Unmarshal(m, b) @@ -11990,7 +12151,7 @@ func (m *CloudMigrate) Reset() { *m = CloudMigrate{} } func (m *CloudMigrate) String() string { return proto.CompactTextString(m) } func (*CloudMigrate) ProtoMessage() {} func (*CloudMigrate) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{179} + return fileDescriptor_api_2699f5da74147c2d, []int{180} } func (m *CloudMigrate) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrate.Unmarshal(m, b) @@ -12030,7 +12191,7 @@ func (m *CloudMigrateStartRequest) Reset() { *m = CloudMigrateStartReque func (m *CloudMigrateStartRequest) String() string { return proto.CompactTextString(m) } func (*CloudMigrateStartRequest) ProtoMessage() {} func (*CloudMigrateStartRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{180} + return fileDescriptor_api_2699f5da74147c2d, []int{181} } func (m *CloudMigrateStartRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateStartRequest.Unmarshal(m, b) @@ -12099,7 +12260,7 @@ func (m *SdkCloudMigrateStartRequest) Reset() { *m = SdkCloudMigrateStar func (m *SdkCloudMigrateStartRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateStartRequest) ProtoMessage() {} func (*SdkCloudMigrateStartRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{181} + return fileDescriptor_api_2699f5da74147c2d, []int{182} } func (m *SdkCloudMigrateStartRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStartRequest.Unmarshal(m, b) @@ -12286,7 +12447,7 @@ func (m *SdkCloudMigrateStartRequest_MigrateVolume) Reset() { func (m *SdkCloudMigrateStartRequest_MigrateVolume) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateStartRequest_MigrateVolume) ProtoMessage() {} func (*SdkCloudMigrateStartRequest_MigrateVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{181, 0} + return fileDescriptor_api_2699f5da74147c2d, []int{182, 0} } func (m *SdkCloudMigrateStartRequest_MigrateVolume) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStartRequest_MigrateVolume.Unmarshal(m, b) @@ -12329,7 +12490,7 @@ func (m *SdkCloudMigrateStartRequest_MigrateVolumeGroup) String() string { } func (*SdkCloudMigrateStartRequest_MigrateVolumeGroup) ProtoMessage() {} func (*SdkCloudMigrateStartRequest_MigrateVolumeGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{181, 1} + return fileDescriptor_api_2699f5da74147c2d, []int{182, 1} } func (m *SdkCloudMigrateStartRequest_MigrateVolumeGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStartRequest_MigrateVolumeGroup.Unmarshal(m, b) @@ -12371,7 +12532,7 @@ func (m *SdkCloudMigrateStartRequest_MigrateAllVolumes) String() string { } func (*SdkCloudMigrateStartRequest_MigrateAllVolumes) ProtoMessage() {} func (*SdkCloudMigrateStartRequest_MigrateAllVolumes) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{181, 2} + return fileDescriptor_api_2699f5da74147c2d, []int{182, 2} } func (m *SdkCloudMigrateStartRequest_MigrateAllVolumes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStartRequest_MigrateAllVolumes.Unmarshal(m, b) @@ -12404,7 +12565,7 @@ func (m *CloudMigrateStartResponse) Reset() { *m = CloudMigrateStartResp func (m *CloudMigrateStartResponse) String() string { return proto.CompactTextString(m) } func (*CloudMigrateStartResponse) ProtoMessage() {} func (*CloudMigrateStartResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{182} + return fileDescriptor_api_2699f5da74147c2d, []int{183} } func (m *CloudMigrateStartResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateStartResponse.Unmarshal(m, b) @@ -12444,7 +12605,7 @@ func (m *SdkCloudMigrateStartResponse) Reset() { *m = SdkCloudMigrateSta func (m *SdkCloudMigrateStartResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateStartResponse) ProtoMessage() {} func (*SdkCloudMigrateStartResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{183} + return fileDescriptor_api_2699f5da74147c2d, []int{184} } func (m *SdkCloudMigrateStartResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStartResponse.Unmarshal(m, b) @@ -12484,7 +12645,7 @@ func (m *CloudMigrateCancelRequest) Reset() { *m = CloudMigrateCancelReq func (m *CloudMigrateCancelRequest) String() string { return proto.CompactTextString(m) } func (*CloudMigrateCancelRequest) ProtoMessage() {} func (*CloudMigrateCancelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{184} + return fileDescriptor_api_2699f5da74147c2d, []int{185} } func (m *CloudMigrateCancelRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateCancelRequest.Unmarshal(m, b) @@ -12524,7 +12685,7 @@ func (m *SdkCloudMigrateCancelRequest) Reset() { *m = SdkCloudMigrateCan func (m *SdkCloudMigrateCancelRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateCancelRequest) ProtoMessage() {} func (*SdkCloudMigrateCancelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{185} + return fileDescriptor_api_2699f5da74147c2d, []int{186} } func (m *SdkCloudMigrateCancelRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateCancelRequest.Unmarshal(m, b) @@ -12562,7 +12723,7 @@ func (m *SdkCloudMigrateCancelResponse) Reset() { *m = SdkCloudMigrateCa func (m *SdkCloudMigrateCancelResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateCancelResponse) ProtoMessage() {} func (*SdkCloudMigrateCancelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{186} + return fileDescriptor_api_2699f5da74147c2d, []int{187} } func (m *SdkCloudMigrateCancelResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateCancelResponse.Unmarshal(m, b) @@ -12622,7 +12783,7 @@ func (m *CloudMigrateInfo) Reset() { *m = CloudMigrateInfo{} } func (m *CloudMigrateInfo) String() string { return proto.CompactTextString(m) } func (*CloudMigrateInfo) ProtoMessage() {} func (*CloudMigrateInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{187} + return fileDescriptor_api_2699f5da74147c2d, []int{188} } func (m *CloudMigrateInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateInfo.Unmarshal(m, b) @@ -12758,7 +12919,7 @@ func (m *CloudMigrateInfoList) Reset() { *m = CloudMigrateInfoList{} } func (m *CloudMigrateInfoList) String() string { return proto.CompactTextString(m) } func (*CloudMigrateInfoList) ProtoMessage() {} func (*CloudMigrateInfoList) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{188} + return fileDescriptor_api_2699f5da74147c2d, []int{189} } func (m *CloudMigrateInfoList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateInfoList.Unmarshal(m, b) @@ -12799,7 +12960,7 @@ func (m *SdkCloudMigrateStatusRequest) Reset() { *m = SdkCloudMigrateSta func (m *SdkCloudMigrateStatusRequest) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateStatusRequest) ProtoMessage() {} func (*SdkCloudMigrateStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{189} + return fileDescriptor_api_2699f5da74147c2d, []int{190} } func (m *SdkCloudMigrateStatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStatusRequest.Unmarshal(m, b) @@ -12841,7 +13002,7 @@ func (m *CloudMigrateStatusRequest) Reset() { *m = CloudMigrateStatusReq func (m *CloudMigrateStatusRequest) String() string { return proto.CompactTextString(m) } func (*CloudMigrateStatusRequest) ProtoMessage() {} func (*CloudMigrateStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{190} + return fileDescriptor_api_2699f5da74147c2d, []int{191} } func (m *CloudMigrateStatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateStatusRequest.Unmarshal(m, b) @@ -12888,7 +13049,7 @@ func (m *CloudMigrateStatusResponse) Reset() { *m = CloudMigrateStatusRe func (m *CloudMigrateStatusResponse) String() string { return proto.CompactTextString(m) } func (*CloudMigrateStatusResponse) ProtoMessage() {} func (*CloudMigrateStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{191} + return fileDescriptor_api_2699f5da74147c2d, []int{192} } func (m *CloudMigrateStatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CloudMigrateStatusResponse.Unmarshal(m, b) @@ -12928,7 +13089,7 @@ func (m *SdkCloudMigrateStatusResponse) Reset() { *m = SdkCloudMigrateSt func (m *SdkCloudMigrateStatusResponse) String() string { return proto.CompactTextString(m) } func (*SdkCloudMigrateStatusResponse) ProtoMessage() {} func (*SdkCloudMigrateStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{192} + return fileDescriptor_api_2699f5da74147c2d, []int{193} } func (m *SdkCloudMigrateStatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkCloudMigrateStatusResponse.Unmarshal(m, b) @@ -12974,7 +13135,7 @@ func (m *ClusterPairCreateRequest) Reset() { *m = ClusterPairCreateReque func (m *ClusterPairCreateRequest) String() string { return proto.CompactTextString(m) } func (*ClusterPairCreateRequest) ProtoMessage() {} func (*ClusterPairCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{193} + return fileDescriptor_api_2699f5da74147c2d, []int{194} } func (m *ClusterPairCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairCreateRequest.Unmarshal(m, b) @@ -13037,7 +13198,7 @@ func (m *ClusterPairCreateResponse) Reset() { *m = ClusterPairCreateResp func (m *ClusterPairCreateResponse) String() string { return proto.CompactTextString(m) } func (*ClusterPairCreateResponse) ProtoMessage() {} func (*ClusterPairCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{194} + return fileDescriptor_api_2699f5da74147c2d, []int{195} } func (m *ClusterPairCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairCreateResponse.Unmarshal(m, b) @@ -13083,7 +13244,7 @@ func (m *SdkClusterPairCreateRequest) Reset() { *m = SdkClusterPairCreat func (m *SdkClusterPairCreateRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairCreateRequest) ProtoMessage() {} func (*SdkClusterPairCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{195} + return fileDescriptor_api_2699f5da74147c2d, []int{196} } func (m *SdkClusterPairCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairCreateRequest.Unmarshal(m, b) @@ -13123,7 +13284,7 @@ func (m *SdkClusterPairCreateResponse) Reset() { *m = SdkClusterPairCrea func (m *SdkClusterPairCreateResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairCreateResponse) ProtoMessage() {} func (*SdkClusterPairCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{196} + return fileDescriptor_api_2699f5da74147c2d, []int{197} } func (m *SdkClusterPairCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairCreateResponse.Unmarshal(m, b) @@ -13165,7 +13326,7 @@ func (m *ClusterPairProcessRequest) Reset() { *m = ClusterPairProcessReq func (m *ClusterPairProcessRequest) String() string { return proto.CompactTextString(m) } func (*ClusterPairProcessRequest) ProtoMessage() {} func (*ClusterPairProcessRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{197} + return fileDescriptor_api_2699f5da74147c2d, []int{198} } func (m *ClusterPairProcessRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairProcessRequest.Unmarshal(m, b) @@ -13219,7 +13380,7 @@ func (m *ClusterPairProcessResponse) Reset() { *m = ClusterPairProcessRe func (m *ClusterPairProcessResponse) String() string { return proto.CompactTextString(m) } func (*ClusterPairProcessResponse) ProtoMessage() {} func (*ClusterPairProcessResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{198} + return fileDescriptor_api_2699f5da74147c2d, []int{199} } func (m *ClusterPairProcessResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairProcessResponse.Unmarshal(m, b) @@ -13280,7 +13441,7 @@ func (m *SdkClusterPairDeleteRequest) Reset() { *m = SdkClusterPairDelet func (m *SdkClusterPairDeleteRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairDeleteRequest) ProtoMessage() {} func (*SdkClusterPairDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{199} + return fileDescriptor_api_2699f5da74147c2d, []int{200} } func (m *SdkClusterPairDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairDeleteRequest.Unmarshal(m, b) @@ -13318,7 +13479,7 @@ func (m *SdkClusterPairDeleteResponse) Reset() { *m = SdkClusterPairDele func (m *SdkClusterPairDeleteResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairDeleteResponse) ProtoMessage() {} func (*SdkClusterPairDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{200} + return fileDescriptor_api_2699f5da74147c2d, []int{201} } func (m *SdkClusterPairDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairDeleteResponse.Unmarshal(m, b) @@ -13351,7 +13512,7 @@ func (m *ClusterPairTokenGetResponse) Reset() { *m = ClusterPairTokenGet func (m *ClusterPairTokenGetResponse) String() string { return proto.CompactTextString(m) } func (*ClusterPairTokenGetResponse) ProtoMessage() {} func (*ClusterPairTokenGetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{201} + return fileDescriptor_api_2699f5da74147c2d, []int{202} } func (m *ClusterPairTokenGetResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairTokenGetResponse.Unmarshal(m, b) @@ -13389,7 +13550,7 @@ func (m *SdkClusterPairGetTokenRequest) Reset() { *m = SdkClusterPairGet func (m *SdkClusterPairGetTokenRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairGetTokenRequest) ProtoMessage() {} func (*SdkClusterPairGetTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{202} + return fileDescriptor_api_2699f5da74147c2d, []int{203} } func (m *SdkClusterPairGetTokenRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairGetTokenRequest.Unmarshal(m, b) @@ -13422,7 +13583,7 @@ func (m *SdkClusterPairGetTokenResponse) Reset() { *m = SdkClusterPairGe func (m *SdkClusterPairGetTokenResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairGetTokenResponse) ProtoMessage() {} func (*SdkClusterPairGetTokenResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{203} + return fileDescriptor_api_2699f5da74147c2d, []int{204} } func (m *SdkClusterPairGetTokenResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairGetTokenResponse.Unmarshal(m, b) @@ -13460,7 +13621,7 @@ func (m *SdkClusterPairResetTokenRequest) Reset() { *m = SdkClusterPairR func (m *SdkClusterPairResetTokenRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairResetTokenRequest) ProtoMessage() {} func (*SdkClusterPairResetTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{204} + return fileDescriptor_api_2699f5da74147c2d, []int{205} } func (m *SdkClusterPairResetTokenRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairResetTokenRequest.Unmarshal(m, b) @@ -13493,7 +13654,7 @@ func (m *SdkClusterPairResetTokenResponse) Reset() { *m = SdkClusterPair func (m *SdkClusterPairResetTokenResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairResetTokenResponse) ProtoMessage() {} func (*SdkClusterPairResetTokenResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{205} + return fileDescriptor_api_2699f5da74147c2d, []int{206} } func (m *SdkClusterPairResetTokenResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairResetTokenResponse.Unmarshal(m, b) @@ -13546,7 +13707,7 @@ func (m *ClusterPairInfo) Reset() { *m = ClusterPairInfo{} } func (m *ClusterPairInfo) String() string { return proto.CompactTextString(m) } func (*ClusterPairInfo) ProtoMessage() {} func (*ClusterPairInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{206} + return fileDescriptor_api_2699f5da74147c2d, []int{207} } func (m *ClusterPairInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairInfo.Unmarshal(m, b) @@ -13628,7 +13789,7 @@ func (m *SdkClusterPairInspectRequest) Reset() { *m = SdkClusterPairInsp func (m *SdkClusterPairInspectRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairInspectRequest) ProtoMessage() {} func (*SdkClusterPairInspectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{207} + return fileDescriptor_api_2699f5da74147c2d, []int{208} } func (m *SdkClusterPairInspectRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairInspectRequest.Unmarshal(m, b) @@ -13668,7 +13829,7 @@ func (m *ClusterPairGetResponse) Reset() { *m = ClusterPairGetResponse{} func (m *ClusterPairGetResponse) String() string { return proto.CompactTextString(m) } func (*ClusterPairGetResponse) ProtoMessage() {} func (*ClusterPairGetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{208} + return fileDescriptor_api_2699f5da74147c2d, []int{209} } func (m *ClusterPairGetResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairGetResponse.Unmarshal(m, b) @@ -13708,7 +13869,7 @@ func (m *SdkClusterPairInspectResponse) Reset() { *m = SdkClusterPairIns func (m *SdkClusterPairInspectResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairInspectResponse) ProtoMessage() {} func (*SdkClusterPairInspectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{209} + return fileDescriptor_api_2699f5da74147c2d, []int{210} } func (m *SdkClusterPairInspectResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairInspectResponse.Unmarshal(m, b) @@ -13746,7 +13907,7 @@ func (m *SdkClusterPairEnumerateRequest) Reset() { *m = SdkClusterPairEn func (m *SdkClusterPairEnumerateRequest) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairEnumerateRequest) ProtoMessage() {} func (*SdkClusterPairEnumerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{210} + return fileDescriptor_api_2699f5da74147c2d, []int{211} } func (m *SdkClusterPairEnumerateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairEnumerateRequest.Unmarshal(m, b) @@ -13781,7 +13942,7 @@ func (m *ClusterPairsEnumerateResponse) Reset() { *m = ClusterPairsEnume func (m *ClusterPairsEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*ClusterPairsEnumerateResponse) ProtoMessage() {} func (*ClusterPairsEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{211} + return fileDescriptor_api_2699f5da74147c2d, []int{212} } func (m *ClusterPairsEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClusterPairsEnumerateResponse.Unmarshal(m, b) @@ -13828,7 +13989,7 @@ func (m *SdkClusterPairEnumerateResponse) Reset() { *m = SdkClusterPairE func (m *SdkClusterPairEnumerateResponse) String() string { return proto.CompactTextString(m) } func (*SdkClusterPairEnumerateResponse) ProtoMessage() {} func (*SdkClusterPairEnumerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{212} + return fileDescriptor_api_2699f5da74147c2d, []int{213} } func (m *SdkClusterPairEnumerateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SdkClusterPairEnumerateResponse.Unmarshal(m, b) @@ -13877,7 +14038,7 @@ func (m *Catalog) Reset() { *m = Catalog{} } func (m *Catalog) String() string { return proto.CompactTextString(m) } func (*Catalog) ProtoMessage() {} func (*Catalog) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{213} + return fileDescriptor_api_2699f5da74147c2d, []int{214} } func (m *Catalog) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Catalog.Unmarshal(m, b) @@ -13953,7 +14114,7 @@ func (m *Report) Reset() { *m = Report{} } func (m *Report) String() string { return proto.CompactTextString(m) } func (*Report) ProtoMessage() {} func (*Report) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{214} + return fileDescriptor_api_2699f5da74147c2d, []int{215} } func (m *Report) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Report.Unmarshal(m, b) @@ -14001,7 +14162,7 @@ func (m *CatalogResponse) Reset() { *m = CatalogResponse{} } func (m *CatalogResponse) String() string { return proto.CompactTextString(m) } func (*CatalogResponse) ProtoMessage() {} func (*CatalogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{215} + return fileDescriptor_api_2699f5da74147c2d, []int{216} } func (m *CatalogResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CatalogResponse.Unmarshal(m, b) @@ -14053,7 +14214,7 @@ func (m *LocateResponse) Reset() { *m = LocateResponse{} } func (m *LocateResponse) String() string { return proto.CompactTextString(m) } func (*LocateResponse) ProtoMessage() {} func (*LocateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{216} + return fileDescriptor_api_2699f5da74147c2d, []int{217} } func (m *LocateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LocateResponse.Unmarshal(m, b) @@ -14103,7 +14264,7 @@ func (m *VolumePlacementStrategy) Reset() { *m = VolumePlacementStrategy func (m *VolumePlacementStrategy) String() string { return proto.CompactTextString(m) } func (*VolumePlacementStrategy) ProtoMessage() {} func (*VolumePlacementStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{217} + return fileDescriptor_api_2699f5da74147c2d, []int{218} } func (m *VolumePlacementStrategy) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumePlacementStrategy.Unmarshal(m, b) @@ -14156,7 +14317,7 @@ func (m *VolumePlacementRule) Reset() { *m = VolumePlacementRule{} } func (m *VolumePlacementRule) String() string { return proto.CompactTextString(m) } func (*VolumePlacementRule) ProtoMessage() {} func (*VolumePlacementRule) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{218} + return fileDescriptor_api_2699f5da74147c2d, []int{219} } func (m *VolumePlacementRule) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VolumePlacementRule.Unmarshal(m, b) @@ -14233,7 +14394,7 @@ func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequireme func (m *LabelSelectorRequirement) String() string { return proto.CompactTextString(m) } func (*LabelSelectorRequirement) ProtoMessage() {} func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d51c6db29efba9e4, []int{219} + return fileDescriptor_api_2699f5da74147c2d, []int{220} } func (m *LabelSelectorRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LabelSelectorRequirement.Unmarshal(m, b) @@ -14289,6 +14450,8 @@ func init() { proto.RegisterType((*ReplicaSet)(nil), "openstorage.api.ReplicaSet") proto.RegisterType((*RuntimeStateMap)(nil), "openstorage.api.RuntimeStateMap") proto.RegisterMapType((map[string]string)(nil), "openstorage.api.RuntimeStateMap.RuntimeStateEntry") + proto.RegisterType((*Ownership)(nil), "openstorage.api.Ownership") + proto.RegisterType((*Ownership_AccessControl)(nil), "openstorage.api.Ownership.AccessControl") proto.RegisterType((*Volume)(nil), "openstorage.api.Volume") proto.RegisterMapType((map[string]string)(nil), "openstorage.api.Volume.AttachInfoEntry") proto.RegisterType((*Stats)(nil), "openstorage.api.Stats") @@ -17538,732 +17701,739 @@ var _OpenStorageCloudBackup_serviceDesc = grpc.ServiceDesc{ Metadata: "api/api.proto", } -func init() { proto.RegisterFile("api/api.proto", fileDescriptor_api_d51c6db29efba9e4) } - -var fileDescriptor_api_d51c6db29efba9e4 = []byte{ - // 11580 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x6f, 0x8c, 0x1c, 0xc9, - 0x75, 0x18, 0xbe, 0x3d, 0xb3, 0xbb, 0x33, 0xf3, 0xf6, 0x5f, 0x6f, 0x91, 0xb7, 0x1c, 0x0e, 0xc9, - 0x23, 0xd9, 0x3c, 0x1e, 0x79, 0x7b, 0xe4, 0x2e, 0x6f, 0x75, 0x3c, 0xdd, 0xf1, 0xee, 0x24, 0xcf, - 0xee, 0xce, 0x72, 0x47, 0xdc, 0x7f, 0xd7, 0xb3, 0x4b, 0xde, 0x49, 0x96, 0x47, 0xcd, 0x99, 0xe2, - 0xb2, 0x8f, 0xb3, 0xd3, 0x73, 0xdd, 0x3d, 0x7b, 0xb7, 0x92, 0x4e, 0x32, 0x04, 0x18, 0xfe, 0xfd, - 0x62, 0xd9, 0xb2, 0x25, 0x4b, 0x81, 0xac, 0xfc, 0x45, 0xe0, 0xfc, 0x73, 0x04, 0x44, 0x31, 0x10, - 0x20, 0x89, 0x13, 0x03, 0xfa, 0x10, 0x47, 0x4e, 0x60, 0x07, 0x70, 0xf2, 0x29, 0x48, 0x00, 0x03, - 0x4a, 0x10, 0x21, 0x80, 0x3f, 0x04, 0xf9, 0x12, 0x20, 0x40, 0x82, 0x7a, 0x55, 0xdd, 0x5d, 0xd5, - 0xdd, 0xf3, 0x8f, 0x47, 0xf9, 0xcb, 0xee, 0x54, 0xd5, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0xf7, 0xaa, - 0xea, 0x55, 0xd5, 0x6b, 0x98, 0xb1, 0x3a, 0xf6, 0xb2, 0xd5, 0xb1, 0x97, 0x3a, 0xae, 0xe3, 0x3b, - 0x64, 0xce, 0xe9, 0xd0, 0xb6, 0xe7, 0x3b, 0xae, 0x75, 0x48, 0x97, 0xac, 0x8e, 0x5d, 0xba, 0x78, - 0xe8, 0x38, 0x87, 0x2d, 0xba, 0x8c, 0xc5, 0x0f, 0xbb, 0x8f, 0x96, 0x7d, 0xfb, 0x88, 0x7a, 0xbe, - 0x75, 0xd4, 0xe1, 0x35, 0x4a, 0xe7, 0x05, 0x00, 0xe2, 0x69, 0xb7, 0x1d, 0xdf, 0xf2, 0x6d, 0xa7, - 0xed, 0xf1, 0x52, 0xe3, 0xef, 0x64, 0x61, 0xae, 0xc6, 0xd1, 0x99, 0xd4, 0x73, 0xba, 0x6e, 0x83, - 0x92, 0x59, 0xc8, 0xd8, 0xcd, 0xa2, 0x76, 0x49, 0xbb, 0x5e, 0x30, 0x33, 0x76, 0x93, 0x10, 0x18, - 0xef, 0x58, 0xfe, 0xe3, 0x62, 0x06, 0x73, 0xf0, 0x37, 0x79, 0x0d, 0x26, 0x8f, 0x68, 0xd3, 0xee, - 0x1e, 0x15, 0xb3, 0x97, 0xb4, 0xeb, 0xb3, 0x2b, 0xcf, 0x2f, 0xc5, 0x08, 0x5b, 0x12, 0x58, 0xb7, - 0x11, 0xca, 0x14, 0xd0, 0x64, 0x01, 0x26, 0x9d, 0x76, 0xcb, 0x6e, 0xd3, 0xe2, 0xf8, 0x25, 0xed, - 0x7a, 0xde, 0x14, 0x29, 0xd6, 0x86, 0xed, 0x74, 0xbc, 0xe2, 0xc4, 0x25, 0xed, 0xfa, 0xb8, 0x89, - 0xbf, 0xc9, 0x39, 0x28, 0x78, 0xf4, 0x83, 0xfa, 0x87, 0xae, 0xed, 0xd3, 0xe2, 0xe4, 0x25, 0xed, - 0xba, 0x66, 0xe6, 0x3d, 0xfa, 0xc1, 0x03, 0x96, 0x26, 0x67, 0x81, 0xfd, 0xae, 0xbb, 0xd4, 0x6a, - 0x16, 0x73, 0x58, 0x96, 0xf3, 0xe8, 0x07, 0x26, 0xb5, 0x9a, 0xac, 0x0d, 0xd7, 0x6a, 0x37, 0xcd, - 0x07, 0xc5, 0x3c, 0x16, 0x88, 0x14, 0x6b, 0xc3, 0xb3, 0xbf, 0x4c, 0x8b, 0x05, 0xde, 0x06, 0xfb, - 0xcd, 0xf2, 0xba, 0x1e, 0x6d, 0x16, 0x81, 0xe7, 0xb1, 0xdf, 0xe4, 0x2a, 0xcc, 0xba, 0x82, 0x4d, - 0x75, 0xaf, 0x43, 0x69, 0xb3, 0x38, 0x85, 0x3d, 0x9f, 0x09, 0x72, 0x6b, 0x2c, 0x93, 0x7c, 0x1a, - 0x0a, 0x2d, 0xcb, 0xf3, 0xeb, 0x5e, 0xc3, 0x6a, 0x17, 0xa7, 0x2f, 0x69, 0xd7, 0xa7, 0x56, 0x4a, - 0x4b, 0x9c, 0xd9, 0x4b, 0xc1, 0x68, 0x2c, 0xed, 0x07, 0xa3, 0x61, 0xe6, 0x19, 0x70, 0xad, 0x61, - 0xb5, 0x49, 0x09, 0xf2, 0x47, 0xd4, 0xb7, 0x9a, 0x96, 0x6f, 0x15, 0x67, 0x90, 0x0b, 0x61, 0x9a, - 0x9c, 0x86, 0x89, 0x86, 0xd5, 0x78, 0x4c, 0x8b, 0xb3, 0x58, 0xc0, 0x13, 0xc6, 0x9f, 0x64, 0x60, - 0x4a, 0xf0, 0x73, 0xcf, 0x71, 0x5a, 0x6c, 0x84, 0xaa, 0xeb, 0x38, 0x42, 0x13, 0x66, 0xa6, 0xba, - 0x4e, 0x16, 0x21, 0xbb, 0xe6, 0x78, 0x38, 0x40, 0xb3, 0x2b, 0xc5, 0xc4, 0x50, 0xac, 0x39, 0xde, - 0xfe, 0x49, 0x87, 0x9a, 0x0c, 0x88, 0x8d, 0xdc, 0xf6, 0x48, 0x23, 0xc7, 0xff, 0x93, 0xf3, 0x50, - 0x30, 0x2d, 0xbb, 0xb9, 0x45, 0x8f, 0x69, 0x0b, 0x07, 0xaf, 0x60, 0x46, 0x19, 0xac, 0x74, 0xdf, - 0xf1, 0xad, 0x56, 0x8d, 0x31, 0x38, 0x87, 0xcc, 0x8c, 0x32, 0x18, 0x97, 0x0f, 0x18, 0x97, 0xf3, - 0x9c, 0xcb, 0xec, 0x37, 0xf9, 0x05, 0x98, 0x6c, 0x59, 0x0f, 0x69, 0xcb, 0x2b, 0x16, 0x2e, 0x65, - 0xaf, 0x4f, 0xad, 0x5c, 0xef, 0x45, 0x07, 0xeb, 0xf1, 0xd2, 0x16, 0x82, 0x56, 0xda, 0xbe, 0x7b, - 0x62, 0x8a, 0x7a, 0xa5, 0x37, 0x60, 0x4a, 0xca, 0x26, 0x3a, 0x64, 0x9f, 0xd0, 0x13, 0x21, 0xb7, - 0xec, 0x27, 0x63, 0xe6, 0xb1, 0xd5, 0xea, 0x52, 0x21, 0xb9, 0x3c, 0x71, 0x27, 0xf3, 0xba, 0x66, - 0xfc, 0x0b, 0x0d, 0x66, 0xee, 0x3b, 0xad, 0xee, 0x11, 0xdd, 0x72, 0x1a, 0x96, 0xef, 0xb8, 0x8c, - 0xc4, 0xb6, 0x75, 0x44, 0x45, 0x75, 0xfc, 0x4d, 0x0e, 0x60, 0xe6, 0x18, 0x81, 0xea, 0x82, 0xd2, - 0x0c, 0x52, 0x7a, 0x2b, 0x41, 0xa9, 0x82, 0x2a, 0x48, 0x49, 0x14, 0x4f, 0x1f, 0x4b, 0x59, 0xa5, - 0xcf, 0xc2, 0x7c, 0x02, 0x64, 0x24, 0xea, 0x5f, 0x85, 0xc9, 0x1a, 0x57, 0xd5, 0x05, 0x98, 0xec, - 0x58, 0x2e, 0x6d, 0xfb, 0xa2, 0xa2, 0x48, 0xa1, 0xa8, 0x33, 0xc1, 0x15, 0x2a, 0xcb, 0x7e, 0x1b, - 0x67, 0x60, 0xe2, 0xae, 0xeb, 0x74, 0x3b, 0x71, 0xfd, 0x36, 0xd6, 0x01, 0xaa, 0x4e, 0xcd, 0x77, - 0x2d, 0x9f, 0x1e, 0x9e, 0x30, 0xc5, 0xb2, 0xbc, 0x93, 0x76, 0xa3, 0x6e, 0x3b, 0x08, 0x93, 0x37, - 0x73, 0x98, 0xae, 0x3a, 0x4c, 0x21, 0xa9, 0xe5, 0xb6, 0x4e, 0xea, 0x56, 0xe3, 0x09, 0xa2, 0xce, - 0x9b, 0x79, 0xcc, 0x28, 0x37, 0x9e, 0x18, 0xff, 0xa5, 0x00, 0xc0, 0xbb, 0x55, 0xeb, 0xd0, 0x06, - 0x13, 0x08, 0xda, 0x79, 0x4c, 0x8f, 0xa8, 0x6b, 0xb5, 0x04, 0x9e, 0x28, 0x23, 0x54, 0xc5, 0x8c, - 0xa4, 0x8a, 0xcb, 0x30, 0xf9, 0xc8, 0x71, 0x8f, 0x2c, 0x5f, 0x08, 0xe6, 0x99, 0x04, 0x9b, 0x37, - 0x6a, 0x28, 0xc6, 0x02, 0x8c, 0x5c, 0x00, 0x78, 0xd8, 0x72, 0x1a, 0x4f, 0xea, 0x88, 0x8a, 0x89, - 0x64, 0xd6, 0x2c, 0x60, 0x0e, 0x0a, 0xdd, 0x59, 0xc8, 0x3f, 0xb6, 0xea, 0x2d, 0x94, 0xd7, 0x09, - 0x2c, 0xcc, 0x3d, 0xb6, 0xb8, 0xb4, 0x2e, 0x42, 0xb6, 0xe1, 0x78, 0x68, 0x53, 0xfa, 0xea, 0x4b, - 0xc3, 0xf1, 0xc8, 0x1b, 0x00, 0xb6, 0x53, 0xef, 0xb8, 0xce, 0x23, 0xbb, 0xc5, 0x45, 0x7b, 0x76, - 0xa5, 0x94, 0xa8, 0x52, 0x75, 0xf6, 0x38, 0x84, 0x59, 0xb0, 0x83, 0x9f, 0x6c, 0x74, 0x9a, 0xb4, - 0xd9, 0xed, 0x50, 0x14, 0xfc, 0xbc, 0x29, 0x52, 0xe4, 0x65, 0x98, 0xf7, 0xda, 0x56, 0xc7, 0x7b, - 0xec, 0xf8, 0x75, 0xbb, 0xed, 0x53, 0xf7, 0xd8, 0x6a, 0xa1, 0x55, 0x9a, 0x31, 0xf5, 0xa0, 0xa0, - 0x2a, 0xf2, 0x89, 0x19, 0x17, 0x42, 0x40, 0x21, 0xbc, 0xd9, 0x43, 0x08, 0x19, 0xf3, 0x07, 0x49, - 0x20, 0x23, 0xcc, 0x7b, 0x6c, 0xb9, 0xc2, 0xb2, 0xe5, 0x4d, 0x91, 0x22, 0x6f, 0xc1, 0x94, 0x4b, - 0x3b, 0x2d, 0xbb, 0x61, 0xd5, 0x3d, 0xea, 0x0b, 0xa3, 0x76, 0x2e, 0xd1, 0x92, 0xc9, 0x61, 0x6a, - 0xd4, 0x37, 0xc1, 0x0d, 0x7f, 0xb3, 0x6e, 0x59, 0x87, 0x87, 0x2e, 0x3d, 0xe4, 0xa6, 0x93, 0x73, - 0x7e, 0x86, 0x77, 0x4b, 0x2a, 0x08, 0x0d, 0x06, 0x6d, 0x37, 0xdc, 0x93, 0x8e, 0x4f, 0x9b, 0xc2, - 0xd8, 0x45, 0x19, 0xe4, 0x79, 0x80, 0x8e, 0xe5, 0x79, 0x9d, 0xc7, 0xae, 0xe5, 0xd1, 0xe2, 0x1c, - 0x8a, 0xaa, 0x94, 0xa3, 0x70, 0xd0, 0x6b, 0x3c, 0xa6, 0xcd, 0x6e, 0x8b, 0x16, 0x75, 0x04, 0x0b, - 0x39, 0x58, 0x13, 0xf9, 0x4c, 0x91, 0xbc, 0x86, 0xd5, 0xa2, 0xc5, 0x79, 0xa4, 0x85, 0x27, 0x90, - 0x07, 0xbe, 0xdd, 0x78, 0x72, 0x52, 0x24, 0x82, 0x07, 0x98, 0x22, 0x37, 0x60, 0xe2, 0x90, 0xa9, - 0x49, 0xf1, 0x39, 0xec, 0xfd, 0x42, 0xa2, 0xf7, 0xa8, 0x44, 0x26, 0x07, 0x62, 0x73, 0x05, 0xfe, - 0xa8, 0xd3, 0xf6, 0x23, 0xc7, 0x6d, 0xd0, 0x66, 0x71, 0x01, 0xb1, 0xcd, 0x60, 0x6e, 0x45, 0x64, - 0xb2, 0xfe, 0x34, 0x9c, 0xa3, 0x8e, 0x4b, 0x3d, 0x66, 0x06, 0xcf, 0x20, 0x88, 0x94, 0xc3, 0xa6, - 0x84, 0x86, 0xe5, 0x35, 0xac, 0x26, 0x6d, 0x16, 0x8b, 0x5c, 0xb1, 0x82, 0x34, 0x29, 0x42, 0xee, - 0x7d, 0xa7, 0xeb, 0xb6, 0xad, 0x56, 0xf1, 0x2c, 0xd7, 0x47, 0x91, 0x64, 0xb5, 0xf8, 0xc0, 0x1d, - 0xbf, 0x5a, 0x2c, 0xf1, 0x5a, 0x41, 0x9a, 0x5c, 0x84, 0xa9, 0x0f, 0xba, 0xb4, 0x4b, 0xeb, 0x4d, - 0xda, 0xf1, 0x1f, 0x17, 0xcf, 0x61, 0xd7, 0x01, 0xb3, 0xd6, 0x59, 0x0e, 0x79, 0x03, 0xce, 0x22, - 0x71, 0xf5, 0x6e, 0xdb, 0xeb, 0x76, 0x3a, 0x8e, 0xeb, 0xd3, 0x66, 0xfd, 0x91, 0x57, 0xf7, 0x4f, - 0x3a, 0xb4, 0x78, 0x1e, 0xb1, 0x2d, 0x20, 0xc0, 0x41, 0x54, 0xbe, 0x81, 0x7a, 0xc1, 0xc6, 0xae, - 0xed, 0x34, 0x6d, 0xaf, 0x61, 0xb9, 0xcd, 0xe2, 0x05, 0x3e, 0x76, 0x61, 0x06, 0x13, 0x22, 0xdb, - 0xa9, 0x7b, 0xc2, 0x9e, 0x14, 0x9f, 0xef, 0x21, 0x44, 0x91, 0xc9, 0x31, 0xc1, 0x8e, 0xcc, 0xcf, - 0x03, 0x20, 0x9d, 0x96, 0xd5, 0xa0, 0x47, 0xb4, 0xed, 0x47, 0x48, 0x2e, 0x22, 0x92, 0xeb, 0x3d, - 0x64, 0x7e, 0x2f, 0xa8, 0x10, 0x62, 0x9c, 0xef, 0xc4, 0xb3, 0x3e, 0xb9, 0xd5, 0xfd, 0x0f, 0x93, - 0xa0, 0x47, 0x3a, 0x76, 0xd0, 0x69, 0x5a, 0x3e, 0x93, 0x2d, 0xc9, 0x90, 0x6d, 0x8e, 0x09, 0x53, - 0x76, 0x2e, 0x6e, 0x7a, 0x36, 0xb5, 0xc8, 0xf8, 0xdc, 0x18, 0xca, 0xf8, 0x6c, 0x66, 0xb8, 0xf9, - 0x79, 0x73, 0x34, 0xf3, 0xb3, 0x99, 0x95, 0x0d, 0x50, 0x51, 0x35, 0x40, 0x9b, 0xe3, 0xa1, 0x09, - 0xba, 0xd9, 0xd3, 0x04, 0x6d, 0x4e, 0xa4, 0x18, 0xa1, 0xa2, 0x6a, 0x30, 0x36, 0x27, 0x9f, 0x91, - 0xc9, 0xb8, 0x94, 0xd4, 0xf3, 0xcd, 0x9c, 0xa2, 0xe9, 0x37, 0x7b, 0x6a, 0xfa, 0x66, 0x3e, 0x45, - 0xd7, 0x17, 0x14, 0x5d, 0xdf, 0x2c, 0x04, 0xda, 0x5e, 0x54, 0xb5, 0x7d, 0x13, 0x42, 0x7d, 0x5f, - 0x0a, 0xf4, 0xfd, 0x54, 0x3f, 0x7d, 0xdf, 0x9c, 0x0a, 0x34, 0xbe, 0x14, 0xa9, 0x23, 0xea, 0xf1, - 0xe6, 0x74, 0xa4, 0x90, 0xe7, 0x25, 0x85, 0x44, 0x35, 0xde, 0x9c, 0x91, 0x54, 0xf2, 0xb2, 0xaa, - 0x92, 0x67, 0x91, 0xc2, 0x59, 0x59, 0x29, 0x57, 0x01, 0xf2, 0x4c, 0x80, 0xea, 0x4e, 0xc7, 0x5f, - 0x9d, 0x85, 0xe9, 0x40, 0x88, 0x30, 0x5d, 0x80, 0x5c, 0xc3, 0xf1, 0xf0, 0xa7, 0x0e, 0xb3, 0x91, - 0x50, 0x60, 0xce, 0x34, 0x00, 0x1f, 0x59, 0x4c, 0x9d, 0x81, 0xe7, 0x12, 0xa3, 0x1b, 0x80, 0x71, - 0x72, 0x02, 0x34, 0x11, 0xa7, 0x13, 0x15, 0x03, 0x6e, 0x63, 0xc1, 0x14, 0x14, 0x90, 0x91, 0x21, - 0x16, 0x64, 0x5e, 0x50, 0xc4, 0x4d, 0x20, 0x4b, 0xcc, 0xc0, 0x94, 0x60, 0x46, 0xd0, 0x87, 0xa0, - 0xfb, 0x98, 0x9e, 0x87, 0x39, 0x89, 0x05, 0x2c, 0xcb, 0x30, 0x00, 0x22, 0xe1, 0x60, 0xea, 0xd7, - 0x76, 0x9a, 0xd4, 0x2b, 0x6a, 0x97, 0xb2, 0x4c, 0xfd, 0x30, 0x61, 0xfc, 0x9e, 0x06, 0x73, 0x66, - 0xb7, 0xcd, 0xb6, 0x36, 0x35, 0xdf, 0xf2, 0xe9, 0xb6, 0xd5, 0x21, 0x0f, 0x60, 0xc6, 0xe5, 0x59, - 0x75, 0x8f, 0xe5, 0x61, 0x8d, 0xa9, 0x95, 0x95, 0xa4, 0xe8, 0xa9, 0x15, 0x95, 0xb4, 0x98, 0x1c, - 0x5d, 0x29, 0x8b, 0x19, 0x8a, 0x04, 0xc8, 0x48, 0x86, 0xe2, 0xb7, 0x0a, 0x30, 0xc9, 0x0d, 0x45, - 0x62, 0x2b, 0xb5, 0x0c, 0x93, 0x7c, 0x93, 0x85, 0xb5, 0xa6, 0x52, 0xd6, 0x38, 0x7c, 0x61, 0x67, - 0x0a, 0xb0, 0x68, 0x36, 0xca, 0x0e, 0x33, 0x1b, 0x95, 0x20, 0xcf, 0x36, 0x44, 0x4e, 0xbb, 0x75, - 0x22, 0xf6, 0x57, 0x61, 0x9a, 0xbc, 0x0e, 0xb9, 0x16, 0x5f, 0xa0, 0xa2, 0x49, 0x9a, 0x4a, 0x59, - 0xf8, 0x2b, 0xcb, 0x58, 0x33, 0x00, 0x27, 0xb7, 0x60, 0xa2, 0xc1, 0xd8, 0x81, 0x26, 0xab, 0xff, - 0x26, 0x87, 0x03, 0x92, 0x65, 0x18, 0xf7, 0x3a, 0xb4, 0x81, 0xe6, 0x2a, 0xcd, 0x1a, 0x44, 0x66, - 0xd4, 0x44, 0x40, 0xc6, 0xcc, 0xae, 0x67, 0x1d, 0x52, 0xb1, 0x43, 0xe0, 0x09, 0x75, 0x87, 0x55, - 0x18, 0x61, 0x87, 0x15, 0x2d, 0x25, 0x61, 0xb8, 0xa5, 0xe4, 0x6d, 0x66, 0x1e, 0x2c, 0xbf, 0xeb, - 0xa1, 0x7d, 0x9b, 0x5d, 0xb9, 0xd0, 0x8b, 0x64, 0x04, 0x32, 0x05, 0x30, 0x59, 0x81, 0x09, 0x2e, - 0x7b, 0xd3, 0x58, 0xeb, 0x7c, 0x9f, 0x5a, 0xd4, 0xe4, 0xa0, 0x6c, 0x62, 0xb6, 0x7c, 0x9f, 0x6d, - 0xeb, 0x9a, 0x75, 0xa7, 0x8d, 0xeb, 0xa3, 0x82, 0x09, 0x41, 0xd6, 0x6e, 0x9b, 0xac, 0xc1, 0x6c, - 0x08, 0xc0, 0xb1, 0xcf, 0xf6, 0xc0, 0x5e, 0x46, 0x30, 0x8e, 0x7d, 0x26, 0xa8, 0x53, 0x0b, 0x5a, - 0x69, 0xd2, 0x63, 0xbb, 0x41, 0xeb, 0xb8, 0x75, 0x17, 0x2b, 0x28, 0x9e, 0xb5, 0xc7, 0x36, 0xf0, - 0x37, 0x80, 0x78, 0xb4, 0xd1, 0x75, 0x99, 0x2a, 0x46, 0x70, 0xc1, 0x12, 0x0a, 0x4b, 0xd6, 0x23, - 0xe8, 0x90, 0x68, 0x0e, 0x36, 0x8f, 0xca, 0x29, 0x88, 0x46, 0x80, 0xcd, 0x10, 0xc0, 0x6e, 0x3f, - 0x72, 0x8a, 0x04, 0x75, 0xf1, 0x5a, 0x0f, 0x7e, 0x08, 0xc2, 0xab, 0xed, 0x47, 0x0e, 0x57, 0x40, - 0x81, 0x89, 0x65, 0x90, 0xcf, 0xc0, 0xb4, 0x34, 0xa1, 0x78, 0xc5, 0x53, 0x88, 0xaa, 0xef, 0x8c, - 0x32, 0x15, 0xcd, 0x28, 0x1e, 0xa9, 0xc4, 0xed, 0xc2, 0x69, 0x44, 0x70, 0x69, 0x90, 0x5d, 0x50, - 0xad, 0x00, 0x93, 0x48, 0xea, 0xba, 0x8e, 0x8b, 0xcb, 0xc0, 0x82, 0xc9, 0x13, 0xe4, 0x73, 0xa0, - 0x8b, 0xc5, 0x78, 0xc3, 0x69, 0x7b, 0xdd, 0x23, 0xea, 0x7a, 0xc5, 0x05, 0xc4, 0x7f, 0xb1, 0x47, - 0x5f, 0xd7, 0x04, 0x9c, 0x39, 0x77, 0xac, 0xa4, 0x3d, 0x36, 0x02, 0x8f, 0xbc, 0xba, 0x4b, 0xd1, - 0xe0, 0xbb, 0xf4, 0x83, 0xae, 0xed, 0x86, 0x6b, 0x43, 0xfd, 0x91, 0x67, 0x62, 0x81, 0x29, 0xf2, - 0x4b, 0x6f, 0xc3, 0x5c, 0x8c, 0x6b, 0x23, 0xd9, 0xa4, 0xbf, 0x99, 0x81, 0x09, 0xd6, 0x31, 0x8f, - 0xc1, 0x30, 0x9b, 0xe0, 0x61, 0xbd, 0x71, 0x93, 0x27, 0xc8, 0x19, 0xc8, 0xb1, 0x1f, 0xf5, 0x23, - 0x4f, 0xec, 0xc9, 0x26, 0x59, 0x72, 0xdb, 0x63, 0x9b, 0x2c, 0x2c, 0x78, 0x78, 0xe2, 0x53, 0x0f, - 0xad, 0xd0, 0xb8, 0x59, 0x60, 0x39, 0xab, 0x2c, 0x83, 0xad, 0xa2, 0xd1, 0x3f, 0xe3, 0xa1, 0xbd, - 0x19, 0x37, 0x45, 0x8a, 0x6d, 0xbe, 0xf0, 0x17, 0x43, 0xc8, 0x7d, 0x3a, 0x39, 0x4c, 0x6f, 0x7b, - 0x4c, 0x96, 0x78, 0x11, 0x47, 0x39, 0x89, 0xa5, 0x80, 0x59, 0x1c, 0xe7, 0x45, 0x5c, 0x40, 0x76, - 0x5c, 0xe7, 0x90, 0xad, 0x8e, 0x85, 0x37, 0x01, 0x70, 0x55, 0x83, 0x39, 0xe4, 0x14, 0x4c, 0xd8, - 0x0e, 0xc3, 0x9c, 0x0f, 0xbc, 0x45, 0x9c, 0x50, 0x44, 0x58, 0x47, 0x7f, 0x0e, 0xf7, 0xf1, 0x14, - 0x30, 0x07, 0xdd, 0x0d, 0x0c, 0x69, 0x30, 0x13, 0x1e, 0x79, 0xc2, 0xdf, 0x03, 0x41, 0xd6, 0xb6, - 0x67, 0xfc, 0xb2, 0x06, 0xf3, 0x6b, 0x56, 0xc7, 0x6a, 0xd8, 0xfe, 0xc9, 0x01, 0x33, 0x3f, 0x28, - 0x8d, 0xd7, 0x60, 0x8e, 0x7e, 0xd4, 0x68, 0x75, 0x3d, 0xfb, 0x38, 0x20, 0x58, 0xc3, 0xbd, 0xe4, - 0x6c, 0x98, 0xcd, 0x89, 0xbe, 0x1c, 0xcc, 0x74, 0x02, 0x2a, 0x83, 0x50, 0x53, 0x3c, 0x2f, 0xec, - 0x97, 0xef, 0xf8, 0x56, 0x4b, 0xe2, 0x65, 0xd6, 0x04, 0xcc, 0x42, 0x00, 0xe3, 0x5f, 0x66, 0x61, - 0xa2, 0xdc, 0xa2, 0xae, 0x2f, 0xcd, 0x1b, 0x59, 0x9c, 0x37, 0xde, 0x80, 0xbc, 0x47, 0x8f, 0xa9, - 0x6b, 0xfb, 0x27, 0xc2, 0xcb, 0x93, 0xb4, 0x50, 0x35, 0x01, 0x80, 0x86, 0x2d, 0x04, 0x67, 0x7c, - 0xb1, 0x18, 0x4e, 0xbe, 0xb0, 0xe7, 0x8d, 0x16, 0x30, 0x07, 0xd7, 0xf2, 0x45, 0xc8, 0x1d, 0x51, - 0x0f, 0x6d, 0x2f, 0x77, 0xea, 0x04, 0x49, 0xf2, 0x3a, 0x14, 0x42, 0x5f, 0xa2, 0x98, 0x32, 0xfa, - 0x59, 0xdf, 0x08, 0x98, 0x75, 0xd4, 0x15, 0xce, 0xc4, 0xba, 0xdd, 0xc4, 0x11, 0x2e, 0xb0, 0x65, - 0x1f, 0xcf, 0xaa, 0x62, 0x77, 0x82, 0x94, 0x58, 0xd2, 0x5e, 0x48, 0xd1, 0x6f, 0x0e, 0xc0, 0xbb, - 0x13, 0x80, 0x33, 0x7a, 0x1b, 0x2d, 0x8a, 0x4b, 0x51, 0xbe, 0xa9, 0x0e, 0x92, 0x4c, 0x1d, 0x7c, - 0xbf, 0x25, 0x46, 0x9e, 0xfd, 0x64, 0x5d, 0xef, 0xb6, 0xed, 0x0f, 0xba, 0xb4, 0xee, 0x5b, 0x87, - 0x38, 0xe4, 0x05, 0xb3, 0xc0, 0x73, 0xf6, 0xad, 0x43, 0xf4, 0xb5, 0x39, 0xdd, 0xb6, 0x8f, 0x36, - 0x3f, 0x6b, 0xf2, 0x04, 0xdb, 0xef, 0x3f, 0xb2, 0x5d, 0x36, 0xeb, 0x50, 0x3a, 0x8c, 0x5f, 0xaf, - 0x80, 0xd0, 0x35, 0x4a, 0xdb, 0xc6, 0xaf, 0x68, 0x30, 0x5f, 0x6b, 0x3e, 0xc1, 0x21, 0xf4, 0x18, - 0x44, 0xad, 0x63, 0xb5, 0x19, 0x42, 0xcf, 0xb7, 0xd8, 0x00, 0xd8, 0xc2, 0xbf, 0x34, 0x00, 0x21, - 0x42, 0xb3, 0x34, 0xb9, 0x0d, 0x79, 0xda, 0x6e, 0xf2, 0x8a, 0x99, 0x81, 0x15, 0x73, 0xb4, 0xdd, - 0x64, 0x29, 0x63, 0x07, 0x48, 0x48, 0xc6, 0x1a, 0xeb, 0x14, 0xd2, 0x71, 0x0e, 0x0a, 0x47, 0x76, - 0xbb, 0xce, 0xbb, 0xcc, 0x45, 0x2b, 0x7f, 0x64, 0xb7, 0x11, 0x00, 0x0b, 0xad, 0x8f, 0x44, 0x61, - 0x46, 0x14, 0x5a, 0x1f, 0x61, 0xa1, 0xf1, 0xad, 0x0c, 0xcc, 0x85, 0x08, 0x77, 0x3b, 0x6c, 0x13, - 0x4f, 0xee, 0xc1, 0x3c, 0xc3, 0x16, 0x88, 0x19, 0x97, 0x2e, 0x6d, 0x08, 0xd1, 0xdc, 0x1c, 0x33, - 0xe7, 0x8e, 0xec, 0xb6, 0x9c, 0x45, 0x2e, 0x02, 0xd8, 0x5e, 0x3d, 0x18, 0x57, 0xf4, 0x2c, 0x6d, - 0x8e, 0x99, 0x05, 0xdb, 0x5b, 0x13, 0x63, 0x5b, 0xe6, 0xb2, 0x58, 0xf7, 0x3a, 0x56, 0x5b, 0x2c, - 0x85, 0x8c, 0x64, 0x2b, 0x71, 0xd6, 0x6f, 0x8e, 0x99, 0x79, 0x3f, 0x18, 0x86, 0x75, 0xb6, 0x05, - 0xef, 0xb2, 0x4d, 0x25, 0xc3, 0x31, 0x8e, 0x38, 0xae, 0xf4, 0xc6, 0x11, 0xf2, 0x8d, 0x11, 0xd2, - 0x08, 0x12, 0xab, 0x13, 0x90, 0x65, 0x8b, 0xd6, 0x2f, 0x41, 0x29, 0x84, 0x94, 0x05, 0xf5, 0x9d, - 0x2e, 0x75, 0x4f, 0xc8, 0x2a, 0xcc, 0x84, 0xf2, 0xdf, 0x97, 0x2f, 0x8a, 0x8c, 0x4f, 0xbb, 0x52, - 0xca, 0xf8, 0x2a, 0x9c, 0x09, 0x5b, 0x28, 0x07, 0xda, 0xfa, 0xcc, 0xd0, 0xc7, 0xac, 0x42, 0x26, - 0x66, 0x15, 0x8c, 0xbf, 0xa1, 0x41, 0x31, 0xd1, 0xc1, 0x6a, 0xf3, 0x2f, 0xab, 0xfd, 0xb8, 0x05, - 0xc9, 0xc6, 0x2d, 0x88, 0xf1, 0x9f, 0x33, 0x30, 0x1b, 0x12, 0xc8, 0xc9, 0xfa, 0x22, 0x9c, 0x52, - 0xc8, 0xaa, 0x7f, 0xc0, 0xb2, 0x85, 0xc2, 0xbd, 0xdc, 0x7b, 0xa4, 0x13, 0xe3, 0xb7, 0x39, 0x66, - 0xce, 0xbb, 0x89, 0x41, 0xdd, 0x07, 0x3d, 0xa2, 0x58, 0xe0, 0xce, 0xf4, 0x70, 0x4b, 0xf4, 0x18, - 0xb9, 0xcd, 0x31, 0x73, 0xd6, 0x52, 0xc7, 0xf2, 0x01, 0xcc, 0x4b, 0x1d, 0x15, 0x68, 0xb9, 0x80, - 0xbf, 0x34, 0x98, 0x64, 0x31, 0x22, 0x4c, 0xa5, 0xdc, 0xd8, 0x20, 0xbd, 0x0a, 0xe3, 0x4e, 0xc7, - 0x67, 0xd3, 0x72, 0xfa, 0xea, 0x27, 0xa6, 0xcf, 0x26, 0x42, 0xaf, 0xe6, 0x60, 0x02, 0x49, 0x30, - 0x2c, 0x78, 0x21, 0x84, 0xa8, 0xb4, 0xd9, 0x82, 0xc5, 0xf2, 0xe9, 0x03, 0xdb, 0x7f, 0xbc, 0x61, - 0xb7, 0x7c, 0xea, 0x7a, 0x6c, 0x5d, 0x42, 0x3d, 0x66, 0x2d, 0x73, 0xac, 0x82, 0x2d, 0x76, 0x6c, - 0x69, 0xeb, 0x20, 0x75, 0x98, 0xcc, 0x00, 0xde, 0x78, 0x00, 0x57, 0x07, 0x34, 0xe1, 0x75, 0x9c, - 0xb6, 0x47, 0xc9, 0x12, 0x4c, 0x22, 0xd7, 0x82, 0x26, 0x92, 0x9b, 0x20, 0x44, 0x62, 0x0a, 0x28, - 0xa3, 0x06, 0x0b, 0x21, 0xe2, 0x75, 0xda, 0xa2, 0x3e, 0x7d, 0x06, 0xd4, 0x9e, 0x95, 0xf4, 0x31, - 0x40, 0xca, 0xe9, 0x33, 0x8e, 0xe0, 0xf9, 0x5a, 0xf3, 0x49, 0xe0, 0x82, 0xd8, 0x73, 0x5a, 0x76, - 0xe3, 0x64, 0xcd, 0xa5, 0x56, 0xd4, 0xee, 0x3d, 0x98, 0x0b, 0x77, 0xd3, 0x1d, 0x2c, 0x17, 0x62, - 0x99, 0x6a, 0xc4, 0x54, 0x4c, 0xe6, 0xac, 0xa7, 0xa4, 0x8d, 0xd7, 0x60, 0x92, 0x93, 0xc1, 0x36, - 0x87, 0xd8, 0xe5, 0x01, 0x7c, 0xe1, 0x40, 0xc6, 0xbf, 0xcb, 0xc0, 0xdc, 0xee, 0xc3, 0xf7, 0x69, - 0xc3, 0x67, 0x20, 0x7c, 0x79, 0x43, 0x60, 0xbc, 0xdb, 0x0d, 0x77, 0xa8, 0xf8, 0x9b, 0x4d, 0x05, - 0x62, 0x8d, 0x6b, 0x07, 0x07, 0x08, 0x79, 0x9e, 0x51, 0x45, 0x67, 0x24, 0x6d, 0x5b, 0x0f, 0x5b, - 0x94, 0x2b, 0x65, 0xde, 0x0c, 0x92, 0xdc, 0x9f, 0x8a, 0x5b, 0x28, 0xbe, 0x8e, 0x08, 0xf6, 0x48, - 0x0b, 0x30, 0x69, 0x35, 0x98, 0x88, 0x09, 0x27, 0xbc, 0x48, 0xa1, 0x05, 0x68, 0x34, 0xa8, 0xe7, - 0xd5, 0xd9, 0x22, 0x96, 0xaf, 0x11, 0x0a, 0x3c, 0xe7, 0x1e, 0xc5, 0x65, 0x8b, 0x47, 0x1b, 0x2e, - 0xf5, 0xb1, 0x38, 0xc7, 0x8b, 0x79, 0x0e, 0x2b, 0x46, 0xf7, 0x71, 0xb3, 0xe3, 0xd8, 0x6d, 0x9f, - 0x2d, 0x03, 0xd9, 0x76, 0x24, 0xca, 0x20, 0x2f, 0x81, 0xde, 0xe8, 0xba, 0x2e, 0x6d, 0xfb, 0xf5, - 0x20, 0x13, 0xd7, 0x05, 0x05, 0x73, 0x4e, 0xe4, 0x57, 0x44, 0x36, 0xee, 0x6c, 0x38, 0x19, 0x1d, - 0xc7, 0xe5, 0xfb, 0xc5, 0xac, 0x29, 0x28, 0xdb, 0x73, 0x5c, 0x1f, 0x4f, 0x13, 0xe9, 0x21, 0xa3, - 0x9f, 0x9f, 0x02, 0x8a, 0x94, 0xf1, 0x23, 0x0d, 0x4e, 0x89, 0x25, 0xbe, 0x32, 0xd6, 0xd2, 0x3e, - 0x5b, 0x1b, 0x6d, 0x9f, 0x3d, 0xb2, 0x73, 0x20, 0xd8, 0x66, 0x67, 0x87, 0xdc, 0x66, 0x1b, 0x2f, - 0xc2, 0x2c, 0xcf, 0x0b, 0x75, 0x2b, 0xdc, 0xe6, 0x68, 0xd2, 0x36, 0xc7, 0xe8, 0xc0, 0x69, 0xb5, - 0x6b, 0x02, 0x3a, 0xee, 0xce, 0xd8, 0x04, 0xb1, 0xab, 0x61, 0xdb, 0x18, 0x04, 0x11, 0xa4, 0xf7, - 0xda, 0x0d, 0x05, 0x98, 0xcc, 0xd9, 0x63, 0x25, 0x6d, 0xfc, 0x44, 0x0b, 0xdc, 0xb3, 0xb8, 0xfd, - 0x2a, 0x73, 0x19, 0xb9, 0x03, 0x93, 0x7c, 0x67, 0x28, 0xa6, 0x18, 0xa3, 0x07, 0x5a, 0x0e, 0xbe, - 0x67, 0xb9, 0xd6, 0x91, 0x29, 0x6a, 0x90, 0xd7, 0x61, 0xe2, 0x28, 0x5c, 0xcd, 0x0c, 0x57, 0x95, - 0x57, 0x60, 0xa2, 0x87, 0x3f, 0xf8, 0x5e, 0x97, 0xcf, 0x3d, 0x05, 0xcc, 0x09, 0xf6, 0xc2, 0xf2, - 0x96, 0x79, 0x3c, 0xbe, 0xb5, 0x36, 0xfe, 0x30, 0x13, 0x3a, 0x8a, 0xa9, 0xff, 0x2c, 0xc4, 0x82, - 0x8f, 0x72, 0x66, 0x58, 0x67, 0xca, 0x9d, 0x50, 0xe3, 0x7a, 0xad, 0x94, 0x12, 0x9c, 0x0e, 0xb5, - 0x72, 0x13, 0x72, 0x0e, 0x4e, 0x08, 0xc1, 0xcc, 0xb1, 0xd4, 0xab, 0x72, 0xd8, 0xb5, 0x25, 0x3e, - 0x83, 0x88, 0x83, 0xa6, 0xa0, 0x7a, 0xe9, 0x0e, 0x4c, 0xcb, 0x05, 0x23, 0xed, 0x56, 0x7f, 0x23, - 0x92, 0x06, 0xd6, 0x8c, 0x90, 0xbe, 0x65, 0x98, 0xe4, 0x52, 0x23, 0x38, 0x78, 0xa6, 0x97, 0x90, - 0x09, 0xb0, 0x67, 0x28, 0x9e, 0xbf, 0xcd, 0x56, 0xf6, 0x6d, 0xab, 0xa3, 0xaa, 0x7a, 0x5c, 0x1d, - 0xa4, 0x31, 0xce, 0x8c, 0x36, 0xc6, 0xb2, 0xe3, 0x2e, 0x1b, 0x73, 0xdc, 0x9d, 0x85, 0x7c, 0xdb, - 0xa9, 0xbb, 0xd4, 0x77, 0x03, 0xa7, 0x5e, 0xae, 0xed, 0x98, 0x2c, 0x69, 0x7c, 0x00, 0x44, 0xa6, - 0x4a, 0xf0, 0xe9, 0x0b, 0xb0, 0x10, 0x38, 0x29, 0xb0, 0x20, 0xea, 0x3d, 0xe7, 0xdb, 0xd5, 0x5e, - 0xae, 0x0a, 0x05, 0x8d, 0x79, 0xfa, 0x38, 0x25, 0xd7, 0xf0, 0x83, 0x53, 0x5e, 0x9c, 0x3f, 0x94, - 0xb9, 0x42, 0x8b, 0xcd, 0x15, 0x69, 0xf7, 0x46, 0x6e, 0x43, 0x4e, 0x34, 0x3c, 0x8c, 0xd5, 0x0a, - 0x60, 0x8d, 0x1f, 0x6a, 0x81, 0xe5, 0x0a, 0xfc, 0x27, 0xa9, 0x07, 0xf6, 0xe7, 0xa1, 0xc0, 0xfe, - 0x7b, 0x1d, 0xab, 0x11, 0x48, 0x55, 0x94, 0xc1, 0x6a, 0x84, 0x7b, 0xe0, 0x82, 0x89, 0xbf, 0xc9, - 0x19, 0xc8, 0xb5, 0x9d, 0x26, 0x92, 0x2f, 0xa6, 0x2d, 0x96, 0xac, 0x36, 0x99, 0x11, 0x70, 0x3e, - 0x6c, 0x53, 0xb7, 0x8e, 0x8d, 0x4c, 0x70, 0x5c, 0x98, 0xb3, 0xc3, 0x5a, 0x0a, 0x8b, 0x11, 0xe3, - 0xa4, 0x54, 0x8c, 0xeb, 0xe7, 0x26, 0x90, 0xbb, 0xae, 0xd5, 0x79, 0xbc, 0xee, 0xda, 0xc7, 0xd4, - 0x5d, 0x7b, 0x6c, 0xb5, 0x0f, 0xa9, 0x17, 0x32, 0x44, 0x93, 0x18, 0x72, 0x07, 0xc6, 0x9f, 0xd8, - 0xed, 0xa6, 0xb0, 0x52, 0x2f, 0xa6, 0xf8, 0x77, 0x63, 0x68, 0x70, 0x31, 0x8d, 0x75, 0x8c, 0x6b, - 0x30, 0xb7, 0xd6, 0xea, 0x7a, 0x3e, 0x75, 0x07, 0xd8, 0xf3, 0xef, 0x69, 0x30, 0xc3, 0x14, 0xfd, - 0x38, 0x14, 0xdd, 0x4d, 0xc8, 0x9b, 0xf4, 0x03, 0xea, 0xf9, 0xf7, 0xee, 0x8b, 0xd5, 0xc3, 0x8d, - 0xe4, 0xea, 0x41, 0xae, 0xb1, 0x14, 0x80, 0x73, 0x35, 0x0f, 0x6b, 0x97, 0xde, 0x84, 0x19, 0xa5, - 0x48, 0x56, 0xf4, 0xec, 0x20, 0x45, 0xff, 0x32, 0xcc, 0x2a, 0xad, 0x78, 0xc4, 0x80, 0x69, 0xf1, - 0x7b, 0x4d, 0xda, 0xa8, 0x2a, 0x79, 0x64, 0x3d, 0xd6, 0x1b, 0x71, 0x2f, 0xe3, 0xf9, 0xfe, 0x3d, - 0x30, 0xd5, 0x4a, 0xc6, 0x9f, 0x6a, 0xb0, 0x80, 0xde, 0xf3, 0xc1, 0x8a, 0x7d, 0x0f, 0x26, 0xb7, - 0xe4, 0x1b, 0x20, 0x9f, 0x4a, 0x77, 0xc3, 0x27, 0x10, 0xa9, 0xd7, 0x56, 0xc4, 0xe1, 0xfb, 0x05, - 0x80, 0x50, 0x67, 0xbc, 0x62, 0x96, 0xaf, 0x5d, 0x02, 0xa5, 0xf9, 0x44, 0xb7, 0x5a, 0x7e, 0xa6, - 0xc1, 0x99, 0x04, 0x21, 0x42, 0x30, 0x0e, 0xa0, 0x10, 0x9c, 0xec, 0x04, 0x8b, 0xdf, 0x4f, 0x0f, - 0xee, 0x05, 0xaf, 0xbc, 0x54, 0x0b, 0x6a, 0xf2, 0x9e, 0x44, 0x98, 0x22, 0x79, 0xcb, 0x48, 0xf2, - 0x56, 0xb2, 0x60, 0x56, 0xad, 0x92, 0xd2, 0x8d, 0x37, 0xe4, 0x6e, 0xa4, 0x6e, 0xc5, 0x13, 0x74, - 0xc8, 0x7d, 0xfd, 0x07, 0x13, 0xe1, 0x95, 0xa8, 0x1d, 0xa7, 0x99, 0x5c, 0x9a, 0xe8, 0x90, 0x6d, - 0x74, 0xba, 0x88, 0x5c, 0x33, 0xd9, 0x4f, 0x74, 0x71, 0xd0, 0xa3, 0x3a, 0xfa, 0xdb, 0x84, 0x23, - 0x33, 0x7f, 0x44, 0x8f, 0xf0, 0x96, 0x12, 0x33, 0xb2, 0xac, 0x10, 0x7d, 0x87, 0xdc, 0x93, 0x99, - 0x3b, 0xa2, 0x47, 0xe8, 0x39, 0x14, 0x45, 0x8f, 0x5c, 0x4a, 0x03, 0x57, 0xe6, 0x11, 0x3d, 0xda, - 0x70, 0x29, 0x5e, 0x31, 0xb1, 0x8e, 0x0f, 0xeb, 0x2d, 0xc7, 0xe2, 0x5e, 0xae, 0xac, 0x99, 0xb3, - 0x8e, 0x0f, 0xb7, 0x1c, 0x8b, 0x9f, 0xf4, 0xf0, 0xe5, 0x70, 0xae, 0xc7, 0x11, 0x44, 0xec, 0x2c, - 0xe1, 0x6d, 0x98, 0x68, 0xda, 0xde, 0x93, 0xe0, 0x3a, 0xd4, 0xb5, 0x5e, 0xd7, 0xa1, 0x58, 0x6f, - 0x97, 0xd6, 0x19, 0x24, 0x1f, 0x0c, 0x5e, 0x8b, 0xac, 0xc0, 0x44, 0xc7, 0x71, 0xc2, 0xeb, 0x21, - 0xe7, 0xfb, 0xdd, 0xa6, 0x32, 0x39, 0x28, 0x33, 0x7e, 0x47, 0x87, 0x47, 0x7e, 0xdd, 0xee, 0x04, - 0x6b, 0x5b, 0x96, 0xac, 0x76, 0x58, 0x41, 0xd3, 0xf2, 0x2d, 0x56, 0x30, 0xcd, 0x0b, 0x58, 0xb2, - 0x8a, 0x07, 0x4c, 0x8f, 0x1d, 0xcf, 0x47, 0x9b, 0xc8, 0xcf, 0x14, 0xc2, 0x34, 0xd9, 0x86, 0x29, - 0x34, 0xa5, 0xe2, 0x9a, 0x8a, 0xde, 0xc3, 0xaa, 0xc8, 0xdd, 0x60, 0x7f, 0x64, 0x15, 0x81, 0x76, - 0x98, 0x41, 0x96, 0xe0, 0x54, 0xb0, 0xf1, 0x71, 0xeb, 0x88, 0x18, 0x5b, 0x9d, 0xc7, 0x56, 0xe7, - 0xc3, 0x22, 0x86, 0x82, 0x59, 0xe4, 0xd2, 0xe7, 0x01, 0x22, 0xae, 0xa4, 0xc8, 0xdb, 0x6b, 0xaa, - 0xbc, 0x5d, 0xea, 0x45, 0x58, 0xb0, 0xb7, 0x96, 0x84, 0xad, 0xf4, 0x36, 0xcc, 0xc5, 0x48, 0x1d, - 0x49, 0x2f, 0x29, 0xcc, 0x0a, 0xe4, 0xc2, 0x5c, 0x4b, 0xd2, 0xa1, 0x0d, 0x27, 0x1d, 0x5c, 0xbc, - 0x33, 0xf2, 0x9d, 0x4c, 0x64, 0x47, 0x36, 0x9a, 0xfd, 0x8c, 0xcb, 0x70, 0xb1, 0xe7, 0x3e, 0xb4, - 0xcf, 0x56, 0x95, 0xdf, 0x64, 0xf8, 0xb9, 0x6c, 0x55, 0xd3, 0x28, 0x0a, 0x9a, 0x13, 0x14, 0x5d, - 0x81, 0xcb, 0x09, 0x90, 0xd0, 0x1b, 0x10, 0x98, 0xea, 0x26, 0x18, 0xfd, 0x80, 0x84, 0x89, 0xfb, - 0x0c, 0xe4, 0x91, 0xe2, 0x68, 0x7b, 0x3f, 0x0c, 0xcd, 0x61, 0x1d, 0xe3, 0x76, 0x0a, 0xb5, 0xd5, - 0x36, 0x5b, 0x52, 0x87, 0xab, 0xf8, 0x94, 0x45, 0x87, 0xf1, 0x4b, 0x70, 0xa9, 0x77, 0x35, 0x41, - 0xda, 0x1d, 0x98, 0x1c, 0x99, 0x99, 0xa2, 0x86, 0xf1, 0x6a, 0xca, 0x98, 0xa9, 0x6e, 0x8d, 0x34, - 0xaa, 0xd2, 0x58, 0x1f, 0xf3, 0x5b, 0x6c, 0xa5, 0x20, 0x0e, 0x6e, 0x7c, 0xac, 0x5b, 0x76, 0xeb, - 0x84, 0x21, 0x7e, 0xec, 0x74, 0x5d, 0x71, 0xd3, 0x14, 0x7f, 0xb3, 0xfd, 0xf0, 0x91, 0xdd, 0xee, - 0xfa, 0x5c, 0xce, 0x27, 0x4c, 0x91, 0x32, 0x7e, 0x59, 0x4b, 0x65, 0x1f, 0x47, 0xf7, 0x80, 0xd2, - 0x27, 0xad, 0x13, 0xf2, 0x0a, 0x64, 0x9b, 0xd6, 0x89, 0x90, 0xf9, 0x54, 0xdf, 0xcb, 0xbe, 0x7d, - 0x44, 0x19, 0x70, 0xd3, 0x3a, 0x31, 0x19, 0x6c, 0x48, 0x42, 0x26, 0x95, 0x84, 0xac, 0x42, 0xc2, - 0x97, 0x52, 0x47, 0x42, 0x9c, 0xf0, 0x38, 0x6d, 0xff, 0x71, 0x0b, 0xf5, 0x36, 0x20, 0x61, 0x62, - 0xf4, 0x16, 0xde, 0x4e, 0x91, 0xd6, 0xa0, 0x85, 0x3d, 0xea, 0xda, 0x4e, 0xd3, 0x6e, 0x90, 0x22, - 0xe4, 0x3c, 0xda, 0x70, 0xda, 0xcd, 0xe0, 0xac, 0x28, 0x48, 0x1a, 0xff, 0x27, 0x03, 0x67, 0x7b, - 0xd6, 0xe7, 0x9e, 0x06, 0xdf, 0xb2, 0xdb, 0xa2, 0x9a, 0x48, 0x91, 0x4d, 0x98, 0x68, 0xb2, 0xe1, - 0x28, 0xfe, 0x1b, 0x2e, 0x3c, 0xcb, 0x83, 0x85, 0x47, 0x19, 0xc6, 0xcd, 0x31, 0x93, 0x23, 0x60, - 0xeb, 0x98, 0x0f, 0x71, 0x24, 0x8a, 0x3f, 0xe1, 0xa8, 0x6e, 0x0d, 0x8f, 0x8a, 0x0f, 0xe1, 0xe6, - 0x98, 0x29, 0x50, 0x90, 0x1d, 0xc8, 0x1d, 0x71, 0xa6, 0x16, 0xff, 0x98, 0x63, 0x7b, 0x65, 0x78, - 0x6c, 0x62, 0x38, 0x36, 0xc7, 0xcc, 0x00, 0x09, 0x79, 0x07, 0xf2, 0x1d, 0xc1, 0xc2, 0xe2, 0xbf, - 0xe5, 0x08, 0x57, 0x86, 0x47, 0x18, 0x70, 0x7f, 0x73, 0xcc, 0x0c, 0xd1, 0xac, 0xce, 0xc0, 0x14, - 0xff, 0x8d, 0xcb, 0x74, 0xe3, 0x03, 0x3c, 0x9e, 0x51, 0xeb, 0xa7, 0xee, 0x23, 0x36, 0xa1, 0x10, - 0x58, 0xb2, 0x60, 0xc9, 0xb7, 0x38, 0x3c, 0x29, 0x66, 0x54, 0xd9, 0xf8, 0xf5, 0x2c, 0x9e, 0x14, - 0xac, 0xb9, 0xb4, 0x49, 0xdb, 0xbe, 0x6d, 0xb5, 0xd4, 0x85, 0x66, 0x5a, 0xe3, 0x0b, 0x30, 0xf9, - 0xb0, 0xdb, 0x78, 0x42, 0x7d, 0x61, 0xee, 0x45, 0x8a, 0x5c, 0x85, 0x59, 0x71, 0x41, 0xd2, 0x76, - 0xda, 0xe8, 0x15, 0xe3, 0xc6, 0x7f, 0x26, 0xca, 0xbd, 0x47, 0x4f, 0x88, 0x09, 0xb3, 0xd6, 0x87, - 0x1e, 0xdb, 0xfa, 0x89, 0x16, 0x03, 0xb1, 0x49, 0x77, 0x53, 0x7f, 0xe8, 0x45, 0xb4, 0x09, 0xaa, - 0x36, 0xc7, 0xcc, 0x19, 0x4b, 0xce, 0x27, 0xef, 0x82, 0x6e, 0x7d, 0xb9, 0xeb, 0x52, 0x19, 0xab, - 0x90, 0xa0, 0x54, 0xbe, 0x94, 0x19, 0x70, 0x1a, 0xde, 0x39, 0x4b, 0x2d, 0x21, 0x5f, 0x80, 0x79, - 0x7e, 0xa0, 0x25, 0xa3, 0xfe, 0xe3, 0x3e, 0x3e, 0xfb, 0xbb, 0x08, 0x9d, 0x86, 0x5b, 0x3f, 0x8c, - 0x15, 0xad, 0xce, 0xc3, 0x5c, 0x84, 0x95, 0x8b, 0xc0, 0x2a, 0x9c, 0x4b, 0x1d, 0x0e, 0x61, 0xa7, - 0xaf, 0xc0, 0x8c, 0x54, 0x23, 0x5c, 0x50, 0x4e, 0x47, 0x99, 0xd5, 0xa6, 0xf1, 0x8f, 0x34, 0xee, - 0x0b, 0x4e, 0x61, 0x5d, 0xcc, 0xab, 0xa9, 0xf5, 0xf7, 0x6a, 0x66, 0xe2, 0x5e, 0xcd, 0x12, 0x9e, - 0xf7, 0x71, 0x7f, 0x25, 0x1f, 0xdc, 0x30, 0x2d, 0xf9, 0x21, 0xc7, 0x65, 0x3f, 0x24, 0xba, 0xa3, - 0x6c, 0xcf, 0x7a, 0xd8, 0xa2, 0x75, 0xcf, 0xe3, 0xd7, 0x0d, 0xf3, 0x26, 0x88, 0xac, 0x9a, 0xd7, - 0x32, 0xea, 0x68, 0x73, 0xd2, 0x87, 0x84, 0x5c, 0x86, 0x69, 0xab, 0xc1, 0xcf, 0xc5, 0x24, 0x41, - 0x9c, 0x12, 0x79, 0xb8, 0xd5, 0xe5, 0x1e, 0x52, 0x04, 0x89, 0x88, 0x06, 0x91, 0x75, 0x8f, 0x9e, - 0x18, 0xf7, 0x51, 0xc4, 0x7b, 0x0c, 0x0c, 0xeb, 0x72, 0xc7, 0x75, 0xde, 0xa7, 0x0d, 0x3f, 0xe2, - 0x67, 0x41, 0xe4, 0x54, 0x71, 0x75, 0xfd, 0xbe, 0x27, 0xe4, 0x99, 0xa3, 0xce, 0xb1, 0x34, 0xc3, - 0xfb, 0x1b, 0xe2, 0x10, 0x4a, 0xe5, 0xb3, 0x18, 0x29, 0x95, 0xd1, 0x99, 0x38, 0xa3, 0x7f, 0x2e, - 0x9c, 0xfc, 0x2c, 0x3f, 0xf5, 0x8b, 0x73, 0x52, 0x50, 0x14, 0x67, 0x65, 0x26, 0xc1, 0x4a, 0xe3, - 0x2d, 0x94, 0xbe, 0x24, 0xa7, 0xa2, 0x3e, 0x49, 0xac, 0xca, 0xc4, 0x58, 0x65, 0x5c, 0x84, 0x0b, - 0x8a, 0xec, 0x26, 0x96, 0x49, 0x77, 0x71, 0x42, 0x4f, 0x05, 0x10, 0x2d, 0x5c, 0x85, 0x59, 0x45, - 0xbe, 0x83, 0x7b, 0x76, 0x33, 0xb2, 0x80, 0x7b, 0x09, 0x2d, 0x89, 0xad, 0x82, 0x86, 0xd2, 0x92, - 0xdf, 0xcc, 0xc2, 0xf9, 0x74, 0x24, 0x23, 0xe8, 0x5a, 0x68, 0x20, 0x33, 0xa9, 0x06, 0x32, 0xab, - 0x18, 0xc8, 0x5a, 0x2f, 0xcb, 0xf7, 0xd2, 0x10, 0x96, 0x8f, 0x13, 0x95, 0x34, 0x7d, 0xef, 0xf5, - 0x36, 0x7d, 0x2f, 0x0f, 0x65, 0xfa, 0x42, 0xc4, 0x09, 0xdb, 0xf7, 0x8b, 0x7d, 0x6c, 0xdf, 0x8d, - 0xe1, 0x6c, 0x5f, 0x88, 0x7c, 0x28, 0xe3, 0x57, 0x8e, 0xcd, 0x45, 0xea, 0x2a, 0x72, 0xa8, 0x51, - 0xbd, 0x10, 0x93, 0x8c, 0xd8, 0x92, 0x72, 0x2d, 0x36, 0xe6, 0xf7, 0xad, 0x96, 0x2d, 0xef, 0x2e, - 0x86, 0x6a, 0x23, 0x2e, 0xe7, 0x11, 0x12, 0xd1, 0xca, 0xd7, 0xf1, 0x80, 0x4f, 0xf8, 0xef, 0xd1, - 0xdb, 0x2f, 0x3c, 0xcd, 0x4c, 0x85, 0x85, 0x7d, 0x95, 0xac, 0x99, 0x30, 0xb9, 0x81, 0xdf, 0xae, - 0x9f, 0x01, 0xbe, 0x0a, 0xb3, 0xa2, 0xb8, 0xe1, 0xb4, 0x7d, 0xfa, 0x51, 0x20, 0x62, 0x33, 0x3c, - 0x77, 0x8d, 0x67, 0x1a, 0xdf, 0xd3, 0xe0, 0xb9, 0x90, 0x82, 0x6d, 0xa6, 0xde, 0x41, 0x07, 0xfb, - 0x3a, 0x44, 0xd5, 0x83, 0x85, 0x4c, 0xfc, 0x60, 0xa1, 0x1c, 0xf9, 0xde, 0xb9, 0x6f, 0xf4, 0x5a, - 0x9a, 0x10, 0xa4, 0x74, 0x3b, 0x74, 0xba, 0x1b, 0x45, 0x89, 0x33, 0x82, 0x2e, 0xc1, 0xb3, 0x6f, - 0xf3, 0x49, 0x8b, 0x17, 0x1d, 0xb4, 0xb1, 0xd5, 0x80, 0x6b, 0x8b, 0x30, 0xdf, 0xc4, 0x71, 0xac, - 0x4b, 0xe4, 0xf1, 0x37, 0x3b, 0x73, 0xbc, 0x60, 0x3b, 0x24, 0xf2, 0x1e, 0x5c, 0x69, 0x3b, 0xf5, - 0x26, 0x6d, 0x59, 0x27, 0xf5, 0x87, 0xf4, 0x91, 0x83, 0x17, 0x08, 0x5b, 0xd4, 0xb7, 0xdb, 0x87, - 0xf5, 0x58, 0xe7, 0xf2, 0xe6, 0xf3, 0x6d, 0x67, 0x9d, 0x41, 0xae, 0x22, 0xe0, 0xba, 0x80, 0x0b, - 0x91, 0x19, 0xdf, 0x4f, 0x21, 0xea, 0x59, 0x70, 0x72, 0x35, 0xce, 0xc9, 0xeb, 0xbd, 0x39, 0xa9, - 0xf2, 0x22, 0x62, 0x65, 0x09, 0x27, 0x9f, 0x18, 0x69, 0x82, 0x99, 0x1f, 0x25, 0x04, 0x70, 0x28, - 0xaa, 0xa5, 0x01, 0xce, 0x3c, 0xe5, 0x00, 0xdf, 0x91, 0x18, 0x16, 0xb4, 0x2c, 0xec, 0x69, 0xec, - 0x5c, 0x4a, 0x4b, 0x9c, 0x4b, 0x3d, 0x94, 0xa8, 0x5e, 0xa7, 0xb2, 0xda, 0x9c, 0x86, 0x09, 0x7c, - 0xea, 0x21, 0x06, 0x9d, 0x27, 0xc8, 0x0a, 0x3c, 0xd7, 0xe5, 0x1d, 0x8f, 0x46, 0x1a, 0x0f, 0xe3, - 0xf8, 0xe0, 0x9e, 0x12, 0x85, 0xc1, 0xe0, 0xb2, 0x22, 0x85, 0x33, 0x3c, 0xeb, 0x99, 0x73, 0x46, - 0x21, 0x3d, 0xe2, 0xcc, 0x59, 0x89, 0x33, 0x41, 0xcb, 0x62, 0xb8, 0xfe, 0xab, 0x26, 0x51, 0x35, - 0x78, 0x01, 0x3e, 0xf2, 0x81, 0xdb, 0xbd, 0xf0, 0x29, 0x63, 0xb6, 0x87, 0x7b, 0x38, 0xbd, 0xf5, - 0x67, 0xfd, 0xaa, 0xf1, 0x35, 0x89, 0x05, 0xb1, 0x85, 0x6d, 0x3f, 0xee, 0x1b, 0x9b, 0x92, 0x35, - 0x5b, 0x6b, 0x39, 0xed, 0xbe, 0xdc, 0x39, 0x07, 0x05, 0xfe, 0xc8, 0x50, 0xba, 0x1e, 0xc0, 0x33, - 0xaa, 0x4d, 0xe3, 0xb6, 0xcc, 0x68, 0x8e, 0x69, 0x18, 0x02, 0x6e, 0x2b, 0x52, 0x23, 0x4f, 0x4a, - 0x7d, 0xab, 0xa9, 0x43, 0xae, 0x4c, 0x44, 0x32, 0x2b, 0x62, 0xab, 0x97, 0xbe, 0x28, 0x7f, 0xa6, - 0x49, 0x6a, 0x1f, 0x5f, 0xb1, 0x8c, 0x7c, 0x00, 0x99, 0xb6, 0x7a, 0xd9, 0x8e, 0x09, 0xcb, 0xed, - 0xde, 0xc2, 0x12, 0x6b, 0xff, 0x59, 0x8b, 0xcb, 0xff, 0x92, 0xd5, 0x42, 0xf5, 0x02, 0xf6, 0x55, - 0xd6, 0x11, 0xc4, 0x5d, 0xc1, 0x9a, 0x46, 0x3f, 0xb9, 0x2d, 0x94, 0x8d, 0x5f, 0xc8, 0xbb, 0xdc, - 0x47, 0xd9, 0x04, 0x2e, 0x04, 0xff, 0x24, 0xdd, 0x96, 0xa5, 0x26, 0xe6, 0x8c, 0xfc, 0x82, 0xa4, - 0x08, 0x78, 0x5b, 0x7a, 0x28, 0x7e, 0x5c, 0x85, 0xd9, 0xb6, 0xe3, 0xd7, 0x1b, 0xdd, 0xa3, 0x6e, - 0xcb, 0xf2, 0xed, 0x63, 0x2a, 0x0c, 0xe4, 0x4c, 0xdb, 0xf1, 0xd7, 0xc2, 0x4c, 0x63, 0x43, 0xe2, - 0xb6, 0x40, 0x2e, 0xe4, 0xea, 0x06, 0x7f, 0x46, 0xe0, 0x09, 0xb1, 0x5a, 0x48, 0x75, 0x06, 0x7b, - 0xfc, 0x01, 0x81, 0x67, 0xbc, 0x85, 0xcb, 0x23, 0xa1, 0x63, 0xf2, 0x85, 0xe5, 0xa1, 0x04, 0xdc, - 0xc7, 0x3d, 0x42, 0x6a, 0x6d, 0x41, 0x8d, 0x09, 0xa7, 0x1a, 0xa2, 0xa0, 0x8e, 0xef, 0x30, 0xf8, - 0x95, 0xfe, 0x5e, 0x8e, 0xcb, 0xc4, 0x9d, 0x69, 0x73, 0xbe, 0x11, 0xcf, 0x32, 0xce, 0xe1, 0x1e, - 0x94, 0xb7, 0x9a, 0xd8, 0xb6, 0xbc, 0x89, 0xcb, 0xd2, 0x44, 0x61, 0xb4, 0x29, 0x92, 0x8e, 0xcb, - 0xb4, 0xd8, 0x71, 0x99, 0xf1, 0xef, 0x35, 0xbc, 0xa9, 0x16, 0xab, 0x9d, 0x72, 0x53, 0x2d, 0x4d, - 0x17, 0xdf, 0x8b, 0x49, 0x72, 0xb9, 0xb7, 0x24, 0xf7, 0x41, 0xfd, 0xac, 0xf5, 0x72, 0x03, 0x2f, - 0xc6, 0xf5, 0x6b, 0x76, 0x38, 0xd6, 0xfc, 0xb9, 0x26, 0x8d, 0x75, 0x70, 0x1e, 0xa7, 0x4e, 0x7f, - 0x83, 0xce, 0xef, 0x13, 0x1c, 0xab, 0xc5, 0x38, 0xf6, 0x66, 0x6f, 0x8e, 0xa5, 0xb6, 0xf8, 0xac, - 0x79, 0xb5, 0x8a, 0x4e, 0xe7, 0xf4, 0x06, 0xa3, 0x75, 0x51, 0xf4, 0x18, 0xae, 0x19, 0xee, 0x09, - 0x82, 0x27, 0x8e, 0x4d, 0xa3, 0x9e, 0x82, 0xc3, 0xa4, 0x78, 0x49, 0x6e, 0x28, 0x3e, 0xc5, 0x1a, - 0xc8, 0x24, 0x1a, 0x30, 0xd0, 0x2f, 0xdd, 0xa3, 0x01, 0x61, 0x7a, 0x7e, 0x01, 0x3d, 0xcb, 0x2a, - 0x4c, 0x5c, 0x53, 0xfa, 0x6b, 0xf6, 0x3e, 0x1e, 0x92, 0xf4, 0xc4, 0x10, 0x5e, 0xa6, 0x3c, 0x25, - 0x50, 0x48, 0x34, 0x07, 0xc2, 0x33, 0x7f, 0xac, 0xd4, 0x66, 0x42, 0xf4, 0x33, 0x0d, 0x6e, 0xf4, - 0x46, 0x9b, 0xa2, 0x67, 0x7d, 0x59, 0x65, 0x85, 0xe2, 0xc3, 0xbd, 0xaa, 0xd5, 0xc1, 0xe2, 0xf3, - 0x97, 0xa8, 0x78, 0x75, 0xb8, 0x39, 0x64, 0xf3, 0x4f, 0xc9, 0xcc, 0x8f, 0xe1, 0xc5, 0x44, 0x03, - 0x81, 0x0f, 0x79, 0x84, 0x09, 0xf8, 0x35, 0x38, 0x93, 0x7c, 0xa5, 0x89, 0xf7, 0x5c, 0x90, 0xad, - 0x05, 0xf3, 0xb9, 0xf8, 0xbb, 0x58, 0xb6, 0xf7, 0xf5, 0x8c, 0x97, 0xe0, 0xda, 0xc0, 0xe6, 0x85, - 0x38, 0xf2, 0xe3, 0x23, 0x71, 0x5c, 0x29, 0xd6, 0x21, 0x6b, 0xfc, 0xea, 0x64, 0x60, 0xb6, 0xbf, - 0x88, 0x52, 0xdd, 0x03, 0x44, 0x30, 0xe8, 0x0d, 0xc8, 0x35, 0x38, 0x80, 0x98, 0x3f, 0x2e, 0xf6, - 0x3a, 0x76, 0x0d, 0x2e, 0xb2, 0x04, 0xf0, 0xc6, 0x2d, 0x9c, 0x8b, 0x77, 0x9c, 0x66, 0x7c, 0xfd, - 0x26, 0x5d, 0xd9, 0xd1, 0xe4, 0x2b, 0x3b, 0xc6, 0xe7, 0x70, 0x82, 0x55, 0x6a, 0x08, 0x32, 0x6e, - 0xc1, 0x38, 0x83, 0x11, 0x34, 0x9c, 0xef, 0x77, 0x26, 0x6d, 0x22, 0xa4, 0xf1, 0x3c, 0x3a, 0x32, - 0x24, 0x5c, 0xb1, 0xce, 0xbf, 0x83, 0x93, 0x70, 0x5a, 0xf9, 0x53, 0x37, 0xc9, 0xd7, 0x25, 0x2c, - 0x23, 0x31, 0x43, 0xde, 0xc6, 0x45, 0x69, 0xac, 0x48, 0x34, 0x84, 0xd7, 0xc3, 0x9a, 0xf2, 0x14, - 0x90, 0xe3, 0xfc, 0xf0, 0x8c, 0x0a, 0x76, 0x42, 0xb9, 0xf3, 0xab, 0x70, 0xf2, 0x2a, 0xcc, 0x3a, - 0x51, 0x61, 0xc4, 0xd0, 0x19, 0x29, 0xb7, 0xda, 0x34, 0x3a, 0xd8, 0xd7, 0x34, 0x34, 0x82, 0x84, - 0x5d, 0x20, 0x32, 0x1e, 0xe9, 0x64, 0x3b, 0xed, 0x9c, 0x3d, 0x76, 0x07, 0xd9, 0x9c, 0x97, 0xea, - 0xf2, 0x53, 0x6f, 0xe3, 0x0e, 0x7a, 0x99, 0x24, 0xc0, 0xe1, 0x67, 0x2d, 0xc3, 0x89, 0x77, 0x3a, - 0x36, 0x1d, 0x3c, 0x73, 0x62, 0xd7, 0xe3, 0xc4, 0xaa, 0x3b, 0x98, 0x21, 0x99, 0xfc, 0x7c, 0x9c, - 0xec, 0xd8, 0x86, 0xe6, 0x17, 0xe3, 0xad, 0xa8, 0xf6, 0x62, 0xb8, 0x56, 0xc8, 0x02, 0x4c, 0xf2, - 0xfb, 0xda, 0x62, 0x89, 0x2a, 0x52, 0xc9, 0xd6, 0x63, 0xe6, 0xe0, 0xfb, 0x19, 0xee, 0xf7, 0x6b, - 0x39, 0xdd, 0xe6, 0xaa, 0xd5, 0x78, 0xd2, 0xed, 0x8c, 0xb0, 0x8e, 0x48, 0x38, 0xfd, 0x32, 0xe9, - 0x8e, 0xde, 0x47, 0xdd, 0x56, 0x4b, 0xdc, 0x7e, 0xc4, 0xdf, 0x4c, 0xd3, 0x7d, 0xcb, 0x7b, 0x22, - 0x5d, 0xce, 0x63, 0xc9, 0x6a, 0x93, 0xec, 0x85, 0xd3, 0xc8, 0x04, 0x4e, 0x23, 0xaf, 0xa7, 0x4d, - 0x23, 0xbd, 0x88, 0x7d, 0xd6, 0xb3, 0xc6, 0xa7, 0xb9, 0xcf, 0x33, 0xd9, 0x9a, 0x10, 0x38, 0xa9, - 0x17, 0x9a, 0xdc, 0x0b, 0xe3, 0xc7, 0x5a, 0xbc, 0x66, 0x72, 0xd5, 0xf1, 0x10, 0xf3, 0x25, 0xae, - 0xf2, 0x8c, 0x6a, 0x93, 0xcd, 0x3d, 0x2e, 0x07, 0xaf, 0x0b, 0xd6, 0x4b, 0x8b, 0xb5, 0x79, 0x51, - 0xc4, 0x6d, 0x3d, 0x7a, 0x3e, 0x13, 0xa3, 0x90, 0x4d, 0x19, 0x85, 0x9e, 0xd7, 0x21, 0xa5, 0x4e, - 0x4c, 0x28, 0x9d, 0x68, 0x72, 0x67, 0x6d, 0x4a, 0x1f, 0x44, 0xf7, 0x17, 0x61, 0x3e, 0x46, 0x67, - 0xd8, 0x99, 0x39, 0x85, 0x4a, 0xb5, 0x95, 0x8c, 0xd2, 0x4a, 0x37, 0x2e, 0x7e, 0x09, 0x2f, 0x41, - 0x6f, 0x46, 0x0d, 0x25, 0x7e, 0xa1, 0x07, 0x2c, 0x2b, 0x79, 0xc0, 0x84, 0x5a, 0xa4, 0x34, 0x2b, - 0xd4, 0xc2, 0xe6, 0x07, 0x2e, 0xf1, 0xf2, 0x72, 0x2b, 0x3c, 0xfd, 0x32, 0x60, 0xc6, 0x73, 0x1b, - 0x89, 0x9e, 0x4f, 0x79, 0x6e, 0xe3, 0xfe, 0x28, 0xfa, 0x11, 0x4e, 0xc8, 0x69, 0x4d, 0x09, 0x6a, - 0x7e, 0x57, 0x83, 0x97, 0x54, 0x98, 0x7e, 0xeb, 0xb4, 0x61, 0x28, 0xbb, 0x00, 0x20, 0xa6, 0x63, - 0xe9, 0x40, 0x4a, 0xe4, 0xa4, 0x11, 0x9e, 0x26, 0x52, 0x3a, 0x64, 0xad, 0x56, 0x4b, 0xdc, 0x5c, - 0x66, 0x3f, 0x8d, 0xff, 0x9d, 0xc1, 0xf7, 0x89, 0x12, 0x9d, 0x78, 0x97, 0x38, 0x7e, 0x83, 0x2f, - 0x41, 0x60, 0x26, 0x49, 0xe0, 0x8b, 0x30, 0x27, 0xc1, 0x48, 0x37, 0xa2, 0x66, 0x42, 0x28, 0x14, - 0x7e, 0xe5, 0x2d, 0xeb, 0xf8, 0x28, 0x6f, 0x59, 0xb7, 0xa5, 0x60, 0x6d, 0xdc, 0xd8, 0xbc, 0x32, - 0xc0, 0xd8, 0xb0, 0xce, 0x2c, 0x6d, 0x8b, 0x3a, 0xe2, 0xb6, 0x6c, 0x18, 0xdf, 0xad, 0x1c, 0x5e, - 0xfc, 0xe2, 0xf1, 0x5f, 0x5e, 0x1a, 0x80, 0x8c, 0xcf, 0x31, 0x3c, 0x56, 0x01, 0xaf, 0x58, 0x7a, - 0x13, 0x66, 0x14, 0xec, 0x23, 0x19, 0xab, 0x27, 0xb0, 0x38, 0x8c, 0x88, 0x08, 0xdd, 0x7d, 0x1b, - 0x72, 0x5c, 0x8d, 0x82, 0x0b, 0x55, 0x57, 0x86, 0xe8, 0xbb, 0x19, 0xd4, 0x31, 0xfe, 0xca, 0x38, - 0x9c, 0x4e, 0xeb, 0x4e, 0x7f, 0x7d, 0x7d, 0x1b, 0x26, 0x9d, 0x4e, 0xf8, 0x2c, 0x70, 0x36, 0xe5, - 0xba, 0xba, 0x8a, 0x73, 0xb7, 0xc3, 0xd9, 0xc3, 0x2b, 0x49, 0x1c, 0xce, 0x3e, 0x25, 0x87, 0xa3, - 0xa7, 0xe4, 0x4d, 0x47, 0x04, 0x2a, 0x0c, 0x9e, 0x92, 0xaf, 0x3b, 0x6d, 0x1a, 0x7b, 0xd0, 0x3b, - 0x31, 0xca, 0x83, 0xde, 0x32, 0xcc, 0x36, 0x9c, 0xa3, 0x0e, 0xd3, 0x5c, 0xf1, 0xac, 0x77, 0x70, - 0x4c, 0x8d, 0x99, 0xb0, 0x06, 0xa2, 0x90, 0x4c, 0x74, 0x4e, 0x31, 0xd1, 0x09, 0x7d, 0xc9, 0x27, - 0xf5, 0x85, 0xc0, 0x38, 0x3a, 0x73, 0x0a, 0xb8, 0x50, 0xc4, 0xdf, 0x49, 0x2d, 0x86, 0x14, 0x2d, - 0xbe, 0x08, 0x53, 0x9c, 0x25, 0xfc, 0xfa, 0xec, 0x14, 0x7f, 0x3e, 0x8f, 0x59, 0xfc, 0x02, 0xed, - 0x45, 0x98, 0xa2, 0xbe, 0x55, 0x0f, 0x2e, 0x3e, 0x4d, 0xf3, 0x77, 0x54, 0xd4, 0xb7, 0x6a, 0xe2, - 0xee, 0x93, 0x1d, 0x37, 0xe1, 0xe2, 0x86, 0xe3, 0x30, 0x2b, 0x88, 0xd3, 0x30, 0xd1, 0x72, 0x1a, - 0x56, 0x4b, 0xac, 0x5a, 0x78, 0x42, 0x9e, 0x2d, 0xb2, 0xca, 0x6c, 0xf1, 0x9f, 0x12, 0x13, 0x6b, - 0xd0, 0x96, 0x90, 0xeb, 0x07, 0x90, 0xe7, 0x43, 0x1d, 0xde, 0x14, 0x7c, 0x73, 0x28, 0x29, 0x89, - 0x2e, 0x44, 0x8b, 0xda, 0x42, 0xbd, 0x03, 0x64, 0xa5, 0x87, 0x30, 0xa3, 0x14, 0xa5, 0xe8, 0xe6, - 0x9b, 0xea, 0x3d, 0xd4, 0xab, 0xc3, 0x35, 0x2c, 0xa9, 0xf0, 0x97, 0x12, 0xeb, 0x0d, 0xcb, 0xb7, - 0x5a, 0xce, 0xe1, 0x33, 0x9b, 0x0c, 0x8d, 0x37, 0xe3, 0x73, 0x7a, 0xd8, 0x82, 0xe0, 0x5f, 0x09, - 0xf2, 0x78, 0x3e, 0xda, 0xf6, 0x83, 0x3d, 0x47, 0x98, 0x36, 0xfe, 0x40, 0x43, 0x5f, 0x9f, 0x54, - 0x7b, 0xd3, 0x66, 0xdd, 0x3b, 0xa9, 0xfa, 0xf4, 0x68, 0xa8, 0x59, 0x47, 0x31, 0xd6, 0x99, 0x51, - 0x8c, 0xf5, 0x27, 0xd7, 0x7d, 0x63, 0x35, 0xce, 0x5d, 0x41, 0xfd, 0x08, 0xd3, 0xa6, 0xd1, 0x8e, - 0xf3, 0x2f, 0xc4, 0x21, 0xf8, 0xb7, 0x0d, 0xd3, 0x8f, 0x79, 0x56, 0xbd, 0x65, 0x7b, 0xc1, 0xfb, - 0xcd, 0xc5, 0x01, 0xd4, 0x4a, 0x7c, 0x34, 0xa7, 0x44, 0xfd, 0x2d, 0xdb, 0xf3, 0x8d, 0xef, 0x68, - 0x62, 0x2b, 0xae, 0x74, 0x8c, 0xf2, 0xf7, 0x22, 0xd2, 0xb6, 0x39, 0x75, 0x19, 0x4a, 0xee, 0xc3, - 0x9c, 0xcb, 0x61, 0xc2, 0x80, 0x33, 0xdc, 0xf0, 0xde, 0x1c, 0x40, 0x8f, 0x19, 0xd4, 0xe2, 0x11, - 0x68, 0x66, 0x5d, 0x25, 0x2d, 0x6e, 0xf6, 0xf6, 0x22, 0x4a, 0xac, 0x59, 0x7e, 0xaa, 0xf1, 0x3b, - 0x09, 0x12, 0x94, 0x70, 0x48, 0xe0, 0x9a, 0xe0, 0x59, 0x2d, 0x9f, 0xd4, 0x1b, 0x7d, 0xd9, 0x4f, - 0x70, 0xa3, 0x8f, 0x19, 0xba, 0x23, 0xeb, 0xa3, 0x7a, 0x30, 0x2f, 0xf2, 0xd9, 0x01, 0x8e, 0xac, - 0x8f, 0x38, 0xf9, 0x5e, 0xb8, 0x93, 0x99, 0x88, 0x76, 0x32, 0xc6, 0x49, 0x62, 0x80, 0x18, 0x3e, - 0x75, 0x0f, 0x75, 0x00, 0x7a, 0x83, 0x01, 0x70, 0x97, 0x8e, 0xec, 0x74, 0x7f, 0x79, 0x90, 0x18, - 0x4b, 0x2c, 0x33, 0x67, 0x11, 0x09, 0x66, 0xa1, 0xeb, 0xfd, 0x9d, 0xc4, 0x30, 0xc8, 0x4d, 0x87, - 0x27, 0x10, 0x44, 0xd8, 0x8c, 0xd0, 0x9f, 0x14, 0x32, 0x5b, 0x7f, 0xa8, 0x36, 0xd2, 0x34, 0xf6, - 0x52, 0x7b, 0xa3, 0x2e, 0xc9, 0x47, 0xc3, 0x78, 0x25, 0x95, 0xc8, 0xd8, 0x6a, 0xfb, 0x2a, 0x5c, - 0x49, 0x01, 0x4a, 0x38, 0x4b, 0x7e, 0x2d, 0x83, 0x27, 0x02, 0x7d, 0xe0, 0x44, 0xa7, 0x3d, 0x95, - 0xe1, 0x92, 0x26, 0x56, 0x87, 0x61, 0x78, 0x02, 0xe1, 0xd2, 0x5a, 0xc8, 0x79, 0xa6, 0x96, 0x7c, - 0x6e, 0x90, 0x86, 0x83, 0x65, 0x96, 0xda, 0x70, 0x2a, 0x05, 0x2c, 0x65, 0x9e, 0x28, 0xab, 0xf3, - 0xc4, 0x48, 0x32, 0x20, 0xcd, 0x16, 0x6f, 0x40, 0xae, 0xd6, 0x7c, 0x62, 0x76, 0x5b, 0x68, 0xb5, - 0x3d, 0xea, 0x1e, 0xdb, 0x8d, 0x30, 0xbc, 0x5a, 0x98, 0x66, 0x42, 0x6b, 0x75, 0xec, 0xc0, 0x7f, - 0x88, 0xbf, 0x8d, 0x6d, 0x5e, 0xd5, 0x69, 0xd1, 0xd4, 0x83, 0xe0, 0x25, 0x98, 0x70, 0xa5, 0x0b, - 0xb2, 0xc5, 0x34, 0x02, 0x59, 0xbb, 0x26, 0x07, 0x33, 0xd6, 0x71, 0x31, 0xc8, 0xd0, 0xa9, 0x72, - 0x7f, 0x03, 0xc6, 0x5d, 0xa7, 0x15, 0x78, 0xca, 0xd2, 0xd1, 0x38, 0x2d, 0x6a, 0x22, 0x94, 0x51, - 0x41, 0xb7, 0xa0, 0x8c, 0x25, 0x14, 0xe1, 0x51, 0xd0, 0x70, 0x67, 0x1b, 0xcb, 0x48, 0xc8, 0xcf, - 0x2d, 0x74, 0xb6, 0xc5, 0x8a, 0xa2, 0xe7, 0x75, 0xdc, 0xcf, 0x1a, 0x84, 0xa7, 0x43, 0xbf, 0xea, - 0xcb, 0x21, 0x4d, 0x43, 0x3c, 0x17, 0xe0, 0xc7, 0x80, 0x0a, 0xf0, 0x53, 0xf5, 0x60, 0x31, 0x64, - 0xe7, 0xe0, 0xc7, 0x00, 0x67, 0x42, 0x02, 0x63, 0x2a, 0x15, 0x8d, 0x89, 0xea, 0x4e, 0x7a, 0xda, - 0x31, 0x51, 0xdd, 0x46, 0x23, 0xa2, 0xb9, 0x84, 0xbb, 0xe9, 0x2a, 0x1a, 0x6d, 0xff, 0x64, 0xcd, - 0xea, 0x58, 0x0f, 0xed, 0x96, 0xed, 0xdb, 0x34, 0x58, 0x24, 0x1a, 0x2d, 0xdc, 0x04, 0xa7, 0x43, - 0x88, 0x26, 0xab, 0x30, 0xdd, 0x90, 0xf2, 0x85, 0x42, 0xa7, 0xae, 0xb2, 0x6a, 0x5c, 0xf8, 0x43, - 0x34, 0x27, 0xa6, 0x52, 0x55, 0x1c, 0x5a, 0x06, 0xad, 0xdd, 0xa7, 0xae, 0x67, 0x3b, 0xed, 0x80, - 0x94, 0xef, 0xf2, 0x89, 0x2b, 0x51, 0x2a, 0xc8, 0x78, 0x0b, 0xa6, 0xbc, 0xe6, 0x93, 0xfa, 0x31, - 0xcf, 0x16, 0x0c, 0x38, 0x97, 0x7a, 0xda, 0x21, 0x6a, 0x82, 0x17, 0xfe, 0x26, 0x6f, 0x40, 0x2e, - 0xa8, 0x99, 0xe9, 0xef, 0x36, 0x0f, 0x6a, 0x07, 0xf0, 0xc6, 0x3f, 0xcc, 0xe2, 0x90, 0x26, 0xfa, - 0x46, 0xf6, 0x21, 0x27, 0xb4, 0x5d, 0x50, 0xf3, 0xfa, 0x50, 0x3c, 0x59, 0xda, 0xed, 0xd0, 0xb6, - 0x68, 0x4c, 0x14, 0x6e, 0x8e, 0x99, 0x01, 0xaa, 0xd2, 0xef, 0x67, 0x80, 0x24, 0x21, 0xc8, 0x3b, - 0xe2, 0xa9, 0x2d, 0x7f, 0xe9, 0xf1, 0xf6, 0xd3, 0xb6, 0xb4, 0xc4, 0x1f, 0xbb, 0xe2, 0xe5, 0xc5, - 0x9f, 0x68, 0x30, 0x8e, 0xb1, 0x61, 0xa6, 0x20, 0x77, 0xb0, 0x73, 0x6f, 0x67, 0xf7, 0xc1, 0x8e, - 0x3e, 0xc6, 0x12, 0x6b, 0x5b, 0x07, 0xb5, 0xfd, 0x8a, 0xa9, 0x6b, 0x44, 0x87, 0xe9, 0xb5, 0xad, - 0xdd, 0x83, 0xf5, 0xfa, 0x6a, 0x79, 0xed, 0xde, 0xc1, 0x9e, 0x9e, 0x21, 0x73, 0x30, 0xb5, 0x66, - 0x56, 0xd6, 0x2b, 0x3b, 0xfb, 0xd5, 0xf2, 0x56, 0x4d, 0xcf, 0x92, 0x3c, 0x8c, 0xef, 0xec, 0xae, - 0x57, 0xf4, 0x71, 0x42, 0x60, 0x76, 0x77, 0xf5, 0x73, 0x95, 0xb5, 0xfd, 0x7a, 0x6d, 0x7f, 0xd7, - 0x2c, 0xdf, 0xad, 0xe8, 0x13, 0xe4, 0x14, 0xcc, 0xd5, 0xd6, 0x36, 0x2b, 0xeb, 0x07, 0x5b, 0x95, - 0xfa, 0xde, 0xee, 0x56, 0x75, 0xed, 0x3d, 0x7d, 0x92, 0x00, 0x4c, 0xde, 0xdf, 0xdd, 0x3a, 0xd8, - 0xae, 0xe8, 0x39, 0xf6, 0xbb, 0xbc, 0x55, 0x31, 0xf7, 0x6b, 0x7a, 0x9e, 0xb5, 0xb6, 0xbd, 0x7b, - 0xb0, 0xb3, 0x5f, 0x2f, 0xef, 0xef, 0x97, 0xd7, 0x36, 0xf5, 0x02, 0x43, 0x6e, 0xee, 0x6e, 0x55, - 0x74, 0xe0, 0x94, 0x20, 0x59, 0xf5, 0xbd, 0x72, 0xd5, 0xd4, 0xa7, 0x18, 0xa1, 0xdb, 0xd5, 0xbb, - 0x66, 0x79, 0xbf, 0xa2, 0x4f, 0xaf, 0x4e, 0x72, 0xf6, 0x18, 0xff, 0x44, 0x03, 0x88, 0x44, 0x80, - 0x59, 0x97, 0x23, 0xeb, 0x7d, 0x27, 0x78, 0x6f, 0xc3, 0x13, 0x98, 0x6b, 0xb7, 0x9d, 0xe0, 0x81, - 0x0a, 0x4f, 0xb0, 0xdc, 0x8e, 0xe5, 0x37, 0x1e, 0x8b, 0x07, 0x2a, 0x3c, 0x41, 0x8a, 0x91, 0xe0, - 0x88, 0x68, 0x5e, 0x81, 0x5c, 0x6c, 0x42, 0x2e, 0x68, 0xa6, 0x08, 0xa7, 0xb7, 0x0f, 0x6a, 0xfb, - 0xf5, 0xcd, 0xf2, 0xfd, 0x4a, 0xfd, 0xf3, 0x15, 0x73, 0xb7, 0x7e, 0xbf, 0xbc, 0x75, 0x50, 0xd1, - 0xc7, 0x48, 0x01, 0x26, 0xb6, 0x59, 0x9b, 0xe2, 0x27, 0x6b, 0x48, 0x7f, 0x81, 0xfd, 0xdc, 0x63, - 0xd8, 0xf5, 0xb1, 0x52, 0x46, 0xd7, 0x8c, 0x7f, 0xad, 0x85, 0xcf, 0xd9, 0x02, 0x8c, 0x0b, 0x30, - 0xd9, 0xc4, 0x27, 0xca, 0xc1, 0xd2, 0x92, 0xa7, 0x64, 0x72, 0x32, 0x0a, 0x39, 0x64, 0x03, 0x72, - 0x4d, 0xea, 0x5b, 0x76, 0x78, 0x90, 0x7c, 0x63, 0x80, 0x84, 0x2f, 0xad, 0x73, 0x70, 0x11, 0x65, - 0x40, 0x54, 0x2e, 0xdd, 0x81, 0x69, 0xb9, 0x60, 0x24, 0x5f, 0xc8, 0x8f, 0x32, 0x30, 0x8d, 0x33, - 0xe8, 0xb6, 0x7d, 0xc8, 0xac, 0xbc, 0x51, 0x87, 0x99, 0xdd, 0x0e, 0x33, 0xf8, 0xb6, 0xd3, 0x46, - 0x51, 0x9b, 0x83, 0xa9, 0x6a, 0xfb, 0xd8, 0x6a, 0xd9, 0x4d, 0x96, 0xd4, 0xc7, 0x98, 0xd0, 0x08, - 0x60, 0x71, 0x5e, 0xa5, 0x6b, 0x64, 0x1e, 0x66, 0x44, 0x1e, 0x5f, 0x92, 0xea, 0x19, 0xb2, 0x00, - 0x44, 0xc9, 0xc2, 0x77, 0xb5, 0x7a, 0xd6, 0xd8, 0xc1, 0x20, 0x7c, 0x87, 0x94, 0xc9, 0x87, 0x40, - 0x8c, 0x69, 0x7d, 0x8c, 0x49, 0x16, 0x9f, 0xc8, 0x75, 0x8d, 0xc9, 0x8a, 0xf0, 0xa2, 0xea, 0x19, - 0x06, 0x2a, 0xdf, 0x55, 0xe1, 0x32, 0xbc, 0xee, 0xb4, 0xa9, 0x3e, 0x6e, 0x74, 0x60, 0x52, 0x78, - 0x54, 0xe6, 0x61, 0x26, 0x42, 0xe8, 0x77, 0x3d, 0x8e, 0xf1, 0x9d, 0x2e, 0xed, 0xd2, 0xa6, 0xae, - 0xf1, 0x8e, 0xd8, 0x6c, 0x2d, 0x6c, 0x7f, 0x99, 0x36, 0xf5, 0x0c, 0x99, 0x05, 0xa8, 0xb6, 0x83, - 0x80, 0x7a, 0x7a, 0x96, 0x01, 0x6f, 0x58, 0x76, 0x8b, 0x36, 0xf5, 0x71, 0x32, 0x0d, 0xf9, 0x35, - 0xe1, 0x72, 0xd0, 0x27, 0x30, 0x65, 0xb5, 0x1b, 0x94, 0x95, 0x4d, 0x1a, 0xff, 0x5c, 0x83, 0xa2, - 0xcc, 0xb3, 0x9a, 0x6f, 0xb9, 0xe1, 0x74, 0x57, 0x85, 0x82, 0x13, 0xf0, 0x4f, 0xa8, 0x7e, 0x72, - 0xd9, 0x22, 0xd7, 0x5e, 0x52, 0xd8, 0x6d, 0x46, 0xb5, 0x07, 0x79, 0x1e, 0xcf, 0x41, 0xc1, 0xb7, - 0xdc, 0x43, 0xea, 0x47, 0x9b, 0xff, 0x3c, 0xcf, 0x50, 0xbd, 0xc8, 0xca, 0xb1, 0x81, 0xf1, 0x3f, - 0xb3, 0x91, 0x0f, 0x22, 0x8d, 0x7e, 0xb5, 0x51, 0x2d, 0xde, 0x68, 0x2f, 0xef, 0x34, 0x39, 0x08, - 0xef, 0x85, 0x89, 0x0b, 0xe7, 0x77, 0x7a, 0x2e, 0xd6, 0x52, 0x9a, 0x5d, 0x52, 0x44, 0x65, 0x73, - 0x2c, 0xbc, 0x3d, 0x46, 0x41, 0x44, 0x6d, 0xaf, 0xf3, 0x10, 0xb0, 0xe2, 0xda, 0xf9, 0x67, 0x9f, - 0x1e, 0x39, 0x0f, 0x65, 0x3c, 0x66, 0x4e, 0x1d, 0x47, 0x49, 0xf2, 0x10, 0xa6, 0xac, 0x56, 0x4b, - 0xec, 0xb1, 0xbc, 0xe0, 0x02, 0xfa, 0x67, 0x9e, 0xa6, 0x95, 0x72, 0xab, 0xc5, 0x1b, 0xf2, 0x36, - 0xc7, 0x4c, 0xb0, 0xc2, 0x54, 0xe9, 0x46, 0x4c, 0x47, 0xfa, 0xba, 0x7b, 0x4a, 0xcb, 0x69, 0xea, - 0x43, 0xce, 0x42, 0x9e, 0xc7, 0x19, 0x0e, 0x6b, 0xe4, 0x30, 0x5d, 0x6d, 0x96, 0x4e, 0xc1, 0x7c, - 0x82, 0x82, 0x20, 0x54, 0xdb, 0xab, 0x70, 0x36, 0x85, 0xec, 0x41, 0x67, 0x33, 0x0f, 0x23, 0x37, - 0x40, 0x6a, 0xc5, 0x55, 0x98, 0x74, 0xa9, 0xd7, 0x6d, 0xf9, 0xc5, 0x5e, 0xcf, 0xa0, 0x7a, 0xd6, - 0x35, 0x45, 0xcd, 0x38, 0x65, 0x5c, 0xcb, 0x06, 0x6d, 0xd7, 0x8d, 0x66, 0x82, 0x32, 0xb5, 0xe2, - 0x3a, 0xe4, 0xc4, 0x46, 0x7c, 0x28, 0xd2, 0x94, 0xca, 0x66, 0x50, 0x35, 0xb8, 0x83, 0x9f, 0x02, - 0x28, 0x56, 0x8e, 0xff, 0x74, 0x02, 0x74, 0xb9, 0x18, 0xb7, 0xeb, 0x3d, 0x7d, 0x0c, 0x03, 0xd4, - 0xf9, 0x45, 0x98, 0x43, 0x97, 0x9e, 0xb4, 0xd1, 0x17, 0x6e, 0x7c, 0xcc, 0x0e, 0xb7, 0xfa, 0x8b, - 0x30, 0xaf, 0xc0, 0xe1, 0x42, 0x97, 0xeb, 0xf8, 0x9c, 0x04, 0x89, 0x2e, 0xff, 0xeb, 0xa0, 0xbb, - 0xf4, 0xc8, 0xf1, 0xe5, 0x63, 0x27, 0x7e, 0x74, 0x35, 0xcb, 0xf3, 0xef, 0x4b, 0xf7, 0xf7, 0x70, - 0x93, 0x16, 0x79, 0xcd, 0x78, 0x3c, 0x8f, 0x19, 0x29, 0x17, 0x5d, 0x08, 0x33, 0x41, 0x50, 0x29, - 0x8f, 0x19, 0x6d, 0xf1, 0xb0, 0xff, 0x4a, 0x7f, 0x0b, 0x87, 0xf6, 0xdd, 0x9c, 0x16, 0x35, 0xb9, - 0xf5, 0x7f, 0x2b, 0x74, 0x53, 0xe5, 0x11, 0xc5, 0x0b, 0x03, 0x51, 0xc8, 0x4f, 0xc1, 0xdf, 0x84, - 0x29, 0x8c, 0x8a, 0xdc, 0xc5, 0xf9, 0x60, 0x88, 0xb8, 0xc8, 0xc0, 0xc0, 0x45, 0xbc, 0xfa, 0xcb, - 0x30, 0x8d, 0x21, 0x1a, 0xea, 0x2e, 0xb5, 0x3c, 0xa7, 0x2d, 0x7c, 0xbd, 0x53, 0x98, 0x67, 0x62, - 0x56, 0xcc, 0xbd, 0x3d, 0xf5, 0xc9, 0xdc, 0xdb, 0xd3, 0xa3, 0xba, 0xb7, 0x63, 0x8e, 0xe6, 0x99, - 0x84, 0xa3, 0x59, 0x75, 0xce, 0xcf, 0xc6, 0x9d, 0xf3, 0x31, 0x3f, 0xf4, 0x5c, 0xc2, 0x0f, 0xbd, - 0x0d, 0xa7, 0xe3, 0x72, 0xcb, 0xb6, 0xe1, 0xe4, 0x36, 0x8c, 0x4b, 0x1e, 0x80, 0xcb, 0x7d, 0x87, - 0x04, 0x37, 0xd9, 0x08, 0x9e, 0xa2, 0x8e, 0xaa, 0x5f, 0x7b, 0x44, 0x75, 0x54, 0x2a, 0x47, 0xea, - 0x58, 0x4b, 0x18, 0x31, 0xa9, 0x89, 0xa7, 0xd4, 0x3a, 0xe3, 0x8f, 0x34, 0x28, 0xa5, 0x61, 0x0d, - 0x77, 0x52, 0xe3, 0xc2, 0x07, 0x95, 0x7e, 0x4d, 0xb9, 0x77, 0xd5, 0xa5, 0x28, 0xb2, 0x33, 0xa2, - 0x28, 0xfd, 0x12, 0x14, 0xfa, 0x85, 0x2d, 0x1e, 0xe8, 0x12, 0x4f, 0x1b, 0x30, 0x79, 0x25, 0xd7, - 0x4c, 0x58, 0xab, 0x58, 0x5f, 0xd6, 0x62, 0xe6, 0xfa, 0xe5, 0x11, 0x7a, 0x13, 0xda, 0xeb, 0x9f, - 0xe0, 0xda, 0x07, 0xb9, 0xb7, 0x67, 0xd9, 0xae, 0xea, 0xc5, 0xc0, 0x63, 0x6e, 0x34, 0x37, 0x21, - 0xcb, 0x3b, 0xd1, 0x31, 0x37, 0x2b, 0x08, 0x6e, 0x4a, 0x75, 0xf8, 0xd1, 0xbd, 0x02, 0x8b, 0xb1, - 0xe7, 0x32, 0xf8, 0x8d, 0x8e, 0x79, 0x05, 0x1a, 0x43, 0xd0, 0xdd, 0x82, 0xd3, 0x31, 0x78, 0xdf, - 0x79, 0x42, 0xdb, 0xc2, 0x46, 0x12, 0xa5, 0xc2, 0x3e, 0x2b, 0xe1, 0xef, 0xa0, 0xfc, 0x7a, 0x93, - 0x3e, 0xb2, 0x58, 0xa7, 0xf9, 0xe1, 0x2b, 0x78, 0xd4, 0x5f, 0xe7, 0x39, 0xc6, 0x87, 0x4c, 0xa0, - 0x12, 0x5d, 0x91, 0x8f, 0xec, 0xd5, 0xbe, 0x34, 0xd3, 0xfb, 0xd2, 0x4c, 0xe9, 0x8b, 0x7a, 0x0d, - 0x41, 0x82, 0xc6, 0x27, 0x90, 0x0f, 0xc5, 0x12, 0xac, 0x07, 0x1b, 0xd7, 0xe2, 0xea, 0xf2, 0x52, - 0xca, 0x48, 0xa5, 0xd7, 0x8d, 0xb4, 0x25, 0x98, 0xbc, 0x7b, 0xf5, 0x6f, 0x98, 0xc9, 0xbb, 0x47, - 0xdd, 0x50, 0x18, 0x4e, 0x14, 0x06, 0xee, 0xb9, 0x4e, 0x83, 0x7a, 0x9e, 0x24, 0x0c, 0x22, 0xa6, - 0x67, 0x92, 0x81, 0xbc, 0x20, 0x62, 0x60, 0xaf, 0xc1, 0xcd, 0xf4, 0x1a, 0x5c, 0xe3, 0xc7, 0x19, - 0xa6, 0xb7, 0xc9, 0xb6, 0x7f, 0xfe, 0xa3, 0x47, 0x5e, 0x87, 0x62, 0x0c, 0x3e, 0x8a, 0xc2, 0xc8, - 0x23, 0x19, 0x2d, 0x28, 0x95, 0x2a, 0x61, 0x48, 0x46, 0x33, 0x1e, 0x58, 0xee, 0xf5, 0x7e, 0x4c, - 0x8f, 0xf5, 0xe9, 0xe7, 0x10, 0x62, 0xee, 0xad, 0xb8, 0x1c, 0xaa, 0x5e, 0xb4, 0xfe, 0x5b, 0x81, - 0xf0, 0x62, 0x48, 0xa2, 0xb6, 0x58, 0x1d, 0x7d, 0x0a, 0xce, 0x49, 0x85, 0x38, 0x6c, 0x77, 0xa5, - 0x48, 0x76, 0xa7, 0x61, 0x82, 0x0f, 0xb2, 0x88, 0xd2, 0x85, 0x89, 0x70, 0xcd, 0x15, 0xd6, 0xbb, - 0x4b, 0x7d, 0xac, 0x1a, 0xf8, 0x9c, 0x1e, 0x89, 0xeb, 0x26, 0x29, 0x00, 0x02, 0xf1, 0x7a, 0x4c, - 0xb2, 0x6f, 0xf4, 0x63, 0x72, 0x9c, 0xac, 0x50, 0xb6, 0x95, 0xcb, 0x9f, 0x0c, 0xd2, 0xa4, 0x5e, - 0x8c, 0x94, 0xc7, 0xf2, 0xe5, 0xcf, 0x38, 0xc8, 0x33, 0x25, 0xe6, 0x47, 0x99, 0x30, 0xca, 0x19, - 0x83, 0x4b, 0xbd, 0x2a, 0x92, 0x76, 0x53, 0xbd, 0xdf, 0x0b, 0xf0, 0x97, 0x61, 0x3e, 0x1e, 0x1f, - 0x94, 0x8b, 0x65, 0xc1, 0xd4, 0x63, 0x01, 0x42, 0xf9, 0xc7, 0xb2, 0xf0, 0x7b, 0x08, 0xe2, 0x44, - 0x47, 0xa4, 0xa2, 0x41, 0x9c, 0x94, 0x06, 0x91, 0xdc, 0x8d, 0xe4, 0x3c, 0xd7, 0xe3, 0x43, 0x5d, - 0xb1, 0xde, 0xfc, 0x1c, 0x84, 0x7b, 0x29, 0x2e, 0x9e, 0x31, 0xbf, 0x74, 0xfc, 0x0b, 0x70, 0x0f, - 0x60, 0x41, 0x95, 0x2a, 0xe9, 0x06, 0x48, 0xa1, 0x63, 0xd9, 0xae, 0x7c, 0x1a, 0x75, 0x69, 0x50, - 0x87, 0xcc, 0x7c, 0x47, 0xfc, 0x32, 0xbe, 0x14, 0x17, 0xe9, 0xb8, 0xcf, 0xfb, 0xb3, 0x31, 0x19, - 0xb9, 0xd6, 0x0f, 0x79, 0x9a, 0x78, 0x5c, 0x8a, 0xeb, 0x44, 0xc2, 0x9f, 0xff, 0x3f, 0x34, 0xb8, - 0x20, 0x95, 0x7b, 0xa9, 0x4f, 0x4c, 0xc4, 0x4c, 0x29, 0x29, 0xbb, 0xc8, 0xa9, 0x36, 0xc9, 0x2e, - 0x4c, 0xb0, 0x0e, 0x05, 0x07, 0x1d, 0x6f, 0xf4, 0x23, 0x31, 0x89, 0x7d, 0x49, 0x64, 0x63, 0xac, - 0x2e, 0xc4, 0x53, 0xfa, 0x3c, 0x40, 0x94, 0xf9, 0x34, 0xa1, 0xaa, 0xe2, 0x0c, 0x97, 0x86, 0xde, - 0x8e, 0xeb, 0x6e, 0xb2, 0xbb, 0x1b, 0x31, 0x9e, 0x2f, 0x8d, 0xd6, 0xa1, 0x90, 0xf5, 0x7f, 0xaa, - 0x41, 0x4e, 0xdc, 0x0c, 0x48, 0x3d, 0x20, 0x4a, 0x8b, 0xff, 0x98, 0x16, 0x83, 0x31, 0xf8, 0x18, - 0xe0, 0xb8, 0xf4, 0x31, 0xc0, 0xcf, 0xc0, 0xf4, 0x96, 0xe5, 0xf9, 0xdb, 0x4e, 0xd3, 0x7e, 0x64, - 0xd3, 0xe6, 0x10, 0xb7, 0x6c, 0x14, 0x78, 0xf2, 0x2a, 0xe4, 0x1b, 0x8f, 0xed, 0x56, 0xd3, 0x45, - 0xfd, 0x4c, 0x3f, 0x9f, 0x0a, 0x6e, 0x35, 0x84, 0x90, 0xc6, 0x2f, 0xc0, 0xa4, 0x49, 0xd9, 0x5a, - 0x8c, 0x5c, 0x82, 0xa9, 0xa6, 0xed, 0xd2, 0x86, 0xef, 0x60, 0xb4, 0x68, 0xf1, 0x35, 0x07, 0x29, - 0x0b, 0x6f, 0x0c, 0xda, 0xad, 0xf0, 0x3b, 0x0e, 0x3c, 0x61, 0x74, 0x60, 0x2e, 0x7e, 0x59, 0x02, - 0x0f, 0x41, 0x1c, 0xbf, 0xe7, 0x21, 0x48, 0x00, 0x8f, 0x50, 0x64, 0x99, 0x0d, 0x4e, 0xb8, 0x1c, - 0x4c, 0x7b, 0x63, 0xc8, 0x29, 0x34, 0x05, 0x98, 0xf1, 0xd7, 0x32, 0x30, 0x8b, 0xf1, 0x44, 0xa9, - 0xbc, 0xda, 0xc5, 0x97, 0xb9, 0xc1, 0xe9, 0x47, 0x72, 0xb5, 0xab, 0x56, 0x58, 0xc2, 0x17, 0xd9, - 0xc1, 0x8d, 0x58, 0x5e, 0x95, 0x6c, 0x41, 0xa1, 0xe9, 0x34, 0x9e, 0x50, 0xd7, 0x6e, 0x06, 0x92, - 0xbf, 0x34, 0x08, 0xcf, 0x7a, 0x50, 0x41, 0xc4, 0x09, 0x0c, 0x11, 0x94, 0xde, 0x80, 0x29, 0xa9, - 0x91, 0x51, 0x8c, 0x59, 0xe9, 0x2d, 0x98, 0x55, 0xf1, 0x8e, 0x64, 0x0a, 0x0f, 0xe0, 0x4c, 0x8f, - 0x8f, 0xc4, 0x91, 0x3b, 0xc1, 0x01, 0x26, 0xe7, 0xd2, 0x0b, 0x83, 0xbe, 0x2e, 0x27, 0x1f, 0x66, - 0xfe, 0xb3, 0x6c, 0x10, 0xfd, 0x59, 0x29, 0xc6, 0x6f, 0x20, 0x3e, 0x7a, 0x44, 0x1b, 0x6c, 0x03, - 0x2c, 0xbe, 0x4a, 0xe3, 0x09, 0x77, 0xbe, 0x1e, 0x14, 0x88, 0x2f, 0xd7, 0xf0, 0x8f, 0xa7, 0x50, - 0xfb, 0xf0, 0x71, 0xf0, 0xc5, 0x05, 0x91, 0x22, 0xf7, 0x61, 0x4a, 0x7c, 0x4e, 0x90, 0xe1, 0x15, - 0x77, 0x59, 0x5e, 0x1d, 0x86, 0xbc, 0xa5, 0x4a, 0x54, 0x0f, 0x5d, 0xaa, 0x32, 0x22, 0xb6, 0xa3, - 0x43, 0xe5, 0x1b, 0x47, 0x84, 0xb7, 0x87, 0x42, 0x58, 0x7e, 0xf4, 0xc8, 0x6e, 0xdb, 0xfe, 0x09, - 0x4b, 0x44, 0xa7, 0x31, 0xe4, 0x3e, 0xcc, 0x1f, 0x59, 0x7e, 0xe3, 0x71, 0x9d, 0x7e, 0x84, 0xdf, - 0x30, 0xc4, 0x09, 0x8f, 0xdf, 0x8f, 0x4c, 0xae, 0xd8, 0xf1, 0x66, 0x75, 0x8d, 0xb6, 0x50, 0x77, - 0xc4, 0x17, 0x6d, 0xb0, 0x01, 0x1d, 0x71, 0x54, 0x22, 0x14, 0xc6, 0x12, 0xcc, 0xc5, 0xba, 0x40, - 0xa6, 0x21, 0x1f, 0x7c, 0x1d, 0x47, 0x1f, 0x23, 0x33, 0x50, 0xe8, 0xb8, 0xf4, 0x11, 0x75, 0x59, - 0x52, 0x33, 0x56, 0x40, 0x8f, 0x53, 0xc8, 0x2a, 0x58, 0x22, 0x4f, 0x1f, 0x23, 0x3a, 0x4c, 0x5b, - 0x6d, 0xdf, 0x0e, 0xa0, 0x74, 0xcd, 0xf8, 0x73, 0x0d, 0x8a, 0xbd, 0x48, 0x4a, 0x91, 0xad, 0x1d, - 0xc8, 0x73, 0xbf, 0xb4, 0x38, 0x82, 0x99, 0x4d, 0x09, 0x4b, 0xd5, 0x0b, 0x9d, 0x70, 0x70, 0x3b, - 0xae, 0x19, 0xe2, 0x60, 0xa3, 0x8e, 0xe2, 0x19, 0xac, 0x98, 0x45, 0xca, 0xb8, 0x07, 0xf9, 0x00, - 0x9a, 0x4c, 0x42, 0xa6, 0xda, 0xe6, 0xa7, 0x30, 0x3b, 0x8e, 0x5f, 0x6d, 0xeb, 0x1a, 0x01, 0x98, - 0xac, 0x7c, 0x64, 0x7b, 0xbe, 0xc7, 0xcf, 0x04, 0xd6, 0x1d, 0xea, 0xed, 0x38, 0x3e, 0x66, 0xe9, - 0x59, 0x56, 0xe1, 0xae, 0xaf, 0x8f, 0xb3, 0xff, 0x5b, 0xbe, 0x3e, 0xb1, 0xf8, 0x17, 0x99, 0xf0, - 0x68, 0x60, 0x0e, 0xa6, 0x6a, 0xfb, 0xe5, 0xfd, 0x83, 0x5a, 0x7d, 0x67, 0x77, 0xa7, 0xa2, 0x8f, - 0x49, 0x19, 0xd5, 0x9d, 0xea, 0xbe, 0xae, 0x31, 0x9e, 0x8a, 0x8c, 0xdd, 0x7b, 0x7a, 0x86, 0x10, - 0x98, 0x0d, 0x92, 0x1b, 0x1b, 0x5b, 0xd5, 0x9d, 0x8a, 0x9e, 0x65, 0x2d, 0x8a, 0xbc, 0x8a, 0x69, - 0xee, 0x9a, 0xfa, 0x38, 0x29, 0xc2, 0xe9, 0x10, 0xed, 0x7e, 0xbd, 0xba, 0x53, 0x7f, 0xe7, 0x60, - 0xd7, 0x3c, 0xd8, 0xd6, 0x27, 0xc8, 0x19, 0x38, 0x25, 0x4a, 0xd6, 0x2b, 0x6b, 0xbb, 0xdb, 0xdb, - 0xd5, 0x5a, 0xad, 0xba, 0xbb, 0xa3, 0x4f, 0x92, 0x05, 0x20, 0xa2, 0x60, 0xbb, 0x5c, 0xdd, 0xd9, - 0xaf, 0xec, 0x94, 0x77, 0xd6, 0x2a, 0x7a, 0x4e, 0xaa, 0x20, 0x8e, 0xe2, 0xea, 0xeb, 0xbb, 0x0f, - 0x76, 0xf4, 0x3c, 0x39, 0x07, 0x67, 0xe2, 0x05, 0x95, 0xbb, 0x66, 0x79, 0xbd, 0xb2, 0xae, 0x17, - 0xa4, 0x5a, 0x3b, 0x95, 0xca, 0x7a, 0xad, 0x6e, 0x56, 0x56, 0x77, 0x77, 0xf7, 0x75, 0x20, 0xe7, - 0xa1, 0x18, 0xab, 0x65, 0x56, 0x56, 0xcb, 0x5b, 0xd8, 0xd8, 0x14, 0xb9, 0x04, 0xe7, 0xe3, 0x38, - 0xcd, 0xea, 0x7d, 0x06, 0xb3, 0xb7, 0x55, 0x5e, 0xab, 0xe8, 0xd3, 0xe4, 0x0a, 0x5c, 0x4c, 0xeb, - 0x59, 0x7d, 0x67, 0x37, 0x3c, 0x2a, 0x9c, 0x21, 0xb3, 0x00, 0x61, 0x5f, 0xde, 0xd5, 0x67, 0x17, - 0xbf, 0xaf, 0x01, 0xf0, 0x30, 0xbd, 0x28, 0x83, 0xa7, 0x41, 0x47, 0xb4, 0x66, 0x7d, 0xff, 0xbd, - 0xbd, 0x4a, 0xc0, 0xf9, 0x58, 0xee, 0x46, 0x75, 0xab, 0xa2, 0x6b, 0xe4, 0x39, 0x98, 0x97, 0x73, - 0x57, 0xb7, 0x76, 0xd7, 0xee, 0xf1, 0x43, 0x24, 0x39, 0x9b, 0x1f, 0x56, 0xea, 0x59, 0x72, 0x16, - 0x9e, 0x93, 0xf3, 0xc5, 0x39, 0x63, 0x65, 0x5d, 0x1f, 0x8f, 0x63, 0xba, 0x6b, 0x96, 0xf7, 0x36, - 0xf5, 0x89, 0xc5, 0xbf, 0xaf, 0xc1, 0x24, 0xff, 0xe0, 0x19, 0x1b, 0xc7, 0x8d, 0x9a, 0x42, 0xd3, - 0x3c, 0xcc, 0x04, 0x39, 0xab, 0xfb, 0xe6, 0x46, 0x8d, 0x9f, 0xa3, 0x06, 0x59, 0x95, 0x77, 0xf7, - 0x5f, 0xe5, 0x02, 0x17, 0xe4, 0x6c, 0x1c, 0xd4, 0x98, 0x40, 0xcc, 0xc1, 0x54, 0x88, 0x68, 0xa3, - 0xa6, 0x8f, 0xcb, 0x19, 0xf7, 0x37, 0x6a, 0xfa, 0x84, 0x9c, 0xf1, 0xee, 0x46, 0x4d, 0x9f, 0x94, - 0x33, 0x3e, 0xbf, 0x51, 0xd3, 0x73, 0x72, 0xd3, 0xef, 0x6e, 0xd4, 0x8e, 0x57, 0xf4, 0xfc, 0xe2, - 0xef, 0x69, 0xf0, 0x5c, 0x6a, 0xc8, 0x63, 0x72, 0x19, 0x2e, 0x60, 0x7f, 0xea, 0xa2, 0x87, 0x6b, - 0x9b, 0xe5, 0x9d, 0xbb, 0x15, 0xa5, 0x2b, 0x57, 0xe1, 0x72, 0x4f, 0x90, 0xed, 0xdd, 0xf5, 0xea, - 0x46, 0xb5, 0xb2, 0xae, 0x6b, 0xc4, 0x80, 0xe7, 0x7b, 0x82, 0x95, 0xd7, 0x99, 0x70, 0x65, 0xc8, - 0x0b, 0x70, 0xa9, 0x27, 0xcc, 0x7a, 0x65, 0xab, 0xb2, 0x5f, 0x59, 0xd7, 0xb3, 0x8b, 0x3e, 0x4c, - 0x2b, 0xdf, 0xb1, 0x61, 0x02, 0x5e, 0xb9, 0x5f, 0x31, 0xab, 0xfb, 0xef, 0x29, 0x84, 0x31, 0x51, - 0x55, 0xf2, 0xcb, 0x5b, 0x65, 0x73, 0x5b, 0xd7, 0xd8, 0x58, 0xaa, 0x05, 0x0f, 0xca, 0xe6, 0x4e, - 0x75, 0xe7, 0xae, 0x9e, 0x41, 0xfd, 0x8a, 0xe1, 0xda, 0xaf, 0x6e, 0xbc, 0xa7, 0x67, 0x17, 0xbf, - 0xa9, 0xc1, 0xb4, 0xfc, 0xd1, 0x12, 0xd6, 0xac, 0x59, 0xa9, 0xed, 0x1e, 0x98, 0x6b, 0x2a, 0x3f, - 0x8a, 0x70, 0x5a, 0xcd, 0x17, 0xe7, 0xd8, 0x5a, 0x5a, 0x8d, 0xf5, 0x8a, 0x9e, 0x61, 0xf4, 0xa8, - 0xf9, 0xc1, 0xe1, 0x7a, 0x96, 0xf5, 0x41, 0x2d, 0x42, 0xce, 0xe8, 0xe3, 0x8b, 0xbf, 0xaa, 0xc1, - 0x1c, 0x7e, 0x68, 0x82, 0x87, 0x92, 0x47, 0x8a, 0x4a, 0xb0, 0x80, 0xe7, 0xe4, 0xf5, 0xf2, 0xda, - 0x7e, 0x75, 0x77, 0x47, 0xa1, 0xea, 0x3c, 0x14, 0x93, 0x65, 0x9c, 0xa7, 0xba, 0x96, 0x5e, 0xba, - 0x66, 0x56, 0xca, 0xfb, 0x8c, 0xbe, 0xd4, 0xd2, 0x83, 0xbd, 0x75, 0x56, 0x9a, 0x5d, 0x7c, 0x3f, - 0x88, 0x1a, 0x2f, 0x05, 0xf5, 0x67, 0x55, 0x78, 0xb7, 0x83, 0x3a, 0x7b, 0x65, 0xb3, 0xbc, 0x1d, - 0x10, 0x73, 0x0e, 0xce, 0xa4, 0x95, 0xee, 0x6e, 0x6c, 0xe8, 0x1a, 0xeb, 0x45, 0x6a, 0xe1, 0x8e, - 0x9e, 0x59, 0x5c, 0x81, 0x9c, 0xf8, 0x52, 0x2b, 0xbf, 0x53, 0x80, 0xd8, 0x72, 0x90, 0xdd, 0xda, - 0x7d, 0xc0, 0x8d, 0xf5, 0x76, 0x65, 0xbd, 0x7a, 0xb0, 0xad, 0x67, 0x58, 0xf1, 0x66, 0xf5, 0xee, - 0xa6, 0x9e, 0x5d, 0xfc, 0x1a, 0x14, 0xc2, 0x0f, 0xb5, 0x32, 0x56, 0x57, 0x77, 0xeb, 0x7b, 0xe6, - 0x2e, 0xb3, 0x02, 0xf5, 0x5a, 0xe5, 0x9d, 0x03, 0x7e, 0x4b, 0x41, 0x1f, 0x63, 0x6a, 0x2c, 0x15, - 0x99, 0xe5, 0x9d, 0xf5, 0xdd, 0x6d, 0x7e, 0xd0, 0x2c, 0x65, 0xaf, 0xaf, 0x72, 0x21, 0x51, 0xb2, - 0xea, 0x66, 0x65, 0x7b, 0x97, 0xf1, 0x82, 0x19, 0x71, 0xa9, 0x64, 0x6d, 0xbb, 0xa6, 0x8f, 0x2f, - 0x7e, 0x3f, 0x03, 0x53, 0x52, 0xe8, 0x7f, 0xd6, 0x8e, 0xe8, 0x1f, 0x33, 0x65, 0xb2, 0xd8, 0x28, - 0xd9, 0x7b, 0x95, 0x9d, 0x75, 0x26, 0x93, 0x32, 0x43, 0x78, 0x49, 0xf9, 0x7e, 0xb9, 0xba, 0x55, - 0x5e, 0xdd, 0x12, 0xa2, 0xa3, 0x96, 0xe1, 0xad, 0x08, 0xa6, 0x26, 0x89, 0xa2, 0xf5, 0x8a, 0x28, - 0x1a, 0x97, 0xf8, 0x1f, 0x15, 0xed, 0xaf, 0x6d, 0xb2, 0xe6, 0x26, 0x98, 0x94, 0x2a, 0x85, 0x7c, - 0xea, 0x99, 0x4c, 0x10, 0x18, 0x28, 0x64, 0x8e, 0x3c, 0x0f, 0x25, 0xa5, 0x64, 0xdf, 0x7c, 0x4f, - 0xb4, 0xc6, 0x30, 0xe6, 0x13, 0x35, 0xcd, 0x0a, 0xb3, 0xe8, 0x15, 0xbd, 0xb0, 0xf8, 0x2d, 0x2d, - 0x38, 0x67, 0xaf, 0x05, 0xdf, 0x2d, 0x91, 0x1b, 0x8f, 0x66, 0xcf, 0x0b, 0x70, 0x36, 0x9e, 0xbf, - 0x5f, 0xdf, 0x33, 0x2b, 0xb5, 0xca, 0x0e, 0x9b, 0x4b, 0x4f, 0x83, 0xae, 0x16, 0xe3, 0x3d, 0x94, - 0x04, 0x32, 0x9c, 0xe0, 0xb2, 0x31, 0x86, 0xe2, 0x8c, 0x29, 0xe6, 0xb7, 0xf1, 0xc5, 0x2f, 0xc2, - 0x8c, 0xf2, 0x25, 0x7e, 0x3e, 0x1b, 0xf2, 0x29, 0x8b, 0x0b, 0x57, 0x7d, 0xbb, 0x7c, 0x77, 0xa7, - 0xb2, 0x5f, 0x5d, 0xd3, 0xc7, 0xf8, 0xdc, 0xaa, 0x14, 0xd6, 0x6a, 0xcc, 0xd8, 0xe1, 0x2c, 0xa9, - 0xe4, 0xef, 0xdc, 0xdf, 0xae, 0xe8, 0x99, 0xc5, 0xeb, 0x30, 0x13, 0x78, 0xf6, 0x1c, 0xdf, 0x7e, - 0x74, 0xc2, 0x20, 0x83, 0x3b, 0x2b, 0xdc, 0xd4, 0x70, 0x22, 0xc7, 0x16, 0x29, 0x4c, 0x49, 0x5f, - 0x9a, 0x64, 0xa3, 0xc9, 0xc7, 0x36, 0x18, 0x95, 0x77, 0xf7, 0x2b, 0xe6, 0x0e, 0x0a, 0x6e, 0xbc, - 0x88, 0x4d, 0xf2, 0x58, 0xa4, 0xb1, 0x69, 0x37, 0xb5, 0xa8, 0x5e, 0x7b, 0x50, 0xdd, 0x5f, 0xdb, - 0xd4, 0x33, 0x8b, 0xfb, 0x30, 0x1b, 0x5e, 0x07, 0xd8, 0x68, 0x59, 0x87, 0x6c, 0x8b, 0xa5, 0xef, - 0xee, 0xd5, 0x37, 0xb6, 0xca, 0x77, 0x6b, 0xf5, 0xe8, 0xca, 0xcf, 0x3c, 0xcc, 0x84, 0xb9, 0x38, - 0x26, 0x68, 0x46, 0xc3, 0x2c, 0x3e, 0xdc, 0xf5, 0x8d, 0x5d, 0x73, 0x8d, 0x75, 0xf3, 0x4f, 0x34, - 0xfc, 0x50, 0x94, 0x14, 0x57, 0x16, 0x2d, 0xab, 0x92, 0x53, 0xeb, 0xb6, 0x9b, 0xd6, 0x09, 0x97, - 0x7c, 0xb5, 0x64, 0xdb, 0xc1, 0x12, 0x6e, 0xa8, 0x95, 0x92, 0xfd, 0x2e, 0xf5, 0x58, 0x51, 0x06, - 0x87, 0x45, 0x29, 0x7a, 0x40, 0x9b, 0x6d, 0x5e, 0x88, 0x03, 0x1c, 0xab, 0xf7, 0xb8, 0xeb, 0x62, - 0xd9, 0x78, 0xb2, 0xb5, 0x0d, 0xd7, 0x66, 0x25, 0x13, 0xc9, 0x5a, 0x35, 0xcb, 0xef, 0xba, 0xac, - 0x6c, 0x72, 0xf1, 0xab, 0xf1, 0x37, 0x35, 0xfc, 0xfd, 0x0b, 0xb9, 0x18, 0x7f, 0x5f, 0xc1, 0xf3, - 0x0f, 0xda, 0x4f, 0xda, 0xce, 0x87, 0x6c, 0x2d, 0x79, 0x29, 0x7e, 0xb3, 0x9d, 0x03, 0x04, 0xbf, - 0x75, 0x8d, 0x4d, 0xb1, 0xa9, 0x4f, 0x6b, 0xf8, 0x5d, 0x94, 0xdd, 0x8e, 0x9e, 0x59, 0xfc, 0xc3, - 0x0c, 0xde, 0x8e, 0x4c, 0xbd, 0x43, 0x8f, 0x0b, 0xa7, 0x1e, 0x65, 0x11, 0x19, 0x2f, 0x62, 0x98, - 0x82, 0x54, 0xa0, 0x1d, 0xc7, 0xc7, 0x93, 0x72, 0xbc, 0xb2, 0x72, 0x29, 0xfd, 0x0d, 0x07, 0x83, - 0xc3, 0xdb, 0x2f, 0x99, 0x7e, 0xcd, 0x95, 0x1f, 0xe2, 0xf7, 0xca, 0xf5, 0x2c, 0x9b, 0xec, 0x7b, - 0x01, 0xed, 0x59, 0x5d, 0x0f, 0x2f, 0xbc, 0xf4, 0x41, 0x54, 0xf3, 0x9d, 0x4e, 0x87, 0x36, 0xf5, - 0x89, 0x7e, 0x88, 0xf8, 0x77, 0x05, 0xf4, 0xc9, 0x7e, 0x30, 0xe2, 0x76, 0x4d, 0x6e, 0xf1, 0x0f, - 0x52, 0x5e, 0x7d, 0xca, 0xf7, 0xe6, 0xc9, 0xb5, 0xf8, 0x35, 0x67, 0xb5, 0x3c, 0xe2, 0xe4, 0xd5, - 0xf8, 0xa5, 0x69, 0x15, 0x10, 0xbb, 0xa7, 0x6b, 0x49, 0x86, 0xc7, 0xee, 0xed, 0x53, 0x8f, 0x5f, - 0x5a, 0x7a, 0x21, 0x7e, 0xab, 0x5b, 0x85, 0x63, 0x9c, 0xd0, 0xb3, 0x2b, 0xff, 0x38, 0x03, 0xf3, - 0xd2, 0x45, 0x3d, 0xf1, 0x25, 0xaa, 0xbf, 0xab, 0xc1, 0xe9, 0xb4, 0x97, 0x64, 0xe4, 0x76, 0xef, - 0x0f, 0x6c, 0xf5, 0x79, 0x9c, 0x58, 0x7a, 0x6d, 0xd4, 0x6a, 0xc2, 0xef, 0x7e, 0xe1, 0x1b, 0x7f, - 0xf6, 0xd3, 0xef, 0x64, 0xce, 0x18, 0x64, 0xf9, 0xf8, 0x95, 0x65, 0xfe, 0x39, 0xb0, 0xe5, 0x47, - 0x1c, 0xe6, 0x8e, 0xb6, 0x78, 0x4b, 0x23, 0x2e, 0x4c, 0x72, 0x57, 0x3d, 0xb9, 0xd6, 0xbb, 0x09, - 0xe5, 0x28, 0xa0, 0x74, 0x7d, 0x30, 0xa0, 0x68, 0xfd, 0x39, 0x6c, 0x7d, 0xce, 0x80, 0xa8, 0xf5, - 0x3b, 0xda, 0xe2, 0xca, 0x7f, 0x1c, 0x87, 0x39, 0x89, 0x65, 0x78, 0xa1, 0xfa, 0x08, 0x26, 0xf9, - 0xc1, 0x12, 0xb9, 0xda, 0xeb, 0x56, 0xac, 0x72, 0xb8, 0x55, 0x7a, 0x71, 0x10, 0x98, 0xa0, 0xe1, - 0x34, 0xd2, 0x30, 0x6b, 0x14, 0x18, 0x0d, 0xae, 0xd3, 0xa2, 0x8c, 0x04, 0xe2, 0x41, 0x21, 0xe4, - 0x1b, 0xb9, 0xde, 0x0b, 0x55, 0xdc, 0x75, 0x5a, 0x7a, 0x69, 0x08, 0x48, 0xd1, 0xee, 0x3c, 0xb6, - 0x3b, 0x45, 0xa2, 0x76, 0xc9, 0x57, 0x21, 0x27, 0xdc, 0xbd, 0xa4, 0x27, 0xf5, 0xaa, 0x63, 0xba, - 0x74, 0x6d, 0x20, 0x9c, 0x68, 0xee, 0x12, 0x36, 0x57, 0x22, 0xc5, 0xb0, 0xb9, 0x65, 0x9b, 0x83, - 0x2c, 0x7f, 0xa5, 0x6d, 0x1d, 0xd1, 0x8f, 0xc9, 0x07, 0xe1, 0x48, 0xf7, 0xe4, 0xb0, 0x3a, 0xce, - 0x2f, 0x0e, 0x02, 0x13, 0x4d, 0x17, 0xb1, 0x69, 0xb2, 0xa8, 0x47, 0x4d, 0x8b, 0x26, 0x8f, 0x60, - 0x52, 0x5c, 0xb3, 0xe8, 0xd9, 0xa4, 0x72, 0xcd, 0xba, 0x77, 0x93, 0xb1, 0xe7, 0xf7, 0x62, 0x50, - 0x4b, 0xca, 0xa0, 0xae, 0xfc, 0x7e, 0x06, 0x4e, 0x49, 0x72, 0x15, 0x5c, 0x45, 0x26, 0xdf, 0xd3, - 0x60, 0x5a, 0xbe, 0x1b, 0x4d, 0x52, 0x03, 0x86, 0xf7, 0xb9, 0x67, 0x5d, 0xba, 0x35, 0x7c, 0x85, - 0x20, 0x8c, 0x3f, 0x52, 0x78, 0x81, 0x9c, 0x63, 0x14, 0xda, 0x1c, 0xd2, 0xa6, 0xde, 0xb2, 0x7c, - 0xa1, 0x9a, 0x7c, 0x43, 0x8b, 0x2e, 0xa1, 0x2e, 0xf6, 0x6b, 0x42, 0xbd, 0x6b, 0x5d, 0x7a, 0x79, - 0x28, 0x58, 0x41, 0xc9, 0xf3, 0x48, 0x49, 0x91, 0x2c, 0xc4, 0x28, 0x11, 0x37, 0x4f, 0x57, 0x7e, - 0xa4, 0x29, 0x37, 0x96, 0x83, 0x2f, 0x32, 0xfc, 0x8e, 0x06, 0xb3, 0x6a, 0x28, 0x0f, 0x72, 0x2b, - 0xfd, 0x0a, 0x5c, 0xef, 0x90, 0x28, 0xa5, 0x57, 0x46, 0xa8, 0x91, 0xc6, 0x38, 0x71, 0xc0, 0x18, - 0xca, 0xb2, 0x38, 0x8b, 0x5a, 0xf9, 0x8b, 0x49, 0x58, 0x48, 0xd2, 0xbc, 0x67, 0xd9, 0x2e, 0xe3, - 0x69, 0x60, 0x49, 0x6e, 0xf4, 0x69, 0x3d, 0x71, 0x5a, 0x5e, 0xba, 0x39, 0x24, 0xb4, 0xa0, 0xf3, - 0x1c, 0xd2, 0xf9, 0x9c, 0xa1, 0x4b, 0x74, 0xe2, 0x69, 0x06, 0x33, 0x2f, 0xdf, 0xd2, 0x22, 0x55, - 0x1f, 0x84, 0x37, 0xa6, 0xf1, 0x4b, 0xc3, 0x82, 0x07, 0x8f, 0x80, 0x90, 0x8e, 0x8b, 0xe4, 0x42, - 0x9c, 0x8e, 0x48, 0xff, 0xed, 0xe6, 0xc7, 0xe4, 0xff, 0xd3, 0x64, 0x8b, 0xb7, 0x3c, 0xa0, 0x91, - 0x84, 0xe1, 0xbb, 0x35, 0x7c, 0x05, 0xd5, 0x2a, 0x90, 0x04, 0x7f, 0xc8, 0xaf, 0x69, 0x90, 0x0f, - 0x0e, 0x6a, 0xc9, 0xa0, 0xee, 0xc6, 0x8e, 0x7c, 0x4b, 0xcb, 0x43, 0xc3, 0xa7, 0x89, 0xbf, 0xc2, - 0x1f, 0x7e, 0x3e, 0xf9, 0xdb, 0x1a, 0x40, 0x74, 0x56, 0x4b, 0x06, 0x75, 0x34, 0x71, 0xf2, 0xdb, - 0x57, 0xc6, 0xd3, 0x0f, 0x82, 0x8d, 0xcb, 0x48, 0xd3, 0x39, 0xa3, 0x07, 0x4d, 0x4c, 0x82, 0xbe, - 0xa9, 0x85, 0xe6, 0x7a, 0x90, 0x18, 0xab, 0x56, 0xfb, 0xe6, 0x90, 0xd0, 0xaa, 0xf8, 0x2c, 0x26, - 0xc5, 0xe7, 0x2b, 0xd1, 0x79, 0xff, 0xc7, 0x2b, 0x3f, 0xc8, 0x2a, 0x53, 0x36, 0x7e, 0x61, 0xe8, - 0xeb, 0x03, 0xa6, 0xb3, 0x64, 0xa8, 0xa2, 0xf4, 0xe9, 0x2c, 0x25, 0x40, 0x91, 0x6a, 0x05, 0xda, - 0x4e, 0x53, 0x99, 0xce, 0xf8, 0x6b, 0xef, 0x8f, 0xc9, 0x6f, 0x25, 0x4d, 0xd4, 0xcd, 0x01, 0x0d, - 0xc4, 0xec, 0xd3, 0xd2, 0xb0, 0xe0, 0x69, 0xb3, 0xac, 0x42, 0x96, 0xb0, 0x4c, 0x43, 0x2c, 0x2c, - 0xd2, 0x02, 0x1a, 0xa5, 0x2f, 0x2c, 0x52, 0xe3, 0x1b, 0xa9, 0x0b, 0x0b, 0xa4, 0x61, 0xe5, 0x8f, - 0x74, 0x65, 0x0d, 0x2a, 0xae, 0x14, 0x7b, 0xa1, 0x21, 0xbc, 0x36, 0x64, 0xfc, 0xd5, 0xd2, 0xf5, - 0xc1, 0x80, 0x82, 0x8a, 0x05, 0xa4, 0x42, 0x37, 0xa6, 0x18, 0x15, 0xe2, 0xaa, 0x34, 0x93, 0xdb, - 0x63, 0x98, 0xc0, 0x38, 0xa7, 0xe9, 0x22, 0x91, 0x0c, 0xa9, 0x5a, 0xba, 0x36, 0x10, 0x4e, 0xb4, - 0x78, 0x1e, 0x5b, 0x5c, 0x30, 0xe6, 0xa5, 0x16, 0x97, 0x1b, 0x0c, 0x84, 0xb5, 0xfb, 0xd5, 0xfe, - 0xeb, 0xd8, 0x94, 0x50, 0xaa, 0xfd, 0x3a, 0x1b, 0x53, 0x92, 0x8b, 0xd8, 0xf4, 0xd9, 0xc5, 0x33, - 0x72, 0xd3, 0x5f, 0x09, 0xaf, 0xd1, 0x7e, 0x4c, 0x7e, 0x55, 0xb2, 0xf7, 0xd7, 0x87, 0x88, 0x5f, - 0xda, 0x67, 0xd0, 0x53, 0x23, 0x9d, 0x1a, 0xd7, 0x90, 0x82, 0xcb, 0xe4, 0xa2, 0x4c, 0x41, 0xa8, - 0x11, 0x12, 0x25, 0x5f, 0x0f, 0x97, 0x5c, 0xd7, 0x86, 0x8c, 0x42, 0xda, 0x8f, 0x0f, 0xb1, 0x65, - 0x97, 0x81, 0x54, 0x9c, 0x2f, 0xf5, 0xe2, 0x03, 0x1b, 0x88, 0xaf, 0xe3, 0x93, 0x0e, 0xdf, 0xeb, - 0x27, 0x00, 0x72, 0x28, 0xd1, 0x7e, 0x02, 0xa0, 0x44, 0x05, 0x55, 0x67, 0xba, 0xa0, 0x75, 0x0c, - 0x01, 0xaa, 0x70, 0xe0, 0xaf, 0x6a, 0x30, 0xa3, 0xc4, 0xe0, 0x4c, 0x9f, 0x63, 0x7a, 0xc7, 0x0b, - 0x4d, 0x9f, 0x63, 0xfa, 0x44, 0x08, 0x4d, 0xa7, 0x0c, 0x43, 0x85, 0x2a, 0x94, 0x9d, 0xc8, 0xb6, - 0x61, 0x71, 0x88, 0xd0, 0x9a, 0x7d, 0xd7, 0x7b, 0x3d, 0xe2, 0x83, 0x1a, 0xa7, 0x90, 0x98, 0x19, - 0x22, 0x6b, 0x26, 0xf9, 0xdd, 0x91, 0xf6, 0xa3, 0x03, 0x23, 0x7c, 0xa6, 0xef, 0x47, 0x07, 0x47, - 0xe8, 0x0c, 0x66, 0x63, 0xe3, 0x94, 0xcc, 0xa9, 0x68, 0x43, 0x4a, 0xbe, 0xab, 0x45, 0x5f, 0xca, - 0x13, 0xc6, 0x6b, 0x79, 0xc4, 0x88, 0x9a, 0xe9, 0x6b, 0x95, 0x7e, 0x11, 0x31, 0x03, 0xb3, 0x6e, - 0x3c, 0xa7, 0x48, 0x56, 0xf0, 0xc1, 0x3e, 0x46, 0xd7, 0xdf, 0xd2, 0x60, 0x2e, 0x16, 0xa9, 0x92, - 0x0c, 0xd1, 0x8e, 0x1a, 0xbf, 0x2a, 0x7d, 0xa9, 0xd0, 0x3f, 0x0c, 0xe6, 0x75, 0x24, 0xcd, 0x30, - 0x2e, 0xa4, 0x92, 0xb6, 0x2c, 0x02, 0x46, 0x31, 0x12, 0xff, 0x9e, 0xf8, 0x24, 0xab, 0x12, 0xa4, - 0x91, 0xac, 0x8c, 0x10, 0x50, 0x32, 0x20, 0xf3, 0x53, 0x23, 0xd5, 0x11, 0x84, 0xbe, 0x84, 0x84, - 0x5e, 0x21, 0x97, 0xd3, 0x09, 0x95, 0xf5, 0xe0, 0xcf, 0x34, 0x38, 0xdf, 0x2f, 0x9c, 0x24, 0x79, - 0xfb, 0x13, 0x45, 0xc1, 0x2c, 0x7d, 0xe6, 0x69, 0xab, 0x8b, 0xae, 0xbc, 0x8a, 0x5d, 0x59, 0x32, - 0x5e, 0x1a, 0xd8, 0x15, 0x59, 0x74, 0x7f, 0xac, 0xc1, 0x42, 0x7a, 0x10, 0x49, 0xf2, 0xe9, 0xc1, - 0x04, 0xa5, 0x46, 0xbd, 0x2c, 0xbd, 0x3e, 0x7a, 0x45, 0xd1, 0x87, 0xdb, 0xd8, 0x87, 0x65, 0x63, - 0x31, 0xad, 0x0f, 0xcb, 0x61, 0xf4, 0x86, 0x98, 0xf5, 0x5e, 0xf9, 0xfe, 0xb8, 0xb2, 0xb1, 0xc2, - 0x2b, 0x2a, 0xdc, 0xd7, 0x4d, 0xbe, 0x06, 0x93, 0xe2, 0xd7, 0xc0, 0x28, 0xfd, 0x43, 0xcc, 0x2c, - 0x6a, 0xac, 0x7e, 0x75, 0x45, 0x8c, 0x17, 0x6e, 0xf8, 0x57, 0xab, 0x97, 0xf9, 0x3f, 0xc6, 0xdf, - 0xaf, 0xb1, 0x19, 0x7e, 0x50, 0xfb, 0x4a, 0x88, 0xfd, 0xfe, 0x33, 0xfc, 0x70, 0xed, 0xf3, 0x08, - 0xff, 0xac, 0xfd, 0x2f, 0xc3, 0x04, 0xb2, 0xa3, 0xdf, 0xc4, 0x26, 0x7f, 0xfa, 0xa2, 0xdf, 0xc4, - 0xa6, 0x7e, 0x8a, 0x42, 0x31, 0x3f, 0x72, 0xe3, 0xf8, 0x9b, 0xb5, 0xfd, 0x0d, 0x0d, 0x72, 0xe2, - 0x9b, 0x0b, 0x64, 0xf0, 0xa7, 0x1b, 0x86, 0x58, 0x5f, 0xc4, 0x3f, 0xe0, 0x20, 0x66, 0x76, 0xe3, - 0x4c, 0x9c, 0x04, 0xf1, 0x4d, 0x03, 0x26, 0x1b, 0x3f, 0xcc, 0x2a, 0x8e, 0x02, 0xf1, 0x36, 0x80, - 0xd1, 0x36, 0x81, 0x5e, 0xea, 0x5e, 0x1b, 0x95, 0xf4, 0x27, 0x72, 0xa5, 0x9b, 0x43, 0x42, 0xf7, - 0x5e, 0xfe, 0x1d, 0x71, 0xb8, 0x60, 0xbb, 0xc4, 0x1f, 0x64, 0x91, 0x81, 0x78, 0x95, 0x17, 0x5e, - 0xbd, 0xf6, 0xdb, 0x3d, 0xdf, 0x79, 0x89, 0x9d, 0x89, 0x51, 0x4c, 0xd0, 0xb1, 0xdc, 0x40, 0x48, - 0x31, 0x5e, 0xc1, 0x6d, 0x93, 0x61, 0xba, 0x19, 0xbd, 0x5d, 0x19, 0x4c, 0x8e, 0xfa, 0x16, 0xc3, - 0x38, 0x8b, 0xe4, 0x9c, 0x22, 0x49, 0xb6, 0xac, 0xfc, 0x54, 0xd5, 0x65, 0x29, 0x98, 0x25, 0xf9, - 0xc1, 0x20, 0xff, 0x44, 0xcf, 0x18, 0xa9, 0xe9, 0x04, 0xf6, 0x8e, 0x85, 0x6a, 0xbc, 0x82, 0x04, - 0xbe, 0x4c, 0xd0, 0x98, 0x4a, 0xc1, 0x37, 0xa5, 0xe5, 0xab, 0x1a, 0xa8, 0xf3, 0xe3, 0x81, 0x2e, - 0x9c, 0x5e, 0x71, 0x50, 0x4b, 0x37, 0x87, 0x84, 0x4e, 0x73, 0xe1, 0xc8, 0xa4, 0xb1, 0x21, 0xfc, - 0xcd, 0x01, 0x1b, 0xf0, 0x5e, 0xf1, 0x4d, 0x07, 0x12, 0x11, 0xdb, 0x5b, 0x88, 0x79, 0x73, 0xf1, - 0x72, 0x82, 0x3f, 0x09, 0xbe, 0x7c, 0x47, 0x0b, 0x17, 0xf7, 0x83, 0x48, 0x52, 0xa7, 0x91, 0x9b, - 0x43, 0x42, 0x0b, 0x92, 0x6e, 0x20, 0x49, 0x2f, 0x96, 0x06, 0x93, 0xc4, 0xcc, 0xc2, 0x7f, 0x9f, - 0x50, 0x7d, 0x71, 0x61, 0x94, 0x21, 0x8f, 0x6d, 0x46, 0xc4, 0x38, 0xa6, 0x47, 0x6b, 0x49, 0xff, - 0x08, 0x60, 0xe9, 0xc6, 0x70, 0xc0, 0x82, 0xda, 0x12, 0x52, 0x7b, 0xda, 0x98, 0x43, 0x0f, 0x46, - 0xd4, 0x3a, 0x1b, 0xc4, 0x5f, 0x51, 0xbc, 0x5e, 0x4b, 0xfd, 0xf1, 0x26, 0xd6, 0x41, 0xcb, 0x43, - 0xc3, 0x0b, 0x52, 0xce, 0x20, 0x29, 0xf3, 0x24, 0x4e, 0x0a, 0xdb, 0x93, 0x84, 0xfa, 0x36, 0xa0, - 0x77, 0x31, 0x75, 0xbb, 0x39, 0x24, 0xb4, 0xa0, 0x60, 0x19, 0x29, 0x78, 0x89, 0x5c, 0x8b, 0x51, - 0x10, 0x29, 0x9b, 0x12, 0x1a, 0xea, 0x63, 0xd9, 0xcf, 0x34, 0x60, 0x8c, 0x54, 0x29, 0xbf, 0x31, - 0x1c, 0xb0, 0xba, 0x7d, 0x5d, 0xbc, 0x18, 0x27, 0x2b, 0x4e, 0xce, 0x0f, 0x34, 0xc8, 0x07, 0x9f, - 0xb7, 0x22, 0x03, 0xfa, 0x1e, 0xfb, 0x96, 0x56, 0x69, 0x69, 0x58, 0x70, 0x41, 0xd4, 0x2d, 0x24, - 0x6a, 0x91, 0x5c, 0x8f, 0x13, 0x75, 0x2c, 0x20, 0xe3, 0xd4, 0xad, 0xfc, 0xdf, 0x09, 0x38, 0x2b, - 0x07, 0xe5, 0x50, 0x3f, 0x9c, 0xf9, 0xcd, 0xc8, 0x6c, 0x0d, 0xf1, 0x45, 0xd2, 0x21, 0xf6, 0x2c, - 0x7d, 0xbf, 0x5c, 0x2c, 0x7c, 0x12, 0xc6, 0x69, 0x46, 0x7d, 0xb0, 0x9e, 0x0b, 0x3e, 0xdd, 0x1b, - 0x4c, 0x89, 0xc2, 0x5a, 0x0c, 0x41, 0x8e, 0x6a, 0x30, 0x6e, 0x0d, 0x5f, 0x41, 0x25, 0xa7, 0xd4, - 0x93, 0x9c, 0x6f, 0x2b, 0xaa, 0x38, 0xc4, 0x87, 0x4c, 0x87, 0xdb, 0x96, 0x0c, 0xf8, 0x06, 0x72, - 0xb0, 0x6c, 0x20, 0xa9, 0x74, 0x29, 0xf3, 0xe0, 0x50, 0x9f, 0x7e, 0x55, 0x74, 0xf3, 0x95, 0x11, - 0x6a, 0x08, 0x72, 0x5e, 0x46, 0x72, 0xae, 0x92, 0x2b, 0x69, 0xe4, 0xc4, 0x4f, 0xec, 0xa4, 0x29, - 0x68, 0x88, 0x11, 0x54, 0xf5, 0xf3, 0xd6, 0xf0, 0x15, 0xd4, 0x85, 0xcd, 0xe2, 0xb9, 0x54, 0xd2, - 0x38, 0x49, 0x2b, 0xff, 0x6d, 0x36, 0x76, 0xf0, 0x12, 0x1e, 0x8e, 0x0f, 0x71, 0xf0, 0x92, 0x1e, - 0x7e, 0xba, 0x74, 0x73, 0x48, 0xe8, 0xf4, 0x83, 0x97, 0xf0, 0x45, 0x3a, 0x4a, 0xd9, 0xaf, 0x6b, - 0x61, 0xa8, 0x10, 0x32, 0x38, 0x5c, 0x9f, 0xb2, 0x39, 0x5f, 0x1a, 0x16, 0x3c, 0x6d, 0x21, 0x28, - 0xd3, 0x21, 0x6f, 0xca, 0xbf, 0x3d, 0xd0, 0x8d, 0x9f, 0x1e, 0xc1, 0x79, 0x20, 0x53, 0x62, 0x83, - 0x27, 0xe4, 0x6a, 0xf1, 0x4a, 0x82, 0x18, 0xfe, 0x7f, 0xf9, 0x2b, 0xe1, 0x63, 0xfe, 0x8f, 0xc9, - 0x77, 0x35, 0x28, 0x84, 0xd1, 0x92, 0x7b, 0x9d, 0x05, 0xf5, 0x0c, 0xe1, 0xdc, 0xeb, 0x2c, 0xa8, - 0x4f, 0x20, 0x66, 0xe1, 0x1f, 0x33, 0x4a, 0x09, 0xea, 0xf8, 0xd7, 0xf4, 0xac, 0x16, 0xae, 0x9a, - 0xff, 0x55, 0x2f, 0x27, 0xd5, 0x9d, 0x01, 0x2d, 0xf6, 0x73, 0x06, 0xbc, 0xf9, 0x54, 0x75, 0x05, - 0xe1, 0x37, 0x91, 0xf0, 0x6b, 0x86, 0x91, 0x20, 0x9c, 0x06, 0xd5, 0x64, 0x17, 0xc0, 0xff, 0x1f, - 0x2d, 0xfb, 0x6f, 0x0c, 0x19, 0x3f, 0x75, 0xb8, 0xd1, 0x8e, 0x2d, 0xfa, 0x95, 0xdd, 0x9a, 0x42, - 0x16, 0x0f, 0x89, 0x10, 0x68, 0x42, 0xf0, 0x18, 0x69, 0xa0, 0x86, 0x29, 0x01, 0x53, 0x07, 0x6a, - 0x42, 0xec, 0x41, 0x4f, 0x1f, 0x4d, 0x68, 0x70, 0x48, 0x46, 0xcf, 0xef, 0x68, 0x90, 0x13, 0x01, - 0x3b, 0x07, 0xd2, 0xa3, 0x86, 0x18, 0x1d, 0x48, 0x4f, 0x2c, 0x9a, 0x68, 0x6c, 0x62, 0x97, 0xe9, - 0x11, 0x41, 0x42, 0x97, 0xbf, 0xa2, 0x04, 0xd1, 0xfc, 0x98, 0xfc, 0x75, 0x0d, 0xa6, 0xa4, 0x68, - 0x9c, 0xe4, 0x95, 0x21, 0xc6, 0x43, 0x0d, 0x27, 0x5a, 0x5a, 0x19, 0xa5, 0x8a, 0xba, 0x2c, 0x32, - 0xce, 0xa7, 0x8e, 0x23, 0x6d, 0x20, 0x34, 0x63, 0xde, 0x0f, 0x18, 0x7d, 0x51, 0x98, 0xca, 0xc1, - 0xf4, 0x25, 0xa2, 0x69, 0x0e, 0xa6, 0x2f, 0x19, 0x05, 0xb3, 0x8f, 0xde, 0x86, 0x0e, 0x24, 0x46, - 0xdd, 0x0f, 0x03, 0xea, 0x84, 0xa5, 0x1b, 0x8a, 0x3a, 0xd5, 0xdc, 0xad, 0x8c, 0x52, 0x45, 0x50, - 0xf7, 0x69, 0xa4, 0xee, 0x95, 0xc5, 0xe5, 0xde, 0xd4, 0x85, 0x66, 0x4f, 0x8a, 0xb9, 0xf9, 0x31, - 0xf9, 0xdb, 0x1a, 0xcc, 0xaa, 0x11, 0x2b, 0xc9, 0xab, 0x23, 0x06, 0xb8, 0xe4, 0x54, 0xdf, 0x7e, - 0xaa, 0xb0, 0x98, 0x81, 0xfa, 0x92, 0x3e, 0x6c, 0x5d, 0x3d, 0x0f, 0xa7, 0x1a, 0xce, 0x51, 0x1c, - 0xff, 0x9e, 0xf6, 0xf9, 0xac, 0xd5, 0xb1, 0x1f, 0x4e, 0xe2, 0x7b, 0xbf, 0x4f, 0xfd, 0xbf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x46, 0x58, 0x65, 0x56, 0x0d, 0xad, 0x00, 0x00, +func init() { proto.RegisterFile("api/api.proto", fileDescriptor_api_2699f5da74147c2d) } + +var fileDescriptor_api_2699f5da74147c2d = []byte{ + // 11692 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x5d, 0x8c, 0x1c, 0x49, + 0x72, 0x18, 0x3c, 0xd5, 0x3d, 0x33, 0xdd, 0x1d, 0xf3, 0x57, 0x93, 0xe4, 0x0e, 0x9b, 0x4d, 0x72, + 0x49, 0x16, 0x97, 0x4b, 0xee, 0x2c, 0x39, 0xc3, 0x9d, 0x5b, 0xee, 0xed, 0x72, 0x77, 0xef, 0xd4, + 0x33, 0xd3, 0xc3, 0x69, 0x71, 0xfe, 0xb6, 0x7a, 0x86, 0xdc, 0x3d, 0xfd, 0xf4, 0x15, 0xbb, 0x93, + 0x33, 0xb5, 0xec, 0xe9, 0xea, 0xad, 0xaa, 0x9e, 0xdd, 0xb9, 0xbb, 0xd5, 0x09, 0x02, 0x04, 0x7d, + 0x9f, 0xfe, 0xa5, 0xd3, 0x9d, 0x7d, 0x3a, 0xff, 0xc2, 0x90, 0xff, 0xe4, 0x33, 0x7c, 0x16, 0x60, + 0xc0, 0x86, 0x6c, 0x01, 0xf7, 0x60, 0xf9, 0x64, 0x43, 0x7a, 0x10, 0xfc, 0x64, 0xf8, 0x41, 0xc0, + 0xd9, 0xf0, 0xc1, 0x80, 0x1e, 0x0c, 0xfb, 0xc1, 0x80, 0x01, 0x1b, 0x19, 0x99, 0x55, 0x95, 0x59, + 0x55, 0xfd, 0xc7, 0xe5, 0xe9, 0x65, 0xa6, 0x33, 0x33, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33, + 0x32, 0x32, 0x0a, 0x66, 0xac, 0x8e, 0xbd, 0x6c, 0x75, 0xec, 0xa5, 0x8e, 0xeb, 0xf8, 0x0e, 0x99, + 0x73, 0x3a, 0xb4, 0xed, 0xf9, 0x8e, 0x6b, 0x1d, 0xd2, 0x25, 0xab, 0x63, 0x97, 0x2e, 0x1f, 0x3a, + 0xce, 0x61, 0x8b, 0x2e, 0x63, 0xf1, 0xe3, 0xee, 0x93, 0x65, 0xdf, 0x3e, 0xa6, 0x9e, 0x6f, 0x1d, + 0x77, 0x78, 0x8d, 0xd2, 0x45, 0x01, 0x80, 0x78, 0xda, 0x6d, 0xc7, 0xb7, 0x7c, 0xdb, 0x69, 0x7b, + 0xbc, 0xd4, 0xf8, 0x7b, 0x59, 0x98, 0xab, 0x71, 0x74, 0x26, 0xf5, 0x9c, 0xae, 0xdb, 0xa0, 0x64, + 0x16, 0x32, 0x76, 0xb3, 0xa8, 0x5d, 0xd1, 0x6e, 0x16, 0xcc, 0x8c, 0xdd, 0x24, 0x04, 0xc6, 0x3b, + 0x96, 0x7f, 0x54, 0xcc, 0x60, 0x0e, 0xfe, 0x26, 0x6f, 0xc0, 0xe4, 0x31, 0x6d, 0xda, 0xdd, 0xe3, + 0x62, 0xf6, 0x8a, 0x76, 0x73, 0x76, 0xe5, 0xc5, 0xa5, 0x18, 0x61, 0x4b, 0x02, 0xeb, 0x36, 0x42, + 0x99, 0x02, 0x9a, 0x2c, 0xc0, 0xa4, 0xd3, 0x6e, 0xd9, 0x6d, 0x5a, 0x1c, 0xbf, 0xa2, 0xdd, 0xcc, + 0x9b, 0x22, 0xc5, 0xda, 0xb0, 0x9d, 0x8e, 0x57, 0x9c, 0xb8, 0xa2, 0xdd, 0x1c, 0x37, 0xf1, 0x37, + 0xb9, 0x00, 0x05, 0x8f, 0x7e, 0x54, 0xff, 0xd8, 0xb5, 0x7d, 0x5a, 0x9c, 0xbc, 0xa2, 0xdd, 0xd4, + 0xcc, 0xbc, 0x47, 0x3f, 0x7a, 0xc4, 0xd2, 0xe4, 0x3c, 0xb0, 0xdf, 0x75, 0x97, 0x5a, 0xcd, 0x62, + 0x0e, 0xcb, 0x72, 0x1e, 0xfd, 0xc8, 0xa4, 0x56, 0x93, 0xb5, 0xe1, 0x5a, 0xed, 0xa6, 0xf9, 0xa8, + 0x98, 0xc7, 0x02, 0x91, 0x62, 0x6d, 0x78, 0xf6, 0x57, 0x68, 0xb1, 0xc0, 0xdb, 0x60, 0xbf, 0x59, + 0x5e, 0xd7, 0xa3, 0xcd, 0x22, 0xf0, 0x3c, 0xf6, 0x9b, 0x5c, 0x87, 0x59, 0x57, 0xb0, 0xa9, 0xee, + 0x75, 0x28, 0x6d, 0x16, 0xa7, 0xb0, 0xe7, 0x33, 0x41, 0x6e, 0x8d, 0x65, 0x92, 0xcf, 0x43, 0xa1, + 0x65, 0x79, 0x7e, 0xdd, 0x6b, 0x58, 0xed, 0xe2, 0xf4, 0x15, 0xed, 0xe6, 0xd4, 0x4a, 0x69, 0x89, + 0x33, 0x7b, 0x29, 0x18, 0x8d, 0xa5, 0xfd, 0x60, 0x34, 0xcc, 0x3c, 0x03, 0xae, 0x35, 0xac, 0x36, + 0x29, 0x41, 0xfe, 0x98, 0xfa, 0x56, 0xd3, 0xf2, 0xad, 0xe2, 0x0c, 0x72, 0x21, 0x4c, 0x93, 0xb3, + 0x30, 0xd1, 0xb0, 0x1a, 0x47, 0xb4, 0x38, 0x8b, 0x05, 0x3c, 0x61, 0xfc, 0x69, 0x06, 0xa6, 0x04, + 0x3f, 0xf7, 0x1c, 0xa7, 0xc5, 0x46, 0xa8, 0xba, 0x8e, 0x23, 0x34, 0x61, 0x66, 0xaa, 0xeb, 0x64, + 0x11, 0xb2, 0x6b, 0x8e, 0x87, 0x03, 0x34, 0xbb, 0x52, 0x4c, 0x0c, 0xc5, 0x9a, 0xe3, 0xed, 0x9f, + 0x76, 0xa8, 0xc9, 0x80, 0xd8, 0xc8, 0x6d, 0x8f, 0x34, 0x72, 0xfc, 0x3f, 0xb9, 0x08, 0x05, 0xd3, + 0xb2, 0x9b, 0x5b, 0xf4, 0x84, 0xb6, 0x70, 0xf0, 0x0a, 0x66, 0x94, 0xc1, 0x4a, 0xf7, 0x1d, 0xdf, + 0x6a, 0xd5, 0x18, 0x83, 0x73, 0xc8, 0xcc, 0x28, 0x83, 0x71, 0xf9, 0x80, 0x71, 0x39, 0xcf, 0xb9, + 0xcc, 0x7e, 0x93, 0x9f, 0x80, 0xc9, 0x96, 0xf5, 0x98, 0xb6, 0xbc, 0x62, 0xe1, 0x4a, 0xf6, 0xe6, + 0xd4, 0xca, 0xcd, 0x5e, 0x74, 0xb0, 0x1e, 0x2f, 0x6d, 0x21, 0x68, 0xa5, 0xed, 0xbb, 0xa7, 0xa6, + 0xa8, 0x57, 0x7a, 0x0b, 0xa6, 0xa4, 0x6c, 0xa2, 0x43, 0xf6, 0x29, 0x3d, 0x15, 0x72, 0xcb, 0x7e, + 0x32, 0x66, 0x9e, 0x58, 0xad, 0x2e, 0x15, 0x92, 0xcb, 0x13, 0xf7, 0x32, 0x6f, 0x6a, 0xc6, 0xff, + 0xd2, 0x60, 0xe6, 0xa1, 0xd3, 0xea, 0x1e, 0xd3, 0x2d, 0xa7, 0x61, 0xf9, 0x8e, 0xcb, 0x48, 0x6c, + 0x5b, 0xc7, 0x54, 0x54, 0xc7, 0xdf, 0xe4, 0x00, 0x66, 0x4e, 0x10, 0xa8, 0x2e, 0x28, 0xcd, 0x20, + 0xa5, 0x77, 0x12, 0x94, 0x2a, 0xa8, 0x82, 0x94, 0x44, 0xf1, 0xf4, 0x89, 0x94, 0x45, 0xde, 0x84, + 0x82, 0xf3, 0x71, 0x9b, 0xba, 0xde, 0x91, 0xdd, 0xc1, 0x41, 0x60, 0x82, 0x13, 0x47, 0xb9, 0x1b, + 0x40, 0x98, 0x11, 0x70, 0xe9, 0x8b, 0x30, 0x9f, 0x40, 0x3e, 0x52, 0xbf, 0x5f, 0x87, 0xc9, 0x1a, + 0x9f, 0xe4, 0x0b, 0x30, 0xd9, 0xb1, 0x5c, 0xda, 0xf6, 0x45, 0x45, 0x91, 0xc2, 0x49, 0xc2, 0x44, + 0x5e, 0x4c, 0x76, 0xf6, 0xdb, 0x38, 0x07, 0x13, 0xf7, 0x5d, 0xa7, 0xdb, 0x89, 0x6b, 0x06, 0x63, + 0x1d, 0xa0, 0xea, 0xd4, 0x7c, 0xd7, 0xf2, 0xe9, 0xe1, 0x29, 0x9b, 0x92, 0x96, 0x77, 0xda, 0x6e, + 0xd4, 0x6d, 0x07, 0x61, 0xf2, 0x66, 0x0e, 0xd3, 0x55, 0x87, 0x4d, 0x65, 0x6a, 0xb9, 0xad, 0xd3, + 0xba, 0xd5, 0x78, 0x8a, 0xa8, 0xf3, 0x66, 0x1e, 0x33, 0xca, 0x8d, 0xa7, 0xc6, 0x5f, 0x07, 0x00, + 0xde, 0xad, 0x5a, 0x87, 0x36, 0x98, 0x28, 0xd1, 0xce, 0x11, 0x3d, 0xa6, 0xae, 0xd5, 0x12, 0x78, + 0xa2, 0x8c, 0x70, 0x12, 0x67, 0xa4, 0x49, 0xbc, 0x0c, 0x93, 0x4f, 0x1c, 0xf7, 0xd8, 0xf2, 0x85, + 0x48, 0x9f, 0x4b, 0x70, 0x73, 0xa3, 0x86, 0x13, 0x40, 0x80, 0x91, 0x4b, 0x00, 0x8f, 0x5b, 0x4e, + 0xe3, 0x69, 0x1d, 0x51, 0x31, 0x61, 0xce, 0x9a, 0x05, 0xcc, 0x41, 0x71, 0x3d, 0x0f, 0xf9, 0x23, + 0xab, 0xde, 0x42, 0x49, 0x9f, 0xc0, 0xc2, 0xdc, 0x91, 0xc5, 0xe5, 0x7c, 0x11, 0xb2, 0x0d, 0xc7, + 0x43, 0x6d, 0xd4, 0x77, 0xa6, 0x35, 0x1c, 0x8f, 0xbc, 0x05, 0x60, 0x3b, 0xf5, 0x8e, 0xeb, 0x3c, + 0xb1, 0x5b, 0x7c, 0x52, 0xcc, 0xa6, 0x0c, 0x74, 0xd5, 0xd9, 0xe3, 0x10, 0x66, 0xc1, 0x0e, 0x7e, + 0xb2, 0xd1, 0x69, 0xd2, 0x66, 0xb7, 0x43, 0x71, 0xca, 0xe4, 0x4d, 0x91, 0x22, 0xaf, 0xc2, 0xbc, + 0xd7, 0xb6, 0x3a, 0xde, 0x91, 0xe3, 0xd7, 0xed, 0xb6, 0x4f, 0xdd, 0x13, 0xab, 0x85, 0xfa, 0x6c, + 0xc6, 0xd4, 0x83, 0x82, 0xaa, 0xc8, 0x27, 0x66, 0x5c, 0x7c, 0x01, 0xc5, 0xf7, 0x76, 0x0f, 0xf1, + 0x65, 0xcc, 0x1f, 0x28, 0xbb, 0x0b, 0x30, 0xe9, 0x1d, 0x59, 0xae, 0xd0, 0x89, 0x79, 0x53, 0xa4, + 0xc8, 0x3b, 0x30, 0xe5, 0xd2, 0x4e, 0xcb, 0x6e, 0x58, 0x75, 0x8f, 0xfa, 0x42, 0x1d, 0x5e, 0x48, + 0xb4, 0x64, 0x72, 0x98, 0x1a, 0xf5, 0x4d, 0x70, 0xc3, 0xdf, 0xac, 0x5b, 0xd6, 0xe1, 0xa1, 0x4b, + 0x0f, 0xb9, 0xd2, 0xe5, 0x9c, 0x9f, 0xe1, 0xdd, 0x92, 0x0a, 0x42, 0x55, 0x43, 0xdb, 0x0d, 0xf7, + 0xb4, 0xe3, 0xd3, 0xa6, 0x50, 0x93, 0x51, 0x06, 0x79, 0x11, 0xa0, 0x63, 0x79, 0x5e, 0xe7, 0xc8, + 0xb5, 0x3c, 0x5a, 0x9c, 0x43, 0x51, 0x95, 0x72, 0x14, 0x0e, 0x7a, 0x8d, 0x23, 0xda, 0xec, 0xb6, + 0x68, 0x51, 0x47, 0xb0, 0x90, 0x83, 0x35, 0x91, 0xcf, 0x26, 0x92, 0xd7, 0xb0, 0x5a, 0xb4, 0x38, + 0x8f, 0xb4, 0xf0, 0x04, 0xf2, 0xc0, 0xb7, 0x1b, 0x4f, 0x4f, 0x8b, 0x44, 0xf0, 0x00, 0x53, 0xe4, + 0x16, 0x4c, 0x1c, 0xb2, 0x69, 0x52, 0x7c, 0x01, 0x7b, 0xbf, 0x90, 0xe8, 0x3d, 0x4e, 0x22, 0x93, + 0x03, 0xb1, 0x55, 0x06, 0x7f, 0xd4, 0x69, 0xfb, 0x89, 0xe3, 0x36, 0x68, 0xb3, 0xb8, 0x80, 0xd8, + 0x66, 0x30, 0xb7, 0x22, 0x32, 0x59, 0x7f, 0x1a, 0xce, 0x71, 0xc7, 0xa5, 0x1e, 0x53, 0xa0, 0xe7, + 0x10, 0x44, 0xca, 0x61, 0x8b, 0x49, 0xc3, 0xf2, 0x1a, 0x56, 0x93, 0x36, 0x8b, 0x45, 0x3e, 0xb1, + 0x82, 0x34, 0x29, 0x42, 0xee, 0x43, 0xa7, 0xeb, 0xb6, 0xad, 0x56, 0xf1, 0x3c, 0x9f, 0x8f, 0x22, + 0xc9, 0x6a, 0xf1, 0x81, 0x3b, 0x79, 0xbd, 0x58, 0xe2, 0xb5, 0x82, 0x34, 0xb9, 0x0c, 0x53, 0x1f, + 0x75, 0x69, 0x97, 0xd6, 0x9b, 0xb4, 0xe3, 0x1f, 0x15, 0x2f, 0x60, 0xd7, 0x01, 0xb3, 0xd6, 0x59, + 0x0e, 0x79, 0x0b, 0xce, 0x23, 0x71, 0xf5, 0x6e, 0xdb, 0xeb, 0x76, 0x3a, 0x8e, 0xeb, 0xd3, 0x66, + 0xfd, 0x89, 0x57, 0xf7, 0x4f, 0x3b, 0xb4, 0x78, 0x11, 0xb1, 0x2d, 0x20, 0xc0, 0x41, 0x54, 0xbe, + 0x81, 0xf3, 0x82, 0x8d, 0x5d, 0xdb, 0x69, 0xda, 0x5e, 0xc3, 0x72, 0x9b, 0xc5, 0x4b, 0x7c, 0xec, + 0xc2, 0x0c, 0x26, 0x44, 0xb6, 0x53, 0xf7, 0x84, 0x3e, 0x29, 0xbe, 0xd8, 0x43, 0x88, 0x22, 0x95, + 0x63, 0x82, 0x1d, 0xa9, 0x9f, 0x47, 0x40, 0x3a, 0x2d, 0xab, 0x41, 0x8f, 0x69, 0xdb, 0x8f, 0x90, + 0x5c, 0x46, 0x24, 0x37, 0x7b, 0xc8, 0xfc, 0x5e, 0x50, 0x21, 0xc4, 0x38, 0xdf, 0x89, 0x67, 0xa9, + 0xfa, 0xfa, 0xca, 0x5f, 0xa9, 0xbe, 0xfe, 0xf5, 0x1c, 0xe8, 0xd1, 0xec, 0x3c, 0xe8, 0x34, 0x2d, + 0x9f, 0x49, 0xa5, 0xa4, 0x02, 0x37, 0xc7, 0x84, 0x12, 0xbc, 0x10, 0x57, 0x5a, 0x9b, 0x5a, 0xa4, + 0xb6, 0x6e, 0x0d, 0xa5, 0xb6, 0x36, 0x33, 0x5c, 0x71, 0xbd, 0x3d, 0x9a, 0xe2, 0xda, 0xcc, 0xca, + 0xaa, 0xab, 0xa8, 0xaa, 0xae, 0xcd, 0xf1, 0x50, 0x79, 0xdd, 0xee, 0xa9, 0xbc, 0x36, 0x27, 0x52, + 0xd4, 0x57, 0x51, 0x55, 0x35, 0x9b, 0x93, 0xcf, 0x49, 0xd9, 0x5c, 0x49, 0x6a, 0x88, 0xcd, 0x9c, + 0xa2, 0x23, 0x6e, 0xf7, 0xd4, 0x11, 0x9b, 0xf9, 0x14, 0x2d, 0xb1, 0xa0, 0x68, 0x89, 0xcd, 0x42, + 0xa0, 0x27, 0x8a, 0xaa, 0x9e, 0xd8, 0x84, 0x50, 0x53, 0x2c, 0x05, 0x9a, 0xe2, 0x4c, 0x3f, 0x4d, + 0xb1, 0x39, 0x15, 0xe8, 0x8a, 0x52, 0x34, 0x91, 0x51, 0x03, 0x6c, 0x4e, 0x47, 0x53, 0xf9, 0xa2, + 0x34, 0x95, 0x51, 0x01, 0x6c, 0xce, 0x48, 0x93, 0xf9, 0xaa, 0x3a, 0x99, 0xcf, 0x23, 0x85, 0xb3, + 0xca, 0x74, 0x56, 0xc4, 0xbb, 0x34, 0x82, 0x78, 0xaf, 0x02, 0xe4, 0x99, 0xe8, 0xd5, 0x9d, 0x8e, + 0xbf, 0x3a, 0x0b, 0xd3, 0x81, 0xf8, 0x61, 0xba, 0x00, 0xb9, 0x86, 0xe3, 0xe1, 0x4f, 0x1d, 0x66, + 0x23, 0x71, 0xc2, 0x9c, 0x69, 0x00, 0x2e, 0x13, 0x98, 0x3a, 0x07, 0x2f, 0x24, 0xe4, 0x22, 0x00, + 0xe3, 0x1d, 0x09, 0xd0, 0x44, 0x63, 0x94, 0xa8, 0x18, 0x8c, 0x13, 0x16, 0x4c, 0x41, 0x01, 0x87, + 0x20, 0xc4, 0x82, 0x6c, 0x0f, 0x8a, 0xb8, 0xda, 0x65, 0x89, 0x19, 0x98, 0x12, 0x6c, 0x0c, 0xfa, + 0x10, 0x30, 0x0e, 0xd3, 0xf3, 0x30, 0x27, 0x31, 0x8f, 0x65, 0x19, 0x06, 0x40, 0x24, 0x56, 0x6c, + 0xe2, 0xb6, 0x9d, 0x26, 0xf5, 0x8a, 0xda, 0x95, 0x2c, 0x9b, 0xb8, 0x98, 0x30, 0x7e, 0x5f, 0x83, + 0x39, 0xb3, 0xdb, 0x66, 0x07, 0xb1, 0x9a, 0x6f, 0xf9, 0x74, 0xdb, 0xea, 0x90, 0x47, 0x30, 0xe3, + 0xf2, 0xac, 0xba, 0xc7, 0xf2, 0xb0, 0xc6, 0xd4, 0xca, 0x4a, 0x52, 0x68, 0xd5, 0x8a, 0x4a, 0x5a, + 0x2c, 0xc8, 0xae, 0x94, 0xc5, 0x54, 0x4c, 0x02, 0x64, 0x24, 0x15, 0xf3, 0x4f, 0x35, 0x28, 0x84, + 0xa3, 0xcb, 0xe0, 0x70, 0x7c, 0x45, 0x5d, 0x9e, 0x20, 0xef, 0xc0, 0xb8, 0xd5, 0x68, 0xf1, 0x03, + 0x46, 0x9a, 0x32, 0x0d, 0xeb, 0x2f, 0x95, 0x1b, 0x0d, 0xea, 0x79, 0x6b, 0x4e, 0xdb, 0x77, 0x9d, + 0x96, 0x89, 0xb5, 0x4a, 0xdb, 0x30, 0xa3, 0x64, 0xb3, 0x05, 0x14, 0xc7, 0x80, 0x6f, 0xa8, 0x0b, + 0xa6, 0x48, 0x91, 0x97, 0x60, 0xa6, 0xe1, 0xb4, 0x5a, 0xd6, 0x63, 0xc7, 0x65, 0x1b, 0x69, 0xaf, + 0x98, 0xc5, 0x62, 0x35, 0xd3, 0xf8, 0xad, 0x02, 0x4c, 0x72, 0x9d, 0x98, 0x38, 0xa9, 0x2e, 0xc3, + 0x24, 0x3f, 0xc3, 0x0a, 0x4a, 0x93, 0x1b, 0x41, 0xbe, 0xfb, 0x35, 0x05, 0x58, 0xb4, 0x64, 0x67, + 0x87, 0x59, 0xb2, 0x4b, 0x90, 0x67, 0xe7, 0x4d, 0xa7, 0xdd, 0x3a, 0x15, 0xc7, 0xd7, 0x30, 0x4d, + 0xde, 0x84, 0x5c, 0x8b, 0xef, 0xff, 0x51, 0xfb, 0x4e, 0xa5, 0x9c, 0xab, 0x94, 0x53, 0x82, 0x19, + 0x80, 0x93, 0x3b, 0x30, 0xd1, 0x60, 0xe3, 0x87, 0xda, 0xb9, 0xff, 0x19, 0x92, 0x03, 0x92, 0x65, + 0x18, 0xf7, 0x3a, 0xb4, 0x81, 0x9a, 0x39, 0x4d, 0xf1, 0x45, 0x2b, 0x86, 0x89, 0x80, 0x6c, 0x54, + 0xbb, 0x9e, 0x75, 0x48, 0xc5, 0x01, 0x8c, 0x27, 0xd4, 0x03, 0x6c, 0x61, 0x84, 0x03, 0x6c, 0xb4, + 0xdf, 0x86, 0xe1, 0xf6, 0xdb, 0x77, 0x99, 0x26, 0xb4, 0xfc, 0xae, 0x87, 0xaa, 0x7c, 0x76, 0xe5, + 0x52, 0x2f, 0x92, 0x11, 0xc8, 0x14, 0xc0, 0x64, 0x05, 0x26, 0xf8, 0x64, 0x99, 0xc6, 0x5a, 0x17, + 0xfb, 0xd4, 0xa2, 0x26, 0x07, 0x65, 0xbb, 0x17, 0xcb, 0xf7, 0xd9, 0xa9, 0xb9, 0x59, 0x77, 0xda, + 0xb8, 0x89, 0x2c, 0x98, 0x10, 0x64, 0xed, 0xb6, 0xc9, 0x1a, 0xcc, 0x86, 0x00, 0x1c, 0xfb, 0x6c, + 0x0f, 0xec, 0x65, 0x04, 0xe3, 0xd8, 0x67, 0x82, 0x3a, 0xb5, 0xa0, 0x95, 0x26, 0x3d, 0xb1, 0x1b, + 0xb4, 0x8e, 0x96, 0x11, 0xb1, 0xcd, 0xe4, 0x59, 0x7b, 0x96, 0x7f, 0x44, 0x6e, 0x01, 0xf1, 0x68, + 0xa3, 0xeb, 0x32, 0xdd, 0x11, 0xc1, 0x05, 0xfb, 0x4c, 0x2c, 0x59, 0x8f, 0xa0, 0x43, 0xa2, 0x39, + 0xd8, 0x3c, 0x8a, 0xbd, 0x20, 0x1a, 0x01, 0x36, 0x43, 0x00, 0xbb, 0xfd, 0xc4, 0x29, 0x12, 0x54, + 0x1e, 0x37, 0x7a, 0xf0, 0x43, 0x10, 0x5e, 0x6d, 0x3f, 0x71, 0xb8, 0xc6, 0x10, 0x98, 0x58, 0x06, + 0xf9, 0x02, 0x4c, 0x4b, 0x6b, 0xa7, 0x57, 0x3c, 0x83, 0xa8, 0xfa, 0x2e, 0x9e, 0x53, 0xd1, 0xe2, + 0xe9, 0x91, 0x4a, 0x5c, 0x91, 0x9d, 0x45, 0x04, 0x57, 0x06, 0x29, 0x32, 0x55, 0x6d, 0x31, 0x89, + 0xa4, 0xae, 0xeb, 0xb8, 0xb8, 0x57, 0x2e, 0x98, 0x3c, 0x41, 0x7e, 0x12, 0x74, 0x71, 0x62, 0x69, + 0x38, 0x6d, 0xaf, 0x7b, 0x4c, 0x5d, 0xaf, 0xb8, 0x80, 0xf8, 0x2f, 0xf7, 0xe8, 0xeb, 0x9a, 0x80, + 0x33, 0xe7, 0x4e, 0x94, 0xb4, 0xc7, 0x46, 0xe0, 0x89, 0x57, 0x77, 0x29, 0xae, 0x50, 0x2e, 0xfd, + 0xa8, 0x6b, 0xbb, 0xe1, 0x06, 0x5a, 0x7f, 0xe2, 0x99, 0x58, 0x60, 0x8a, 0xfc, 0xd2, 0xbb, 0x30, + 0x17, 0xe3, 0xda, 0x48, 0x4a, 0xf4, 0x6f, 0x67, 0x60, 0x82, 0x75, 0xcc, 0x63, 0x30, 0x4c, 0x27, + 0x78, 0x58, 0x6f, 0xdc, 0xe4, 0x09, 0x72, 0x0e, 0x72, 0xec, 0x47, 0xfd, 0xd8, 0x13, 0x07, 0xd7, + 0x49, 0x96, 0xdc, 0xf6, 0xd8, 0x49, 0x14, 0x0b, 0x1e, 0x9f, 0xfa, 0xd4, 0x43, 0x2d, 0x34, 0x6e, + 0x16, 0x58, 0xce, 0x2a, 0xcb, 0x60, 0x9a, 0x12, 0xcd, 0x5f, 0x1e, 0xea, 0x9b, 0x71, 0x53, 0xa4, + 0xd8, 0x09, 0x15, 0x7f, 0x31, 0x84, 0xdc, 0x64, 0x96, 0xc3, 0xf4, 0xb6, 0xc7, 0x64, 0x89, 0x17, + 0x71, 0x94, 0x93, 0x58, 0x0a, 0x98, 0xc5, 0x71, 0x5e, 0xc6, 0x5d, 0x76, 0xc7, 0x75, 0x0e, 0xd9, + 0x11, 0x42, 0x18, 0x6b, 0x00, 0x37, 0x70, 0x98, 0x43, 0xce, 0xc0, 0x84, 0xed, 0x30, 0xcc, 0xf9, + 0xc0, 0x18, 0xc7, 0x09, 0x45, 0x84, 0x75, 0x34, 0x97, 0x71, 0x13, 0x5a, 0x01, 0x73, 0xd0, 0x9a, + 0xc3, 0x90, 0x06, 0x4b, 0xf7, 0xb1, 0x27, 0xcc, 0x69, 0x10, 0x64, 0x6d, 0x7b, 0xc6, 0xcf, 0x6b, + 0x30, 0xbf, 0x66, 0x75, 0xac, 0x86, 0xed, 0x9f, 0x1e, 0x30, 0xf5, 0x83, 0xd2, 0x78, 0x03, 0xe6, + 0xe8, 0x27, 0x8d, 0x56, 0xd7, 0xb3, 0x4f, 0x02, 0x82, 0x35, 0x3c, 0x70, 0xcf, 0x86, 0xd9, 0x9c, + 0xe8, 0xab, 0xc1, 0xd2, 0x2c, 0xa0, 0x32, 0x08, 0x35, 0xc5, 0xf3, 0xc2, 0x7e, 0xf9, 0x8e, 0x6f, + 0xb5, 0x24, 0x5e, 0x66, 0x4d, 0xc0, 0x2c, 0x04, 0x30, 0xfe, 0x75, 0x16, 0x26, 0xca, 0x2d, 0xea, + 0xfa, 0xd2, 0xba, 0x91, 0xc5, 0x75, 0xe3, 0x2d, 0xc8, 0x7b, 0xf4, 0x84, 0xba, 0xb6, 0x7f, 0x2a, + 0x8c, 0x68, 0x49, 0x0d, 0x55, 0x13, 0x00, 0xa8, 0xd8, 0x42, 0x70, 0xc6, 0x17, 0x8b, 0xe1, 0xe4, + 0xa7, 0x1f, 0xde, 0x68, 0x01, 0x73, 0xf0, 0xc0, 0x53, 0x84, 0xdc, 0x31, 0xf5, 0x50, 0xf7, 0x72, + 0x9b, 0x59, 0x90, 0x64, 0xdb, 0xae, 0xd0, 0x54, 0x2b, 0x96, 0x8c, 0x7e, 0xda, 0x37, 0x02, 0x66, + 0x1d, 0x75, 0x85, 0xad, 0xb6, 0x6e, 0x37, 0x71, 0x84, 0x0b, 0x6c, 0x87, 0xcb, 0xb3, 0xaa, 0xd8, + 0x9d, 0x20, 0x25, 0x76, 0xef, 0x97, 0x52, 0xe6, 0x37, 0x07, 0xe0, 0xdd, 0x09, 0xc0, 0x19, 0xbd, + 0x8d, 0x16, 0xc5, 0x5d, 0x37, 0xb7, 0x3c, 0x04, 0x49, 0x36, 0x1d, 0x7c, 0xbf, 0x25, 0x46, 0x9e, + 0xfd, 0x64, 0x5d, 0xef, 0xb6, 0xed, 0x8f, 0xba, 0xb4, 0xee, 0x5b, 0x87, 0x38, 0xe4, 0x05, 0xb3, + 0xc0, 0x73, 0xf6, 0xad, 0x43, 0x34, 0x65, 0x3a, 0xdd, 0xb6, 0x8f, 0x3a, 0x3f, 0x6b, 0xf2, 0x04, + 0x79, 0x0b, 0xe0, 0x89, 0xed, 0xb2, 0x55, 0x87, 0xd2, 0x61, 0xcc, 0xa6, 0x05, 0x84, 0xae, 0x51, + 0xda, 0x36, 0x7e, 0x51, 0x83, 0xf9, 0x5a, 0xf3, 0x29, 0x0e, 0xa1, 0xc7, 0x20, 0x6a, 0x1d, 0xab, + 0xcd, 0x10, 0x7a, 0xbe, 0xc5, 0x06, 0xc0, 0x16, 0xe6, 0xbb, 0x01, 0x08, 0x11, 0x9a, 0xa5, 0xc9, + 0x5d, 0xc8, 0xd3, 0x76, 0x93, 0x57, 0xcc, 0x0c, 0xac, 0x98, 0xa3, 0xed, 0x26, 0x4b, 0x19, 0x3b, + 0x40, 0x42, 0x32, 0xd6, 0x58, 0xa7, 0x90, 0x8e, 0x0b, 0x50, 0x38, 0xb6, 0xdb, 0x75, 0xde, 0x65, + 0x2e, 0x5a, 0xf9, 0x63, 0xbb, 0x8d, 0x00, 0x58, 0x68, 0x7d, 0x22, 0x0a, 0x33, 0xa2, 0xd0, 0xfa, + 0x04, 0x0b, 0x8d, 0xdf, 0xc8, 0xc0, 0x5c, 0x88, 0x70, 0xb7, 0xe3, 0xdb, 0x4e, 0x9b, 0x3c, 0x80, + 0x79, 0x86, 0x2d, 0x10, 0x33, 0x2e, 0x5d, 0xda, 0x10, 0xa2, 0xb9, 0x39, 0x66, 0xce, 0x1d, 0xdb, + 0x6d, 0x39, 0x8b, 0x5c, 0x06, 0xb0, 0xbd, 0x7a, 0x30, 0xae, 0x68, 0x7e, 0xdb, 0x1c, 0x33, 0x0b, + 0xb6, 0xb7, 0x26, 0xc6, 0xb6, 0xcc, 0x65, 0xb1, 0xee, 0x75, 0xac, 0xb6, 0xd8, 0x0a, 0x19, 0xc9, + 0x56, 0xe2, 0xac, 0xdf, 0x1c, 0x33, 0xf3, 0x7e, 0x30, 0x0c, 0xeb, 0x00, 0xd8, 0x3b, 0x8e, 0x63, + 0x1c, 0x71, 0x5c, 0xeb, 0x8d, 0x23, 0xe4, 0x1b, 0x23, 0xa4, 0x11, 0x24, 0x56, 0x27, 0x20, 0xcb, + 0x76, 0xd9, 0x5f, 0x86, 0x52, 0x08, 0x29, 0x0b, 0xea, 0x7b, 0x5d, 0xea, 0x9e, 0x92, 0x55, 0x98, + 0x09, 0xe5, 0xbf, 0x2f, 0x5f, 0x14, 0x19, 0x9f, 0x76, 0xa5, 0x94, 0xf1, 0x35, 0x38, 0x17, 0xb6, + 0x50, 0x0e, 0x66, 0xeb, 0x73, 0x43, 0x1f, 0xd3, 0x0a, 0x99, 0x98, 0x56, 0x30, 0xfe, 0x96, 0x06, + 0xc5, 0x44, 0x07, 0xab, 0xcd, 0xbf, 0xaa, 0xf6, 0xe3, 0x1a, 0x24, 0x1b, 0xd7, 0x20, 0xc6, 0x7f, + 0xce, 0xc0, 0x6c, 0x48, 0x20, 0x27, 0xeb, 0x67, 0xe0, 0x8c, 0x42, 0x56, 0xfd, 0x23, 0x96, 0x2d, + 0x26, 0xdc, 0xab, 0xbd, 0x47, 0x3a, 0x31, 0x7e, 0x9b, 0x63, 0xe6, 0xbc, 0x9b, 0x18, 0xd4, 0x7d, + 0xd0, 0x23, 0x8a, 0x05, 0xee, 0x5e, 0xc7, 0x8d, 0x1e, 0x23, 0xb7, 0x39, 0x66, 0xce, 0x5a, 0xea, + 0x58, 0x3e, 0x82, 0x79, 0xa9, 0xa3, 0x02, 0x2d, 0x17, 0xf0, 0x57, 0x06, 0x93, 0x2c, 0x46, 0x84, + 0x4d, 0x29, 0x37, 0x36, 0x48, 0xaf, 0xc3, 0xb8, 0xd3, 0xf1, 0xd9, 0xb2, 0x9c, 0xbe, 0xfb, 0x89, + 0xcd, 0x67, 0x13, 0xa1, 0x57, 0x73, 0x30, 0x81, 0x24, 0x18, 0x16, 0xbc, 0x14, 0x42, 0x54, 0xda, + 0x6c, 0xc3, 0x62, 0xf9, 0xf4, 0x91, 0xed, 0x1f, 0x6d, 0xd8, 0x2d, 0x9f, 0xba, 0x1e, 0xdb, 0x97, + 0x50, 0x8f, 0x69, 0xcb, 0x1c, 0xab, 0x60, 0x8b, 0x23, 0x66, 0xda, 0x3e, 0x48, 0x1d, 0x26, 0x33, + 0x80, 0x37, 0x1e, 0xc1, 0xf5, 0x01, 0x4d, 0x78, 0x1d, 0xa7, 0xed, 0x51, 0xb2, 0x04, 0x93, 0xc8, + 0xb5, 0xa0, 0x89, 0xe4, 0x21, 0x08, 0x91, 0x98, 0x02, 0xca, 0xa8, 0xc1, 0x42, 0x88, 0x78, 0x9d, + 0xb6, 0xa8, 0x4f, 0x9f, 0x03, 0xb5, 0xe7, 0xa5, 0xf9, 0x18, 0x20, 0xe5, 0xf4, 0x19, 0xc7, 0xf0, + 0x62, 0xad, 0xf9, 0x34, 0xb0, 0xb6, 0xec, 0x39, 0x2d, 0xbb, 0x71, 0xba, 0xe6, 0x52, 0x2b, 0x6a, + 0xf7, 0x01, 0xcc, 0x85, 0xc7, 0xff, 0x0e, 0x96, 0x0b, 0xb1, 0x4c, 0x55, 0x62, 0x2a, 0x26, 0x73, + 0xd6, 0x53, 0xd2, 0xc6, 0x1b, 0x30, 0xc9, 0xc9, 0x60, 0x87, 0x43, 0xec, 0xf2, 0x00, 0xbe, 0x70, + 0x20, 0xe3, 0x3f, 0x64, 0x60, 0x6e, 0xf7, 0xf1, 0x87, 0xb4, 0xe1, 0x33, 0x10, 0xbe, 0xbd, 0x21, + 0x30, 0xde, 0xed, 0x86, 0x27, 0x54, 0xfc, 0xcd, 0x96, 0x02, 0xb1, 0xc7, 0xb5, 0x83, 0x5b, 0x96, + 0x3c, 0xcf, 0xa8, 0xa2, 0xc5, 0x96, 0xb6, 0xad, 0xc7, 0x2d, 0xca, 0x27, 0x65, 0xde, 0x0c, 0x92, + 0xdc, 0xe8, 0x8c, 0x47, 0x28, 0xbe, 0x8f, 0x08, 0xce, 0x48, 0x0b, 0x30, 0x69, 0x35, 0x98, 0x88, + 0x89, 0x9b, 0x0a, 0x91, 0x42, 0x0d, 0x80, 0x87, 0xee, 0x3a, 0xdb, 0xc4, 0xf2, 0x3d, 0x42, 0x81, + 0xe7, 0x3c, 0xa0, 0xb8, 0x6d, 0xf1, 0x68, 0xc3, 0xa5, 0x3e, 0x16, 0xe7, 0x78, 0x31, 0xcf, 0x61, + 0xc5, 0x68, 0x63, 0x6f, 0x76, 0x1c, 0xbb, 0xed, 0xb3, 0x6d, 0x20, 0x3b, 0x8e, 0x44, 0x19, 0xe4, + 0x15, 0xd0, 0x1b, 0x5d, 0xd7, 0xa5, 0x6d, 0xbf, 0x1e, 0x64, 0xe2, 0xbe, 0xa0, 0x60, 0xce, 0x89, + 0xfc, 0x8a, 0xc8, 0xc6, 0x93, 0x0d, 0x27, 0xa3, 0xe3, 0xb8, 0xfc, 0xbc, 0x98, 0x35, 0x05, 0x65, + 0x7b, 0x8e, 0xeb, 0xe3, 0x65, 0x2d, 0x3d, 0x64, 0xf4, 0xf3, 0x4b, 0x56, 0x91, 0x32, 0xbe, 0xa7, + 0xc1, 0x19, 0xb1, 0xc5, 0x57, 0xc6, 0x5a, 0x3a, 0x67, 0x6b, 0xa3, 0x9d, 0xb3, 0x47, 0x36, 0x0e, + 0x04, 0xc7, 0xec, 0xec, 0x90, 0xc7, 0x6c, 0xe3, 0x65, 0x98, 0xe5, 0x79, 0xe1, 0xdc, 0x0a, 0x8f, + 0x39, 0x9a, 0x74, 0xcc, 0x31, 0x3a, 0x70, 0x56, 0xed, 0x9a, 0x80, 0x8e, 0x9b, 0x33, 0x36, 0x41, + 0x9c, 0x6a, 0xd8, 0x31, 0x06, 0x41, 0x04, 0xe9, 0xbd, 0x4e, 0x43, 0x01, 0x26, 0x73, 0xf6, 0x44, + 0x49, 0x1b, 0x3f, 0xd0, 0x02, 0x4b, 0x34, 0x1e, 0xbf, 0xca, 0x5c, 0x46, 0xee, 0xc1, 0x24, 0x3f, + 0x19, 0x8a, 0x25, 0xc6, 0xe8, 0x81, 0x96, 0x83, 0xef, 0x59, 0xae, 0x75, 0x6c, 0x8a, 0x1a, 0xe4, + 0x4d, 0x98, 0x38, 0x0e, 0x77, 0x33, 0xc3, 0x55, 0xe5, 0x15, 0x98, 0xe8, 0xe1, 0x0f, 0x7e, 0xd6, + 0xe5, 0x6b, 0x4f, 0x01, 0x73, 0x82, 0xb3, 0xb0, 0x7c, 0x64, 0x1e, 0x8f, 0x1f, 0xad, 0x8d, 0x3f, + 0xca, 0x84, 0x36, 0x71, 0xea, 0x3f, 0x0f, 0xb1, 0xe0, 0xa3, 0x9c, 0x19, 0xd6, 0x98, 0x72, 0x2f, + 0x9c, 0x71, 0xbd, 0x76, 0x4a, 0x09, 0x4e, 0x87, 0xb3, 0x72, 0x13, 0x72, 0x0e, 0x2e, 0x08, 0xc1, + 0xca, 0xb1, 0xd4, 0xab, 0x72, 0xd8, 0xb5, 0x25, 0xbe, 0x82, 0x88, 0xdb, 0xb8, 0xa0, 0x7a, 0xe9, + 0x1e, 0x4c, 0xcb, 0x05, 0xa3, 0xdd, 0x2a, 0x44, 0xd2, 0xc0, 0x9a, 0x11, 0xd2, 0xb7, 0x0c, 0x93, + 0x5c, 0x6a, 0x04, 0x07, 0xcf, 0xf5, 0x12, 0x32, 0x01, 0xf6, 0x1c, 0xc5, 0xf3, 0x77, 0xd8, 0xce, + 0xbe, 0x6d, 0x75, 0xd4, 0xa9, 0x1e, 0x9f, 0x0e, 0xd2, 0x18, 0x67, 0x46, 0x1b, 0x63, 0xd9, 0x70, + 0x97, 0x8d, 0x19, 0xee, 0xce, 0x43, 0xbe, 0xed, 0xd4, 0x5d, 0xea, 0xbb, 0x81, 0x51, 0x2f, 0xd7, + 0x76, 0x4c, 0x96, 0x34, 0x3e, 0x02, 0x22, 0x53, 0x25, 0xf8, 0xf4, 0x53, 0xb0, 0x10, 0x18, 0x29, + 0xb0, 0x20, 0xea, 0x3d, 0xe7, 0xdb, 0xf5, 0x5e, 0xa6, 0x0a, 0x05, 0x8d, 0x79, 0xf6, 0x24, 0x25, + 0xd7, 0xf0, 0x83, 0xab, 0x70, 0x5c, 0x3f, 0x94, 0xb5, 0x42, 0x8b, 0xad, 0x15, 0x69, 0x6e, 0x39, + 0x77, 0x21, 0x27, 0x1a, 0x1e, 0x46, 0x6b, 0x05, 0xb0, 0xc6, 0x77, 0xb5, 0x40, 0x73, 0x05, 0xf6, + 0x93, 0x54, 0x7f, 0x88, 0x8b, 0x50, 0x60, 0xff, 0xbd, 0x8e, 0xd5, 0x08, 0xa4, 0x2a, 0xca, 0x60, + 0x35, 0xc2, 0x33, 0x70, 0xc1, 0xc4, 0xdf, 0xe4, 0x1c, 0xe4, 0xda, 0x4e, 0x13, 0xc9, 0x17, 0xcb, + 0x16, 0x4b, 0x56, 0x9b, 0x4c, 0x09, 0xa0, 0x69, 0xb9, 0x8e, 0x8d, 0x4c, 0x70, 0x5c, 0x98, 0xb3, + 0xc3, 0x5a, 0x0a, 0x8b, 0x11, 0xe3, 0xa4, 0x54, 0x8c, 0xfb, 0xe7, 0x26, 0x90, 0xfb, 0xae, 0xd5, + 0x39, 0x5a, 0x77, 0xed, 0x13, 0xea, 0xae, 0x1d, 0x59, 0xed, 0x43, 0xea, 0x85, 0x0c, 0xd1, 0x24, + 0x86, 0xdc, 0x83, 0xf1, 0xa7, 0x76, 0xbb, 0x29, 0xb4, 0xd4, 0xcb, 0x29, 0xf6, 0xdd, 0x18, 0x1a, + 0xdc, 0x4c, 0x63, 0x1d, 0xe3, 0x06, 0xcc, 0xad, 0xb5, 0xba, 0x9e, 0x4f, 0xdd, 0x01, 0xfa, 0xfc, + 0x5b, 0x1a, 0xcc, 0xb0, 0x89, 0x7e, 0x12, 0x8a, 0xee, 0x26, 0xe4, 0x4d, 0xfa, 0x11, 0xf5, 0xfc, + 0x07, 0x0f, 0xc5, 0xee, 0xe1, 0x56, 0x72, 0xf7, 0x20, 0xd7, 0x58, 0x0a, 0xc0, 0xf9, 0x34, 0x0f, + 0x6b, 0x97, 0xde, 0x86, 0x19, 0xa5, 0x48, 0x9e, 0xe8, 0xd9, 0x41, 0x13, 0xfd, 0x2b, 0x30, 0xab, + 0xb4, 0xe2, 0x11, 0x03, 0xa6, 0xc5, 0xef, 0x35, 0xe9, 0xa0, 0xaa, 0xe4, 0x91, 0xf5, 0x58, 0x6f, + 0x84, 0xdb, 0xcb, 0x8b, 0xfd, 0x7b, 0x60, 0xaa, 0x95, 0x8c, 0x3f, 0xd3, 0x60, 0x01, 0xad, 0xe7, + 0x83, 0x27, 0xf6, 0x03, 0x98, 0xdc, 0x92, 0x1d, 0x6c, 0x3e, 0x97, 0x6e, 0x86, 0x4f, 0x20, 0x52, + 0xbd, 0x82, 0x84, 0x87, 0xc2, 0x25, 0x80, 0x70, 0xce, 0x04, 0x37, 0x08, 0x85, 0x60, 0xd2, 0x7c, + 0x26, 0xa7, 0xa1, 0x1f, 0x69, 0x70, 0x2e, 0x41, 0x88, 0x10, 0x8c, 0x03, 0x28, 0x04, 0x57, 0x51, + 0xc1, 0xe6, 0xf7, 0xf3, 0x83, 0x7b, 0xc1, 0x2b, 0x2f, 0xd5, 0x82, 0x9a, 0xbc, 0x27, 0x11, 0xa6, + 0x48, 0xde, 0x32, 0x92, 0xbc, 0x95, 0x2c, 0x98, 0x55, 0xab, 0xa4, 0x74, 0xe3, 0x2d, 0xb9, 0x1b, + 0xa9, 0x47, 0xf1, 0x04, 0x1d, 0x72, 0x5f, 0xff, 0xd1, 0x44, 0xe8, 0x71, 0xb6, 0xe3, 0x34, 0x93, + 0x5b, 0x13, 0x1d, 0xb2, 0x8d, 0x4e, 0x17, 0x91, 0x6b, 0x26, 0xfb, 0x89, 0x26, 0x0e, 0x7a, 0x5c, + 0x47, 0x7b, 0x9b, 0x30, 0x64, 0xe6, 0x8f, 0xe9, 0x31, 0x3a, 0x81, 0x31, 0x25, 0xcb, 0x0a, 0xd1, + 0x76, 0xc8, 0x2d, 0x99, 0xb9, 0x63, 0x7a, 0x8c, 0x96, 0x43, 0x51, 0xf4, 0xc4, 0xa5, 0x34, 0x30, + 0x65, 0x1e, 0xd3, 0xe3, 0x0d, 0x97, 0xa2, 0x1f, 0x8e, 0x75, 0x72, 0x58, 0x6f, 0x39, 0x16, 0xb7, + 0x72, 0x65, 0xcd, 0x9c, 0x75, 0x72, 0xb8, 0xe5, 0x58, 0xfc, 0xa6, 0x87, 0x6f, 0x87, 0x73, 0x3d, + 0xae, 0x20, 0x62, 0x77, 0x09, 0xef, 0xc2, 0x44, 0xd3, 0xf6, 0x9e, 0x06, 0xde, 0x66, 0x37, 0x7a, + 0x79, 0x9b, 0xb1, 0xde, 0x2e, 0xad, 0x33, 0x48, 0x3e, 0x18, 0xbc, 0x16, 0x59, 0x81, 0x89, 0x8e, + 0xe3, 0x84, 0x3e, 0x34, 0x17, 0xfb, 0x39, 0xab, 0x99, 0x1c, 0x94, 0x29, 0xbf, 0xe3, 0xc3, 0x63, + 0xbf, 0x6e, 0x77, 0x82, 0xbd, 0x2d, 0x4b, 0x56, 0x3b, 0xac, 0xa0, 0x69, 0xf9, 0x16, 0x2b, 0x98, + 0xe6, 0x05, 0x2c, 0x59, 0xc5, 0x0b, 0xa6, 0x23, 0xc7, 0xf3, 0x51, 0x27, 0xf2, 0x3b, 0x85, 0x30, + 0x4d, 0xb6, 0x61, 0x0a, 0x55, 0xa9, 0xf0, 0xe5, 0xd1, 0x7b, 0x68, 0x15, 0xb9, 0x1b, 0xec, 0x8f, + 0x3c, 0x45, 0xa0, 0x1d, 0x66, 0x90, 0x25, 0x38, 0x13, 0x1c, 0x7c, 0xdc, 0x3a, 0x22, 0xc6, 0x56, + 0xe7, 0xb1, 0xd5, 0xf9, 0xb0, 0x88, 0xa1, 0x60, 0x1a, 0xb9, 0xf4, 0x25, 0x80, 0x88, 0x2b, 0x29, + 0xf2, 0xf6, 0x86, 0x2a, 0x6f, 0x57, 0x7a, 0x11, 0x16, 0x9c, 0xad, 0x25, 0x61, 0x2b, 0xbd, 0x0b, + 0x73, 0x31, 0x52, 0x47, 0x9a, 0x97, 0x14, 0x66, 0x05, 0x72, 0xa1, 0xae, 0x25, 0xe9, 0xd0, 0x86, + 0x93, 0x0e, 0x2e, 0xde, 0x19, 0xd9, 0xe5, 0x15, 0xd9, 0x91, 0x8d, 0x56, 0x3f, 0xe3, 0x2a, 0x5c, + 0xee, 0x79, 0x0e, 0xed, 0x73, 0x54, 0xe5, 0x4e, 0x1b, 0x3f, 0x96, 0xa3, 0x6a, 0x1a, 0x45, 0x41, + 0x73, 0x82, 0xa2, 0x6b, 0x70, 0x35, 0x01, 0x12, 0x5a, 0x03, 0x02, 0x55, 0xdd, 0x04, 0xa3, 0x1f, + 0x90, 0x50, 0x71, 0x5f, 0x80, 0x3c, 0x52, 0x1c, 0x1d, 0xef, 0x87, 0xa1, 0x39, 0xac, 0x63, 0xdc, + 0x4d, 0xa1, 0xb6, 0xda, 0x66, 0x5b, 0xea, 0x70, 0x17, 0x9f, 0xb2, 0xe9, 0x30, 0x7e, 0x16, 0xae, + 0xf4, 0xae, 0x26, 0x48, 0xbb, 0x07, 0x93, 0x23, 0x33, 0x53, 0xd4, 0x30, 0x5e, 0x4f, 0x19, 0x33, + 0xd5, 0xac, 0x91, 0x46, 0x55, 0x1a, 0xeb, 0x63, 0x76, 0x8b, 0xad, 0x14, 0xc4, 0x81, 0x73, 0xcb, + 0xba, 0x65, 0xb7, 0x4e, 0x19, 0xe2, 0x23, 0xa7, 0xeb, 0x0a, 0x47, 0x5e, 0xfc, 0xcd, 0xce, 0xc3, + 0xc7, 0x76, 0xbb, 0xeb, 0x73, 0x39, 0x9f, 0x30, 0x45, 0xca, 0xf8, 0x79, 0x2d, 0x95, 0x7d, 0x1c, + 0xdd, 0x23, 0x4a, 0x9f, 0xb6, 0x4e, 0xc9, 0x6b, 0x90, 0x6d, 0x5a, 0xa7, 0x42, 0xe6, 0x53, 0x6d, + 0x2f, 0xfb, 0xf6, 0x31, 0x65, 0xc0, 0x4d, 0xeb, 0xd4, 0x64, 0xb0, 0x21, 0x09, 0x99, 0x54, 0x12, + 0xb2, 0x0a, 0x09, 0x5f, 0x4e, 0x1d, 0x09, 0x71, 0xc3, 0xe3, 0xb4, 0xfd, 0xa3, 0x16, 0xce, 0xdb, + 0x80, 0x84, 0x89, 0xd1, 0x5b, 0x78, 0x37, 0x45, 0x5a, 0x83, 0x16, 0xf6, 0xa8, 0x6b, 0x3b, 0x4d, + 0xbb, 0x41, 0x8a, 0x90, 0xf3, 0x68, 0xc3, 0x69, 0x37, 0x83, 0xbb, 0xa2, 0x20, 0x69, 0xfc, 0x9f, + 0x0c, 0x9c, 0xef, 0x59, 0x9f, 0x5b, 0x1a, 0x7c, 0xcb, 0x6e, 0x8b, 0x6a, 0x22, 0x45, 0x36, 0x61, + 0xa2, 0xc9, 0x86, 0xa3, 0xf8, 0xef, 0xb8, 0xf0, 0x2c, 0x0f, 0x16, 0x1e, 0x65, 0x18, 0x37, 0xc7, + 0x4c, 0x8e, 0x80, 0xed, 0x63, 0x3e, 0xc6, 0x91, 0x28, 0xfe, 0x80, 0xa3, 0xba, 0x33, 0x3c, 0x2a, + 0x3e, 0x84, 0x9b, 0x63, 0xa6, 0x40, 0x41, 0x76, 0x20, 0x77, 0xcc, 0x99, 0x5a, 0xfc, 0x13, 0x8e, + 0xed, 0xb5, 0xe1, 0xb1, 0x89, 0xe1, 0xd8, 0x1c, 0x33, 0x03, 0x24, 0xe4, 0x3d, 0xc8, 0x77, 0x04, + 0x0b, 0x8b, 0xff, 0x9e, 0x23, 0x5c, 0x19, 0x1e, 0x61, 0xc0, 0xfd, 0xcd, 0x31, 0x33, 0x44, 0xb3, + 0x3a, 0x03, 0x53, 0xfc, 0x37, 0x6e, 0xd3, 0x8d, 0x8f, 0xf0, 0x7a, 0x46, 0xad, 0x9f, 0x7a, 0x8e, + 0xd8, 0x84, 0x42, 0xa0, 0xc9, 0x82, 0x2d, 0xdf, 0xe2, 0xf0, 0xa4, 0x98, 0x51, 0x65, 0xe3, 0xd7, + 0xb2, 0x78, 0x53, 0xb0, 0xe6, 0xd2, 0x26, 0x6d, 0xfb, 0xb6, 0xd5, 0x52, 0x37, 0x9a, 0x69, 0x8d, + 0x2f, 0xc0, 0xe4, 0xe3, 0x6e, 0xe3, 0x29, 0xf5, 0x85, 0xba, 0x17, 0x29, 0x72, 0x1d, 0x66, 0x85, + 0x17, 0xa9, 0xed, 0xb4, 0xd1, 0x2a, 0xc6, 0x95, 0xff, 0x4c, 0x94, 0xfb, 0x80, 0x9e, 0x12, 0x13, + 0x66, 0xad, 0x8f, 0x3d, 0x76, 0xf4, 0x13, 0x2d, 0x06, 0x62, 0x93, 0x6e, 0xa6, 0xfe, 0xd8, 0x8b, + 0x68, 0x13, 0x54, 0x6d, 0x8e, 0x99, 0x33, 0x96, 0x9c, 0x4f, 0xde, 0x07, 0xdd, 0xfa, 0x4a, 0xd7, + 0xa5, 0x32, 0x56, 0x21, 0x41, 0xa9, 0x7c, 0x29, 0x33, 0xe0, 0x34, 0xbc, 0x73, 0x96, 0x5a, 0x42, + 0x7e, 0x0a, 0xe6, 0xf9, 0x85, 0x96, 0x8c, 0xfa, 0x4f, 0xfa, 0xd8, 0xec, 0xef, 0x23, 0x74, 0x1a, + 0x6e, 0xfd, 0x30, 0x56, 0xb4, 0x3a, 0x0f, 0x73, 0x11, 0x56, 0x2e, 0x02, 0xab, 0x70, 0x21, 0x75, + 0x38, 0x84, 0x9e, 0xbe, 0x06, 0x33, 0x52, 0x8d, 0x70, 0x43, 0x39, 0x1d, 0x65, 0x56, 0x9b, 0xc6, + 0x3f, 0xd1, 0xb8, 0x2d, 0x38, 0x85, 0x75, 0x31, 0xab, 0xa6, 0xd6, 0xdf, 0xaa, 0x99, 0x89, 0x5b, + 0x35, 0x4b, 0x78, 0xdf, 0xc7, 0xed, 0x95, 0x7c, 0x70, 0xc3, 0xb4, 0x64, 0x87, 0x1c, 0x97, 0xed, + 0x90, 0x68, 0x8e, 0xb2, 0x3d, 0xeb, 0x71, 0x8b, 0xd6, 0x3d, 0x8f, 0x7b, 0x56, 0xe6, 0x4d, 0x10, + 0x59, 0x35, 0xaf, 0x65, 0xd4, 0x51, 0xe7, 0xa4, 0x0f, 0x09, 0xb9, 0x0a, 0xd3, 0x56, 0x83, 0xdf, + 0x8b, 0x49, 0x82, 0x38, 0x25, 0xf2, 0xf0, 0xa8, 0xcb, 0x2d, 0xa4, 0x08, 0x12, 0x11, 0x0d, 0x22, + 0xeb, 0x01, 0x3d, 0x35, 0x1e, 0xa2, 0x88, 0xf7, 0x18, 0x18, 0xd6, 0xe5, 0x8e, 0xeb, 0x7c, 0x48, + 0x1b, 0x7e, 0xc4, 0xcf, 0x82, 0xc8, 0xa9, 0xe2, 0xee, 0xfa, 0x43, 0x4f, 0xc8, 0x33, 0x47, 0x9d, + 0x63, 0x69, 0x86, 0xf7, 0xd7, 0xc5, 0x25, 0x94, 0xca, 0x67, 0x31, 0x52, 0x2a, 0xa3, 0x33, 0x71, + 0x46, 0xff, 0x58, 0x38, 0xf9, 0x45, 0x7e, 0xeb, 0x17, 0xe7, 0xa4, 0xa0, 0x28, 0xce, 0xca, 0x4c, + 0x82, 0x95, 0xc6, 0x3b, 0x28, 0x7d, 0x49, 0x4e, 0x45, 0x7d, 0x92, 0x58, 0x95, 0x89, 0xb1, 0xca, + 0xb8, 0x0c, 0x97, 0x14, 0xd9, 0x4d, 0x6c, 0x93, 0xee, 0xe3, 0x82, 0x9e, 0x0a, 0x20, 0x5a, 0xb8, + 0x0e, 0xb3, 0x8a, 0x7c, 0x07, 0x8e, 0x81, 0x33, 0xb2, 0x80, 0x7b, 0x89, 0x59, 0x12, 0xdb, 0x05, + 0x0d, 0x35, 0x4b, 0x7e, 0x33, 0x0b, 0x17, 0xd3, 0x91, 0x8c, 0x30, 0xd7, 0x42, 0x05, 0x99, 0x49, + 0x55, 0x90, 0x59, 0x45, 0x41, 0xd6, 0x7a, 0x69, 0xbe, 0x57, 0x86, 0xd0, 0x7c, 0x9c, 0xa8, 0xa4, + 0xea, 0xfb, 0xa0, 0xb7, 0xea, 0x7b, 0x75, 0x28, 0xd5, 0x17, 0x22, 0x4e, 0xe8, 0xbe, 0x9f, 0xee, + 0xa3, 0xfb, 0x6e, 0x0d, 0xa7, 0xfb, 0x42, 0xe4, 0x43, 0x29, 0xbf, 0x72, 0x6c, 0x2d, 0x52, 0x77, + 0x91, 0x43, 0x8d, 0xea, 0xa5, 0x98, 0x64, 0xc4, 0xb6, 0x94, 0x6b, 0xb1, 0x31, 0x7f, 0x68, 0xb5, + 0x6c, 0xf9, 0x74, 0x31, 0x54, 0x1b, 0x71, 0x39, 0x8f, 0x90, 0x88, 0x56, 0xbe, 0x8e, 0x17, 0x7c, + 0xc2, 0x7e, 0x8f, 0xd6, 0x7e, 0x61, 0x69, 0x66, 0x53, 0x58, 0xe8, 0x57, 0x49, 0x9b, 0x09, 0x95, + 0x1b, 0xd8, 0xed, 0xfa, 0x29, 0xe0, 0xeb, 0x30, 0x2b, 0x8a, 0x1b, 0x4e, 0xdb, 0xa7, 0x9f, 0x04, + 0x22, 0x36, 0xc3, 0x73, 0xd7, 0x78, 0xa6, 0xf1, 0x2d, 0x0d, 0x5e, 0x08, 0x29, 0xd8, 0x66, 0xd3, + 0x3b, 0xe8, 0x60, 0x5f, 0x83, 0xa8, 0x7a, 0xb1, 0x90, 0x89, 0x5f, 0x2c, 0x94, 0x23, 0xdb, 0x3b, + 0xb7, 0x8d, 0xde, 0x48, 0x13, 0x82, 0x94, 0x6e, 0x87, 0x46, 0x77, 0xa3, 0x28, 0x71, 0x46, 0xd0, + 0x25, 0x78, 0xf6, 0xdb, 0x7c, 0xd1, 0xe2, 0x45, 0x07, 0x6d, 0x6c, 0x35, 0xe0, 0xda, 0x22, 0xcc, + 0x37, 0x71, 0x1c, 0xeb, 0x12, 0x79, 0xfc, 0x61, 0xd3, 0x1c, 0x2f, 0xd8, 0x0e, 0x89, 0x7c, 0x00, + 0xd7, 0xda, 0x4e, 0xbd, 0x49, 0x5b, 0xd6, 0x69, 0xfd, 0x31, 0x7d, 0xe2, 0xa0, 0x03, 0x61, 0x8b, + 0xfa, 0x76, 0xfb, 0xb0, 0x1e, 0xeb, 0x5c, 0xde, 0x7c, 0xb1, 0xed, 0xac, 0x33, 0xc8, 0x55, 0x04, + 0x5c, 0x17, 0x70, 0x21, 0x32, 0xe3, 0xdb, 0x29, 0x44, 0x3d, 0x0f, 0x4e, 0xae, 0xc6, 0x39, 0x79, + 0xb3, 0x37, 0x27, 0x55, 0x5e, 0x44, 0xac, 0x2c, 0xe1, 0xe2, 0x13, 0x23, 0x4d, 0x30, 0xf3, 0x93, + 0x84, 0x00, 0x0e, 0x45, 0xb5, 0x34, 0xc0, 0x99, 0x67, 0x1c, 0xe0, 0x7b, 0x12, 0xc3, 0x82, 0x96, + 0x85, 0x3e, 0x8d, 0xdd, 0x4b, 0x69, 0x89, 0x7b, 0xa9, 0xc7, 0x12, 0xd5, 0xeb, 0x54, 0x9e, 0x36, + 0x67, 0x61, 0x02, 0xdf, 0xc3, 0x88, 0x41, 0xe7, 0x09, 0xb2, 0x02, 0x2f, 0x74, 0x79, 0xc7, 0xa3, + 0x91, 0xc6, 0xcb, 0x38, 0x3e, 0xb8, 0x67, 0x44, 0x61, 0x30, 0xb8, 0xac, 0x48, 0xe1, 0x0c, 0xcf, + 0x7a, 0xee, 0x9c, 0x51, 0x48, 0x8f, 0x38, 0x73, 0x5e, 0xe2, 0x4c, 0xd0, 0xb2, 0x18, 0xae, 0xff, + 0xa2, 0x49, 0x54, 0x0d, 0xde, 0x80, 0x8f, 0x7c, 0xe1, 0xf6, 0x20, 0x7c, 0x29, 0x9a, 0xed, 0x61, + 0x1e, 0x4e, 0x6f, 0xfd, 0x79, 0x3f, 0x1a, 0x7d, 0x43, 0x62, 0x41, 0x6c, 0x63, 0xdb, 0x8f, 0xfb, + 0xc6, 0xa6, 0xa4, 0xcd, 0xd6, 0x5a, 0x4e, 0xbb, 0x2f, 0x77, 0x2e, 0x40, 0x81, 0xbf, 0xc4, 0x94, + 0xdc, 0x03, 0x78, 0x46, 0xb5, 0x69, 0xdc, 0x95, 0x19, 0xcd, 0x31, 0x0d, 0x43, 0xc0, 0x5d, 0x45, + 0x6a, 0xe4, 0x45, 0xa9, 0x6f, 0x35, 0x75, 0xc8, 0x95, 0x85, 0x48, 0x66, 0x45, 0x6c, 0xf7, 0xd2, + 0x17, 0xe5, 0x8f, 0x34, 0x69, 0xda, 0xc7, 0x77, 0x2c, 0x23, 0x5f, 0x40, 0xa6, 0xed, 0x5e, 0xb6, + 0x63, 0xc2, 0x72, 0xb7, 0xb7, 0xb0, 0xc4, 0xda, 0x7f, 0xde, 0xe2, 0xf2, 0x3f, 0xe5, 0x69, 0xa1, + 0x5a, 0x01, 0xfb, 0x4e, 0xd6, 0x11, 0xc4, 0x5d, 0xc1, 0x9a, 0x46, 0x3f, 0xb9, 0x2b, 0x26, 0x1b, + 0x77, 0xc8, 0xbb, 0xda, 0x67, 0xb2, 0x09, 0x5c, 0x08, 0xfe, 0x59, 0xba, 0x2d, 0x4b, 0x4d, 0xcc, + 0x18, 0xf9, 0x53, 0xd2, 0x44, 0x40, 0x6f, 0xe9, 0xa1, 0xf8, 0x71, 0x1d, 0x66, 0xdb, 0x8e, 0x5f, + 0x6f, 0x74, 0x8f, 0xbb, 0x2d, 0xcb, 0xb7, 0x4f, 0xa8, 0x50, 0x90, 0x33, 0x6d, 0xc7, 0x5f, 0x0b, + 0x33, 0x8d, 0x0d, 0x89, 0xdb, 0x02, 0xb9, 0x90, 0xab, 0x5b, 0xfc, 0x19, 0x81, 0x27, 0xc4, 0x6a, + 0x21, 0xd5, 0x18, 0xec, 0xf1, 0x07, 0x04, 0x9e, 0xf1, 0x0e, 0x6e, 0x8f, 0xc4, 0x1c, 0x93, 0x1d, + 0x96, 0x87, 0x12, 0x70, 0x1f, 0xcf, 0x08, 0xa9, 0xb5, 0x05, 0x35, 0x26, 0x9c, 0x69, 0x88, 0x82, + 0x3a, 0xbe, 0xc3, 0xe0, 0x2e, 0xfd, 0xbd, 0x0c, 0x97, 0x09, 0x9f, 0x69, 0x73, 0xbe, 0x11, 0xcf, + 0x32, 0x2e, 0xe0, 0x19, 0x94, 0xb7, 0x9a, 0x38, 0xb6, 0xbc, 0x8d, 0xdb, 0xd2, 0x44, 0x61, 0x74, + 0x28, 0x92, 0xae, 0xcb, 0xb4, 0xd8, 0x75, 0x99, 0xf1, 0xcb, 0x19, 0xf4, 0x54, 0x8b, 0xd5, 0x4e, + 0xf1, 0x54, 0x4b, 0x9b, 0x8b, 0x1f, 0xc4, 0x24, 0xb9, 0xdc, 0x5b, 0x92, 0xfb, 0xa0, 0x4e, 0x95, + 0x6b, 0xe5, 0xd1, 0xda, 0xf8, 0x28, 0x6f, 0x32, 0x3f, 0x83, 0x68, 0x6f, 0xa0, 0x4b, 0x5d, 0x3f, + 0x82, 0x87, 0x63, 0xea, 0x5f, 0x68, 0x92, 0x94, 0x04, 0x37, 0x79, 0xea, 0xc2, 0x39, 0xe8, 0xe6, + 0x3f, 0xc1, 0xeb, 0x5a, 0x8c, 0xd7, 0x6f, 0xf7, 0xe6, 0x75, 0x6a, 0x8b, 0xcf, 0x5b, 0xfb, 0xad, + 0xa2, 0xb9, 0x3a, 0xbd, 0xc1, 0x68, 0x47, 0x15, 0xbd, 0xfb, 0x6b, 0x86, 0xa7, 0x89, 0xe0, 0x1d, + 0x68, 0xd3, 0xa8, 0xa7, 0xe0, 0x30, 0x29, 0xba, 0xd7, 0x0d, 0xc5, 0xa7, 0x58, 0x03, 0x99, 0x44, + 0x03, 0x06, 0x5a, 0xb4, 0x7b, 0x34, 0x20, 0x94, 0xd6, 0x4f, 0xa0, 0x4d, 0x5a, 0x85, 0x89, 0xcf, + 0xb1, 0xfe, 0x3a, 0x61, 0x1f, 0xaf, 0x57, 0x7a, 0x62, 0x08, 0xdd, 0x30, 0xcf, 0x08, 0x14, 0x12, + 0xcd, 0x81, 0xf0, 0xcc, 0x9f, 0x28, 0xb5, 0x99, 0x10, 0xfd, 0x48, 0x83, 0x5b, 0xbd, 0xd1, 0xa6, + 0xcc, 0xd0, 0xbe, 0xac, 0xb2, 0x42, 0xf1, 0xe1, 0xf6, 0xd8, 0xea, 0x60, 0xf1, 0x19, 0x71, 0xca, + 0x7e, 0x16, 0x61, 0xaa, 0xc3, 0xed, 0x21, 0x9b, 0x7f, 0x46, 0x66, 0x7e, 0x0a, 0x2f, 0x27, 0x1a, + 0x08, 0xac, 0xcf, 0x23, 0x2c, 0xdd, 0x6f, 0xc0, 0xb9, 0xe4, 0x83, 0x54, 0xf4, 0x90, 0x11, 0x2f, + 0x1d, 0x5f, 0x88, 0x3f, 0x1e, 0x66, 0xa7, 0x66, 0xcf, 0x78, 0x05, 0x6e, 0x0c, 0x6c, 0x5e, 0x88, + 0x23, 0xbf, 0x78, 0x12, 0x17, 0x9d, 0x62, 0x07, 0xb3, 0xc6, 0x9d, 0x2e, 0x03, 0x85, 0xff, 0x33, + 0x28, 0xd5, 0x3d, 0x40, 0x04, 0x83, 0xde, 0x82, 0x5c, 0x83, 0x03, 0x88, 0x95, 0xe7, 0x72, 0xaf, + 0x0b, 0xdb, 0xc0, 0x05, 0x26, 0x80, 0x37, 0xee, 0xe0, 0x2a, 0xbe, 0xe3, 0x34, 0xe3, 0x3b, 0x3f, + 0xc9, 0xd9, 0x47, 0x93, 0x9d, 0x7d, 0x8c, 0x9f, 0xc4, 0xa5, 0x59, 0xa9, 0x21, 0xc8, 0xb8, 0x03, + 0xe3, 0x0c, 0x46, 0xd0, 0x70, 0xb1, 0xdf, 0x6d, 0xb6, 0x89, 0x90, 0xc6, 0x8b, 0x68, 0x02, 0x91, + 0x70, 0xc5, 0x3a, 0xff, 0x1e, 0x2e, 0xdf, 0x69, 0xe5, 0xcf, 0xdc, 0x24, 0xdf, 0xd1, 0xb0, 0x8c, + 0xc4, 0xda, 0x7a, 0x17, 0xb7, 0xb3, 0xb1, 0x22, 0xd1, 0x10, 0x3a, 0x96, 0x35, 0xe5, 0x25, 0x20, + 0xc7, 0xf9, 0xe1, 0x19, 0x15, 0xec, 0x84, 0xe2, 0x2d, 0xac, 0x70, 0xf2, 0x3a, 0xcc, 0x3a, 0x51, + 0x61, 0xc4, 0xd0, 0x19, 0x29, 0xb7, 0xda, 0x34, 0x3a, 0xd8, 0xd7, 0x34, 0x34, 0x82, 0x84, 0x5d, + 0x20, 0x32, 0x1e, 0xe9, 0x4e, 0x3c, 0xed, 0x86, 0x3e, 0xe6, 0xbd, 0x6c, 0xce, 0x4b, 0x75, 0xf9, + 0x7d, 0xb9, 0x71, 0x0f, 0xed, 0x53, 0x12, 0xe0, 0xf0, 0xab, 0x96, 0xe1, 0xc4, 0x3b, 0x1d, 0x5b, + 0x0e, 0x9e, 0x3b, 0xb1, 0xeb, 0x71, 0x62, 0xd5, 0xb3, 0xcf, 0x90, 0x4c, 0x7e, 0x31, 0x4e, 0x76, + 0xec, 0x28, 0xf4, 0xd3, 0xf1, 0x56, 0x54, 0x7d, 0x31, 0x5c, 0x2b, 0x64, 0x01, 0x26, 0xb9, 0xa7, + 0xb7, 0xd8, 0xdc, 0x8a, 0x54, 0xb2, 0xf5, 0x98, 0x3a, 0xf8, 0x76, 0x86, 0x5b, 0x0c, 0x5b, 0x4e, + 0xb7, 0xb9, 0x6a, 0x35, 0x9e, 0x76, 0x3b, 0x23, 0xec, 0x23, 0x12, 0xe6, 0xc2, 0x4c, 0xba, 0x89, + 0xf8, 0x49, 0xb7, 0xd5, 0x12, 0x7e, 0x93, 0xf8, 0x9b, 0xcd, 0x74, 0xdf, 0xf2, 0x9e, 0x4a, 0x6e, + 0x7d, 0x2c, 0x59, 0x6d, 0x92, 0xbd, 0x70, 0x19, 0x99, 0xc0, 0x65, 0xe4, 0xcd, 0xb4, 0x65, 0xa4, + 0x17, 0xb1, 0xcf, 0x7b, 0xd5, 0xf8, 0x3c, 0xb7, 0x96, 0x26, 0x5b, 0x13, 0x02, 0x27, 0xf5, 0x42, + 0x93, 0x7b, 0x61, 0x7c, 0x5f, 0x8b, 0xd7, 0x4c, 0xee, 0x3a, 0x1e, 0x63, 0xbe, 0xc4, 0x55, 0x9e, + 0x51, 0x6d, 0xb2, 0xb5, 0xc7, 0xe5, 0xe0, 0x75, 0xc1, 0x7a, 0x69, 0xb3, 0x36, 0x2f, 0x8a, 0xb8, + 0xae, 0x47, 0x9b, 0x69, 0x62, 0x14, 0xb2, 0x29, 0xa3, 0xd0, 0xd3, 0x91, 0x52, 0xea, 0xc4, 0x84, + 0xd2, 0x89, 0x26, 0x37, 0xf3, 0xa6, 0xf4, 0x41, 0x74, 0x7f, 0x11, 0xe6, 0x63, 0x74, 0x86, 0x9d, + 0x99, 0x53, 0xa8, 0x54, 0x5b, 0xc9, 0x28, 0xad, 0x74, 0xe3, 0xe2, 0x97, 0xb0, 0x2f, 0xf4, 0x66, + 0xd4, 0x50, 0xe2, 0x17, 0xda, 0xce, 0xb2, 0x92, 0xed, 0x4c, 0x4c, 0x8b, 0x94, 0x66, 0xc5, 0xb4, + 0xb0, 0xf9, 0x55, 0x4d, 0xbc, 0xbc, 0xdc, 0x0a, 0xef, 0xcd, 0x0c, 0x98, 0xf1, 0xdc, 0x46, 0xa2, + 0xe7, 0x53, 0x9e, 0xdb, 0x78, 0x38, 0xca, 0xfc, 0x08, 0x17, 0xe4, 0xb4, 0xa6, 0x04, 0x35, 0xbf, + 0xa7, 0xc1, 0x2b, 0x2a, 0x4c, 0xbf, 0x7d, 0xda, 0x30, 0x94, 0x5d, 0x02, 0x10, 0xcb, 0xb1, 0x74, + 0x95, 0x25, 0x72, 0xd2, 0x08, 0x4f, 0x13, 0x29, 0x1d, 0xb2, 0x56, 0xab, 0x25, 0x7c, 0x9e, 0xd9, + 0x4f, 0xe3, 0x7f, 0x67, 0xf0, 0x65, 0xa3, 0x44, 0x27, 0x7a, 0x21, 0xc7, 0x7d, 0xff, 0x12, 0x04, + 0x66, 0x92, 0x04, 0xbe, 0x0c, 0x73, 0x12, 0x8c, 0xe4, 0x4b, 0x35, 0x13, 0x42, 0xa1, 0xf0, 0x2b, + 0xaf, 0x60, 0xc7, 0x47, 0x79, 0x05, 0xbb, 0x2d, 0x45, 0xd1, 0xe3, 0xca, 0xe6, 0xb5, 0x01, 0xca, + 0x86, 0x75, 0x66, 0x69, 0x5b, 0xd4, 0x11, 0x7e, 0xb6, 0x61, 0xe0, 0xbd, 0x72, 0xe8, 0x32, 0xc6, + 0x83, 0xe4, 0xbc, 0x32, 0x00, 0x19, 0x5f, 0x63, 0x78, 0x94, 0x03, 0x5e, 0xb1, 0xf4, 0x36, 0xcc, + 0x28, 0xd8, 0x47, 0x52, 0x56, 0x4f, 0x61, 0x71, 0x18, 0x11, 0x11, 0x73, 0xf7, 0x5d, 0xc8, 0xf1, + 0x69, 0x14, 0xb8, 0x62, 0x5d, 0x1b, 0xa2, 0xef, 0x66, 0x50, 0xc7, 0xf8, 0xe5, 0x71, 0x38, 0x9b, + 0xd6, 0x9d, 0xfe, 0xf3, 0xf5, 0x5d, 0x98, 0x74, 0x3a, 0xe1, 0x83, 0xc2, 0xd9, 0x14, 0x47, 0x77, + 0x15, 0xe7, 0x6e, 0x87, 0xb3, 0x87, 0x57, 0x92, 0x38, 0x9c, 0x7d, 0x46, 0x0e, 0x47, 0x8f, 0xd0, + 0x9b, 0x8e, 0x88, 0x20, 0x19, 0x3c, 0x42, 0x5f, 0x77, 0xda, 0x34, 0xf6, 0x14, 0x78, 0x62, 0x94, + 0xa7, 0xc0, 0x65, 0x98, 0x6d, 0x38, 0xc7, 0x1d, 0x36, 0x73, 0xc5, 0x83, 0xe0, 0xc1, 0xd1, 0x38, + 0x66, 0xc2, 0x1a, 0x88, 0x42, 0x52, 0xd1, 0x39, 0x45, 0x45, 0x27, 0xe6, 0x4b, 0x3e, 0x39, 0x5f, + 0x08, 0x8c, 0xa3, 0x19, 0xa8, 0x80, 0x1b, 0x45, 0xfc, 0x9d, 0x9c, 0xc5, 0x90, 0x32, 0x8b, 0x2f, + 0xc3, 0x14, 0x67, 0x09, 0x77, 0xbc, 0x9d, 0xe2, 0x0f, 0xef, 0x31, 0x8b, 0xbb, 0xde, 0x5e, 0x86, + 0x29, 0xea, 0x5b, 0xf5, 0xc0, 0x65, 0x6a, 0x9a, 0xbf, 0xc0, 0xa2, 0xbe, 0x55, 0x13, 0x5e, 0x53, + 0x76, 0x5c, 0x85, 0x0b, 0xdf, 0xc8, 0x61, 0x76, 0x10, 0x67, 0x61, 0xa2, 0xe5, 0x34, 0xac, 0x96, + 0xd8, 0xb5, 0xf0, 0x84, 0xbc, 0x5a, 0x64, 0x95, 0xd5, 0xe2, 0x3f, 0x25, 0x16, 0xd6, 0xa0, 0x2d, + 0x21, 0xd7, 0x8f, 0x20, 0xcf, 0x87, 0x3a, 0xf4, 0x31, 0x7c, 0x7b, 0x28, 0x29, 0x89, 0x5c, 0xa9, + 0x45, 0x6d, 0x31, 0xbd, 0x03, 0x64, 0xa5, 0xc7, 0x30, 0xa3, 0x14, 0xa5, 0xcc, 0xcd, 0xb7, 0x55, + 0x0f, 0xd6, 0xeb, 0xc3, 0x35, 0x2c, 0x4d, 0xe1, 0x2f, 0x27, 0xf6, 0x1b, 0x96, 0x6f, 0xb5, 0x9c, + 0xc3, 0xe7, 0xb6, 0x18, 0x1a, 0x6f, 0xc7, 0xd7, 0xf4, 0xb0, 0x05, 0xc1, 0xbf, 0x12, 0xe4, 0xf1, + 0x66, 0xb5, 0xed, 0x07, 0x67, 0x8e, 0x30, 0x6d, 0xfc, 0xa1, 0x86, 0x56, 0x42, 0xa9, 0xf6, 0xa6, + 0xcd, 0xba, 0x77, 0x5a, 0xf5, 0xe9, 0xf1, 0x50, 0xab, 0x8e, 0xa2, 0xac, 0x33, 0xa3, 0x28, 0xeb, + 0xcf, 0x3e, 0xf7, 0x8d, 0xd5, 0x38, 0x77, 0x05, 0xf5, 0x23, 0x2c, 0x9b, 0x46, 0x3b, 0xce, 0xbf, + 0x10, 0x87, 0xe0, 0xdf, 0x36, 0x4c, 0x1f, 0xf1, 0xac, 0x7a, 0xcb, 0xf6, 0x82, 0x97, 0x9f, 0x8b, + 0x03, 0xa8, 0x95, 0xf8, 0x68, 0x4e, 0x89, 0xfa, 0x5b, 0xb6, 0xe7, 0x1b, 0xdf, 0xd0, 0xc4, 0x51, + 0x5c, 0xe9, 0x18, 0xe5, 0x2f, 0x4d, 0xa4, 0x63, 0x73, 0xea, 0x36, 0x94, 0x3c, 0x84, 0x39, 0x97, + 0xc3, 0x84, 0xa1, 0x6a, 0xb8, 0xe2, 0xbd, 0x3d, 0x80, 0x1e, 0x33, 0xa8, 0xc5, 0x63, 0xd7, 0xcc, + 0xba, 0x4a, 0x5a, 0xf8, 0x04, 0xf7, 0x22, 0x4a, 0xec, 0x59, 0x7e, 0xa8, 0x71, 0x6f, 0x06, 0x09, + 0x4a, 0x18, 0x24, 0x70, 0x4f, 0xf0, 0xbc, 0xb6, 0x4f, 0xaa, 0x2f, 0x60, 0xf6, 0x33, 0xf8, 0x02, + 0x32, 0x45, 0x77, 0x6c, 0x7d, 0x52, 0x0f, 0xd6, 0x45, 0xbe, 0x3a, 0xc0, 0xb1, 0xf5, 0x09, 0x27, + 0xdf, 0x0b, 0x4f, 0x32, 0x13, 0xd1, 0x49, 0xc6, 0x38, 0x4d, 0x0c, 0x10, 0xc3, 0xa7, 0x9e, 0xa1, + 0x0e, 0x40, 0x6f, 0x30, 0x00, 0x6e, 0xd2, 0x91, 0xcd, 0xf5, 0xaf, 0x0e, 0x12, 0x63, 0x89, 0x65, + 0xe6, 0x2c, 0x22, 0xc1, 0x2c, 0x34, 0xda, 0xbf, 0x97, 0x18, 0x06, 0xb9, 0xe9, 0xf0, 0xee, 0x82, + 0x08, 0x9d, 0x11, 0xda, 0x93, 0x42, 0x66, 0xeb, 0x8f, 0xd5, 0x46, 0x9a, 0xc6, 0x5e, 0x6a, 0x6f, + 0xd4, 0x2d, 0xf9, 0x68, 0x18, 0xaf, 0xa5, 0x12, 0x19, 0xdb, 0x6d, 0x5f, 0x87, 0x6b, 0x29, 0x40, + 0x09, 0x63, 0xc9, 0xaf, 0xf0, 0xbb, 0x84, 0x3e, 0x70, 0xa2, 0xd3, 0x9e, 0xca, 0x70, 0x69, 0x26, + 0x56, 0x87, 0x61, 0x78, 0x02, 0xe1, 0xd2, 0x5a, 0xc8, 0x79, 0x36, 0x2d, 0xf9, 0xda, 0x20, 0x0d, + 0x07, 0xcb, 0x2c, 0xb5, 0xe1, 0x4c, 0x0a, 0x58, 0xca, 0x3a, 0x51, 0x56, 0xd7, 0x89, 0x91, 0x64, + 0x40, 0x5a, 0x2d, 0xde, 0x82, 0x5c, 0xad, 0xf9, 0xd4, 0xec, 0xb6, 0x50, 0x6b, 0x7b, 0xd4, 0x3d, + 0xb1, 0x1b, 0x61, 0x24, 0xb9, 0x30, 0xcd, 0x84, 0xd6, 0xea, 0xd8, 0x81, 0xfd, 0x10, 0x7f, 0x1b, + 0xdb, 0xbc, 0xaa, 0xd3, 0xa2, 0xa9, 0x57, 0xc8, 0x4b, 0x30, 0xe1, 0x4a, 0xae, 0xb5, 0xc5, 0x34, + 0x02, 0x59, 0xbb, 0x26, 0x07, 0x33, 0xd6, 0x71, 0x33, 0xc8, 0xd0, 0xa9, 0x72, 0x7f, 0x0b, 0xc6, + 0x5d, 0xa7, 0x15, 0x58, 0xca, 0xd2, 0xd1, 0x38, 0x2d, 0x6a, 0x22, 0x94, 0x51, 0x41, 0xb3, 0xa0, + 0x8c, 0x25, 0x14, 0xe1, 0x51, 0xd0, 0x70, 0x63, 0x1b, 0xcb, 0x48, 0xc8, 0xcf, 0x1d, 0x34, 0xb6, + 0xc5, 0x8a, 0xa2, 0x87, 0x79, 0xdc, 0xce, 0x1a, 0x44, 0xe2, 0x43, 0xbb, 0xea, 0xab, 0x21, 0x4d, + 0x43, 0x3c, 0x34, 0xe0, 0x17, 0x88, 0x0a, 0xf0, 0x33, 0xf5, 0x60, 0x31, 0x64, 0xe7, 0xe0, 0x67, + 0x04, 0xe7, 0x42, 0x02, 0x63, 0x53, 0x2a, 0x1a, 0x13, 0xd5, 0x9c, 0xf4, 0xac, 0x63, 0xa2, 0x9a, + 0x8d, 0x46, 0x44, 0x73, 0x05, 0x4f, 0xd3, 0x55, 0x54, 0xda, 0xfe, 0xe9, 0x9a, 0xd5, 0xb1, 0x1e, + 0xdb, 0x2d, 0xdb, 0xb7, 0x69, 0xb0, 0x49, 0x34, 0x5a, 0x78, 0x08, 0x4e, 0x87, 0x10, 0x4d, 0x56, + 0x61, 0xba, 0x21, 0xe5, 0x8b, 0x09, 0x9d, 0xba, 0xcb, 0xaa, 0x71, 0xe1, 0x0f, 0xd1, 0x9c, 0x9a, + 0x4a, 0x55, 0x71, 0xdd, 0x19, 0xb4, 0xf6, 0x90, 0xba, 0x9e, 0xed, 0xb4, 0x03, 0x52, 0xbe, 0xc9, + 0x17, 0xae, 0x44, 0xa9, 0x20, 0xe3, 0x1d, 0x98, 0xf2, 0x9a, 0x4f, 0xeb, 0x27, 0x3c, 0x5b, 0x30, + 0xe0, 0x42, 0xea, 0x6d, 0x87, 0xa8, 0x09, 0x5e, 0xf8, 0x9b, 0xbc, 0x05, 0xb9, 0xa0, 0x66, 0xa6, + 0xbf, 0xd9, 0x3c, 0xa8, 0x1d, 0xc0, 0x1b, 0xff, 0x38, 0x8b, 0x43, 0x9a, 0xe8, 0x1b, 0xd9, 0x87, + 0x9c, 0x98, 0xed, 0x82, 0x9a, 0x37, 0x87, 0xe2, 0xc9, 0xd2, 0x6e, 0x87, 0xb6, 0x45, 0x63, 0xa2, + 0x70, 0x73, 0xcc, 0x0c, 0x50, 0x95, 0xfe, 0x20, 0x03, 0x24, 0x09, 0x41, 0xde, 0x13, 0x8f, 0x74, + 0xf9, 0x1b, 0x91, 0x77, 0x9f, 0xb5, 0xa5, 0x25, 0xfe, 0x4c, 0x16, 0xdd, 0x1e, 0x7f, 0xa0, 0xc1, + 0x38, 0x46, 0x95, 0x99, 0x82, 0xdc, 0xc1, 0xce, 0x83, 0x9d, 0xdd, 0x47, 0x3b, 0xfa, 0x18, 0x4b, + 0xac, 0x6d, 0x1d, 0xd4, 0xf6, 0x2b, 0xa6, 0xae, 0x11, 0x1d, 0xa6, 0xd7, 0xb6, 0x76, 0x0f, 0xd6, + 0xeb, 0xab, 0xe5, 0xb5, 0x07, 0x07, 0x7b, 0x7a, 0x86, 0xcc, 0xc1, 0xd4, 0x9a, 0x59, 0x59, 0xaf, + 0xec, 0xec, 0x57, 0xcb, 0x5b, 0x35, 0x3d, 0x4b, 0xf2, 0x30, 0xbe, 0xb3, 0xbb, 0x5e, 0xd1, 0xc7, + 0x09, 0x81, 0xd9, 0xdd, 0xd5, 0x9f, 0xac, 0xac, 0xed, 0xd7, 0x6b, 0xfb, 0xbb, 0x66, 0xf9, 0x7e, + 0x45, 0x9f, 0x20, 0x67, 0x60, 0xae, 0xb6, 0xb6, 0x59, 0x59, 0x3f, 0xd8, 0xaa, 0xd4, 0xf7, 0x76, + 0xb7, 0xaa, 0x6b, 0x1f, 0xe8, 0x93, 0x04, 0x60, 0xf2, 0xe1, 0xee, 0xd6, 0xc1, 0x76, 0x45, 0xcf, + 0xb1, 0xdf, 0xe5, 0xad, 0x8a, 0xb9, 0x5f, 0xd3, 0xf3, 0xac, 0xb5, 0xed, 0xdd, 0x83, 0x9d, 0xfd, + 0x7a, 0x79, 0x7f, 0xbf, 0xbc, 0xb6, 0xa9, 0x17, 0x18, 0x72, 0x73, 0x77, 0xab, 0xa2, 0x03, 0xa7, + 0x04, 0xc9, 0xaa, 0xef, 0x95, 0xab, 0xa6, 0x3e, 0xc5, 0x08, 0xdd, 0xae, 0xde, 0x37, 0xcb, 0xfb, + 0x15, 0x7d, 0x7a, 0x75, 0x92, 0xb3, 0xc7, 0xf8, 0xe7, 0x1a, 0x40, 0x24, 0x02, 0x4c, 0xbb, 0x1c, + 0x5b, 0x1f, 0x3a, 0xc1, 0x4b, 0x1d, 0x9e, 0xc0, 0x5c, 0xbb, 0xed, 0x04, 0x4f, 0x5b, 0x78, 0x82, + 0xe5, 0x76, 0x2c, 0xbf, 0x71, 0x24, 0x9e, 0xb6, 0xf0, 0x04, 0x29, 0x46, 0x82, 0x23, 0xe2, 0x80, + 0x05, 0x72, 0xb1, 0x09, 0xb9, 0xa0, 0x99, 0x22, 0x9c, 0xdd, 0x3e, 0xa8, 0xed, 0xd7, 0x37, 0xcb, + 0x0f, 0x2b, 0xf5, 0x2f, 0x55, 0xcc, 0xdd, 0xfa, 0xc3, 0xf2, 0xd6, 0x41, 0x45, 0x1f, 0x23, 0x05, + 0x98, 0xd8, 0x66, 0x6d, 0x8a, 0x9f, 0xac, 0x21, 0xfd, 0x3a, 0xfb, 0xb9, 0xc7, 0xb0, 0xeb, 0x63, + 0xa5, 0x8c, 0xae, 0x19, 0xff, 0x56, 0x0b, 0x1f, 0xc2, 0x05, 0x18, 0x17, 0x60, 0xb2, 0x89, 0x8f, + 0x9b, 0x83, 0xad, 0x25, 0x4f, 0xc9, 0xe4, 0x64, 0x14, 0x72, 0xc8, 0x06, 0xe4, 0x9a, 0xd4, 0xb7, + 0xec, 0xf0, 0x22, 0xf9, 0xd6, 0x00, 0x09, 0x5f, 0x5a, 0xe7, 0xe0, 0x22, 0x3e, 0x81, 0xa8, 0x5c, + 0xba, 0x07, 0xd3, 0x72, 0xc1, 0x48, 0xb6, 0x90, 0xef, 0x65, 0x60, 0x1a, 0x57, 0xd0, 0x6d, 0xfb, + 0x90, 0x69, 0x79, 0xa3, 0x0e, 0x33, 0xbb, 0x1d, 0xa6, 0xf0, 0x6d, 0xa7, 0x8d, 0xa2, 0x36, 0x07, + 0x53, 0xd5, 0xf6, 0x89, 0xd5, 0xb2, 0x9b, 0x2c, 0xa9, 0x8f, 0x31, 0xa1, 0x11, 0xc0, 0xe2, 0xbe, + 0x4a, 0xd7, 0xc8, 0x3c, 0xcc, 0x88, 0x3c, 0xbe, 0x25, 0xd5, 0x33, 0x64, 0x01, 0x88, 0x92, 0x85, + 0x2f, 0x72, 0xf5, 0xac, 0xb1, 0x83, 0xe1, 0xfb, 0x0e, 0x29, 0x93, 0x0f, 0x81, 0x18, 0xd3, 0xfa, + 0x18, 0x93, 0x2c, 0xbe, 0x90, 0xeb, 0x1a, 0x93, 0x15, 0x61, 0x45, 0xd5, 0x33, 0x0c, 0x54, 0xf6, + 0x72, 0xe1, 0x32, 0xbc, 0xee, 0xb4, 0xa9, 0x3e, 0x6e, 0x74, 0x60, 0x52, 0x58, 0x54, 0xe6, 0x61, + 0x26, 0x42, 0xe8, 0x77, 0x3d, 0x8e, 0xf1, 0xbd, 0x2e, 0xed, 0xd2, 0xa6, 0xae, 0xf1, 0x8e, 0xd8, + 0x6c, 0x2f, 0x6c, 0x7f, 0x85, 0x36, 0xf5, 0x0c, 0x99, 0x05, 0xa8, 0xb6, 0x83, 0x50, 0x7c, 0x7a, + 0x96, 0x01, 0x6f, 0x58, 0x76, 0x8b, 0x36, 0xf5, 0x71, 0x32, 0x0d, 0xf9, 0x35, 0x61, 0x72, 0xd0, + 0x27, 0x30, 0x65, 0xb5, 0x1b, 0x94, 0x95, 0x4d, 0x1a, 0xff, 0x4a, 0x83, 0xa2, 0xcc, 0xb3, 0x9a, + 0x6f, 0xb9, 0xe1, 0x72, 0x57, 0x85, 0x82, 0x13, 0xf0, 0x4f, 0x4c, 0xfd, 0xe4, 0xb6, 0x45, 0xae, + 0xbd, 0xa4, 0xb0, 0xdb, 0x8c, 0x6a, 0x0f, 0xb2, 0x3c, 0x5e, 0x80, 0x82, 0x6f, 0xb9, 0x87, 0xd4, + 0x8f, 0x0e, 0xff, 0x79, 0x9e, 0xa1, 0x5a, 0x91, 0x95, 0x6b, 0x03, 0xe3, 0x7f, 0x64, 0x23, 0x1b, + 0x44, 0x1a, 0xfd, 0x6a, 0xa3, 0x5a, 0xbc, 0xd1, 0x5e, 0xd6, 0x69, 0x72, 0x10, 0x7a, 0x94, 0x09, + 0x57, 0xf5, 0x7b, 0x3d, 0x37, 0x6b, 0x29, 0xcd, 0x2e, 0x29, 0xa2, 0xb2, 0x39, 0x16, 0xfa, 0x9d, + 0x51, 0x10, 0x41, 0xf1, 0xeb, 0x3c, 0x78, 0xac, 0x70, 0x58, 0xff, 0xe2, 0xb3, 0x23, 0xe7, 0xf1, + 0x9e, 0xc7, 0xcc, 0xa9, 0x93, 0x28, 0x49, 0x1e, 0xc3, 0x94, 0xd5, 0x6a, 0x89, 0x33, 0x96, 0x17, + 0xb8, 0xae, 0x7f, 0xe1, 0x59, 0x5a, 0x29, 0xb7, 0x5a, 0xbc, 0x21, 0x6f, 0x73, 0xcc, 0x04, 0x2b, + 0x4c, 0x95, 0x6e, 0xc5, 0xe6, 0x48, 0x5f, 0x73, 0x4f, 0x69, 0x39, 0x6d, 0xfa, 0x90, 0xf3, 0x90, + 0xe7, 0x21, 0x95, 0xc3, 0x1a, 0x39, 0x4c, 0x57, 0x9b, 0xa5, 0x33, 0x30, 0x9f, 0xa0, 0x20, 0x08, + 0xf2, 0xf6, 0x3a, 0x9c, 0x4f, 0x21, 0x7b, 0xd0, 0xdd, 0xcc, 0xe3, 0xc8, 0x0c, 0x90, 0x5a, 0x71, + 0x15, 0x26, 0x5d, 0xea, 0x75, 0x5b, 0x7e, 0xb1, 0xd7, 0x03, 0xaa, 0x9e, 0x75, 0x4d, 0x51, 0x33, + 0x4e, 0x19, 0x9f, 0x65, 0x83, 0x8e, 0xeb, 0x46, 0x33, 0x41, 0x99, 0x5a, 0x71, 0x1d, 0x72, 0xe2, + 0x20, 0x3e, 0x14, 0x69, 0x4a, 0x65, 0x33, 0xa8, 0x1a, 0x78, 0xef, 0xa7, 0x00, 0x8a, 0x9d, 0xe3, + 0xbf, 0x98, 0x00, 0x5d, 0x2e, 0xc6, 0xe3, 0x7a, 0x4f, 0x1b, 0xc3, 0x80, 0xe9, 0xfc, 0x32, 0xcc, + 0xa1, 0x49, 0x4f, 0x3a, 0xe8, 0x0b, 0x33, 0x3e, 0x66, 0x87, 0x47, 0xfd, 0x45, 0x98, 0x57, 0xe0, + 0x70, 0xa3, 0xcb, 0xe7, 0xf8, 0x9c, 0x04, 0x89, 0x26, 0xff, 0x9b, 0xa0, 0xbb, 0xf4, 0xd8, 0xf1, + 0xe5, 0x6b, 0x27, 0x7e, 0x75, 0x35, 0xcb, 0xf3, 0x1f, 0x4a, 0x9e, 0x7f, 0x78, 0x48, 0x8b, 0xac, + 0x66, 0x3c, 0x12, 0xc8, 0x8c, 0x94, 0x8b, 0x26, 0x84, 0x99, 0x20, 0x1c, 0x95, 0xc7, 0x94, 0xb6, + 0x08, 0x09, 0x70, 0xad, 0xbf, 0x86, 0x43, 0xfd, 0x6e, 0x4e, 0x8b, 0x9a, 0x5c, 0xfb, 0xbf, 0x13, + 0x9a, 0xa9, 0xf2, 0x88, 0xe2, 0xa5, 0x81, 0x28, 0xe4, 0x47, 0xe4, 0x6f, 0xc3, 0x14, 0xc6, 0x53, + 0xee, 0xe2, 0x7a, 0x30, 0x44, 0x44, 0x65, 0x60, 0xe0, 0x22, 0xa8, 0xff, 0x55, 0x98, 0xc6, 0xe0, + 0x0e, 0x75, 0x97, 0x5a, 0x9e, 0xd3, 0x16, 0xb6, 0xde, 0x29, 0xcc, 0x33, 0x31, 0x2b, 0x66, 0xde, + 0x9e, 0xfa, 0x6c, 0xe6, 0xed, 0xe9, 0x51, 0xcd, 0xdb, 0x31, 0x43, 0xf3, 0x4c, 0xc2, 0xd0, 0xac, + 0x1a, 0xe7, 0x67, 0xe3, 0xc6, 0xf9, 0x98, 0x1d, 0x7a, 0x2e, 0x61, 0x87, 0xde, 0x86, 0xb3, 0x71, + 0xb9, 0x65, 0xc7, 0x70, 0x72, 0x17, 0xc6, 0x25, 0x0b, 0xc0, 0xd5, 0xbe, 0x43, 0x82, 0x87, 0x6c, + 0x04, 0x4f, 0x99, 0x8e, 0xaa, 0x5d, 0x7b, 0xc4, 0xe9, 0xa8, 0x54, 0x8e, 0xa6, 0x63, 0x2d, 0xa1, + 0xc4, 0xa4, 0x26, 0x9e, 0x71, 0xd6, 0x19, 0x7f, 0xac, 0x41, 0x29, 0x0d, 0x6b, 0x78, 0x92, 0x1a, + 0x17, 0x36, 0xa8, 0x74, 0x07, 0xe7, 0xde, 0x55, 0x97, 0xa2, 0x98, 0xd0, 0x88, 0xa2, 0xf4, 0xb3, + 0x50, 0xe8, 0x17, 0xf0, 0x78, 0xa0, 0x49, 0x3c, 0x6d, 0xc0, 0xe4, 0x9d, 0x5c, 0x33, 0xa1, 0xad, + 0x62, 0x7d, 0x59, 0x8b, 0xa9, 0xeb, 0x57, 0x47, 0xe8, 0x4d, 0xa8, 0xaf, 0x7f, 0x80, 0x7b, 0x1f, + 0xe4, 0xde, 0x9e, 0x65, 0xbb, 0xaa, 0x15, 0x03, 0xaf, 0xb9, 0x51, 0xdd, 0x84, 0x2c, 0xef, 0x44, + 0xd7, 0xdc, 0xac, 0x20, 0xf0, 0x94, 0xea, 0xf0, 0xab, 0x7b, 0x05, 0x16, 0xa3, 0xd6, 0x65, 0xf0, + 0x13, 0x28, 0xf3, 0x0a, 0x34, 0x06, 0xaf, 0xbb, 0x03, 0x67, 0x63, 0xf0, 0xbe, 0xf3, 0x94, 0xb6, + 0x85, 0x8e, 0x24, 0x4a, 0x85, 0x7d, 0x56, 0xc2, 0x5f, 0x50, 0xf9, 0xf5, 0x26, 0x7d, 0x62, 0xb1, + 0x4e, 0xf3, 0xcb, 0x57, 0xf0, 0xa8, 0xbf, 0xce, 0x73, 0x8c, 0x8f, 0x99, 0x40, 0x25, 0xba, 0x22, + 0x5f, 0xd9, 0xab, 0x7d, 0x69, 0xa6, 0xf7, 0xa5, 0x99, 0xd2, 0x17, 0xd5, 0x0d, 0x41, 0x82, 0xc6, + 0xc7, 0x93, 0x8f, 0xc5, 0x16, 0xac, 0x07, 0x1b, 0xd7, 0xe2, 0xd3, 0xe5, 0x95, 0x94, 0x91, 0x4a, + 0xaf, 0x1b, 0xcd, 0x96, 0x60, 0xf1, 0xee, 0xd5, 0xbf, 0x61, 0x16, 0xef, 0x1e, 0x75, 0x43, 0x61, + 0x38, 0x55, 0x18, 0xb8, 0xe7, 0x3a, 0x0d, 0xea, 0x79, 0x92, 0x30, 0x88, 0x68, 0xa0, 0x49, 0x06, + 0xf2, 0x82, 0x88, 0x81, 0xbd, 0x06, 0x37, 0xd3, 0x6b, 0x70, 0x8d, 0xef, 0x67, 0xd8, 0xbc, 0x4d, + 0xb6, 0xfd, 0xe3, 0x1f, 0x3d, 0xf2, 0x26, 0x14, 0x63, 0xf0, 0x51, 0xfc, 0x46, 0x1e, 0x03, 0x69, + 0x41, 0xa9, 0x54, 0x09, 0x83, 0x39, 0x9a, 0xf1, 0x90, 0x74, 0x6f, 0xf6, 0x63, 0x7a, 0xac, 0x4f, + 0x3f, 0x86, 0xe0, 0x74, 0xef, 0xc4, 0xe5, 0x50, 0xb5, 0xa2, 0xf5, 0x3f, 0x0a, 0x84, 0x8e, 0x21, + 0x89, 0xda, 0x62, 0x77, 0xf4, 0x39, 0xb8, 0x20, 0x15, 0xe2, 0xb0, 0xdd, 0x97, 0x62, 0xe0, 0x9d, + 0x85, 0x09, 0x3e, 0xc8, 0x22, 0xbe, 0x17, 0x26, 0xc2, 0x3d, 0x57, 0x58, 0xef, 0x3e, 0xf5, 0xb1, + 0x6a, 0x60, 0x73, 0x7a, 0x22, 0xdc, 0x4d, 0x52, 0x00, 0x04, 0xe2, 0xf5, 0x98, 0x64, 0xdf, 0xea, + 0xc7, 0xe4, 0x38, 0x59, 0xa1, 0x6c, 0x2b, 0xce, 0x9f, 0x0c, 0xd2, 0xa4, 0x5e, 0x8c, 0x94, 0x23, + 0xd9, 0xf9, 0x33, 0x0e, 0xf2, 0x5c, 0x89, 0xf9, 0x5e, 0x26, 0x8c, 0x8f, 0xc6, 0xe0, 0x52, 0x5d, + 0x45, 0xd2, 0x3c, 0xd5, 0xfb, 0xbd, 0x1d, 0x7f, 0x15, 0xe6, 0xe3, 0x91, 0x45, 0xb9, 0x58, 0x16, + 0x4c, 0x3d, 0x16, 0x5a, 0x94, 0x7f, 0x8b, 0x0c, 0xbf, 0xa4, 0x20, 0x6e, 0x74, 0x44, 0x2a, 0x1a, + 0xc4, 0x49, 0x69, 0x10, 0xc9, 0xfd, 0x48, 0xce, 0x73, 0x3d, 0xbe, 0x83, 0x16, 0xeb, 0xcd, 0x8f, + 0x41, 0xb8, 0x97, 0xe2, 0xe2, 0x19, 0xb3, 0x4b, 0xc7, 0x3f, 0xb0, 0xf7, 0x08, 0x16, 0x54, 0xa9, + 0x92, 0x3c, 0x40, 0x0a, 0x1d, 0xcb, 0x76, 0xe5, 0xdb, 0xa8, 0x2b, 0x83, 0x3a, 0x64, 0xe6, 0x3b, + 0xe2, 0x97, 0xf1, 0xe5, 0xb8, 0x48, 0xc7, 0x6d, 0xde, 0x5f, 0x8c, 0xc9, 0xc8, 0x8d, 0x7e, 0xc8, + 0xd3, 0xc4, 0xe3, 0x4a, 0x7c, 0x4e, 0x24, 0xec, 0xf9, 0xff, 0x5d, 0x83, 0x4b, 0x52, 0xb9, 0x97, + 0xfa, 0x38, 0x45, 0xac, 0x94, 0xd2, 0x64, 0x17, 0x39, 0xd5, 0x26, 0xd9, 0x85, 0x09, 0xd6, 0xa1, + 0xe0, 0xa2, 0xe3, 0xad, 0x7e, 0x24, 0x26, 0xb1, 0x2f, 0x89, 0x6c, 0x8c, 0xf2, 0x85, 0x78, 0x4a, + 0x5f, 0x02, 0x88, 0x32, 0x9f, 0x25, 0xc8, 0x55, 0x9c, 0xe1, 0xd2, 0xd0, 0xdb, 0xf1, 0xb9, 0x9b, + 0xec, 0xee, 0x46, 0x8c, 0xe7, 0x4b, 0xa3, 0x75, 0x28, 0x64, 0xfd, 0x9f, 0x69, 0x90, 0x13, 0x9e, + 0x01, 0xa9, 0x17, 0x44, 0x69, 0x91, 0x23, 0xd3, 0xa2, 0x37, 0x06, 0xdf, 0x5a, 0x1c, 0x97, 0xbe, + 0xb5, 0xf8, 0x05, 0x98, 0xde, 0xb2, 0x3c, 0x7f, 0xdb, 0x69, 0xda, 0x4f, 0x6c, 0xda, 0x1c, 0xc2, + 0xcb, 0x46, 0x81, 0x27, 0xaf, 0x43, 0xbe, 0x71, 0x64, 0xb7, 0x9a, 0x2e, 0xce, 0xcf, 0xf4, 0xfb, + 0xa9, 0xc0, 0xab, 0x21, 0x84, 0x34, 0x7e, 0x02, 0x26, 0x4d, 0xca, 0xf6, 0x62, 0xe4, 0x0a, 0x4c, + 0x35, 0x6d, 0x97, 0x36, 0x7c, 0x07, 0xe3, 0x4c, 0x8b, 0xef, 0x40, 0x48, 0x59, 0xe8, 0x31, 0x68, + 0xb7, 0xc2, 0x2f, 0x40, 0xf0, 0x84, 0xd1, 0x81, 0xb9, 0xb8, 0xb3, 0x04, 0x5e, 0x82, 0x38, 0x7e, + 0xcf, 0x4b, 0x90, 0x00, 0x1e, 0xa1, 0xc8, 0x32, 0x1b, 0x9c, 0x70, 0x3b, 0x98, 0xf6, 0x3a, 0x91, + 0x53, 0x68, 0x0a, 0x30, 0xe3, 0x6f, 0x64, 0x60, 0x16, 0x23, 0x91, 0x52, 0x79, 0xb7, 0x8b, 0x6f, + 0x7a, 0x83, 0xdb, 0x8f, 0xe4, 0x6e, 0x57, 0xad, 0xb0, 0x84, 0x6f, 0xb9, 0x03, 0x8f, 0x58, 0x5e, + 0x95, 0x6c, 0x41, 0xa1, 0xe9, 0x34, 0x9e, 0x52, 0xd7, 0x6e, 0x06, 0x92, 0xbf, 0x34, 0x08, 0xcf, + 0x7a, 0x50, 0x41, 0x44, 0x18, 0x0c, 0x11, 0x94, 0xde, 0x82, 0x29, 0xa9, 0x91, 0x51, 0x94, 0x59, + 0xe9, 0x1d, 0x98, 0x55, 0xf1, 0x8e, 0xa4, 0x0a, 0x0f, 0xe0, 0x5c, 0x8f, 0x6f, 0xf0, 0x91, 0x7b, + 0xc1, 0x05, 0x26, 0xe7, 0xd2, 0x4b, 0x83, 0x3e, 0xde, 0x27, 0x5f, 0x66, 0xfe, 0xcb, 0x6c, 0x10, + 0x37, 0x5a, 0x29, 0xc6, 0x4f, 0x4c, 0x3e, 0x79, 0x42, 0x1b, 0xec, 0x00, 0x2c, 0xbe, 0x67, 0xe3, + 0x09, 0x73, 0xbe, 0x1e, 0x14, 0x88, 0x6f, 0xde, 0xf0, 0xcf, 0xae, 0x50, 0xfb, 0xf0, 0x28, 0xf8, + 0x56, 0x83, 0x48, 0x91, 0x87, 0x30, 0x25, 0xbe, 0xd6, 0xc8, 0xf0, 0x0a, 0x5f, 0x96, 0xd7, 0x87, + 0x21, 0x6f, 0xa9, 0x12, 0xd5, 0x43, 0x93, 0xaa, 0x8c, 0x88, 0x9d, 0xe8, 0x70, 0xf2, 0x8d, 0x23, + 0xc2, 0xbb, 0x43, 0x21, 0x2c, 0x3f, 0x79, 0x62, 0xb7, 0x6d, 0xff, 0x94, 0x25, 0xa2, 0xdb, 0x18, + 0xf2, 0x10, 0xe6, 0x8f, 0x2d, 0xbf, 0x71, 0x54, 0xa7, 0x9f, 0xe0, 0x27, 0x22, 0x71, 0xc1, 0xe3, + 0xfe, 0x91, 0xc9, 0x1d, 0x3b, 0x7a, 0x56, 0xd7, 0x68, 0x0b, 0xe7, 0x8e, 0xf8, 0x16, 0x0e, 0x36, + 0xa0, 0x23, 0x8e, 0x4a, 0x84, 0xc2, 0x58, 0x82, 0xb9, 0x58, 0x17, 0xc8, 0x34, 0xe4, 0x83, 0xef, + 0xea, 0xe8, 0x63, 0x64, 0x06, 0x0a, 0x1d, 0x97, 0x3e, 0xa1, 0x2e, 0x4b, 0x6a, 0xc6, 0x0a, 0xe8, + 0x71, 0x0a, 0x59, 0x05, 0x4b, 0xe4, 0xe9, 0x63, 0x44, 0x87, 0x69, 0xab, 0xed, 0xdb, 0x01, 0x94, + 0xae, 0x19, 0x7f, 0xa1, 0x41, 0xb1, 0x17, 0x49, 0x29, 0xb2, 0xb5, 0x03, 0x79, 0x6e, 0x97, 0x16, + 0x57, 0x30, 0xb3, 0x29, 0x01, 0xad, 0x7a, 0xa1, 0x13, 0x06, 0x6e, 0xc7, 0x35, 0x43, 0x1c, 0x6c, + 0xd4, 0x51, 0x3c, 0x83, 0x1d, 0xb3, 0x48, 0x19, 0x0f, 0x20, 0x1f, 0x40, 0x93, 0x49, 0xc8, 0x54, + 0xdb, 0xfc, 0x16, 0x66, 0xc7, 0xf1, 0xab, 0x6d, 0x5d, 0x23, 0x00, 0x93, 0x95, 0x4f, 0x6c, 0xcf, + 0xf7, 0xf8, 0x9d, 0xc0, 0xba, 0x43, 0xbd, 0x1d, 0xc7, 0xc7, 0x2c, 0x3d, 0xcb, 0x2a, 0xdc, 0xf7, + 0xf5, 0x71, 0xf6, 0x7f, 0xcb, 0xd7, 0x27, 0x16, 0xff, 0x32, 0x13, 0x5e, 0x0d, 0xcc, 0xc1, 0x54, + 0x6d, 0xbf, 0xbc, 0x7f, 0x50, 0xab, 0xef, 0xec, 0xee, 0x54, 0xf4, 0x31, 0x29, 0xa3, 0xba, 0x53, + 0xdd, 0xd7, 0x35, 0xc6, 0x53, 0x91, 0xb1, 0xfb, 0x40, 0xcf, 0x10, 0x02, 0xb3, 0x41, 0x72, 0x63, + 0x63, 0xab, 0xba, 0x53, 0xd1, 0xb3, 0xac, 0x45, 0x91, 0x57, 0x31, 0xcd, 0x5d, 0x53, 0x1f, 0x27, + 0x45, 0x38, 0x1b, 0xa2, 0xdd, 0xaf, 0x57, 0x77, 0xea, 0xef, 0x1d, 0xec, 0x9a, 0x07, 0xdb, 0xfa, + 0x04, 0x39, 0x07, 0x67, 0x44, 0xc9, 0x7a, 0x65, 0x6d, 0x77, 0x7b, 0xbb, 0x5a, 0xab, 0x55, 0x77, + 0x77, 0xf4, 0x49, 0xb2, 0x00, 0x44, 0x14, 0x6c, 0x97, 0xab, 0x3b, 0xfb, 0x95, 0x9d, 0xf2, 0xce, + 0x5a, 0x45, 0xcf, 0x49, 0x15, 0xc4, 0x55, 0x5c, 0x7d, 0x7d, 0xf7, 0xd1, 0x8e, 0x9e, 0x27, 0x17, + 0xe0, 0x5c, 0xbc, 0xa0, 0x72, 0xdf, 0x2c, 0xaf, 0x57, 0xd6, 0xf5, 0x82, 0x54, 0x6b, 0xa7, 0x52, + 0x59, 0xaf, 0xd5, 0xcd, 0xca, 0xea, 0xee, 0xee, 0xbe, 0x0e, 0xe4, 0x22, 0x14, 0x63, 0xb5, 0xcc, + 0xca, 0x6a, 0x79, 0x0b, 0x1b, 0x9b, 0x22, 0x57, 0xe0, 0x62, 0x1c, 0xa7, 0x59, 0x7d, 0xc8, 0x60, + 0xf6, 0xb6, 0xca, 0x6b, 0x15, 0x7d, 0x9a, 0x5c, 0x83, 0xcb, 0x69, 0x3d, 0xab, 0xef, 0xec, 0x86, + 0x57, 0x85, 0x33, 0x64, 0x16, 0x20, 0xec, 0xcb, 0xfb, 0xfa, 0xec, 0xe2, 0xb7, 0x35, 0x00, 0x1e, + 0xe0, 0x17, 0x65, 0xf0, 0x2c, 0xe8, 0x88, 0xd6, 0xac, 0xef, 0x7f, 0xb0, 0x57, 0x09, 0x38, 0x1f, + 0xcb, 0xdd, 0xa8, 0x6e, 0x55, 0x74, 0x8d, 0xbc, 0x00, 0xf3, 0x72, 0xee, 0xea, 0xd6, 0xee, 0xda, + 0x03, 0x7e, 0x89, 0x24, 0x67, 0xf3, 0xcb, 0x4a, 0x3d, 0x4b, 0xce, 0xc3, 0x0b, 0x72, 0xbe, 0xb8, + 0x67, 0xac, 0xac, 0xeb, 0xe3, 0x71, 0x4c, 0xf7, 0xcd, 0xf2, 0xde, 0xa6, 0x3e, 0xb1, 0xf8, 0x0f, + 0x35, 0x98, 0xe4, 0x9f, 0x4a, 0x63, 0xe3, 0xb8, 0x51, 0x53, 0x68, 0x9a, 0x87, 0x99, 0x20, 0x67, + 0x75, 0xdf, 0xdc, 0xa8, 0xf1, 0x7b, 0xd4, 0x20, 0xab, 0xf2, 0xfe, 0xfe, 0xeb, 0x5c, 0xe0, 0x82, + 0x9c, 0x8d, 0x83, 0x1a, 0x13, 0x88, 0x39, 0x98, 0x0a, 0x11, 0x6d, 0xd4, 0xf4, 0x71, 0x39, 0xe3, + 0xe1, 0x46, 0x4d, 0x9f, 0x90, 0x33, 0xde, 0xdf, 0xa8, 0xe9, 0x93, 0x72, 0xc6, 0x97, 0x36, 0x6a, + 0x7a, 0x4e, 0x6e, 0xfa, 0xfd, 0x8d, 0xda, 0xc9, 0x8a, 0x9e, 0x5f, 0xfc, 0x7d, 0x0d, 0x5e, 0x48, + 0x0d, 0x96, 0x4c, 0xae, 0xc2, 0x25, 0xec, 0x4f, 0x5d, 0xf4, 0x70, 0x6d, 0xb3, 0xbc, 0x73, 0xbf, + 0xa2, 0x74, 0xe5, 0x3a, 0x5c, 0xed, 0x09, 0xb2, 0xbd, 0xbb, 0x5e, 0xdd, 0xa8, 0x56, 0xd6, 0x75, + 0x8d, 0x18, 0xf0, 0x62, 0x4f, 0xb0, 0xf2, 0x3a, 0x13, 0xae, 0x0c, 0x79, 0x09, 0xae, 0xf4, 0x84, + 0x59, 0xaf, 0x6c, 0x55, 0xf6, 0x2b, 0xeb, 0x7a, 0x76, 0xd1, 0x87, 0x69, 0xe5, 0x0b, 0x38, 0x4c, + 0xc0, 0x2b, 0x0f, 0x2b, 0x66, 0x75, 0xff, 0x03, 0x85, 0x30, 0x26, 0xaa, 0x4a, 0x7e, 0x79, 0xab, + 0x6c, 0x6e, 0xeb, 0x1a, 0x1b, 0x4b, 0xb5, 0xe0, 0x51, 0xd9, 0xdc, 0xa9, 0xee, 0xdc, 0xd7, 0x33, + 0x38, 0xbf, 0x62, 0xb8, 0xf6, 0xab, 0x1b, 0x1f, 0xe8, 0xd9, 0xc5, 0x5f, 0xd5, 0x60, 0x5a, 0xfe, + 0xdc, 0x09, 0x6b, 0xd6, 0xac, 0xd4, 0x76, 0x0f, 0xcc, 0x35, 0x95, 0x1f, 0x45, 0x38, 0xab, 0xe6, + 0x8b, 0x7b, 0x6c, 0x2d, 0xad, 0xc6, 0x7a, 0x45, 0xcf, 0x30, 0x7a, 0xd4, 0xfc, 0xe0, 0x72, 0x3d, + 0xcb, 0xfa, 0xa0, 0x16, 0x21, 0x67, 0xf4, 0xf1, 0xc5, 0x5f, 0xd2, 0x60, 0x0e, 0x3f, 0x51, 0xc1, + 0x83, 0xd0, 0x23, 0x45, 0x25, 0x58, 0xc0, 0x7b, 0xf2, 0x7a, 0x79, 0x6d, 0xbf, 0xba, 0xbb, 0xa3, + 0x50, 0x75, 0x11, 0x8a, 0xc9, 0x32, 0xce, 0x53, 0x5d, 0x4b, 0x2f, 0x5d, 0x33, 0x2b, 0xe5, 0x7d, + 0x46, 0x5f, 0x6a, 0xe9, 0xc1, 0xde, 0x3a, 0x2b, 0xcd, 0x2e, 0x7e, 0x18, 0xc4, 0x9b, 0x97, 0x3e, + 0x07, 0xc0, 0xaa, 0xf0, 0x6e, 0x07, 0x75, 0xf6, 0xca, 0x66, 0x79, 0x3b, 0x20, 0xe6, 0x02, 0x9c, + 0x4b, 0x2b, 0xdd, 0xdd, 0xd8, 0xd0, 0x35, 0xd6, 0x8b, 0xd4, 0xc2, 0x1d, 0x3d, 0xb3, 0xb8, 0x02, + 0x39, 0xf1, 0x39, 0x5b, 0xee, 0x53, 0x80, 0xd8, 0x72, 0x90, 0xdd, 0xda, 0x7d, 0xc4, 0x95, 0xf5, + 0x76, 0x65, 0xbd, 0x7a, 0xb0, 0xad, 0x67, 0x58, 0xf1, 0x66, 0xf5, 0xfe, 0xa6, 0x9e, 0x5d, 0xfc, + 0x39, 0x28, 0x84, 0x5f, 0xb3, 0x65, 0xac, 0xae, 0xee, 0xd6, 0xf7, 0xcc, 0x5d, 0xa6, 0x05, 0xea, + 0xb5, 0xca, 0x7b, 0x07, 0xdc, 0x4b, 0x41, 0x1f, 0x63, 0xd3, 0x58, 0x2a, 0x32, 0xcb, 0x3b, 0xeb, + 0xbb, 0xdb, 0xfc, 0xa2, 0x59, 0xca, 0x5e, 0x5f, 0xe5, 0x42, 0xa2, 0x64, 0xd5, 0xcd, 0xca, 0xf6, + 0x2e, 0xe3, 0x05, 0x53, 0xe2, 0x52, 0xc9, 0xda, 0x76, 0x4d, 0x1f, 0x5f, 0xfc, 0x76, 0x06, 0xa6, + 0xa4, 0x8f, 0x06, 0xb0, 0x76, 0x44, 0xff, 0x98, 0x2a, 0x93, 0xc5, 0x46, 0xc9, 0xde, 0xab, 0xec, + 0xac, 0x33, 0x99, 0x94, 0x19, 0xc2, 0x4b, 0xca, 0x0f, 0xcb, 0xd5, 0xad, 0xf2, 0xea, 0x96, 0x10, + 0x1d, 0xb5, 0x0c, 0xbd, 0x22, 0xd8, 0x34, 0x49, 0x14, 0xad, 0x57, 0x44, 0xd1, 0xb8, 0xc4, 0xff, + 0xa8, 0x68, 0x7f, 0x6d, 0x93, 0x35, 0x37, 0xc1, 0xa4, 0x54, 0x29, 0xe4, 0x4b, 0xcf, 0x64, 0x82, + 0xc0, 0x60, 0x42, 0xe6, 0xc8, 0x8b, 0x50, 0x52, 0x4a, 0xf6, 0xcd, 0x0f, 0x44, 0x6b, 0x0c, 0x63, + 0x3e, 0x51, 0xd3, 0xac, 0x30, 0x8d, 0x5e, 0xd1, 0x0b, 0x8b, 0xbf, 0xa1, 0x05, 0xf7, 0xec, 0xb5, + 0xe0, 0x8b, 0x27, 0x72, 0xe3, 0xd1, 0xea, 0x79, 0x09, 0xce, 0xc7, 0xf3, 0xf7, 0xeb, 0x7b, 0x66, + 0xa5, 0x56, 0xd9, 0x61, 0x6b, 0xe9, 0x59, 0xd0, 0xd5, 0x62, 0xf4, 0x43, 0x49, 0x20, 0xc3, 0x05, + 0x2e, 0x1b, 0x63, 0x28, 0xae, 0x98, 0x62, 0x7d, 0x1b, 0x5f, 0xfc, 0x19, 0x98, 0x11, 0x2e, 0x10, + 0xdb, 0xb4, 0x69, 0x77, 0x8f, 0xf9, 0x6a, 0xc8, 0x97, 0x2c, 0x2e, 0x5c, 0xf5, 0xed, 0xf2, 0xfd, + 0x9d, 0xca, 0x7e, 0x75, 0x4d, 0x1f, 0xe3, 0x6b, 0xab, 0x52, 0x58, 0xab, 0x31, 0x65, 0x87, 0xab, + 0xa4, 0x92, 0xbf, 0xf3, 0x70, 0xbb, 0xa2, 0x67, 0x16, 0x6f, 0xc2, 0x4c, 0x60, 0xd9, 0x73, 0x7c, + 0xfb, 0xc9, 0x29, 0x83, 0x0c, 0x7c, 0x56, 0xb8, 0xaa, 0xe1, 0x44, 0x8e, 0x2d, 0x52, 0x98, 0x92, + 0xbe, 0x51, 0xc9, 0x46, 0x93, 0x8f, 0x6d, 0x30, 0x2a, 0xef, 0xef, 0x57, 0xcc, 0x1d, 0x14, 0xdc, + 0x78, 0x11, 0x5b, 0xe4, 0xb1, 0x48, 0x63, 0xcb, 0x6e, 0x6a, 0x51, 0xbd, 0xf6, 0xa8, 0xba, 0xbf, + 0xb6, 0xa9, 0x67, 0x16, 0xf7, 0x61, 0x36, 0x74, 0x07, 0xd8, 0x68, 0x59, 0x87, 0xec, 0x88, 0xa5, + 0xef, 0xee, 0xd5, 0x37, 0xb6, 0xca, 0xf7, 0x6b, 0xf5, 0xc8, 0xe5, 0x67, 0x1e, 0x66, 0xc2, 0x5c, + 0x1c, 0x13, 0x54, 0xa3, 0x61, 0x16, 0x1f, 0xee, 0xfa, 0xc6, 0xae, 0xb9, 0xc6, 0xba, 0xf9, 0xa7, + 0x1a, 0x7e, 0x62, 0x4a, 0x8a, 0x48, 0x8b, 0x9a, 0x55, 0xc9, 0xa9, 0x75, 0xdb, 0x4d, 0xeb, 0x94, + 0x4b, 0xbe, 0x5a, 0xb2, 0xed, 0x60, 0x09, 0x57, 0xd4, 0x4a, 0xc9, 0x7e, 0x97, 0x7a, 0xac, 0x28, + 0x83, 0xc3, 0xa2, 0x14, 0x3d, 0xa2, 0xcd, 0x36, 0x2f, 0xc4, 0x01, 0x8e, 0xd5, 0x3b, 0xea, 0xba, + 0x58, 0x36, 0x9e, 0x6c, 0x6d, 0xc3, 0xb5, 0x59, 0xc9, 0x44, 0xb2, 0x56, 0xcd, 0xf2, 0xbb, 0x2e, + 0x2b, 0x9b, 0x5c, 0xfc, 0x5a, 0xfc, 0x4d, 0x0d, 0x7f, 0xff, 0x42, 0x2e, 0xc7, 0xdf, 0x57, 0xf0, + 0xfc, 0x83, 0xf6, 0xd3, 0xb6, 0xf3, 0x31, 0xdb, 0x4b, 0x5e, 0x89, 0x7b, 0xb6, 0x73, 0x80, 0xe0, + 0xb7, 0xae, 0xb1, 0x25, 0x36, 0xf5, 0x69, 0x0d, 0xf7, 0x45, 0xd9, 0xed, 0xe8, 0x99, 0xc5, 0x3f, + 0xca, 0xa0, 0x77, 0x64, 0xaa, 0x0f, 0x3d, 0x6e, 0x9c, 0x7a, 0x94, 0x45, 0x64, 0xbc, 0x8c, 0x61, + 0x0a, 0x52, 0x81, 0x76, 0x1c, 0x1f, 0x6f, 0xca, 0xd1, 0x65, 0xe5, 0x4a, 0xfa, 0x1b, 0x0e, 0x06, + 0x87, 0xde, 0x2f, 0x99, 0x7e, 0xcd, 0x95, 0x1f, 0xe3, 0xe7, 0xe0, 0xf5, 0x2c, 0x5b, 0xec, 0x7b, + 0x01, 0xed, 0x59, 0x5d, 0x0f, 0x1d, 0x5e, 0xfa, 0x20, 0xaa, 0xf9, 0x4e, 0xa7, 0x43, 0x9b, 0xfa, + 0x44, 0x3f, 0x44, 0xfc, 0x8b, 0x04, 0xfa, 0x64, 0x3f, 0x18, 0xe1, 0x5d, 0x93, 0x5b, 0xfc, 0xc3, + 0x94, 0x57, 0x9f, 0xb2, 0xdf, 0x3c, 0xb9, 0x11, 0x77, 0x73, 0x56, 0xcb, 0x23, 0x4e, 0x5e, 0x8f, + 0x3b, 0x4d, 0xab, 0x80, 0xd8, 0x3d, 0x5d, 0x4b, 0x32, 0x3c, 0xe6, 0xb7, 0x4f, 0x3d, 0xee, 0xb4, + 0xf4, 0x52, 0xdc, 0xab, 0x5b, 0x85, 0x63, 0x9c, 0xd0, 0xb3, 0x2b, 0xff, 0x2c, 0x03, 0xf3, 0x92, + 0xa3, 0x9e, 0xf8, 0x86, 0xd5, 0xdf, 0xd7, 0xe0, 0x6c, 0xda, 0x4b, 0x32, 0x72, 0xb7, 0xf7, 0xa7, + 0xb9, 0xfa, 0x3c, 0x4e, 0x2c, 0xbd, 0x31, 0x6a, 0x35, 0x61, 0x77, 0xbf, 0xf4, 0x0b, 0x7f, 0xfe, + 0xc3, 0x6f, 0x64, 0xce, 0x19, 0x64, 0xf9, 0xe4, 0xb5, 0x65, 0xfe, 0x21, 0xb1, 0xe5, 0x27, 0x1c, + 0xe6, 0x9e, 0xb6, 0x78, 0x47, 0x23, 0x2e, 0x4c, 0x72, 0x53, 0x3d, 0xb9, 0xd1, 0xbb, 0x09, 0xe5, + 0x2a, 0xa0, 0x74, 0x73, 0x30, 0xa0, 0x68, 0xfd, 0x05, 0x6c, 0x7d, 0xce, 0x80, 0xa8, 0xf5, 0x7b, + 0xda, 0xe2, 0xca, 0x7f, 0x1c, 0x87, 0x39, 0x89, 0x65, 0xe8, 0x50, 0x7d, 0x0c, 0x93, 0xfc, 0x62, + 0x89, 0x5c, 0xef, 0xe5, 0x15, 0xab, 0x5c, 0x6e, 0x95, 0x5e, 0x1e, 0x04, 0x26, 0x68, 0x38, 0x8b, + 0x34, 0xcc, 0x1a, 0x05, 0x46, 0x83, 0xeb, 0xb4, 0x28, 0x23, 0x81, 0x78, 0x50, 0x08, 0xf9, 0x46, + 0x6e, 0xf6, 0x42, 0x15, 0x37, 0x9d, 0x96, 0x5e, 0x19, 0x02, 0x52, 0xb4, 0x3b, 0x8f, 0xed, 0x4e, + 0x91, 0xa8, 0x5d, 0xf2, 0x35, 0xc8, 0x09, 0x73, 0x2f, 0xe9, 0x49, 0xbd, 0x6a, 0x98, 0x2e, 0xdd, + 0x18, 0x08, 0x27, 0x9a, 0xbb, 0x82, 0xcd, 0x95, 0x48, 0x31, 0x6c, 0x6e, 0xd9, 0xe6, 0x20, 0xcb, + 0x5f, 0x6d, 0x5b, 0xc7, 0xf4, 0x53, 0xf2, 0x51, 0x38, 0xd2, 0x3d, 0x39, 0xac, 0x8e, 0xf3, 0xcb, + 0x83, 0xc0, 0x44, 0xd3, 0x45, 0x6c, 0x9a, 0x2c, 0xea, 0x51, 0xd3, 0xa2, 0xc9, 0x63, 0x98, 0x14, + 0x6e, 0x16, 0x3d, 0x9b, 0x54, 0xdc, 0xac, 0x7b, 0x37, 0x19, 0x7b, 0x7e, 0x2f, 0x06, 0xb5, 0xa4, + 0x0c, 0xea, 0xca, 0x1f, 0x64, 0xe0, 0x8c, 0x24, 0x57, 0x81, 0x2b, 0x32, 0xf9, 0x96, 0x06, 0xd3, + 0xb2, 0x6f, 0x34, 0x49, 0x0d, 0x35, 0xde, 0xc7, 0xcf, 0xba, 0x74, 0x67, 0xf8, 0x0a, 0xc1, 0x07, + 0x00, 0x90, 0xc2, 0x4b, 0xe4, 0x02, 0xa3, 0xd0, 0xe6, 0x90, 0x36, 0xf5, 0x96, 0x65, 0x87, 0x6a, + 0xf2, 0x0b, 0x5a, 0xe4, 0x84, 0xba, 0xd8, 0xaf, 0x09, 0xd5, 0xd7, 0xba, 0xf4, 0xea, 0x50, 0xb0, + 0x82, 0x92, 0x17, 0x91, 0x92, 0x22, 0x59, 0x88, 0x51, 0x22, 0x3c, 0x4f, 0x57, 0xbe, 0xa7, 0x29, + 0x1e, 0xcb, 0xc1, 0xb7, 0x1c, 0x7e, 0x57, 0x83, 0x59, 0x35, 0x94, 0x07, 0xb9, 0x93, 0xee, 0x02, + 0xd7, 0x3b, 0x24, 0x4a, 0xe9, 0xb5, 0x11, 0x6a, 0xa4, 0x31, 0x4e, 0x5c, 0x30, 0x86, 0xb2, 0x2c, + 0xee, 0xa2, 0x56, 0xfe, 0x72, 0x12, 0x16, 0x92, 0x34, 0xef, 0x59, 0xb6, 0xcb, 0x78, 0x1a, 0x68, + 0x92, 0x5b, 0x7d, 0x5a, 0x4f, 0xdc, 0x96, 0x97, 0x6e, 0x0f, 0x09, 0x2d, 0xe8, 0xbc, 0x80, 0x74, + 0xbe, 0x60, 0xe8, 0x12, 0x9d, 0x78, 0x9b, 0xc1, 0xd4, 0xcb, 0x6f, 0x68, 0xd1, 0x54, 0x1f, 0x84, + 0x37, 0x36, 0xe3, 0x97, 0x86, 0x05, 0x0f, 0x1e, 0x01, 0x21, 0x1d, 0x97, 0xc9, 0xa5, 0x38, 0x1d, + 0xd1, 0xfc, 0xb7, 0x9b, 0x9f, 0x92, 0xff, 0x4f, 0x93, 0x35, 0xde, 0xf2, 0x80, 0x46, 0x12, 0x8a, + 0xef, 0xce, 0xf0, 0x15, 0x54, 0xad, 0x40, 0x12, 0xfc, 0x21, 0xbf, 0xa2, 0x41, 0x3e, 0xb8, 0xa8, + 0x25, 0x83, 0xba, 0x1b, 0xbb, 0xf2, 0x2d, 0x2d, 0x0f, 0x0d, 0x9f, 0x26, 0xfe, 0x0a, 0x7f, 0xf8, + 0xfd, 0xe4, 0xef, 0x68, 0x00, 0xd1, 0x5d, 0x2d, 0x19, 0xd4, 0xd1, 0xc4, 0xcd, 0x6f, 0x5f, 0x19, + 0x4f, 0xbf, 0x08, 0x36, 0xae, 0x22, 0x4d, 0x17, 0x8c, 0x1e, 0x34, 0x31, 0x09, 0xfa, 0x55, 0x2d, + 0x54, 0xd7, 0x83, 0xc4, 0x58, 0xd5, 0xda, 0xb7, 0x87, 0x84, 0x56, 0xc5, 0x67, 0x31, 0x29, 0x3e, + 0x5f, 0x8d, 0xee, 0xfb, 0x3f, 0x5d, 0xf9, 0x4e, 0x56, 0x59, 0xb2, 0xf1, 0xdb, 0x44, 0x5f, 0x1f, + 0xb0, 0x9c, 0x25, 0x43, 0x15, 0xa5, 0x2f, 0x67, 0x29, 0x01, 0x8a, 0x54, 0x2d, 0xd0, 0x76, 0x9a, + 0xca, 0x72, 0xc6, 0x5f, 0x7b, 0x7f, 0x4a, 0x7e, 0x2b, 0xa9, 0xa2, 0x6e, 0x0f, 0x68, 0x20, 0xa6, + 0x9f, 0x96, 0x86, 0x05, 0x4f, 0x5b, 0x65, 0x15, 0xb2, 0x84, 0x66, 0x1a, 0x62, 0x63, 0x91, 0x16, + 0xd0, 0x28, 0x7d, 0x63, 0x91, 0x1a, 0xdf, 0x48, 0xdd, 0x58, 0x20, 0x0d, 0x2b, 0x7f, 0xac, 0x2b, + 0x7b, 0x50, 0xe1, 0x52, 0xec, 0x85, 0x8a, 0xf0, 0xc6, 0x90, 0x91, 0x5b, 0x4b, 0x37, 0x07, 0x03, + 0x0a, 0x2a, 0x16, 0x90, 0x0a, 0xdd, 0x98, 0x62, 0x54, 0x08, 0x57, 0x69, 0x26, 0xb7, 0x27, 0x30, + 0x81, 0x11, 0x52, 0xd3, 0x45, 0x22, 0x19, 0x8c, 0xb5, 0x74, 0x63, 0x20, 0x9c, 0x68, 0xf1, 0x22, + 0xb6, 0xb8, 0x60, 0xcc, 0x4b, 0x2d, 0x2e, 0x37, 0x18, 0x08, 0x6b, 0xf7, 0x6b, 0xfd, 0xf7, 0xb1, + 0x29, 0x41, 0x58, 0xfb, 0x75, 0x36, 0x36, 0x49, 0x2e, 0x63, 0xd3, 0xe7, 0x17, 0xcf, 0xc9, 0x4d, + 0x7f, 0x35, 0x74, 0xa3, 0xfd, 0x94, 0xfc, 0x92, 0xa4, 0xef, 0x6f, 0x0e, 0x11, 0xf9, 0xb4, 0xcf, + 0xa0, 0xa7, 0xc6, 0x48, 0x35, 0x6e, 0x20, 0x05, 0x57, 0xc9, 0x65, 0x99, 0x82, 0x70, 0x46, 0x48, + 0x94, 0x7c, 0x3d, 0xdc, 0x72, 0xdd, 0x18, 0x32, 0x7e, 0x69, 0x3f, 0x3e, 0xc4, 0xb6, 0x5d, 0x06, + 0x52, 0x71, 0xb1, 0xd4, 0x8b, 0x0f, 0x6c, 0x20, 0xbe, 0x8e, 0x4f, 0x3a, 0x7c, 0xaf, 0x9f, 0x00, + 0xc8, 0x41, 0x48, 0xfb, 0x09, 0x80, 0x12, 0x4f, 0x54, 0x5d, 0xe9, 0x82, 0xd6, 0x31, 0x78, 0xa8, + 0xc2, 0x81, 0xbf, 0xa6, 0xc1, 0x8c, 0x12, 0xbd, 0x33, 0x7d, 0x8d, 0xe9, 0x1d, 0x69, 0x34, 0x7d, + 0x8d, 0xe9, 0x13, 0x5b, 0x34, 0x9d, 0x32, 0x0c, 0x32, 0xaa, 0x50, 0x76, 0x2a, 0xeb, 0x86, 0xc5, + 0x21, 0x82, 0x72, 0xf6, 0xdd, 0xef, 0xf5, 0x88, 0x2c, 0x6a, 0x9c, 0x41, 0x62, 0x66, 0x88, 0x3c, + 0x33, 0xc9, 0xef, 0x8d, 0x74, 0x1e, 0x1d, 0x18, 0x1b, 0x34, 0xfd, 0x3c, 0x3a, 0x38, 0x42, 0x67, + 0xb0, 0x1a, 0x1b, 0x67, 0x64, 0x4e, 0x45, 0x07, 0x52, 0xf2, 0x4d, 0x2d, 0xfa, 0xc6, 0x9e, 0x50, + 0x5e, 0xcb, 0x23, 0x46, 0xd4, 0x4c, 0xdf, 0xab, 0xf4, 0x8b, 0x88, 0x19, 0xa8, 0x75, 0xe3, 0x05, + 0x45, 0xb2, 0x82, 0x4f, 0xfd, 0x31, 0xba, 0xfe, 0x8e, 0x06, 0x73, 0xb1, 0x48, 0x95, 0x64, 0x88, + 0x76, 0xd4, 0xf8, 0x55, 0xe9, 0x5b, 0x85, 0xfe, 0x61, 0x30, 0x6f, 0x22, 0x69, 0x86, 0x71, 0x29, + 0x95, 0xb4, 0x65, 0x11, 0x30, 0x8a, 0x91, 0xf8, 0x0f, 0xc4, 0xc7, 0x5c, 0x95, 0x20, 0x8d, 0x64, + 0x65, 0x84, 0x80, 0x92, 0x01, 0x99, 0x9f, 0x1b, 0xa9, 0x8e, 0x20, 0xf4, 0x15, 0x24, 0xf4, 0x1a, + 0xb9, 0x9a, 0x4e, 0xa8, 0x3c, 0x0f, 0xfe, 0x5c, 0x83, 0x8b, 0xfd, 0xc2, 0x49, 0x92, 0x77, 0x3f, + 0x53, 0x14, 0xcc, 0xd2, 0x17, 0x9e, 0xb5, 0xba, 0xe8, 0xca, 0xeb, 0xd8, 0x95, 0x25, 0xe3, 0x95, + 0x81, 0x5d, 0x91, 0x45, 0xf7, 0xfb, 0x1a, 0x2c, 0xa4, 0x07, 0x91, 0x24, 0x9f, 0x1f, 0x4c, 0x50, + 0x6a, 0xd4, 0xcb, 0xd2, 0x9b, 0xa3, 0x57, 0x14, 0x7d, 0xb8, 0x8b, 0x7d, 0x58, 0x36, 0x16, 0xd3, + 0xfa, 0xb0, 0x1c, 0x46, 0x6f, 0x88, 0x69, 0xef, 0x95, 0x6f, 0x8f, 0x2b, 0x07, 0x2b, 0x74, 0x51, + 0xe1, 0xb6, 0x6e, 0xf2, 0x73, 0x30, 0x29, 0x7e, 0x0d, 0x8c, 0xef, 0x3f, 0xc4, 0xca, 0xa2, 0x46, + 0xf9, 0x57, 0x77, 0xc4, 0xe8, 0x70, 0xc3, 0xbf, 0x77, 0xbd, 0xcc, 0xff, 0x31, 0xfe, 0xfe, 0x1c, + 0x5b, 0xe1, 0x07, 0xb5, 0xaf, 0x04, 0xe7, 0xef, 0xbf, 0xc2, 0x0f, 0xd7, 0x3e, 0xff, 0x36, 0x00, + 0x6b, 0xff, 0x2b, 0x30, 0x81, 0xec, 0xe8, 0xb7, 0xb0, 0xc9, 0x1f, 0xcd, 0xe8, 0xb7, 0xb0, 0xa9, + 0x1f, 0xb1, 0x50, 0xd4, 0x8f, 0xdc, 0x38, 0xfe, 0x66, 0x6d, 0xff, 0x82, 0x06, 0x39, 0xf1, 0xb5, + 0x06, 0x32, 0xf8, 0xa3, 0x0f, 0x43, 0xec, 0x2f, 0xe2, 0x9f, 0x7e, 0x10, 0x2b, 0xbb, 0x71, 0x2e, + 0x4e, 0x82, 0xf8, 0x1a, 0x02, 0x93, 0x8d, 0xef, 0x66, 0x15, 0x43, 0x81, 0x78, 0x1b, 0xc0, 0x68, + 0x9b, 0x40, 0x2b, 0x75, 0xaf, 0x83, 0x4a, 0xfa, 0x13, 0xb9, 0xd2, 0xed, 0x21, 0xa1, 0x7b, 0x6f, + 0xff, 0x8e, 0x39, 0x5c, 0x70, 0x5c, 0xe2, 0x0f, 0xb2, 0xc8, 0x40, 0xbc, 0xca, 0x0b, 0xaf, 0x5e, + 0xe7, 0xed, 0x9e, 0xef, 0xbc, 0xc4, 0xc9, 0xc4, 0x28, 0x26, 0xe8, 0x58, 0x6e, 0x20, 0xa4, 0x18, + 0xaf, 0xc0, 0xdb, 0x64, 0x98, 0x6e, 0x46, 0x6f, 0x57, 0x06, 0x93, 0xa3, 0xbe, 0xc5, 0x30, 0xce, + 0x23, 0x39, 0x67, 0x48, 0x92, 0x2d, 0x2b, 0x3f, 0x54, 0xe7, 0xb2, 0x14, 0xcc, 0x92, 0x7c, 0x67, + 0x90, 0x7d, 0xa2, 0x67, 0x8c, 0xd4, 0x74, 0x02, 0x7b, 0xc7, 0x42, 0x35, 0x5e, 0x43, 0x02, 0x5f, + 0x25, 0xa8, 0x4c, 0xa5, 0xe0, 0x9b, 0xd2, 0xf6, 0x55, 0x0d, 0xd4, 0xf9, 0xe9, 0x40, 0x13, 0x4e, + 0xaf, 0x38, 0xa8, 0xa5, 0xdb, 0x43, 0x42, 0xa7, 0x99, 0x70, 0x64, 0xd2, 0xd8, 0x10, 0xfe, 0xe6, + 0x80, 0x03, 0x78, 0xaf, 0xf8, 0xa6, 0x03, 0x89, 0x88, 0x9d, 0x2d, 0xc4, 0xba, 0xb9, 0x78, 0x35, + 0xc1, 0x9f, 0x04, 0x5f, 0xbe, 0xa1, 0x85, 0x9b, 0xfb, 0x41, 0x24, 0xa9, 0xcb, 0xc8, 0xed, 0x21, + 0xa1, 0x05, 0x49, 0xb7, 0x90, 0xa4, 0x97, 0x4b, 0x83, 0x49, 0x62, 0x6a, 0xe1, 0xbf, 0x4d, 0xa8, + 0xb6, 0xb8, 0x30, 0xca, 0x90, 0xc7, 0x0e, 0x23, 0x62, 0x1c, 0xd3, 0xa3, 0xb5, 0xa4, 0x7f, 0x3e, + 0xb0, 0x74, 0x6b, 0x38, 0x60, 0x41, 0x6d, 0x09, 0xa9, 0x3d, 0x6b, 0xcc, 0xa1, 0x05, 0x23, 0x6a, + 0x9d, 0x0d, 0xe2, 0x2f, 0x2a, 0x56, 0xaf, 0xa5, 0xfe, 0x78, 0x13, 0xfb, 0xa0, 0xe5, 0xa1, 0xe1, + 0x05, 0x29, 0xe7, 0x90, 0x94, 0x79, 0x12, 0x27, 0x85, 0x9d, 0x49, 0xc2, 0xf9, 0x36, 0xa0, 0x77, + 0xb1, 0xe9, 0x76, 0x7b, 0x48, 0x68, 0x41, 0xc1, 0x32, 0x52, 0xf0, 0x0a, 0xb9, 0x11, 0xa3, 0x20, + 0x9a, 0x6c, 0x4a, 0x68, 0xa8, 0x4f, 0x65, 0x3b, 0xd3, 0x80, 0x31, 0x52, 0xa5, 0xfc, 0xd6, 0x70, + 0xc0, 0xea, 0xf1, 0x75, 0xf1, 0x72, 0x9c, 0xac, 0x38, 0x39, 0xdf, 0xd1, 0x20, 0x1f, 0x7c, 0x18, + 0x8b, 0x0c, 0xe8, 0x7b, 0xec, 0x2b, 0x5c, 0xa5, 0xa5, 0x61, 0xc1, 0x05, 0x51, 0x77, 0x90, 0xa8, + 0x45, 0x72, 0x33, 0x4e, 0xd4, 0x89, 0x80, 0x8c, 0x53, 0xb7, 0xf2, 0x7f, 0x27, 0xe0, 0xbc, 0x1c, + 0x94, 0x43, 0xfd, 0xe4, 0xe6, 0xaf, 0x46, 0x6a, 0x6b, 0x88, 0x6f, 0x99, 0x0e, 0x71, 0x66, 0xe9, + 0xfb, 0xcd, 0x63, 0x61, 0x93, 0x30, 0xce, 0x32, 0xea, 0x83, 0xfd, 0x5c, 0xf0, 0xd1, 0xdf, 0x60, + 0x49, 0x14, 0xda, 0x62, 0x08, 0x72, 0x54, 0x85, 0x71, 0x67, 0xf8, 0x0a, 0x2a, 0x39, 0xa5, 0x9e, + 0xe4, 0xfc, 0xb6, 0x32, 0x15, 0x87, 0xf8, 0x04, 0xea, 0x70, 0xc7, 0x92, 0x01, 0x5f, 0x4f, 0x0e, + 0xb6, 0x0d, 0x24, 0x95, 0x2e, 0x65, 0x1d, 0x1c, 0xea, 0xa3, 0xb1, 0xca, 0xdc, 0x7c, 0x6d, 0x84, + 0x1a, 0x82, 0x9c, 0x57, 0x91, 0x9c, 0xeb, 0xe4, 0x5a, 0x1a, 0x39, 0xf1, 0x1b, 0x3b, 0x69, 0x09, + 0x1a, 0x62, 0x04, 0xd5, 0xf9, 0x79, 0x67, 0xf8, 0x0a, 0xea, 0xc6, 0x66, 0xf1, 0x42, 0x2a, 0x69, + 0x9c, 0xa4, 0x95, 0xff, 0x3a, 0x1b, 0xbb, 0x78, 0x09, 0x2f, 0xc7, 0x87, 0xb8, 0x78, 0x49, 0x0f, + 0x3f, 0x5d, 0xba, 0x3d, 0x24, 0x74, 0xfa, 0xc5, 0x4b, 0xf8, 0x22, 0x1d, 0xa5, 0xec, 0xd7, 0xb4, + 0x30, 0x54, 0x08, 0x19, 0x1c, 0xae, 0x4f, 0x39, 0x9c, 0x2f, 0x0d, 0x0b, 0x9e, 0xb6, 0x11, 0x94, + 0xe9, 0x90, 0x0f, 0xe5, 0xbf, 0x3d, 0xd0, 0x8c, 0x9f, 0x1e, 0xc1, 0x79, 0x20, 0x53, 0x62, 0x83, + 0x27, 0xe4, 0x6a, 0xf1, 0x5a, 0x82, 0x18, 0xfe, 0x7f, 0xf9, 0xab, 0xe1, 0x63, 0xfe, 0x4f, 0xc9, + 0x37, 0x35, 0x28, 0x84, 0xd1, 0x92, 0x7b, 0xdd, 0x05, 0xf5, 0x0c, 0xe1, 0xdc, 0xeb, 0x2e, 0xa8, + 0x4f, 0x20, 0x66, 0x61, 0x1f, 0x33, 0x4a, 0x09, 0xea, 0xf8, 0x77, 0xf8, 0xac, 0x16, 0xee, 0x9a, + 0xff, 0x4d, 0x2f, 0x23, 0xd5, 0xbd, 0x01, 0x2d, 0xf6, 0x33, 0x06, 0xbc, 0xfd, 0x4c, 0x75, 0x05, + 0xe1, 0xb7, 0x91, 0xf0, 0x1b, 0x86, 0x91, 0x20, 0x9c, 0x06, 0xd5, 0x64, 0x13, 0xc0, 0xff, 0x1f, + 0x6d, 0xfb, 0x6f, 0x0d, 0x19, 0x3f, 0x75, 0xb8, 0xd1, 0x8e, 0x6d, 0xfa, 0x95, 0xd3, 0x9a, 0x42, + 0x16, 0x0f, 0x89, 0x10, 0xcc, 0x84, 0xe0, 0x31, 0xd2, 0xc0, 0x19, 0xa6, 0x04, 0x4c, 0x1d, 0x38, + 0x13, 0x62, 0x0f, 0x7a, 0xfa, 0xcc, 0x84, 0x06, 0x87, 0x64, 0xf4, 0xfc, 0xae, 0x06, 0x39, 0x11, + 0xb0, 0x73, 0x20, 0x3d, 0x6a, 0x88, 0xd1, 0x81, 0xf4, 0xc4, 0xa2, 0x89, 0xc6, 0x16, 0x76, 0x99, + 0x1e, 0x11, 0x24, 0x74, 0xf9, 0xab, 0x4a, 0x10, 0xcd, 0x4f, 0xc9, 0xdf, 0xd4, 0x60, 0x4a, 0x8a, + 0xc6, 0x49, 0x5e, 0x1b, 0x62, 0x3c, 0xd4, 0x70, 0xa2, 0xa5, 0x95, 0x51, 0xaa, 0xa8, 0xdb, 0x22, + 0xe3, 0x62, 0xea, 0x38, 0xd2, 0x06, 0x42, 0x33, 0xe6, 0x7d, 0x87, 0xd1, 0x17, 0x85, 0xa9, 0x1c, + 0x4c, 0x5f, 0x22, 0x9a, 0xe6, 0x60, 0xfa, 0x92, 0x51, 0x30, 0xfb, 0xcc, 0xdb, 0xd0, 0x80, 0xc4, + 0xa8, 0xfb, 0x6e, 0x40, 0x9d, 0xd0, 0x74, 0x43, 0x51, 0xa7, 0xaa, 0xbb, 0x95, 0x51, 0xaa, 0x08, + 0xea, 0x3e, 0x8f, 0xd4, 0xbd, 0xb6, 0xb8, 0xdc, 0x9b, 0xba, 0x50, 0xed, 0x49, 0x31, 0x37, 0x3f, + 0x25, 0x7f, 0x57, 0x83, 0x59, 0x35, 0x62, 0x25, 0x79, 0x7d, 0xc4, 0x00, 0x97, 0x9c, 0xea, 0xbb, + 0xcf, 0x14, 0x16, 0x33, 0x98, 0xbe, 0xa4, 0x0f, 0x5b, 0x57, 0x2f, 0xc2, 0x99, 0x86, 0x73, 0x1c, + 0xc7, 0xbf, 0xa7, 0x7d, 0x29, 0x6b, 0x75, 0xec, 0xc7, 0x93, 0xf8, 0xde, 0xef, 0x73, 0xff, 0x2f, + 0x00, 0x00, 0xff, 0xff, 0x3c, 0x4a, 0x64, 0xe7, 0xa6, 0xae, 0x00, 0x00, } diff --git a/api/api.proto b/api/api.proto index dec7b0a15..e3ada8a24 100644 --- a/api/api.proto +++ b/api/api.proto @@ -236,6 +236,8 @@ message VolumeLocator { string name = 1; // A set of name-value pairs that acts as search filters map volume_labels = 2; + // Filter with ownership + Ownership ownership = 3; } // Source is a structure that can be given to a volume @@ -325,6 +327,8 @@ message VolumeSpec { IoStrategy io_strategy = 30; // PlacementStrategy specifies a spec to indicate where to place the volume. VolumePlacementStrategy placement_strategy = 31; + // Owner + Ownership ownership = 32; } // VolumeSpecUpdate provides a method to set any of the VolumeSpec of an existing volume @@ -361,6 +365,12 @@ message VolumeSpecUpdate { oneof sharedv4_opt { bool sharedv4 = 24; } // QueueDepth defines the desired block device queue depth oneof queue_depth_opt { uint32 queue_depth = 25; } + // Ownership + // + // If the value of `owner` in the `ownership` message is an empty string + // then the value of `owner` in the `VolumeSpec.Ownership.owner` will not + // be updated. + Ownership ownership = 26; } // ReplicaSet set of machine IDs (nodes) to which part of this volume is erasure @@ -375,6 +385,45 @@ message RuntimeStateMap { map runtime_state = 1; } +// Ownership information for resource +// Administrators are users who belong to the group `*`, meaning, every group. +message Ownership { + message AccessControl { + // Group access to resource which must be set in the authorization token. + // + // Can be set by the owner or the system administrator only. + // Possible values are: + // * an empty list: An empty list means no groups are allowed + // * `["*"]`: All groups are allowed + // * `["group1", "group2"]`: Only certain groups are allowed. In this example only + // _group1_ and _group2_ are allowed. + // + repeated string groups = 2; + // Collaborator access to resource gives access to other usernames. + // Must be the username set in the authorization token. + // + // The owner or the system administrator can set this value. + // Possible values are: + // * an empty list: An empty list means no users are allowed + // * `["*"]`: All users are allowed + // * `["username1", "username2"]`: Only certain usernames are allowed. In this example only + // _username1_ and _username2_ are allowed. + repeated string collaborators = 3; + } + + // Username of owner. + // + // The storage system uses the username taken from the security authorization + // token and is saved on this field. Only users with system administration + // can edit this value. + string owner = 1; + // Permissions to share resource which can be set by the owner. + // + // NOTE: To create an "admin" user which has access to any resource set the group value + // in the token of the user to `*`. + AccessControl acls = 2; +} + // Volume represents an abstract storage volume. message Volume { // Self referential volume ID. @@ -2078,6 +2127,8 @@ message SdkVolumeEnumerateWithFiltersRequest { string name = 2; // (optional) Labels to search map labels = 3; + // (optional) Ownership to match + Ownership ownership = 4; } // Defines the response when listing volumes @@ -2752,7 +2803,7 @@ message SdkVersion { // SDK version major value of this specification Major = 0; // SDK version minor value of this specification - Minor = 36; + Minor = 37; // SDK version patch value of this specification Patch = 0; } diff --git a/api/ownership.go b/api/ownership.go new file mode 100644 index 000000000..09ea0eccd --- /dev/null +++ b/api/ownership.go @@ -0,0 +1,229 @@ +/* +Package ownership manages access to resources +Copyright 2019 Portworx + +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. +*/ +package api + +import ( + "context" + + "github.com/libopenstorage/openstorage/pkg/auth" +) + +const ( + // AdminGroup is the value that can be set in the token claims Group which + // gives the user access to any resource + AdminGroup = "*" +) + +// OwnershipSetUsernameFromContext is used to create a new ownership object for +// a volume. It takes an ownership value if passed in by the user, then +// sets the `owner` value to the user name referred to in the user context +func OwnershipSetUsernameFromContext(ctx context.Context, srcOwnership *Ownership) *Ownership { + // Check if the context has information about the user. If not, + // then security is not enabled. + if userinfo, ok := auth.NewUserInfoFromContext(ctx); ok { + + // Merge the previous acls which may have been set by the user + var acls *Ownership_AccessControl + if srcOwnership != nil { + acls = srcOwnership.GetAcls() + } + + return &Ownership{ + Owner: userinfo.Username, + Acls: acls, + } + } + + return srcOwnership +} + +// NewLocatorOwnershipFromContext is used by the Enumerate functions as a +// simple way to filter for volumes only accessible by the user +func NewLocatorOwnershipFromContext(ctx context.Context) *Ownership { + // Check if the context has information about the user. If not, + // then security is not enabled. + if userinfo, ok := auth.NewUserInfoFromContext(ctx); ok { + return &Ownership{ + Owner: userinfo.Username, + Acls: &Ownership_AccessControl{ + Groups: userinfo.Claims.Groups, + Collaborators: []string{userinfo.Username}, + }, + } + } + + return nil +} + +// IsPermitted returns true if the user has access to the resource +// according to the ownership +func (o *Ownership) IsPermitted(user *auth.UserInfo) bool { + + // If we are missing user information then do not allow. + // It is ok for the the user claims to have an empty Groups setting + if user == nil || + len(user.Username) == 0 { + return false + } + + if o.Owner == user.Username || + o.IsUserAllowedByGroup(user) || + o.IsUserAllowedByCollaborators(user) { + return true + } + + return false +} + +// GetGroups returns the groups in the ownership +func (o *Ownership) GetGroups() []string { + if o.GetAcls() == nil { + return nil + } + return o.GetAcls().GetGroups() +} + +// GetCollaborators returns the collaborators in the ownership +func (o *Ownership) GetCollaborators() []string { + if o.GetAcls() == nil { + return nil + } + return o.GetAcls().GetCollaborators() +} + +// IsUserAllowedByGroup returns true if the user is allowed access +// by belonging to the appropriate group +func (o *Ownership) IsUserAllowedByGroup(user *auth.UserInfo) bool { + ownergroups := o.GetGroups() + if len(ownergroups) == 0 { + return false + } + + // Check if any group is allowed + if listContains(ownergroups, "*") { + return true + } + + // Check each of the groups from the user + for _, group := range user.Claims.Groups { + // Check if the user is in the admin group and can access + // any resource + if group == AdminGroup { + return true + } + + // Check if the user group has permission + if listContains(ownergroups, group) { + return true + } + } + return false +} + +// IsUserAllowedByCollaborators returns true if the user is allowed access +// because they are part of the collaborators list +func (o *Ownership) IsUserAllowedByCollaborators(user *auth.UserInfo) bool { + collaborators := o.GetCollaborators() + if len(collaborators) == 0 { + return false + } + + // Check any user is allowed + if listContains(collaborators, "*") { + return true + } + + // Check each of the groups from the user + return listContains(collaborators, user.Username) +} + +// IsAdminByUser returns true if the user is an ownership admin, meaning, +// that they belong to any group +func (o *Ownership) IsAdminByUser(user *auth.UserInfo) bool { + + // If there is a user, then auth is enabled + if user != nil { + return listContains(user.Claims.Groups, AdminGroup) + } + + // No auth enabled, so everyone is an admin + return true +} + +// Update can be used to update an ownership with new ownership information. It +// takes into account who is trying to change the ownership values +func (o *Ownership) Update(newownerInfo *Ownership, user *auth.UserInfo) *Ownership { + if user == nil { + // There is no auth, just copy the whole thing + o = newownerInfo + } else { + // Auth is enabled + + // Only the owner or admin can change the group + if user.Username == o.Owner || o.IsAdminByUser(user) { + o.Acls = newownerInfo.GetAcls() + } + + // Only the admin can change the owner + if o.IsAdminByUser(user) && len(newownerInfo.Owner) != 0 { + o.Owner = newownerInfo.Owner + } + } + + return o +} + +// IsMatch returns true if the ownership has at least one similar +// owner, group, or collaborator +func (o *Ownership) IsMatch(check *Ownership) bool { + if check == nil { + return false + } + + // Check user + if o.Owner == check.GetOwner() { + return true + } + if check.GetAcls() == nil || o.GetAcls() == nil { + return false + } + + // Check groups + for _, group := range check.GetAcls().GetGroups() { + if listContains(o.GetAcls().GetGroups(), group) { + return true + } + } + + // Check collaborators + for _, collaborator := range check.GetAcls().GetCollaborators() { + if listContains(o.GetAcls().GetCollaborators(), collaborator) { + return true + } + } + + return false +} + +func listContains(list []string, s string) bool { + for _, value := range list { + if value == s { + return true + } + } + return false +} diff --git a/api/ownership_test.go b/api/ownership_test.go new file mode 100644 index 000000000..ec32407d6 --- /dev/null +++ b/api/ownership_test.go @@ -0,0 +1,448 @@ +/* +Package ownership manages access to resources +Copyright 2019 Portworx + +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. +*/ +package api + +import ( + "fmt" + "reflect" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/libopenstorage/openstorage/pkg/auth" +) + +func TestOwnershipIsPermitted(t *testing.T) { + tests := []struct { + owner *Ownership + user *auth.UserInfo + permitted bool + }{ + { + owner: &Ownership{ + Owner: "me", + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + }, + user: &auth.UserInfo{ + Username: "notme", + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + }, + user: &auth.UserInfo{ + Username: "me", + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{}, + }, + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"*"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"*"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group2"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{"*"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: false, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{"user1", "user2", "user3", "notme"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2"}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"group1", "group2", AdminGroup}, + }, + }, + permitted: true, + }, + { + owner: &Ownership{ + Owner: "me", + Acls: &Ownership_AccessControl{ + Groups: []string{"group3"}, + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + user: &auth.UserInfo{ + Username: "notme", + Claims: auth.Claims{ + Groups: []string{"*"}, + }, + }, + permitted: true, + }, + } + + for _, test := range tests { + assert.Equal(t, test.owner.IsPermitted(test.user), test.permitted) + } +} + +func TestOwnershipUpdate(t *testing.T) { + + tests := []struct { + owner *Ownership + update *Ownership + result *Ownership + user *auth.UserInfo + }{ + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }}, + update: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{ + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + result: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + user: &auth.UserInfo{ + Username: "user1", + Claims: auth.Claims{ + Groups: []string{"group"}, + }, + }, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }}, + update: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1", "group2"}, + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + result: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1", "group2"}, + Collaborators: []string{"user1", "user2", "user3"}, + }, + }, + user: &auth.UserInfo{ + Username: "user1", + Claims: auth.Claims{ + Groups: []string{"group"}, + }, + }, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }}, + update: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{}, + }, + result: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{}, + }, + user: &auth.UserInfo{ + Claims: auth.Claims{ + Groups: []string{"*"}, + }, + }, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }}, + update: &Ownership{ + Acls: &Ownership_AccessControl{}, + }, + result: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{}, + }, + user: &auth.UserInfo{ + Claims: auth.Claims{ + Groups: []string{"*"}, + }, + }, + }, + } + + for _, test := range tests { + r := test.owner.Update(test.update, test.user) + assert.True(t, reflect.DeepEqual(r, test.result), fmt.Sprintf("%v | %v", r, test.result)) + } +} + +func TestOwnershipIsMatch(t *testing.T) { + tests := []struct { + owner *Ownership + match *Ownership + isMatch bool + }{ + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }, + }, + match: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{}, + }, + isMatch: false, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }, + }, + isMatch: false, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }, + }, + match: &Ownership{ + Owner: "user2", + }, + isMatch: false, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }, + }, + match: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + }, + }, + isMatch: true, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + Collaborators: []string{"one", "two", "three"}, + }, + }, + match: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{ + Groups: []string{"one"}, + }, + }, + isMatch: false, + }, + { + owner: &Ownership{ + Owner: "user1", + Acls: &Ownership_AccessControl{ + Groups: []string{"group1"}, + Collaborators: []string{"one", "two", "three"}, + }, + }, + match: &Ownership{ + Owner: "user2", + Acls: &Ownership_AccessControl{ + Collaborators: []string{"three"}, + }, + }, + isMatch: true, + }, + } + + for _, test := range tests { + assert.Equal(t, test.owner.IsMatch(test.match), test.isMatch) + } +} diff --git a/api/server/sdk/api/api.swagger.json b/api/server/sdk/api/api.swagger.json index 7abcc70bd..e262221b1 100644 --- a/api/server/sdk/api/api.swagger.json +++ b/api/server/sdk/api/api.swagger.json @@ -28,6 +28,25 @@ "title": "This defines operator types used in a label matching rule", "type": "string" }, + "OwnershipAccessControl": { + "properties": { + "collaborators": { + "description": "Collaborator access to resource gives access to other usernames.\nMust be the username set in the authorization token.\n\nThe owner or the system administrator can set this value.\nPossible values are:\n * an empty list: An empty list means no users are allowed\n * `[\"*\"]`: All users are allowed\n * `[\"username1\", \"username2\"]`: Only certain usernames are allowed. In this example only\n _username1_ and _username2_ are allowed.", + "items": { + "type": "string" + }, + "type": "array" + }, + "groups": { + "description": "Group access to resource which must be set in the authorization token.\n\nCan be set by the owner or the system administrator only.\nPossible values are:\n * an empty list: An empty list means no groups are allowed\n * `[\"*\"]`: All groups are allowed\n * `[\"group1\", \"group2\"]`: Only certain groups are allowed. In this example only\n _group1_ and _group2_ are allowed.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "SdkCloudMigrateStartRequestMigrateAllVolumes": { "title": "Defines a migration request for all volumes in a cluster", "type": "object" @@ -588,6 +607,20 @@ "title": "ObjectstoreInfo is a structure that has current objectstore info", "type": "object" }, + "apiOwnership": { + "description": "Ownership information for resource\nAdministrators are users who belong to the group `*`, meaning, every group.", + "properties": { + "acls": { + "$ref": "#/definitions/OwnershipAccessControl", + "description": "Permissions to share resource which can be set by the owner.\n\nNOTE: To create an \"admin\" user which has access to any resource set the group value\nin the token of the user to `*`." + }, + "owner": { + "description": "Username of owner.\n\nThe storage system uses the username taken from the security authorization\ntoken and is saved on this field. Only users with system administration\ncan edit this value.", + "type": "string" + } + }, + "type": "object" + }, "apiReplicaSet": { "properties": { "nodes": { @@ -2165,6 +2198,10 @@ "name": { "title": "(optional) Name to search", "type": "string" + }, + "ownership": { + "$ref": "#/definitions/apiOwnership", + "title": "(optional) Ownership to match" } }, "title": "Defines a request to list volumes", @@ -2884,6 +2921,10 @@ "title": "User friendly identifier", "type": "string" }, + "ownership": { + "$ref": "#/definitions/apiOwnership", + "title": "Filter with ownership" + }, "volume_labels": { "additionalProperties": { "type": "string" @@ -3021,6 +3062,10 @@ "format": "boolean", "type": "boolean" }, + "ownership": { + "$ref": "#/definitions/apiOwnership", + "title": "Owner" + }, "passphrase": { "title": "Passphrase for an encrypted volume", "type": "string" @@ -3105,6 +3150,11 @@ "format": "boolean", "type": "boolean" }, + "ownership": { + "$ref": "#/definitions/apiOwnership", + "description": "If the value of `owner` in the `ownership` message is an empty string\nthen the value of `owner` in the `VolumeSpec.Ownership.owner` will not\nbe updated.", + "title": "Ownership" + }, "passphrase": { "type": "string" }, @@ -3201,7 +3251,7 @@ }, "info": { "title": "OpenStorage SDK", - "version": "0.36.0" + "version": "0.37.0" }, "paths": { "/v1/alerts": { diff --git a/api/server/sdk/cloud_backup.go b/api/server/sdk/cloud_backup.go index 0e878b143..a2fe2bda9 100644 --- a/api/server/sdk/cloud_backup.go +++ b/api/server/sdk/cloud_backup.go @@ -50,6 +50,11 @@ func (s *CloudBackupServer) Create( return nil, status.Error(codes.InvalidArgument, "Must supply credential uuid") } + // Check ownership + if err := checkAccessFromDriverForVolumeId(ctx, s.driver(), req.GetVolumeId()); err != nil { + return nil, err + } + // Create the backup r, err := s.driver().CloudBackupCreate(&api.CloudBackupCreateRequest{ VolumeID: req.GetVolumeId(), @@ -190,6 +195,10 @@ func (s *CloudBackupServer) Status( return nil, status.Error(codes.Unavailable, "Resource has not been initialized") } + // XXX Check ownership + // TODO ! + // Get volume id from task id + r, err := s.driver().CloudBackupStatus(&api.CloudBackupStatusRequest{ SrcVolumeID: req.GetVolumeId(), Local: req.GetLocal(), @@ -242,6 +251,12 @@ func (s *CloudBackupServer) History( if len(req.GetSrcVolumeId()) == 0 { return nil, status.Error(codes.InvalidArgument, "Must provide volume id") } + + // Check ownership + if err := checkAccessFromDriverForVolumeId(ctx, s.driver(), req.GetSrcVolumeId()); err != nil { + return nil, err + } + r, err := s.driver().CloudBackupHistory(&api.CloudBackupHistoryRequest{ SrcVolumeID: req.GetSrcVolumeId(), }) @@ -261,6 +276,9 @@ func (s *CloudBackupServer) StateChange( return nil, status.Error(codes.Unavailable, "Resource has not been initialized") } + // TODO + // XXX Get vid from tid + if len(req.GetTaskId()) == 0 { return nil, status.Error(codes.InvalidArgument, "Must provide taskid") } else if req.GetRequestedState() == api.SdkCloudBackupRequestedState_SdkCloudBackupRequestedStateUnknown { @@ -310,6 +328,11 @@ func (s *CloudBackupServer) SchedCreate( return nil, status.Error(codes.InvalidArgument, "Must supply Schedule") } + // Check ownership + if err := checkAccessFromDriverForVolumeId(ctx, s.driver(), req.GetCloudSchedInfo().GetSrcVolumeId()); err != nil { + return nil, err + } + sched, err := sdkSchedToRetainInternalSpecYamlByte(req.GetCloudSchedInfo().GetSchedules()) if err != nil { return nil, err @@ -343,6 +366,9 @@ func (s *CloudBackupServer) SchedDelete( return nil, status.Error(codes.Unavailable, "Resource has not been initialized") } + // TODO + // XXX inspect from uuid and get volume id + if len(req.GetBackupScheduleId()) == 0 { return nil, status.Error(codes.InvalidArgument, "Must provide credential uuid") } @@ -365,6 +391,8 @@ func (s *CloudBackupServer) SchedEnumerate( if s.driver() == nil { return nil, status.Error(codes.Unavailable, "Resource has not been initialized") } + + // Pass in ownership and show only valid ones r, err := s.driver().CloudBackupSchedEnumerate() if err != nil { return nil, status.Errorf(codes.Internal, "Failed to enumerate backups: %v", err) diff --git a/api/server/sdk/cloud_backup_test.go b/api/server/sdk/cloud_backup_test.go index cf05f8a5d..4d7ec6e19 100644 --- a/api/server/sdk/cloud_backup_test.go +++ b/api/server/sdk/cloud_backup_test.go @@ -49,6 +49,15 @@ func TestSdkCloudBackupCreate(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CloudBackupCreate(&api.CloudBackupCreateRequest{ @@ -553,6 +562,15 @@ func TestSdkCloudBackupHistory(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CloudBackupHistory(&api.CloudBackupHistoryRequest{ @@ -698,6 +716,7 @@ func TestSdkCloudBackupSchedCreate(t *testing.T) { // Create server and client connection s := newTestServer(t) defer s.Stop() + id := "test-id" testSched := []*api.SdkSchedulePolicyInterval{ &api.SdkSchedulePolicyInterval{ Retain: 1, @@ -711,7 +730,7 @@ func TestSdkCloudBackupSchedCreate(t *testing.T) { } req := &api.SdkCloudBackupSchedCreateRequest{ CloudSchedInfo: &api.SdkCloudBackupScheduleInfo{ - SrcVolumeId: "test-id", + SrcVolumeId: id, CredentialId: "uuid", Schedules: testSched, }, @@ -723,6 +742,15 @@ func TestSdkCloudBackupSchedCreate(t *testing.T) { mockReq.Schedule = "- freq: daily\n minute: 30\n retain: 1\n" // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CloudBackupSchedCreate(&mockReq). diff --git a/api/server/sdk/server_interceptors.go b/api/server/sdk/server_interceptors.go index 4b0cbe4d3..76b951825 100644 --- a/api/server/sdk/server_interceptors.go +++ b/api/server/sdk/server_interceptors.go @@ -30,14 +30,7 @@ import ( "google.golang.org/grpc/status" ) -// Keys to store data in gRPC context. Use these keys to retrieve -// the data from the gRPC context -type InterceptorContextkey string - const ( - // Key to store in the token claims in gRPC context - InterceptorContextTokenKey InterceptorContextkey = "tokenclaims" - // Metedata context key where the token is found. // This key must be used by the caller as the key for the token in // the metedata of the context. The generated Rest Gateway also uses this @@ -79,7 +72,8 @@ func (s *sdkGrpcServer) auth(ctx context.Context) (context.Context, error) { claims, err = authenticator.AuthenticateToken(ctx, token) if err == nil { // Add authorization information back into the context so that other - // functions can get access to this information + // functions can get access to this information. + // If this is in the context is how functions will know that security is enabled. ctx = auth.ContextSaveUserInfo(ctx, &auth.UserInfo{ Username: authenticator.Username(claims), Claims: *claims, @@ -126,9 +120,11 @@ func (s *sdkGrpcServer) authorizationServerInterceptor( info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, ) (interface{}, error) { - userinfo, err := auth.NewUserInfoFromContext(ctx) - if err != nil { - return nil, err + userinfo, ok := auth.NewUserInfoFromContext(ctx) + if !ok { + return nil, status.Error( + codes.Internal, + "Unable to authorize user because token is missing from context") } claims := &userinfo.Claims @@ -147,13 +143,28 @@ func (s *sdkGrpcServer) authorizationServerInterceptor( // Authorize if err := s.roleServer.Verify(ctx, claims.Roles, info.FullMethod); err != nil { - logger.Infof("Access denied") + logger.Warning("Access denied") return nil, status.Errorf( codes.PermissionDenied, "Access to %s denied: %v", info.FullMethod, err) } + // Execute the command + i, err := handler(ctx, req) + + // Check if we have been denied + if err != nil { + if gErr, ok := status.FromError(err); ok { + if gErr.Code() == codes.PermissionDenied { + logger.Warningf("Access denied: %v", err) + return i, err + } + } + } + + // Log logger.Info("Authorized") - return handler(ctx, req) + + return i, err } diff --git a/api/server/sdk/utils.go b/api/server/sdk/utils.go index b13638b5a..2b872cd37 100644 --- a/api/server/sdk/utils.go +++ b/api/server/sdk/utils.go @@ -18,12 +18,16 @@ limitations under the License. package sdk import ( + "context" "fmt" "os" "time" "github.com/libopenstorage/openstorage/api" "github.com/libopenstorage/openstorage/pkg/sched" + "github.com/libopenstorage/openstorage/volume" + + "github.com/portworx/kvdb" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "gopkg.in/yaml.v2" @@ -239,3 +243,24 @@ func openLog(logfile string) (*os.File, error) { } return file, nil } + +func checkAccessFromDriverForVolumeId(ctx context.Context, d volume.VolumeDriver, volumeId string) error { + vols, err := d.Inspect([]string{volumeId}) + if err == kvdb.ErrNotFound || (err == nil && len(vols) == 0) { + return status.Errorf( + codes.NotFound, + "Volume id %s not found", + volumeId) + } else if err != nil { + return status.Errorf( + codes.Internal, + "Failed to find volume %s: %v", + volumeId, err) + } + + if !vols[0].IsPermitted(ctx) { + return status.Errorf(codes.PermissionDenied, "Access denied to volume %s", volumeId) + } + + return nil +} diff --git a/api/server/sdk/volume.go b/api/server/sdk/volume.go index d039d6d10..926dec1af 100644 --- a/api/server/sdk/volume.go +++ b/api/server/sdk/volume.go @@ -17,6 +17,9 @@ limitations under the License. package sdk import ( + "context" + + "github.com/libopenstorage/openstorage/api" "github.com/libopenstorage/openstorage/api/spec" "github.com/libopenstorage/openstorage/cluster" "github.com/libopenstorage/openstorage/volume" @@ -35,3 +38,11 @@ func (s *VolumeServer) cluster() cluster.Cluster { func (s *VolumeServer) driver() volume.VolumeDriver { return s.server.driver() } + +func (s *VolumeServer) checkAccessForVolumeId(ctx context.Context, volumeId string) error { + // Inspect will check access for us + _, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ + VolumeId: volumeId, + }) + return err +} diff --git a/api/server/sdk/volume_node_ops.go b/api/server/sdk/volume_node_ops.go index 01d1bb6af..5abffc31e 100644 --- a/api/server/sdk/volume_node_ops.go +++ b/api/server/sdk/volume_node_ops.go @@ -42,6 +42,11 @@ func (s *VolumeServer) Attach( return nil, status.Error(codes.InvalidArgument, "Must supply volume id") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + // Check if already attached v, err := util.VolumeFromName(s.driver(), req.GetVolumeId()) if err != nil { @@ -92,6 +97,11 @@ func (s *VolumeServer) Detach( return nil, status.Error(codes.InvalidArgument, "Must supply volume id") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + // Check if already attached v, err := util.VolumeFromName(s.driver(), req.GetVolumeId()) if err != nil { @@ -140,6 +150,11 @@ func (s *VolumeServer) Mount( return nil, status.Error(codes.InvalidArgument, "Invalid Mount Path") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + vols, err := s.driver().Inspect([]string{req.VolumeId}) if err != nil { return nil, status.Error(codes.InvalidArgument, "Invalid volume id") @@ -224,19 +239,27 @@ func (s *VolumeServer) Unmount( } // Get volume to unmount - vols, err := s.driver().Inspect([]string{req.VolumeId}) + // Checks ownership + resp, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ + VolumeId: req.GetVolumeId(), + }) if err != nil { - return nil, status.Error(codes.InvalidArgument, "Invalid volume id") + return nil, err } - vol := vols[0] - if vol.Spec.Scale > 1 { - if len(req.VolumeId) == 0 { - return &api.SdkVolumeUnmountResponse{}, - fmt.Errorf("Failed to find volume mapping for %v", req.MountPath) + volid := resp.GetVolume().GetId() + + // TODO: Idempotency? + // XXX How do we check. + + // From old docker server, now it is here in the SDK + if resp.GetVolume().GetSpec().Scale > 1 { + volid := s.driver().MountedAt(req.GetMountPath()) + if len(volid) == 0 { + return nil, status.Errorf(codes.Internal, "Failed to find volume mapping for %v", req.GetMountPath()) } } - if err = s.driver().Unmount(req.GetVolumeId(), req.GetMountPath(), options); err != nil { + if err = s.driver().Unmount(volid, req.GetMountPath(), options); err != nil { return nil, status.Errorf( codes.Internal, "Failed to unmount volume %s: %v", @@ -245,7 +268,7 @@ func (s *VolumeServer) Unmount( } if s.driver().Type() == api.DriverType_DRIVER_TYPE_BLOCK { - _ = s.driver().Detach(req.VolumeId, nil) + _ = s.driver().Detach(volid, nil) } return &api.SdkVolumeUnmountResponse{}, nil diff --git a/api/server/sdk/volume_node_ops_test.go b/api/server/sdk/volume_node_ops_test.go index 27603d295..ccd5ef18b 100644 --- a/api/server/sdk/volume_node_ops_test.go +++ b/api/server/sdk/volume_node_ops_test.go @@ -53,6 +53,15 @@ func TestSdkVolumeAttachSuccess(t *testing.T) { } gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), s.MockDriver(). EXPECT(). Inspect([]string{id}). @@ -96,18 +105,29 @@ func TestSdkVolumeAttachSuccessIdempotent(t *testing.T) { }, } - s.MockDriver(). - EXPECT(). - Inspect([]string{id}). - Return([]*api.Volume{ - &api.Volume{ - Id: id, - State: api.VolumeState_VOLUME_STATE_ATTACHED, - AttachedState: api.AttachState_ATTACH_STATE_EXTERNAL, - DevicePath: devpath, - }, - }, nil). - Times(1) + gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + State: api.VolumeState_VOLUME_STATE_ATTACHED, + AttachedState: api.AttachState_ATTACH_STATE_EXTERNAL, + DevicePath: devpath, + }, + }, nil). + Times(1), + ) // Setup client c := api.NewOpenStorageMountAttachClient(s.Conn()) @@ -140,6 +160,15 @@ func TestSdkVolumeAttachFailed(t *testing.T) { }, } gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), s.MockDriver(). EXPECT(). Inspect([]string{id}). @@ -213,6 +242,15 @@ func TestSdkVolumeDetachSuccess(t *testing.T) { }, } gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), s.MockDriver(). EXPECT(). Inspect([]string{id}). @@ -253,16 +291,27 @@ func TestSdkVolumeDetachSuccessIdempotency(t *testing.T) { }, } - s.MockDriver(). - EXPECT(). - Inspect([]string{id}). - Return([]*api.Volume{ - &api.Volume{ - Id: id, - State: api.VolumeState_VOLUME_STATE_DETACHED, - }, - }, nil). - Times(1) + gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + State: api.VolumeState_VOLUME_STATE_DETACHED, + }, + }, nil). + Times(1), + ) // Setup client c := api.NewOpenStorageMountAttachClient(s.Conn()) @@ -292,6 +341,15 @@ func TestSdkVolumeDetachFailed(t *testing.T) { }, } gomock.InOrder( + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1), s.MockDriver(). EXPECT(). Inspect([]string{id}). @@ -356,6 +414,15 @@ func TestSdkVolumeMountSuccess(t *testing.T) { VolumeId: id, MountPath: mountPath, } + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). Inspect([]string{id}). @@ -403,6 +470,15 @@ func TestSdkVolumeMountFailed(t *testing.T) { VolumeId: id, MountPath: mountPath, } + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). Inspect([]string{id}). diff --git a/api/server/sdk/volume_ops.go b/api/server/sdk/volume_ops.go index 5b8ac80ea..165bdde72 100644 --- a/api/server/sdk/volume_ops.go +++ b/api/server/sdk/volume_ops.go @@ -20,6 +20,7 @@ import ( "context" "github.com/libopenstorage/openstorage/api" + "github.com/libopenstorage/openstorage/pkg/auth" "github.com/libopenstorage/openstorage/pkg/util" "github.com/libopenstorage/openstorage/volume" "github.com/portworx/kvdb" @@ -28,6 +29,7 @@ import ( ) func (s *VolumeServer) create( + ctx context.Context, locator *api.VolumeLocator, source *api.Source, spec *api.VolumeSpec, @@ -72,6 +74,11 @@ func (s *VolumeServer) create( err.Error()) } + // Check ownership + if !parent.IsPermitted(ctx) { + return "", status.Errorf(codes.PermissionDenied, "Access denied to volume %s", parent.GetId()) + } + // Create a snapshot from the parent id, err = s.driver().Snapshot(parent.GetId(), false, &api.VolumeLocator{ Name: volName, @@ -83,6 +90,9 @@ func (s *VolumeServer) create( err.Error()) } } else { + // New volume, set ownership + spec.Ownership = api.OwnershipSetUsernameFromContext(ctx, spec.Ownership) + // Create the volume id, err = s.driver().Create(locator, source, spec) if err != nil { @@ -131,7 +141,7 @@ func (s *VolumeServer) Create( } // Create volume - id, err := s.create(locator, source, spec) + id, err := s.create(ctx, locator, source, spec) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -168,6 +178,7 @@ func (s *VolumeServer) Clone( } // Get spec. This also checks if the parend id exists. + // This will check access rights also parentVol, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ VolumeId: req.GetParentId(), }) @@ -176,7 +187,7 @@ func (s *VolumeServer) Clone( } // Create the clone - id, err := s.create(locator, source, parentVol.GetVolume().GetSpec()) + id, err := s.create(ctx, locator, source, parentVol.GetVolume().GetSpec()) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -200,16 +211,17 @@ func (s *VolumeServer) Delete( } // If the volume is not found, return OK to be idempotent - volumes, err := s.driver().Inspect([]string{req.GetVolumeId()}) - if (err == nil && len(volumes) == 0) || - (err != nil && err == volume.ErrEnoEnt) { - return &api.SdkVolumeDeleteResponse{}, nil - } else if err != nil { - return nil, status.Errorf( - codes.Internal, - "Failed to determine if volume id %s exists: %v", - req.GetVolumeId(), - err.Error()) + // This checks access rights also + _, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ + VolumeId: req.GetVolumeId(), + }) + if err != nil { + if gErr, ok := status.FromError(err); ok { + if gErr.Code() == codes.NotFound { + return &api.SdkVolumeDeleteResponse{}, nil + } + } + return nil, err } err = s.driver().Delete(req.GetVolumeId()) @@ -249,8 +261,13 @@ func (s *VolumeServer) Inspect( "Failed to inspect volume %s: %v", req.GetVolumeId(), err) } - v := vols[0] + + // Check ownership + if !v.IsPermitted(ctx) { + return nil, status.Errorf(codes.PermissionDenied, "Access denied to volume %s", v.GetId()) + } + return &api.SdkVolumeInspectResponse{ Volume: v, Name: v.GetLocator().GetName(), @@ -291,10 +308,19 @@ func (s *VolumeServer) EnumerateWithFilters( } var locator *api.VolumeLocator - if len(req.GetName()) != 0 || len(req.GetLabels()) != 0 { + if len(req.GetName()) != 0 || + len(req.GetLabels()) != 0 || + req.GetOwnership() != nil { + locator = &api.VolumeLocator{ Name: req.GetName(), VolumeLabels: req.GetLabels(), + Ownership: req.GetOwnership(), + } + + // If no ownership provided use the user's information + if locator.GetOwnership() == nil { + locator.Ownership = api.NewLocatorOwnershipFromContext(ctx) } } @@ -306,9 +332,12 @@ func (s *VolumeServer) EnumerateWithFilters( err.Error()) } - ids := make([]string, len(vols)) - for i, vol := range vols { - ids[i] = vol.GetId() + ids := make([]string, 0) + for _, vol := range vols { + // Check access + if vol.IsPermitted(ctx) { + ids = append(ids, vol.GetId()) + } } return &api.SdkVolumeEnumerateWithFiltersResponse{ @@ -330,14 +359,31 @@ func (s *VolumeServer) Update( } // Get current state + // This checks for ownership resp, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ VolumeId: req.GetVolumeId(), }) if err != nil { return nil, err } + + // Merge specs spec := s.mergeVolumeSpecs(resp.GetVolume().GetSpec(), req.GetSpec()) + // Update Ownership... carefully + // First point to the original ownership + spec.Ownership = resp.GetVolume().GetSpec().GetOwnership() + + // Check if we have been provided an update to the ownership + if req.GetSpec().GetOwnership() != nil { + if spec.Ownership == nil { + spec.Ownership = &api.Ownership{} + } + + user, _ := auth.NewUserInfoFromContext(ctx) + spec.Ownership.Update(req.GetSpec().GetOwnership(), user) + } + // Check if labels have been updated var locator *api.VolumeLocator if len(req.GetLabels()) != 0 { @@ -365,6 +411,11 @@ func (s *VolumeServer) Stats( return nil, status.Error(codes.InvalidArgument, "Must supply volume id") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + stats, err := s.driver().Stats(req.GetVolumeId(), !req.GetNotCumulative()) if err != nil { return nil, status.Errorf( @@ -388,6 +439,11 @@ func (s *VolumeServer) CapacityUsage( return nil, status.Error(codes.InvalidArgument, "Must supply volume id") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + dResp, err := s.driver().CapacityUsage(req.GetVolumeId()) if err != nil { return nil, status.Errorf( diff --git a/api/server/sdk/volume_ops_test.go b/api/server/sdk/volume_ops_test.go index 125544239..cd28657c8 100644 --- a/api/server/sdk/volume_ops_test.go +++ b/api/server/sdk/volume_ops_test.go @@ -237,7 +237,7 @@ func TestSdkVolumeDeleteReturnOkWhenVolumeNotFound(t *testing.T) { s.MockDriver(). EXPECT(). Inspect([]string{id}). - Return(nil, volume.ErrEnoEnt). + Return(nil, kvdb.ErrNotFound). Times(1) // Setup client @@ -516,6 +516,15 @@ func TestSdkVolumeStats(t *testing.T) { id := "myid" cumulative := true + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). Stats(id, cumulative). @@ -571,6 +580,16 @@ func TestSdkVolumeCapacityUsage(t *testing.T) { resp.CapacityUsageInfo.ExclusiveBytes = 12000 resp.CapacityUsageInfo.SharedBytes = 345 resp.CapacityUsageInfo.TotalBytes = 12345 + + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CapacityUsage(id). @@ -602,6 +621,16 @@ func TestSdkVolumeCapacityUsageAbortedResult(t *testing.T) { resp.CapacityUsageInfo.SharedBytes = 0 resp.CapacityUsageInfo.TotalBytes = 12345 resp.Error = volume.ErrAborted + + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CapacityUsage(id). @@ -635,6 +664,16 @@ func TestSdkVolumeCapacityUsageUnimplementedResult(t *testing.T) { resp.CapacityUsageInfo.SharedBytes = 0 resp.CapacityUsageInfo.TotalBytes = 12345 resp.Error = volume.ErrNotSupported + + s.MockDriver(). + EXPECT(). + Inspect([]string{id}). + Return([]*api.Volume{ + &api.Volume{ + Id: id, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). CapacityUsage(id). diff --git a/api/server/sdk/volume_snapshot.go b/api/server/sdk/volume_snapshot.go index c4fbba9df..f1b4dd2b4 100644 --- a/api/server/sdk/volume_snapshot.go +++ b/api/server/sdk/volume_snapshot.go @@ -41,6 +41,11 @@ func (s *VolumeServer) SnapshotCreate( return nil, status.Error(codes.InvalidArgument, "Must supply a name") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + readonly := true snapshotID, err := s.driver().Snapshot(req.GetVolumeId(), readonly, &api.VolumeLocator{ Name: req.GetName(), @@ -76,6 +81,11 @@ func (s *VolumeServer) SnapshotRestore( return nil, status.Error(codes.InvalidArgument, "Must supply snapshot id") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + err := s.driver().Restore(req.GetVolumeId(), req.GetSnapshotId()) if err != nil { if err == kvdb.ErrNotFound { @@ -133,6 +143,11 @@ func (s *VolumeServer) SnapshotEnumerateWithFilters( return nil, status.Error(codes.Unavailable, "Resource has not been initialized") } + // Get access rights + if err := s.checkAccessForVolumeId(ctx, req.GetVolumeId()); err != nil { + return nil, err + } + snapshots, err := s.driver().SnapEnumerate([]string{req.GetVolumeId()}, req.GetLabels()) if err != nil { return nil, status.Errorf( @@ -166,6 +181,15 @@ func (s *VolumeServer) SnapshotScheduleUpdate( return nil, status.Error(codes.InvalidArgument, "Must supply volume id") } + // Get volume specification + // This checks for access also + resp, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ + VolumeId: req.GetVolumeId(), + }) + if err != nil { + return nil, err + } + // Determine if they exist for _, name := range req.GetSnapshotScheduleNames() { _, err := s.cluster().SchedPolicyGet(name) @@ -177,14 +201,6 @@ func (s *VolumeServer) SnapshotScheduleUpdate( } } - // Get volume specification - resp, err := s.Inspect(ctx, &api.SdkVolumeInspectRequest{ - VolumeId: req.GetVolumeId(), - }) - if err != nil { - return nil, err - } - // Apply names to snapshot schedule in the Volume specification // merging with any schedule already there in "schedule" format. var pt *sched.PolicyTags diff --git a/api/server/sdk/volume_snapshot_test.go b/api/server/sdk/volume_snapshot_test.go index 8acff732b..9d8266650 100644 --- a/api/server/sdk/volume_snapshot_test.go +++ b/api/server/sdk/volume_snapshot_test.go @@ -63,6 +63,15 @@ func TestSdkVolumeSnapshotCreate(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{volid}). + Return([]*api.Volume{ + &api.Volume{ + Id: volid, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). Snapshot(req.GetVolumeId(), true, &api.VolumeLocator{ @@ -134,6 +143,15 @@ func TestSdkVolumeSnapshotRestore(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{volid}). + Return([]*api.Volume{ + &api.Volume{ + Id: volid, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). Restore(volid, snapid). @@ -183,6 +201,15 @@ func TestSdkVolumeSnapshotEnumerate(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{volid}). + Return([]*api.Volume{ + &api.Volume{ + Id: volid, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). SnapEnumerate([]string{volid}, nil). @@ -221,6 +248,15 @@ func TestSdkVolumeSnapshotEnumerateWithFilters(t *testing.T) { } // Create response + s.MockDriver(). + EXPECT(). + Inspect([]string{volid}). + Return([]*api.Volume{ + &api.Volume{ + Id: volid, + }, + }, nil). + Times(1) s.MockDriver(). EXPECT(). SnapEnumerate([]string{volid}, labels). diff --git a/api/server/testutils_test.go b/api/server/testutils_test.go index f87309c4b..6a2cc8cca 100644 --- a/api/server/testutils_test.go +++ b/api/server/testutils_test.go @@ -130,7 +130,8 @@ func newTestServerSdk(t *testing.T) *testServer { os.Remove(testSdkSock) selfsignedJwt, err := auth.NewJwtAuth(&auth.JwtAuthConfig{ - SharedSecret: []byte(testSharedSecret), + SharedSecret: []byte(testSharedSecret), + UsernameClaim: auth.UsernameClaimTypeName, }) assert.NoError(t, err) tester.sdk, err = sdk.New(&sdk.ServerConfig{ @@ -263,7 +264,7 @@ func createToken(name, role, secret string) (string, error) { claims := &sdkauth.Claims{ Issuer: "testcode", Name: name, - Email: "test@openstorage", + Email: name + "@openstorage.org", Roles: []string{role}, } signature := &sdkauth.Signature{ diff --git a/api/server/volume_test.go b/api/server/volume_test.go index c80aed206..37a691b7b 100644 --- a/api/server/volume_test.go +++ b/api/server/volume_test.go @@ -10,6 +10,8 @@ import ( // "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) func TestVolumeCreateSuccess(t *testing.T) { @@ -57,6 +59,17 @@ func TestVolumeCreateSuccess(t *testing.T) { assert.NotNil(t, r) assert.Equal(t, req.GetLocator().GetName(), r.GetVolume().GetLocator().GetName()) assert.Equal(t, req.GetSpec().GetSize(), r.GetVolume().GetSpec().GetSize()) + + // Check ownership. We should be denied + ctx, err = contextWithToken(context.Background(), "anotheruser", "system.view", testSharedSecret) + assert.NoError(t, err) + r, err = volumes.Inspect(ctx, &api.SdkVolumeInspectRequest{ + VolumeId: id, + }) + assert.Error(t, err) + serverError, ok := status.FromError(err) + assert.True(t, ok) + assert.Equal(t, serverError.Code(), codes.PermissionDenied) } func TestVolumeCreateFailedToAuthenticate(t *testing.T) { diff --git a/cmd/osd-token-generator/main.go b/cmd/osd-token-generator/main.go index 6ddba5f07..754cd7f2b 100644 --- a/cmd/osd-token-generator/main.go +++ b/cmd/osd-token-generator/main.go @@ -21,6 +21,7 @@ import ( "fmt" "io/ioutil" "os" + "strings" "time" yaml "gopkg.in/yaml.v2" @@ -61,6 +62,11 @@ func main() { os.Exit(1) } + if strings.Contains(*issuer, "http://") || strings.Contains(*issuer, "https://") { + fmt.Printf("%s issuer cannot contain http:// or https://", *issuer) + os.Exit(1) + } + // Get claims claims := &auth.Claims{ Issuer: *issuer, diff --git a/pkg/auth/auth.go b/pkg/auth/auth.go index 1d3eee567..6d3243839 100644 --- a/pkg/auth/auth.go +++ b/pkg/auth/auth.go @@ -63,3 +63,10 @@ func getUsername(usernameClaim UsernameClaimType, claims *Claims) string { } return claims.Subject } + +// AuthorizationEnabled returns true if the storage system has authorization +// and authentication enabled. +func AuthorizationEnabled(ctx context.Context) bool { + _, ok := NewUserInfoFromContext(ctx) + return ok +} diff --git a/pkg/auth/token.go b/pkg/auth/token.go index 8dbb5aea6..78cee0851 100644 --- a/pkg/auth/token.go +++ b/pkg/auth/token.go @@ -42,7 +42,7 @@ type Claims struct { Groups []string `json:"groups,omitempty" yaml:"groups,omitempty"` } -// TokenType returns the type of token. Values are: os, oidc +// TokenIssuer returns the type of token. Values are: os, oidc func TokenIssuer(rawtoken string) (string, error) { parts := strings.Split(rawtoken, ".") diff --git a/pkg/auth/userinfo.go b/pkg/auth/userinfo.go index a62dd3874..12a95dade 100644 --- a/pkg/auth/userinfo.go +++ b/pkg/auth/userinfo.go @@ -18,9 +18,6 @@ package auth import ( "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) // Keys to store data in gRPC context. Use these keys to retrieve @@ -32,19 +29,24 @@ const ( InterceptorContextTokenKey InterceptorContextkey = "tokenclaims" ) +// UserInfo contains information about the user taken from the token type UserInfo struct { + // Username is the unique id of the user. According to the configuration of + // the storage system, this could be the 'sub', 'name', or 'email' from + // the claims in the token. Username string - Claims Claims + // Claims holds the claims required by the storage system + Claims Claims } +// ContextSaveUserInfo saves user information in the context for other functions to consume func ContextSaveUserInfo(ctx context.Context, u *UserInfo) context.Context { return context.WithValue(ctx, InterceptorContextTokenKey, u) } -func NewUserInfoFromContext(ctx context.Context) (*UserInfo, error) { - userinfo, ok := ctx.Value(InterceptorContextTokenKey).(*UserInfo) - if !ok { - return nil, status.Errorf(codes.Internal, "Unable to access token in context") - } - return userinfo, nil +// NewUserInfoFromContext returns user information in the context if available. +// If not available means that the system is running without auth. +func NewUserInfoFromContext(ctx context.Context) (*UserInfo, bool) { + u, ok := ctx.Value(InterceptorContextTokenKey).(*UserInfo) + return u, ok } diff --git a/pkg/auth/userinfo_test.go b/pkg/auth/userinfo_test.go index 3b5652904..a3f51a35c 100644 --- a/pkg/auth/userinfo_test.go +++ b/pkg/auth/userinfo_test.go @@ -35,7 +35,7 @@ func TestUserInfoContext(t *testing.T) { }, } ctx := ContextSaveUserInfo(context.Background(), original) - u, err := NewUserInfoFromContext(ctx) - assert.NoError(t, err) + u, ok := NewUserInfoFromContext(ctx) + assert.True(t, ok) assert.True(t, reflect.DeepEqual(u, original)) } diff --git a/volume/drivers/common/default_store_enumerator.go b/volume/drivers/common/default_store_enumerator.go index 277f387c6..cec69a513 100644 --- a/volume/drivers/common/default_store_enumerator.go +++ b/volume/drivers/common/default_store_enumerator.go @@ -184,6 +184,15 @@ func match( if locator == nil { return hasSubset(v.Locator.VolumeLabels, volumeLabels) } + if locator.GetOwnership() != nil { + // They asked to match an ownership. Now check if the volume has it + // and if it matches. + // Keep these separate if statements to make it readable. + if v.GetSpec().GetOwnership() == nil || + !v.GetSpec().GetOwnership().IsMatch(locator.GetOwnership()) { + return false + } + } if locator.Name != "" && v.Locator.Name != locator.Name { return false } diff --git a/volume/drivers/fake/fake.go b/volume/drivers/fake/fake.go index 70e2022f1..4e1d6f202 100644 --- a/volume/drivers/fake/fake.go +++ b/volume/drivers/fake/fake.go @@ -323,6 +323,7 @@ func (d *driver) Set(volumeID string, locator *api.VolumeLocator, spec *api.Volu v.Spec.SnapshotInterval = spec.SnapshotInterval v.Spec.IoProfile = spec.IoProfile v.Spec.SnapshotSchedule = spec.SnapshotSchedule + v.Spec.Ownership = spec.Ownership } return d.UpdateVol(v)