Add the os_id field to device messages (#34588)

* Add the os_id field to device messages

* Update generated protos

* Add os_id field conversions

* Collect os_id on Linux devices

* Fix Linux tests
This commit is contained in:
Alan Parra
2023-11-16 13:05:47 +00:00
committed by GitHub
parent 5d4f5da9e7
commit e92d0bffff
10 changed files with 251 additions and 114 deletions
@@ -101,6 +101,11 @@ type DeviceCollectedData struct {
//
// System managed.
TpmPlatformAttestation *TPMPlatformAttestation `protobuf:"bytes,14,opt,name=tpm_platform_attestation,json=tpmPlatformAttestation,proto3" json:"tpm_platform_attestation,omitempty"`
// OS identifier.
// Mainly used to differentiate Linux distros, as there is be no variation
// for systems like macOS or Windows.
// Example: "ubuntu", "centos", "fedora", "rhel".
OsId string `protobuf:"bytes,15,opt,name=os_id,json=osId,proto3" json:"os_id,omitempty"`
}
func (x *DeviceCollectedData) Reset() {
@@ -233,6 +238,13 @@ func (x *DeviceCollectedData) GetTpmPlatformAttestation() *TPMPlatformAttestatio
return nil
}
func (x *DeviceCollectedData) GetOsId() string {
if x != nil {
return x.OsId
}
return ""
}
var File_teleport_devicetrust_v1_device_collected_data_proto protoreflect.FileDescriptor
var file_teleport_devicetrust_v1_device_collected_data_proto_rawDesc = []byte{
@@ -247,7 +259,7 @@ var file_teleport_devicetrust_v1_device_collected_data_proto_rawDesc = []byte{
0x74, 0x72, 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74,
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f,
0x74, 0x70, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe6, 0x05, 0x0a, 0x13, 0x44, 0x65,
0x74, 0x70, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfb, 0x05, 0x0a, 0x13, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74,
0x61, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
@@ -294,13 +306,14 @@ var file_teleport_devicetrust_v1_device_collected_data_proto_rawDesc = []byte{
0x2e, 0x76, 0x31, 0x2e, 0x54, 0x50, 0x4d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41,
0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x74, 0x70, 0x6d, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74,
0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72,
0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31,
0x3b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6f, 0x73, 0x49, 0x64, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65,
0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75,
0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73,
0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -67,6 +67,11 @@ type DeviceProfile struct {
// macOS rapid security response builds.
// Example: "22F770820d".
OsBuildSupplemental string `protobuf:"bytes,8,opt,name=os_build_supplemental,json=osBuildSupplemental,proto3" json:"os_build_supplemental,omitempty"`
// OS identifier.
// Mainly used to differentiate Linux distros, as there is be no variation
// for systems like macOS or Windows.
// Example: "ubuntu", "centos", "fedora", "rhel".
OsId string `protobuf:"bytes,9,opt,name=os_id,json=osId,proto3" json:"os_id,omitempty"`
}
func (x *DeviceProfile) Reset() {
@@ -157,6 +162,13 @@ func (x *DeviceProfile) GetOsBuildSupplemental() string {
return ""
}
func (x *DeviceProfile) GetOsId() string {
if x != nil {
return x.OsId
}
return ""
}
var File_teleport_devicetrust_v1_device_profile_proto protoreflect.FileDescriptor
var file_teleport_devicetrust_v1_device_profile_proto_rawDesc = []byte{
@@ -166,7 +178,7 @@ var file_teleport_devicetrust_v1_device_profile_proto_rawDesc = []byte{
0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74,
0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd9, 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x76,
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xee, 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70,
0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
@@ -188,13 +200,14 @@ var file_teleport_devicetrust_v1_device_profile_proto_rawDesc = []byte{
0x12, 0x32, 0x0a, 0x15, 0x6f, 0x73, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x75, 0x70,
0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
0x13, 0x6f, 0x73, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65,
0x6e, 0x74, 0x61, 0x6c, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65,
0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70,
0x6f, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2f,
0x76, 0x31, 0x3b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x76, 0x31,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6e, 0x74, 0x61, 0x6c, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6f, 0x73, 0x49, 0x64, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f,
0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74,
0x72, 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72,
0x75, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -97,4 +97,10 @@ message DeviceCollectedData {
//
// System managed.
TPMPlatformAttestation tpm_platform_attestation = 14;
// OS identifier.
// Mainly used to differentiate Linux distros, as there is be no variation
// for systems like macOS or Windows.
// Example: "ubuntu", "centos", "fedora", "rhel".
string os_id = 15;
}
@@ -55,4 +55,10 @@ message DeviceProfile {
// macOS rapid security response builds.
// Example: "22F770820d".
string os_build_supplemental = 8;
// OS identifier.
// Mainly used to differentiate Linux distros, as there is be no variation
// for systems like macOS or Windows.
// Example: "ubuntu", "centos", "fedora", "rhel".
string os_id = 9;
}
@@ -97,6 +97,7 @@ message DeviceCollectedData {
string system_serial_number = 12 [(gogoproto.jsontag) = "system_serial_number,omitempty"];
string base_board_serial_number = 13 [(gogoproto.jsontag) = "base_board_serial_number,omitempty"];
TPMPlatformAttestation tpm_platform_attestation = 14 [(gogoproto.jsontag) = "tpm_platform_attestation,omitempty"];
string os_id = 15 [(gogoproto.jsontag) = "os_id,omitempty"];
}
// TPMPCR is the resource representation of teleport.devicetrust.v1.TPMPCR.
@@ -148,4 +149,5 @@ message DeviceProfile {
string jamf_binary_version = 6 [(gogoproto.jsontag) = "jamf_binary_version,omitempty"];
string external_id = 7 [(gogoproto.jsontag) = "external_id,omitempty"];
string os_build_supplemental = 8 [(gogoproto.jsontag) = "os_build_supplemental,omitempty"];
string os_id = 9 [(gogoproto.jsontag) = "os_id,omitempty"];
}
+4
View File
@@ -149,6 +149,7 @@ func DeviceFromResource(res *DeviceV1) (*devicepb.Device, error) {
TpmPlatformAttestation: tpmPlatformAttestationFromResource(
d.TpmPlatformAttestation,
),
OsId: d.OsId,
}
}
@@ -175,6 +176,7 @@ func DeviceFromResource(res *DeviceV1) (*devicepb.Device, error) {
OsUsernames: p.OsUsernames,
JamfBinaryVersion: p.JamfBinaryVersion,
ExternalId: p.ExternalId,
OsId: p.OsId,
}
}
@@ -241,6 +243,7 @@ func DeviceToResource(dev *devicepb.Device) *DeviceV1 {
TpmPlatformAttestation: tpmPlatformAttestationToResource(
d.TpmPlatformAttestation,
),
OsId: d.OsId,
}
}
@@ -263,6 +266,7 @@ func DeviceToResource(dev *devicepb.Device) *DeviceV1 {
OsUsernames: p.OsUsernames,
JamfBinaryVersion: p.JamfBinaryVersion,
ExternalId: p.ExternalId,
OsId: p.OsId,
}
}
+182 -92
View File
@@ -191,6 +191,7 @@ type DeviceCollectedData struct {
SystemSerialNumber string `protobuf:"bytes,12,opt,name=system_serial_number,json=systemSerialNumber,proto3" json:"system_serial_number,omitempty"`
BaseBoardSerialNumber string `protobuf:"bytes,13,opt,name=base_board_serial_number,json=baseBoardSerialNumber,proto3" json:"base_board_serial_number,omitempty"`
TpmPlatformAttestation *TPMPlatformAttestation `protobuf:"bytes,14,opt,name=tpm_platform_attestation,json=tpmPlatformAttestation,proto3" json:"tpm_platform_attestation,omitempty"`
OsId string `protobuf:"bytes,15,opt,name=os_id,json=osId,proto3" json:"os_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -455,6 +456,7 @@ type DeviceProfile struct {
JamfBinaryVersion string `protobuf:"bytes,6,opt,name=jamf_binary_version,json=jamfBinaryVersion,proto3" json:"jamf_binary_version,omitempty"`
ExternalId string `protobuf:"bytes,7,opt,name=external_id,json=externalId,proto3" json:"external_id,omitempty"`
OsBuildSupplemental string `protobuf:"bytes,8,opt,name=os_build_supplemental,json=osBuildSupplemental,proto3" json:"os_build_supplemental,omitempty"`
OsId string `protobuf:"bytes,9,opt,name=os_id,json=osId,proto3" json:"os_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -511,99 +513,101 @@ func init() {
}
var fileDescriptor_aceaef1b58496e7d = []byte{
// 1470 bytes of a gzipped FileDescriptorProto
// 1495 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdd, 0x6e, 0x1b, 0xc5,
0x17, 0xaf, 0x1d, 0xc7, 0xb1, 0xc7, 0x76, 0x9a, 0x4c, 0xbe, 0xb6, 0x69, 0x9a, 0x69, 0xdd, 0xff,
0x47, 0xa1, 0x10, 0xab, 0x54, 0x02, 0xa9, 0xa8, 0x82, 0x6c, 0x5b, 0x89, 0xaa, 0xb4, 0x72, 0x37,
0xa1, 0xa0, 0x4a, 0x68, 0x35, 0xde, 0x9d, 0x98, 0x25, 0xbb, 0x9e, 0x65, 0x67, 0x1c, 0x6a, 0x09,
0x89, 0x57, 0xe0, 0x1d, 0x10, 0x8f, 0xc0, 0x3b, 0x94, 0xbb, 0xde, 0x71, 0x81, 0x34, 0x40, 0x2f,
0xf7, 0x29, 0xd0, 0x9c, 0x59, 0xdb, 0xe3, 0xc6, 0x51, 0x2b, 0xe0, 0xc6, 0xbb, 0xfb, 0xfb, 0x9d,
0xf3, 0x9b, 0xd9, 0xb3, 0xe7, 0x63, 0x8c, 0xda, 0x92, 0xc5, 0x2c, 0xe5, 0x99, 0xec, 0xc4, 0xac,
0x4f, 0x83, 0x51, 0x47, 0x8e, 0x52, 0x26, 0x3a, 0x21, 0x3b, 0x89, 0x02, 0xb6, 0x97, 0x66, 0x5c,
0x72, 0xbc, 0x08, 0xd8, 0xf6, 0x7a, 0x9f, 0xf7, 0x39, 0x20, 0x1d, 0x7d, 0x67, 0xc8, 0x6d, 0xd2,
0xe7, 0xbc, 0x1f, 0xb3, 0x0e, 0x3c, 0xf5, 0x86, 0x47, 0x1d, 0x19, 0x25, 0x4c, 0x48, 0x9a, 0xa4,
0x85, 0xc1, 0x95, 0xf9, 0x2b, 0xc0, 0xaf, 0x31, 0x69, 0x3f, 0x43, 0xb5, 0xbb, 0xb0, 0xe0, 0x93,
0x1b, 0xf8, 0x43, 0x54, 0xfd, 0x84, 0xd1, 0x90, 0x65, 0x4e, 0xe9, 0x72, 0xe9, 0x5a, 0xe3, 0xbd,
0x8d, 0x3d, 0x63, 0xe9, 0x31, 0xc1, 0x87, 0x59, 0xc0, 0x0c, 0xe9, 0x36, 0x9f, 0x2b, 0x72, 0xee,
0x85, 0x22, 0xa5, 0x5c, 0x91, 0x73, 0x5e, 0xe1, 0x82, 0x3b, 0xa8, 0x22, 0x52, 0x16, 0x38, 0x8b,
0xe0, 0xba, 0x5a, 0xb8, 0x1a, 0xed, 0x83, 0x94, 0x05, 0x6e, 0x2d, 0x57, 0x04, 0x4c, 0x3c, 0xf8,
0x6d, 0xff, 0xb8, 0x88, 0xd0, 0x94, 0xc6, 0xff, 0x41, 0x4b, 0x5c, 0xf8, 0xda, 0x0b, 0x56, 0xaf,
0xbb, 0x8d, 0x5c, 0x91, 0x31, 0xe4, 0x55, 0xb9, 0x38, 0x1c, 0xa5, 0x0c, 0xbf, 0x8d, 0xea, 0x54,
0x08, 0x26, 0x7d, 0x49, 0xfb, 0x4e, 0x19, 0xec, 0x5a, 0xb9, 0x22, 0x53, 0xd0, 0xab, 0xc1, 0xed,
0x21, 0xed, 0xe3, 0x2e, 0x6a, 0x04, 0x19, 0xa3, 0x92, 0xf9, 0x3a, 0x2e, 0xce, 0x02, 0x6c, 0x6c,
0x7b, 0xcf, 0x04, 0x6d, 0x6f, 0x1c, 0xb4, 0xbd, 0xc3, 0x71, 0xd0, 0xdc, 0xb5, 0x5c, 0x11, 0xdb,
0xe5, 0x87, 0xdf, 0x49, 0xc9, 0x43, 0x06, 0xd0, 0x56, 0x5a, 0x71, 0x98, 0x86, 0x13, 0xc5, 0xca,
0x9b, 0x29, 0x5a, 0x2e, 0x46, 0xd1, 0x00, 0xa0, 0xf8, 0x3e, 0x6a, 0xb1, 0x41, 0xc6, 0xe3, 0xd8,
0x17, 0x92, 0xca, 0xa1, 0x80, 0xf0, 0xd5, 0xdd, 0xd5, 0x5c, 0x91, 0x59, 0xc2, 0x6b, 0x9a, 0xc7,
0x03, 0x78, 0xc2, 0x8f, 0x91, 0xde, 0x57, 0xc8, 0x06, 0x32, 0xa2, 0xb1, 0x53, 0x85, 0x8d, 0x6c,
0xcd, 0xc4, 0xfc, 0xce, 0x84, 0x76, 0x9d, 0x5c, 0x91, 0xf5, 0xa9, 0xf9, 0x3b, 0x3c, 0x89, 0x24,
0x4b, 0x52, 0x39, 0xf2, 0x2c, 0x11, 0xec, 0xa3, 0xe5, 0x80, 0xc7, 0x31, 0x0b, 0x24, 0x0b, 0xfd,
0x90, 0x4a, 0xea, 0x2c, 0x5d, 0x5e, 0x80, 0xf7, 0x9b, 0x91, 0x1d, 0x9b, 0xdc, 0xa5, 0x92, 0xba,
0x3b, 0xb9, 0x22, 0xce, 0xac, 0x97, 0xa5, 0xde, 0x0a, 0x6c, 0x63, 0xbc, 0x8f, 0xaa, 0x26, 0x8f,
0x9c, 0x1a, 0xec, 0x77, 0x6d, 0x36, 0x47, 0x80, 0x72, 0xd7, 0x73, 0x45, 0x56, 0x8c, 0x99, 0xa5,
0x54, 0x38, 0xe2, 0x7b, 0x68, 0x29, 0xcd, 0xf8, 0x51, 0x14, 0x33, 0xa7, 0x0e, 0x1a, 0xeb, 0x33,
0x1a, 0x5d, 0xc3, 0xb9, 0x1b, 0xb9, 0x22, 0xab, 0x85, 0xa1, 0xa5, 0x32, 0xf6, 0xc5, 0x6f, 0xa1,
0x45, 0xfe, 0xed, 0x80, 0x65, 0x0e, 0x82, 0x68, 0xeb, 0xaf, 0x74, 0x1e, 0x00, 0xcb, 0xd8, 0x58,
0xb4, 0x7f, 0x2b, 0xa3, 0x95, 0x57, 0x03, 0x8a, 0x37, 0x51, 0x39, 0x0a, 0x8b, 0x34, 0xad, 0xe6,
0x8a, 0x94, 0xa3, 0xd0, 0x2b, 0x47, 0x21, 0x76, 0xd1, 0x72, 0x3a, 0xec, 0xc5, 0x51, 0xe0, 0x1f,
0xb3, 0x91, 0xaf, 0x0b, 0x49, 0xa7, 0x68, 0xd3, 0x84, 0x69, 0x96, 0xb1, 0x56, 0x6a, 0x1a, 0xe6,
0x01, 0x1b, 0xdd, 0x65, 0x19, 0xfe, 0x12, 0x6d, 0x99, 0x0e, 0xe0, 0x53, 0x29, 0x75, 0x1a, 0xc9,
0x88, 0x0f, 0x4c, 0x5d, 0x2c, 0xc0, 0x82, 0xff, 0xcd, 0x15, 0xb9, 0x72, 0x86, 0x89, 0xa5, 0xba,
0x61, 0x4c, 0xf6, 0xa7, 0x16, 0x50, 0x40, 0x0f, 0xd0, 0xaa, 0x4c, 0x13, 0x9f, 0x1d, 0x07, 0x2c,
0x93, 0xbe, 0x60, 0x99, 0xce, 0x9f, 0x0a, 0x08, 0x93, 0x5c, 0x91, 0x8b, 0xa7, 0x48, 0x4b, 0xf2,
0xbc, 0x4c, 0x93, 0x7b, 0xc0, 0x1d, 0x00, 0x85, 0x3f, 0x42, 0x2d, 0x6d, 0x4f, 0x8f, 0x7d, 0xf3,
0x0a, 0x90, 0xbd, 0x4d, 0xf7, 0x62, 0xae, 0xc8, 0xd6, 0x0c, 0x61, 0x89, 0x34, 0x64, 0x9a, 0xec,
0x1f, 0x77, 0x01, 0x6e, 0xff, 0x5a, 0x43, 0x6b, 0x73, 0xf2, 0x0a, 0x1f, 0xa0, 0x66, 0x91, 0x3b,
0xa6, 0xd2, 0x4a, 0xaf, 0xad, 0x34, 0x9d, 0x37, 0x33, 0x3e, 0x50, 0x6a, 0x8d, 0x02, 0x19, 0x57,
0x6f, 0xc6, 0x02, 0x9e, 0x85, 0x46, 0xb3, 0xfc, 0x66, 0xd5, 0x6b, 0xb9, 0x98, 0xea, 0x35, 0x00,
0x28, 0x5a, 0x3d, 0x6b, 0xe1, 0xec, 0x9e, 0xf5, 0x31, 0x6a, 0x99, 0x50, 0xfa, 0x83, 0x61, 0xd2,
0x63, 0x59, 0x11, 0x6e, 0x88, 0xd2, 0x0c, 0x61, 0xe7, 0x84, 0x21, 0x1e, 0x01, 0x8e, 0xef, 0xa3,
0x95, 0x84, 0x87, 0x2c, 0xf6, 0x23, 0xc8, 0xc0, 0xa3, 0x88, 0x65, 0x45, 0xa3, 0xd8, 0xcd, 0x15,
0xd9, 0x7e, 0x95, 0xb3, 0x3f, 0x19, 0x70, 0xf7, 0x27, 0x14, 0xfe, 0x00, 0x21, 0x2e, 0xfc, 0x13,
0x96, 0x89, 0x88, 0x0f, 0xa0, 0x71, 0xd4, 0x4d, 0x7f, 0x98, 0xa2, 0x96, 0x7b, 0x9d, 0x8b, 0x27,
0x06, 0xc4, 0x37, 0x50, 0x8d, 0x0b, 0xbf, 0x37, 0x8c, 0xe2, 0xd0, 0x59, 0x02, 0xb7, 0xcd, 0x5c,
0x11, 0x3c, 0xc6, 0xec, 0x32, 0xe3, 0xc2, 0xd5, 0x10, 0xbe, 0x85, 0x1a, 0x5c, 0xf8, 0x43, 0xc1,
0xb2, 0x01, 0x4d, 0x4c, 0xd5, 0xd7, 0xdd, 0x0b, 0xb9, 0x22, 0x1b, 0x16, 0x6c, 0x77, 0x23, 0x2e,
0x3e, 0x2b, 0x50, 0xfc, 0x18, 0xad, 0x7d, 0x4d, 0x93, 0x23, 0xbf, 0x17, 0x0d, 0x68, 0x36, 0x9a,
0x6c, 0xb8, 0x0e, 0x1a, 0x57, 0x72, 0x45, 0x2e, 0xcd, 0xa1, 0x2d, 0xad, 0x55, 0x4d, 0xbb, 0xc0,
0x8e, 0xdf, 0x20, 0x40, 0x17, 0x12, 0x1a, 0x70, 0xe1, 0x9b, 0x4e, 0x9a, 0xb0, 0x81, 0xf4, 0x8b,
0x8e, 0x20, 0x8a, 0x4e, 0xf0, 0xff, 0x5c, 0x91, 0xab, 0x67, 0x1a, 0x59, 0xf2, 0x5b, 0x60, 0x74,
0x6f, 0x62, 0x53, 0x74, 0x1e, 0x81, 0x1f, 0x21, 0x9c, 0xc1, 0xc8, 0x65, 0xa1, 0x3f, 0x9d, 0x54,
0x0d, 0x50, 0xbf, 0x9c, 0x2b, 0xb2, 0x73, 0x9a, 0xb5, 0x64, 0x57, 0xc6, 0xec, 0xfe, 0x78, 0x88,
0x1d, 0xa2, 0x75, 0x31, 0x12, 0x92, 0x25, 0xfe, 0x6c, 0x0e, 0x35, 0x41, 0xb1, 0x9d, 0x2b, 0xb2,
0x3b, 0x8f, 0xb7, 0x34, 0xb1, 0xe1, 0x0f, 0xec, 0x84, 0xf2, 0x91, 0xd3, 0xa3, 0x82, 0xf9, 0x3d,
0x4e, 0xb3, 0xf0, 0x15, 0xe5, 0x16, 0x28, 0xff, 0x2f, 0x57, 0xa4, 0x7d, 0x96, 0x8d, 0xdd, 0x66,
0xb4, 0x8d, 0xab, 0x4d, 0x66, 0x16, 0xf8, 0x1e, 0x39, 0xba, 0x01, 0xa4, 0x31, 0x95, 0x47, 0x3c,
0x4b, 0xec, 0x46, 0xe5, 0x2c, 0x43, 0xe1, 0x5d, 0x2a, 0x3a, 0xf7, 0x61, 0xf7, 0x61, 0xb7, 0xb0,
0xb2, 0x7a, 0x95, 0x59, 0xff, 0x2c, 0x09, 0x6b, 0xfd, 0x4d, 0x99, 0x26, 0x73, 0xfc, 0xdb, 0xdf,
0xa1, 0xaa, 0x56, 0xbe, 0xe3, 0x61, 0x82, 0x16, 0xa3, 0x41, 0xc8, 0x9e, 0x41, 0x13, 0x59, 0x74,
0xeb, 0xb9, 0x22, 0x06, 0xf0, 0xcc, 0x05, 0xb7, 0x51, 0x35, 0x8c, 0xfa, 0x4c, 0xc8, 0xa2, 0x5b,
0xa3, 0x5c, 0x91, 0x02, 0xf1, 0x8a, 0x2b, 0x7e, 0x17, 0x21, 0x73, 0xe7, 0xd3, 0xb8, 0x0f, 0xc5,
0x5e, 0x71, 0x97, 0x73, 0x45, 0x2c, 0xd4, 0xab, 0x9b, 0xfb, 0xfd, 0xb8, 0xdf, 0xfe, 0x02, 0xd5,
0x0e, 0xbb, 0x0f, 0x1f, 0x0f, 0xb9, 0x64, 0x7a, 0xfd, 0x6f, 0xf4, 0x0d, 0xac, 0xdf, 0x34, 0xeb,
0x03, 0xe0, 0x99, 0x0b, 0xbe, 0x8e, 0xea, 0x22, 0xea, 0x0f, 0xa8, 0x1c, 0x66, 0xac, 0xd8, 0x02,
0x9c, 0x69, 0x26, 0xa0, 0x37, 0xbd, 0x6d, 0xff, 0x54, 0x42, 0x1b, 0x56, 0xc8, 0xba, 0x34, 0xa3,
0x09, 0x93, 0x2c, 0x13, 0xf8, 0x26, 0xaa, 0x82, 0x9e, 0x70, 0x4a, 0x30, 0xb7, 0xcf, 0x4f, 0x03,
0x0c, 0x1b, 0x31, 0xef, 0x65, 0x4c, 0xbc, 0xe2, 0x8a, 0xaf, 0xa3, 0x4a, 0x1a, 0x64, 0xc2, 0x29,
0x83, 0x4b, 0xcb, 0xfa, 0x26, 0x77, 0x3c, 0x73, 0x62, 0xd3, 0xb4, 0x07, 0xbf, 0xfa, 0xf0, 0xc5,
0x4e, 0x74, 0x41, 0xc4, 0xdc, 0xc4, 0xa0, 0xd8, 0xe8, 0x04, 0xf4, 0x6a, 0x70, 0xfb, 0x29, 0xef,
0xb7, 0x7f, 0x2e, 0xa1, 0xcd, 0xf9, 0x9f, 0x56, 0x4f, 0xdf, 0x01, 0x1f, 0x04, 0xe3, 0x80, 0xc0,
0xf4, 0x05, 0xc0, 0x9e, 0xbe, 0x00, 0xe0, 0x14, 0xad, 0x4d, 0xbe, 0x7f, 0x3a, 0x79, 0xd5, 0xa2,
0x75, 0xef, 0x9c, 0xce, 0xa0, 0x69, 0x38, 0x4c, 0x8f, 0x98, 0xe3, 0x6c, 0x57, 0x46, 0x7a, 0xca,
0xad, 0xdd, 0x45, 0x4d, 0xfb, 0x3c, 0x82, 0x77, 0x50, 0x05, 0x9a, 0x97, 0x19, 0xf6, 0x10, 0x11,
0xfd, 0xec, 0xc1, 0xaf, 0x4e, 0x1d, 0x9e, 0x45, 0xfd, 0x68, 0x50, 0x9c, 0x45, 0x21, 0xc4, 0x06,
0xf1, 0x8a, 0x6b, 0xfb, 0x97, 0x0a, 0x6a, 0xcd, 0x1c, 0x4f, 0xf0, 0xd3, 0xd9, 0x63, 0xe4, 0xeb,
0x87, 0xdb, 0x25, 0xdd, 0x33, 0x2d, 0x97, 0xe9, 0x3b, 0x9c, 0x3a, 0x50, 0xce, 0x1b, 0x15, 0xe5,
0x7f, 0x63, 0x54, 0x2c, 0xfc, 0xbd, 0x51, 0x51, 0x79, 0xb3, 0x51, 0x71, 0x1b, 0x35, 0xad, 0x99,
0xa0, 0x8f, 0xc1, 0x0b, 0xd7, 0xea, 0xee, 0x76, 0xae, 0xc8, 0xa6, 0x8d, 0xdb, 0xe7, 0x88, 0xe9,
0xb0, 0x10, 0x67, 0x4d, 0x8b, 0xea, 0x3f, 0x98, 0x16, 0xb7, 0x50, 0x83, 0x3d, 0x93, 0x7a, 0x01,
0x1d, 0xaf, 0x62, 0xe4, 0xc1, 0xf0, 0xb2, 0x60, 0x7b, 0x78, 0x8d, 0xe1, 0xfb, 0x21, 0xfe, 0x1c,
0x6d, 0x8c, 0x5f, 0xd6, 0x17, 0xc3, 0x34, 0x8d, 0x99, 0x9e, 0x11, 0x34, 0x2e, 0x46, 0xe0, 0xd5,
0x5c, 0x11, 0x32, 0xd7, 0xc0, 0xd2, 0x5b, 0x2b, 0x42, 0x73, 0x60, 0xd1, 0xee, 0xed, 0xe7, 0x7f,
0xee, 0x9e, 0x7b, 0xfe, 0x72, 0xb7, 0xf4, 0xe2, 0xe5, 0x6e, 0xe9, 0x8f, 0x97, 0xbb, 0xa5, 0xa7,
0xd7, 0xfb, 0x91, 0xfc, 0x6a, 0xd8, 0xdb, 0x0b, 0x78, 0xd2, 0xe9, 0x67, 0xf4, 0x24, 0x32, 0x45,
0x46, 0xe3, 0xce, 0xe4, 0xbf, 0x1f, 0x4d, 0x23, 0xf3, 0x97, 0xaf, 0x57, 0x85, 0xdc, 0xba, 0xf9,
0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xe6, 0xd9, 0xb3, 0x7a, 0x0e, 0x00, 0x00,
0x17, 0xaf, 0x1d, 0xc7, 0x89, 0xc7, 0x76, 0x3e, 0x26, 0x5f, 0xdb, 0x34, 0xcd, 0xb4, 0xee, 0xff,
0xa3, 0x50, 0x88, 0x55, 0x2a, 0x81, 0x54, 0x54, 0x41, 0xb6, 0xad, 0x44, 0x54, 0x5a, 0xb9, 0x9b,
0x50, 0x50, 0x25, 0xb4, 0x1a, 0xef, 0x4e, 0xcc, 0x92, 0x5d, 0xcf, 0xb2, 0x33, 0x0e, 0xb5, 0x84,
0x84, 0x78, 0x03, 0xde, 0x01, 0xf1, 0x08, 0xbc, 0x43, 0x2f, 0x7b, 0x8f, 0x34, 0x40, 0x2f, 0xf7,
0x96, 0x17, 0x40, 0x73, 0x66, 0x6d, 0x8f, 0x1b, 0x47, 0xad, 0x80, 0x1b, 0xef, 0xee, 0xef, 0x77,
0xce, 0x6f, 0x66, 0xcf, 0x9e, 0x8f, 0x31, 0x6a, 0x49, 0x16, 0xb3, 0x94, 0x67, 0xb2, 0x1d, 0xb3,
0x1e, 0x0d, 0x86, 0x6d, 0x39, 0x4c, 0x99, 0x68, 0x87, 0xec, 0x34, 0x0a, 0xd8, 0x5e, 0x9a, 0x71,
0xc9, 0xf1, 0x3c, 0x60, 0xdb, 0xeb, 0x3d, 0xde, 0xe3, 0x80, 0xb4, 0xf5, 0x9d, 0x21, 0xb7, 0x49,
0x8f, 0xf3, 0x5e, 0xcc, 0xda, 0xf0, 0xd4, 0x1d, 0x1c, 0xb7, 0x65, 0x94, 0x30, 0x21, 0x69, 0x92,
0x16, 0x06, 0x57, 0x67, 0xaf, 0x00, 0xbf, 0xc6, 0xa4, 0xf5, 0x0c, 0x2d, 0xde, 0x83, 0x05, 0x9f,
0xdc, 0xc4, 0x1f, 0xa2, 0xea, 0x27, 0x8c, 0x86, 0x2c, 0x73, 0x4a, 0x57, 0x4a, 0xd7, 0xeb, 0xef,
0x6d, 0xec, 0x19, 0x4b, 0x8f, 0x09, 0x3e, 0xc8, 0x02, 0x66, 0x48, 0xb7, 0xf1, 0x5c, 0x91, 0x0b,
0x2f, 0x14, 0x29, 0xe5, 0x8a, 0x5c, 0xf0, 0x0a, 0x17, 0xdc, 0x46, 0x15, 0x91, 0xb2, 0xc0, 0x99,
0x07, 0xd7, 0xd5, 0xc2, 0xd5, 0x68, 0x1f, 0xa6, 0x2c, 0x70, 0x17, 0x73, 0x45, 0xc0, 0xc4, 0x83,
0xdf, 0xd6, 0x4f, 0xf3, 0x08, 0x4d, 0x68, 0xfc, 0x1f, 0xb4, 0xc0, 0x85, 0xaf, 0xbd, 0x60, 0xf5,
0x9a, 0x5b, 0xcf, 0x15, 0x19, 0x41, 0x5e, 0x95, 0x8b, 0xa3, 0x61, 0xca, 0xf0, 0xdb, 0xa8, 0x46,
0x85, 0x60, 0xd2, 0x97, 0xb4, 0xe7, 0x94, 0xc1, 0xae, 0x99, 0x2b, 0x32, 0x01, 0xbd, 0x45, 0xb8,
0x3d, 0xa2, 0x3d, 0xdc, 0x41, 0xf5, 0x20, 0x63, 0x54, 0x32, 0x5f, 0xc7, 0xc5, 0x99, 0x83, 0x8d,
0x6d, 0xef, 0x99, 0xa0, 0xed, 0x8d, 0x82, 0xb6, 0x77, 0x34, 0x0a, 0x9a, 0xbb, 0x96, 0x2b, 0x62,
0xbb, 0xfc, 0xf8, 0x1b, 0x29, 0x79, 0xc8, 0x00, 0xda, 0x4a, 0x2b, 0x0e, 0xd2, 0x70, 0xac, 0x58,
0x79, 0x33, 0x45, 0xcb, 0xc5, 0x28, 0x1a, 0x00, 0x14, 0xdf, 0x47, 0x4d, 0xd6, 0xcf, 0x78, 0x1c,
0xfb, 0x42, 0x52, 0x39, 0x10, 0x10, 0xbe, 0x9a, 0xbb, 0x9a, 0x2b, 0x32, 0x4d, 0x78, 0x0d, 0xf3,
0x78, 0x08, 0x4f, 0xf8, 0x31, 0xd2, 0xfb, 0x0a, 0x59, 0x5f, 0x46, 0x34, 0x76, 0xaa, 0xb0, 0x91,
0xad, 0xa9, 0x98, 0xdf, 0x1d, 0xd3, 0xae, 0x93, 0x2b, 0xb2, 0x3e, 0x31, 0x7f, 0x87, 0x27, 0x91,
0x64, 0x49, 0x2a, 0x87, 0x9e, 0x25, 0x82, 0x7d, 0xb4, 0x14, 0xf0, 0x38, 0x66, 0x81, 0x64, 0xa1,
0x1f, 0x52, 0x49, 0x9d, 0x85, 0x2b, 0x73, 0xf0, 0x7e, 0x53, 0xb2, 0x23, 0x93, 0x7b, 0x54, 0x52,
0x77, 0x27, 0x57, 0xc4, 0x99, 0xf6, 0xb2, 0xd4, 0x9b, 0x81, 0x6d, 0x8c, 0xf7, 0x51, 0xd5, 0xe4,
0x91, 0xb3, 0x08, 0xfb, 0x5d, 0x9b, 0xce, 0x11, 0xa0, 0xdc, 0xf5, 0x5c, 0x91, 0x15, 0x63, 0x66,
0x29, 0x15, 0x8e, 0xf8, 0x3e, 0x5a, 0x48, 0x33, 0x7e, 0x1c, 0xc5, 0xcc, 0xa9, 0x81, 0xc6, 0xfa,
0x94, 0x46, 0xc7, 0x70, 0xee, 0x46, 0xae, 0xc8, 0x6a, 0x61, 0x68, 0xa9, 0x8c, 0x7c, 0xf1, 0x5b,
0x68, 0x9e, 0x7f, 0xdb, 0x67, 0x99, 0x83, 0x20, 0xda, 0xfa, 0x2b, 0x2d, 0x03, 0x60, 0x19, 0x1b,
0x8b, 0xd6, 0xaf, 0x65, 0xb4, 0xf2, 0x6a, 0x40, 0xf1, 0x26, 0x2a, 0x47, 0x61, 0x91, 0xa6, 0xd5,
0x5c, 0x91, 0x72, 0x14, 0x7a, 0xe5, 0x28, 0xc4, 0x2e, 0x5a, 0x4a, 0x07, 0xdd, 0x38, 0x0a, 0xfc,
0x13, 0x36, 0xf4, 0x75, 0x21, 0xe9, 0x14, 0x6d, 0x98, 0x30, 0x4d, 0x33, 0xd6, 0x4a, 0x0d, 0xc3,
0x3c, 0x60, 0xc3, 0x7b, 0x2c, 0xc3, 0x5f, 0xa2, 0x2d, 0xd3, 0x01, 0x7c, 0x2a, 0xa5, 0x4e, 0x23,
0x19, 0xf1, 0xbe, 0xa9, 0x8b, 0x39, 0x58, 0xf0, 0xbf, 0xb9, 0x22, 0x57, 0xcf, 0x31, 0xb1, 0x54,
0x37, 0x8c, 0xc9, 0xfe, 0xc4, 0x02, 0x0a, 0xe8, 0x01, 0x5a, 0x95, 0x69, 0xe2, 0xb3, 0x93, 0x80,
0x65, 0xd2, 0x17, 0x2c, 0xd3, 0xf9, 0x53, 0x01, 0x61, 0x92, 0x2b, 0x72, 0xe9, 0x0c, 0x69, 0x49,
0x2e, 0xcb, 0x34, 0xb9, 0x0f, 0xdc, 0x21, 0x50, 0xf8, 0x23, 0xd4, 0xd4, 0xf6, 0xf4, 0xc4, 0x37,
0xaf, 0x00, 0xd9, 0xdb, 0x70, 0x2f, 0xe5, 0x8a, 0x6c, 0x4d, 0x11, 0x96, 0x48, 0x5d, 0xa6, 0xc9,
0xfe, 0x49, 0x07, 0xe0, 0xd6, 0x0f, 0x35, 0xb4, 0x36, 0x23, 0xaf, 0xf0, 0x21, 0x6a, 0x14, 0xb9,
0x63, 0x2a, 0xad, 0xf4, 0xda, 0x4a, 0xd3, 0x79, 0x33, 0xe5, 0x03, 0xa5, 0x56, 0x2f, 0x90, 0x51,
0xf5, 0x66, 0x2c, 0xe0, 0x59, 0x68, 0x34, 0xcb, 0x6f, 0x56, 0xbd, 0x96, 0x8b, 0xa9, 0x5e, 0x03,
0x80, 0xa2, 0xd5, 0xb3, 0xe6, 0xce, 0xef, 0x59, 0x1f, 0xa3, 0xa6, 0x09, 0xa5, 0xdf, 0x1f, 0x24,
0x5d, 0x96, 0x15, 0xe1, 0x86, 0x28, 0x4d, 0x11, 0x76, 0x4e, 0x18, 0xe2, 0x11, 0xe0, 0xf8, 0x00,
0xad, 0x24, 0x3c, 0x64, 0xb1, 0x1f, 0x41, 0x06, 0x1e, 0x47, 0x2c, 0x2b, 0x1a, 0xc5, 0x6e, 0xae,
0xc8, 0xf6, 0xab, 0x9c, 0xfd, 0xc9, 0x80, 0x3b, 0x18, 0x53, 0xf8, 0x03, 0x84, 0xb8, 0xf0, 0x4f,
0x59, 0x26, 0x22, 0xde, 0x87, 0xc6, 0x51, 0x33, 0xfd, 0x61, 0x82, 0x5a, 0xee, 0x35, 0x2e, 0x9e,
0x18, 0x10, 0xdf, 0x44, 0x8b, 0x5c, 0xf8, 0xdd, 0x41, 0x14, 0x87, 0xce, 0x02, 0xb8, 0x6d, 0xe6,
0x8a, 0xe0, 0x11, 0x66, 0x97, 0x19, 0x17, 0xae, 0x86, 0xf0, 0x6d, 0x54, 0xe7, 0xc2, 0x1f, 0x08,
0x96, 0xf5, 0x69, 0x62, 0xaa, 0xbe, 0xe6, 0x5e, 0xcc, 0x15, 0xd9, 0xb0, 0x60, 0xbb, 0x1b, 0x71,
0xf1, 0x59, 0x81, 0xe2, 0xc7, 0x68, 0xed, 0x6b, 0x9a, 0x1c, 0xfb, 0xdd, 0xa8, 0x4f, 0xb3, 0xe1,
0x78, 0xc3, 0x35, 0xd0, 0xb8, 0x9a, 0x2b, 0x72, 0x79, 0x06, 0x6d, 0x69, 0xad, 0x6a, 0xda, 0x05,
0x76, 0xf4, 0x06, 0x01, 0xba, 0x98, 0xd0, 0x80, 0x0b, 0xdf, 0x74, 0xd2, 0x84, 0xf5, 0xa5, 0x5f,
0x74, 0x04, 0x51, 0x74, 0x82, 0xff, 0xe7, 0x8a, 0x5c, 0x3b, 0xd7, 0xc8, 0x92, 0xdf, 0x02, 0xa3,
0xfb, 0x63, 0x9b, 0xa2, 0xf3, 0x08, 0xfc, 0x08, 0xe1, 0x0c, 0x46, 0x2e, 0x0b, 0xfd, 0xc9, 0xa4,
0xaa, 0x83, 0xfa, 0x95, 0x5c, 0x91, 0x9d, 0xb3, 0xac, 0x25, 0xbb, 0x32, 0x62, 0xf7, 0x47, 0x43,
0xec, 0x08, 0xad, 0x8b, 0xa1, 0x90, 0x2c, 0xf1, 0xa7, 0x73, 0xa8, 0x01, 0x8a, 0xad, 0x5c, 0x91,
0xdd, 0x59, 0xbc, 0xa5, 0x89, 0x0d, 0x7f, 0x68, 0x27, 0x94, 0x8f, 0x9c, 0x2e, 0x15, 0xcc, 0xef,
0x72, 0x9a, 0x85, 0xaf, 0x28, 0x37, 0x41, 0xf9, 0x7f, 0xb9, 0x22, 0xad, 0xf3, 0x6c, 0xec, 0x36,
0xa3, 0x6d, 0x5c, 0x6d, 0x32, 0xb5, 0xc0, 0xf7, 0xc8, 0xd1, 0x0d, 0x20, 0x8d, 0xa9, 0x3c, 0xe6,
0x59, 0x62, 0x37, 0x2a, 0x67, 0x09, 0x0a, 0xef, 0x72, 0xd1, 0xb9, 0x8f, 0x3a, 0x0f, 0x3b, 0x85,
0x95, 0xd5, 0xab, 0xcc, 0xfa, 0xe7, 0x49, 0x58, 0xeb, 0x6f, 0xca, 0x34, 0x99, 0xe1, 0x8f, 0xaf,
0xa3, 0x79, 0x2e, 0xfc, 0x28, 0x74, 0x96, 0xad, 0x16, 0xaf, 0x01, 0xcb, 0xb7, 0xc2, 0xc5, 0x41,
0xd8, 0xfa, 0x0e, 0x55, 0xf5, 0x1e, 0xee, 0x7a, 0x98, 0xa0, 0xf9, 0xa8, 0x1f, 0xb2, 0x67, 0xd0,
0x6e, 0xe6, 0xdd, 0x5a, 0xae, 0x88, 0x01, 0x3c, 0x73, 0xc1, 0x2d, 0x54, 0x0d, 0xa3, 0x1e, 0x13,
0xb2, 0xe8, 0xeb, 0x28, 0x57, 0xa4, 0x40, 0xbc, 0xe2, 0x8a, 0xdf, 0x45, 0xc8, 0xdc, 0xf9, 0x34,
0xee, 0x41, 0x5b, 0xa8, 0xb8, 0x4b, 0xb9, 0x22, 0x16, 0xea, 0xd5, 0xcc, 0xfd, 0x7e, 0xdc, 0x6b,
0x7d, 0x81, 0x16, 0x8f, 0x3a, 0x0f, 0x1f, 0x0f, 0xb8, 0x64, 0x7a, 0xfd, 0x6f, 0xf4, 0x0d, 0xac,
0xdf, 0x30, 0xeb, 0x03, 0xe0, 0x99, 0x0b, 0xbe, 0x81, 0x6a, 0x22, 0xea, 0xf5, 0xa9, 0x1c, 0x64,
0xac, 0xd8, 0x02, 0x9c, 0x7e, 0xc6, 0xa0, 0x37, 0xb9, 0x6d, 0xfd, 0x5c, 0x42, 0x1b, 0x56, 0x70,
0x3b, 0x34, 0xa3, 0x09, 0x93, 0x2c, 0x13, 0xf8, 0x16, 0xaa, 0x82, 0x9e, 0x70, 0x4a, 0x30, 0xe1,
0x97, 0x27, 0x9f, 0x02, 0x36, 0x62, 0xde, 0xcb, 0x98, 0x78, 0xc5, 0x15, 0xdf, 0x40, 0x95, 0x34,
0xc8, 0x84, 0x53, 0x06, 0x97, 0xa6, 0xf5, 0xf5, 0xee, 0x7a, 0xe6, 0x6c, 0xa7, 0x69, 0x0f, 0x7e,
0xf5, 0x31, 0x8d, 0x9d, 0xea, 0xd2, 0x89, 0xb9, 0x89, 0x41, 0xb1, 0xd1, 0x31, 0xe8, 0x2d, 0xc2,
0xed, 0xa7, 0xbc, 0xd7, 0xfa, 0xa5, 0x84, 0x36, 0x67, 0x27, 0x81, 0x9e, 0xd3, 0x7d, 0xde, 0x0f,
0x46, 0x01, 0x81, 0x8f, 0x08, 0x80, 0x3d, 0xa7, 0x01, 0xc0, 0x29, 0x5a, 0x1b, 0x67, 0x4a, 0x3a,
0x7e, 0xd5, 0xa2, 0xc9, 0xef, 0x9c, 0xcd, 0xb5, 0x49, 0x38, 0x4c, 0x37, 0x99, 0xe1, 0x6c, 0xd7,
0x50, 0x7a, 0xc6, 0xad, 0xd5, 0x41, 0x0d, 0xfb, 0xe4, 0x82, 0x77, 0x50, 0x05, 0xda, 0x9c, 0x39,
0x16, 0x40, 0x44, 0xf4, 0xb3, 0x07, 0xbf, 0x3a, 0x75, 0x78, 0x16, 0xf5, 0xa2, 0x7e, 0x71, 0x6a,
0x85, 0x10, 0x1b, 0xc4, 0x2b, 0xae, 0xad, 0x3f, 0x2b, 0xa8, 0x39, 0x75, 0x90, 0xc1, 0x4f, 0xa7,
0x0f, 0x9c, 0xaf, 0x1f, 0x83, 0x97, 0x75, 0x77, 0xb5, 0x5c, 0x26, 0xef, 0x70, 0xe6, 0xe8, 0x39,
0x6b, 0xa8, 0x94, 0xff, 0x8d, 0xa1, 0x32, 0xf7, 0xf7, 0x86, 0x4a, 0xe5, 0xcd, 0x86, 0xca, 0x1d,
0xd4, 0xb0, 0xa6, 0x87, 0x3e, 0x30, 0xcf, 0x5d, 0xaf, 0xb9, 0xdb, 0xb9, 0x22, 0x9b, 0x36, 0x6e,
0x9f, 0x38, 0x26, 0x63, 0x45, 0x9c, 0x37, 0x57, 0xaa, 0xff, 0x60, 0xae, 0xdc, 0x46, 0x75, 0xf6,
0x4c, 0xea, 0x05, 0x74, 0xbc, 0x8a, 0xe1, 0x08, 0x63, 0xce, 0x82, 0xed, 0x31, 0x37, 0x82, 0x0f,
0x42, 0xfc, 0x39, 0xda, 0x18, 0xbd, 0xac, 0x2f, 0x06, 0x69, 0x1a, 0x33, 0x3d, 0x4d, 0x68, 0x5c,
0x0c, 0xcb, 0x6b, 0xb9, 0x22, 0x64, 0xa6, 0x81, 0xa5, 0xb7, 0x56, 0x84, 0xe6, 0xd0, 0xa2, 0x27,
0xfd, 0xaf, 0xf6, 0x9a, 0xfe, 0xe7, 0xde, 0x79, 0xfe, 0xc7, 0xee, 0x85, 0xe7, 0x2f, 0x77, 0x4b,
0x2f, 0x5e, 0xee, 0x96, 0x7e, 0x7f, 0xb9, 0x5b, 0x7a, 0x7a, 0xa3, 0x17, 0xc9, 0xaf, 0x06, 0xdd,
0xbd, 0x80, 0x27, 0xed, 0x5e, 0x46, 0x4f, 0x23, 0x53, 0x8e, 0x34, 0x6e, 0x8f, 0xff, 0x4f, 0xd2,
0x34, 0x32, 0x7f, 0x23, 0xbb, 0x55, 0xc8, 0xc2, 0x5b, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x81,
0x57, 0x28, 0xe7, 0xce, 0x0e, 0x00, 0x00,
}
func (m *DeviceV1) Marshal() (dAtA []byte, err error) {
@@ -866,6 +870,13 @@ func (m *DeviceCollectedData) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if len(m.OsId) > 0 {
i -= len(m.OsId)
copy(dAtA[i:], m.OsId)
i = encodeVarintDevice(dAtA, i, uint64(len(m.OsId)))
i--
dAtA[i] = 0x7a
}
if m.TpmPlatformAttestation != nil {
{
size, err := m.TpmPlatformAttestation.MarshalToSizedBuffer(dAtA[:i])
@@ -1236,6 +1247,13 @@ func (m *DeviceProfile) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if len(m.OsId) > 0 {
i -= len(m.OsId)
copy(dAtA[i:], m.OsId)
i = encodeVarintDevice(dAtA, i, uint64(len(m.OsId)))
i--
dAtA[i] = 0x4a
}
if len(m.OsBuildSupplemental) > 0 {
i -= len(m.OsBuildSupplemental)
copy(dAtA[i:], m.OsBuildSupplemental)
@@ -1477,6 +1495,10 @@ func (m *DeviceCollectedData) Size() (n int) {
l = m.TpmPlatformAttestation.Size()
n += 1 + l + sovDevice(uint64(l))
}
l = len(m.OsId)
if l > 0 {
n += 1 + l + sovDevice(uint64(l))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
@@ -1633,6 +1655,10 @@ func (m *DeviceProfile) Size() (n int) {
if l > 0 {
n += 1 + l + sovDevice(uint64(l))
}
l = len(m.OsId)
if l > 0 {
n += 1 + l + sovDevice(uint64(l))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
@@ -2862,6 +2888,38 @@ func (m *DeviceCollectedData) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 15:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field OsId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowDevice
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthDevice
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthDevice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.OsId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipDevice(dAtA[iNdEx:])
@@ -3804,6 +3862,38 @@ func (m *DeviceProfile) Unmarshal(dAtA []byte) error {
}
m.OsBuildSupplemental = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 9:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field OsId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowDevice
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthDevice
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthDevice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.OsId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipDevice(dAtA[iNdEx:])
+2
View File
@@ -100,6 +100,7 @@ func TestDeviceConversions_toAndFrom(t *testing.T) {
},
},
},
OsId: "macOS", // Made up, only set for Linux.
},
},
Source: &devicepb.DeviceSource{
@@ -115,6 +116,7 @@ func TestDeviceConversions_toAndFrom(t *testing.T) {
OsUsernames: []string{"admin", "llama"},
JamfBinaryVersion: "9.27",
ExternalId: "99",
OsId: "macOS", // Made up, only set for Linux.
},
Owner: "llama",
}
+5 -5
View File
@@ -152,11 +152,11 @@ func collectDeviceData(mode CollectDataMode) (*devicepb.DeviceCollectedData, err
}
return &devicepb.DeviceCollectedData{
CollectTime: timestamppb.Now(),
OsType: devicepb.OSType_OS_TYPE_LINUX,
SerialNumber: firstValidAssetTag(reportedAssetTag, systemSerialNumber, baseBoardSerialNumber),
ModelIdentifier: modelIdentifier,
// TODO(codingllama): Write os_id for Linux devices.
CollectTime: timestamppb.Now(),
OsType: devicepb.OSType_OS_TYPE_LINUX,
SerialNumber: firstValidAssetTag(reportedAssetTag, systemSerialNumber, baseBoardSerialNumber),
ModelIdentifier: modelIdentifier,
OsId: osRelease.ID,
OsVersion: osRelease.VersionID,
OsBuild: osRelease.Version,
OsUsername: u.Name,
+2 -1
View File
@@ -52,6 +52,7 @@ func TestCollectDeviceData_linux(t *testing.T) {
ReportedAssetTag: "No Asset Information",
SystemSerialNumber: "PF0A0AAA",
BaseBoardSerialNumber: "L1AA00A00A0",
OsId: "ubuntu",
}
dmiInfoSuccess := func() (*linux.DMIInfo, error) {
@@ -74,7 +75,7 @@ func TestCollectDeviceData_linux(t *testing.T) {
return &linux.OSRelease{
VersionID: wantCD.OsVersion,
Version: wantCD.OsBuild,
ID: "ubuntu",
ID: wantCD.OsId,
}, nil
}
cddFuncs.dmiInfoFromSysfs = dmiInfoSuccess