// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0-devel // protoc v3.12.4 // source: wv_proto2.proto package widevine import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // todo: fill (for this top-level type, it might be impossible/difficult) type LicenseType int32 const ( LicenseType_ZERO LicenseType = 0 LicenseType_DEFAULT LicenseType = 1 // 1 is STREAMING/temporary license; on recent versions may go up to 3 (latest x86); it might be persist/don't persist type, unconfirmed LicenseType_OFFLINE LicenseType = 2 ) // Enum value maps for LicenseType. var ( LicenseType_name = map[int32]string{ 0: "ZERO", 1: "DEFAULT", 2: "OFFLINE", } LicenseType_value = map[string]int32{ "ZERO": 0, "DEFAULT": 1, "OFFLINE": 2, } ) func (x LicenseType) Enum() *LicenseType { p := new(LicenseType) *p = x return p } func (x LicenseType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LicenseType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[0].Descriptor() } func (LicenseType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[0] } func (x LicenseType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *LicenseType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = LicenseType(num) return nil } // Deprecated: Use LicenseType.Descriptor instead. func (LicenseType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0} } // todo: fill (for this top-level type, it might be impossible/difficult) // this is just a guess because these globals got lost, but really, do we need more? type ProtocolVersion int32 const ( ProtocolVersion_CURRENT ProtocolVersion = 21 // don't have symbols for this ) // Enum value maps for ProtocolVersion. var ( ProtocolVersion_name = map[int32]string{ 21: "CURRENT", } ProtocolVersion_value = map[string]int32{ "CURRENT": 21, } ) func (x ProtocolVersion) Enum() *ProtocolVersion { p := new(ProtocolVersion) *p = x return p } func (x ProtocolVersion) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ProtocolVersion) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[1].Descriptor() } func (ProtocolVersion) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[1] } func (x ProtocolVersion) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ProtocolVersion) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ProtocolVersion(num) return nil } // Deprecated: Use ProtocolVersion.Descriptor instead. func (ProtocolVersion) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{1} } type ClientIdentification_TokenType int32 const ( ClientIdentification_KEYBOX ClientIdentification_TokenType = 0 ClientIdentification_DEVICE_CERTIFICATE ClientIdentification_TokenType = 1 ClientIdentification_REMOTE_ATTESTATION_CERTIFICATE ClientIdentification_TokenType = 2 ) // Enum value maps for ClientIdentification_TokenType. var ( ClientIdentification_TokenType_name = map[int32]string{ 0: "KEYBOX", 1: "DEVICE_CERTIFICATE", 2: "REMOTE_ATTESTATION_CERTIFICATE", } ClientIdentification_TokenType_value = map[string]int32{ "KEYBOX": 0, "DEVICE_CERTIFICATE": 1, "REMOTE_ATTESTATION_CERTIFICATE": 2, } ) func (x ClientIdentification_TokenType) Enum() *ClientIdentification_TokenType { p := new(ClientIdentification_TokenType) *p = x return p } func (x ClientIdentification_TokenType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ClientIdentification_TokenType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[2].Descriptor() } func (ClientIdentification_TokenType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[2] } func (x ClientIdentification_TokenType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ClientIdentification_TokenType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ClientIdentification_TokenType(num) return nil } // Deprecated: Use ClientIdentification_TokenType.Descriptor instead. func (ClientIdentification_TokenType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0, 0} } type ClientIdentification_ClientCapabilities_HdcpVersion int32 const ( ClientIdentification_ClientCapabilities_HDCP_NONE ClientIdentification_ClientCapabilities_HdcpVersion = 0 ClientIdentification_ClientCapabilities_HDCP_V1 ClientIdentification_ClientCapabilities_HdcpVersion = 1 ClientIdentification_ClientCapabilities_HDCP_V2 ClientIdentification_ClientCapabilities_HdcpVersion = 2 ClientIdentification_ClientCapabilities_HDCP_V2_1 ClientIdentification_ClientCapabilities_HdcpVersion = 3 ClientIdentification_ClientCapabilities_HDCP_V2_2 ClientIdentification_ClientCapabilities_HdcpVersion = 4 ) // Enum value maps for ClientIdentification_ClientCapabilities_HdcpVersion. var ( ClientIdentification_ClientCapabilities_HdcpVersion_name = map[int32]string{ 0: "HDCP_NONE", 1: "HDCP_V1", 2: "HDCP_V2", 3: "HDCP_V2_1", 4: "HDCP_V2_2", } ClientIdentification_ClientCapabilities_HdcpVersion_value = map[string]int32{ "HDCP_NONE": 0, "HDCP_V1": 1, "HDCP_V2": 2, "HDCP_V2_1": 3, "HDCP_V2_2": 4, } ) func (x ClientIdentification_ClientCapabilities_HdcpVersion) Enum() *ClientIdentification_ClientCapabilities_HdcpVersion { p := new(ClientIdentification_ClientCapabilities_HdcpVersion) *p = x return p } func (x ClientIdentification_ClientCapabilities_HdcpVersion) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ClientIdentification_ClientCapabilities_HdcpVersion) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[3].Descriptor() } func (ClientIdentification_ClientCapabilities_HdcpVersion) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[3] } func (x ClientIdentification_ClientCapabilities_HdcpVersion) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ClientIdentification_ClientCapabilities_HdcpVersion) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ClientIdentification_ClientCapabilities_HdcpVersion(num) return nil } // Deprecated: Use ClientIdentification_ClientCapabilities_HdcpVersion.Descriptor instead. func (ClientIdentification_ClientCapabilities_HdcpVersion) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0, 1, 0} } type DeviceCertificate_CertificateType int32 const ( DeviceCertificate_ROOT DeviceCertificate_CertificateType = 0 DeviceCertificate_INTERMEDIATE DeviceCertificate_CertificateType = 1 DeviceCertificate_USER_DEVICE DeviceCertificate_CertificateType = 2 DeviceCertificate_SERVICE DeviceCertificate_CertificateType = 3 ) // Enum value maps for DeviceCertificate_CertificateType. var ( DeviceCertificate_CertificateType_name = map[int32]string{ 0: "ROOT", 1: "INTERMEDIATE", 2: "USER_DEVICE", 3: "SERVICE", } DeviceCertificate_CertificateType_value = map[string]int32{ "ROOT": 0, "INTERMEDIATE": 1, "USER_DEVICE": 2, "SERVICE": 3, } ) func (x DeviceCertificate_CertificateType) Enum() *DeviceCertificate_CertificateType { p := new(DeviceCertificate_CertificateType) *p = x return p } func (x DeviceCertificate_CertificateType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DeviceCertificate_CertificateType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[4].Descriptor() } func (DeviceCertificate_CertificateType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[4] } func (x DeviceCertificate_CertificateType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *DeviceCertificate_CertificateType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = DeviceCertificate_CertificateType(num) return nil } // Deprecated: Use DeviceCertificate_CertificateType.Descriptor instead. func (DeviceCertificate_CertificateType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{1, 0} } type DeviceCertificateStatus_CertificateStatus int32 const ( DeviceCertificateStatus_VALID DeviceCertificateStatus_CertificateStatus = 0 DeviceCertificateStatus_REVOKED DeviceCertificateStatus_CertificateStatus = 1 ) // Enum value maps for DeviceCertificateStatus_CertificateStatus. var ( DeviceCertificateStatus_CertificateStatus_name = map[int32]string{ 0: "VALID", 1: "REVOKED", } DeviceCertificateStatus_CertificateStatus_value = map[string]int32{ "VALID": 0, "REVOKED": 1, } ) func (x DeviceCertificateStatus_CertificateStatus) Enum() *DeviceCertificateStatus_CertificateStatus { p := new(DeviceCertificateStatus_CertificateStatus) *p = x return p } func (x DeviceCertificateStatus_CertificateStatus) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DeviceCertificateStatus_CertificateStatus) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[5].Descriptor() } func (DeviceCertificateStatus_CertificateStatus) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[5] } func (x DeviceCertificateStatus_CertificateStatus) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *DeviceCertificateStatus_CertificateStatus) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = DeviceCertificateStatus_CertificateStatus(num) return nil } // Deprecated: Use DeviceCertificateStatus_CertificateStatus.Descriptor instead. func (DeviceCertificateStatus_CertificateStatus) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{2, 0} } type License_KeyContainer_KeyType int32 const ( License_KeyContainer_SIGNING License_KeyContainer_KeyType = 1 License_KeyContainer_CONTENT License_KeyContainer_KeyType = 2 License_KeyContainer_KEY_CONTROL License_KeyContainer_KeyType = 3 License_KeyContainer_OPERATOR_SESSION License_KeyContainer_KeyType = 4 ) // Enum value maps for License_KeyContainer_KeyType. var ( License_KeyContainer_KeyType_name = map[int32]string{ 1: "SIGNING", 2: "CONTENT", 3: "KEY_CONTROL", 4: "OPERATOR_SESSION", } License_KeyContainer_KeyType_value = map[string]int32{ "SIGNING": 1, "CONTENT": 2, "KEY_CONTROL": 3, "OPERATOR_SESSION": 4, } ) func (x License_KeyContainer_KeyType) Enum() *License_KeyContainer_KeyType { p := new(License_KeyContainer_KeyType) *p = x return p } func (x License_KeyContainer_KeyType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (License_KeyContainer_KeyType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[6].Descriptor() } func (License_KeyContainer_KeyType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[6] } func (x License_KeyContainer_KeyType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *License_KeyContainer_KeyType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = License_KeyContainer_KeyType(num) return nil } // Deprecated: Use License_KeyContainer_KeyType.Descriptor instead. func (License_KeyContainer_KeyType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 0} } type License_KeyContainer_SecurityLevel int32 const ( License_KeyContainer_SW_SECURE_CRYPTO License_KeyContainer_SecurityLevel = 1 License_KeyContainer_SW_SECURE_DECODE License_KeyContainer_SecurityLevel = 2 License_KeyContainer_HW_SECURE_CRYPTO License_KeyContainer_SecurityLevel = 3 License_KeyContainer_HW_SECURE_DECODE License_KeyContainer_SecurityLevel = 4 License_KeyContainer_HW_SECURE_ALL License_KeyContainer_SecurityLevel = 5 ) // Enum value maps for License_KeyContainer_SecurityLevel. var ( License_KeyContainer_SecurityLevel_name = map[int32]string{ 1: "SW_SECURE_CRYPTO", 2: "SW_SECURE_DECODE", 3: "HW_SECURE_CRYPTO", 4: "HW_SECURE_DECODE", 5: "HW_SECURE_ALL", } License_KeyContainer_SecurityLevel_value = map[string]int32{ "SW_SECURE_CRYPTO": 1, "SW_SECURE_DECODE": 2, "HW_SECURE_CRYPTO": 3, "HW_SECURE_DECODE": 4, "HW_SECURE_ALL": 5, } ) func (x License_KeyContainer_SecurityLevel) Enum() *License_KeyContainer_SecurityLevel { p := new(License_KeyContainer_SecurityLevel) *p = x return p } func (x License_KeyContainer_SecurityLevel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (License_KeyContainer_SecurityLevel) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[7].Descriptor() } func (License_KeyContainer_SecurityLevel) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[7] } func (x License_KeyContainer_SecurityLevel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *License_KeyContainer_SecurityLevel) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = License_KeyContainer_SecurityLevel(num) return nil } // Deprecated: Use License_KeyContainer_SecurityLevel.Descriptor instead. func (License_KeyContainer_SecurityLevel) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 1} } type License_KeyContainer_OutputProtection_CGMS int32 const ( License_KeyContainer_OutputProtection_COPY_FREE License_KeyContainer_OutputProtection_CGMS = 0 License_KeyContainer_OutputProtection_COPY_ONCE License_KeyContainer_OutputProtection_CGMS = 2 License_KeyContainer_OutputProtection_COPY_NEVER License_KeyContainer_OutputProtection_CGMS = 3 License_KeyContainer_OutputProtection_CGMS_NONE License_KeyContainer_OutputProtection_CGMS = 42 // PC default! ) // Enum value maps for License_KeyContainer_OutputProtection_CGMS. var ( License_KeyContainer_OutputProtection_CGMS_name = map[int32]string{ 0: "COPY_FREE", 2: "COPY_ONCE", 3: "COPY_NEVER", 42: "CGMS_NONE", } License_KeyContainer_OutputProtection_CGMS_value = map[string]int32{ "COPY_FREE": 0, "COPY_ONCE": 2, "COPY_NEVER": 3, "CGMS_NONE": 42, } ) func (x License_KeyContainer_OutputProtection_CGMS) Enum() *License_KeyContainer_OutputProtection_CGMS { p := new(License_KeyContainer_OutputProtection_CGMS) *p = x return p } func (x License_KeyContainer_OutputProtection_CGMS) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (License_KeyContainer_OutputProtection_CGMS) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[8].Descriptor() } func (License_KeyContainer_OutputProtection_CGMS) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[8] } func (x License_KeyContainer_OutputProtection_CGMS) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *License_KeyContainer_OutputProtection_CGMS) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = License_KeyContainer_OutputProtection_CGMS(num) return nil } // Deprecated: Use License_KeyContainer_OutputProtection_CGMS.Descriptor instead. func (License_KeyContainer_OutputProtection_CGMS) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 0, 0} } type LicenseError_Error int32 const ( LicenseError_INVALID_DEVICE_CERTIFICATE LicenseError_Error = 1 LicenseError_REVOKED_DEVICE_CERTIFICATE LicenseError_Error = 2 LicenseError_SERVICE_UNAVAILABLE LicenseError_Error = 3 ) // Enum value maps for LicenseError_Error. var ( LicenseError_Error_name = map[int32]string{ 1: "INVALID_DEVICE_CERTIFICATE", 2: "REVOKED_DEVICE_CERTIFICATE", 3: "SERVICE_UNAVAILABLE", } LicenseError_Error_value = map[string]int32{ "INVALID_DEVICE_CERTIFICATE": 1, "REVOKED_DEVICE_CERTIFICATE": 2, "SERVICE_UNAVAILABLE": 3, } ) func (x LicenseError_Error) Enum() *LicenseError_Error { p := new(LicenseError_Error) *p = x return p } func (x LicenseError_Error) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LicenseError_Error) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[9].Descriptor() } func (LicenseError_Error) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[9] } func (x LicenseError_Error) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *LicenseError_Error) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = LicenseError_Error(num) return nil } // Deprecated: Use LicenseError_Error.Descriptor instead. func (LicenseError_Error) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{7, 0} } type LicenseRequest_RequestType int32 const ( LicenseRequest_NEW LicenseRequest_RequestType = 1 LicenseRequest_RENEWAL LicenseRequest_RequestType = 2 LicenseRequest_RELEASE LicenseRequest_RequestType = 3 ) // Enum value maps for LicenseRequest_RequestType. var ( LicenseRequest_RequestType_name = map[int32]string{ 1: "NEW", 2: "RENEWAL", 3: "RELEASE", } LicenseRequest_RequestType_value = map[string]int32{ "NEW": 1, "RENEWAL": 2, "RELEASE": 3, } ) func (x LicenseRequest_RequestType) Enum() *LicenseRequest_RequestType { p := new(LicenseRequest_RequestType) *p = x return p } func (x LicenseRequest_RequestType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LicenseRequest_RequestType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[10].Descriptor() } func (LicenseRequest_RequestType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[10] } func (x LicenseRequest_RequestType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *LicenseRequest_RequestType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = LicenseRequest_RequestType(num) return nil } // Deprecated: Use LicenseRequest_RequestType.Descriptor instead. func (LicenseRequest_RequestType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8, 0} } type LicenseRequestRaw_RequestType int32 const ( LicenseRequestRaw_NEW LicenseRequestRaw_RequestType = 1 LicenseRequestRaw_RENEWAL LicenseRequestRaw_RequestType = 2 LicenseRequestRaw_RELEASE LicenseRequestRaw_RequestType = 3 ) // Enum value maps for LicenseRequestRaw_RequestType. var ( LicenseRequestRaw_RequestType_name = map[int32]string{ 1: "NEW", 2: "RENEWAL", 3: "RELEASE", } LicenseRequestRaw_RequestType_value = map[string]int32{ "NEW": 1, "RENEWAL": 2, "RELEASE": 3, } ) func (x LicenseRequestRaw_RequestType) Enum() *LicenseRequestRaw_RequestType { p := new(LicenseRequestRaw_RequestType) *p = x return p } func (x LicenseRequestRaw_RequestType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LicenseRequestRaw_RequestType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[11].Descriptor() } func (LicenseRequestRaw_RequestType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[11] } func (x LicenseRequestRaw_RequestType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *LicenseRequestRaw_RequestType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = LicenseRequestRaw_RequestType(num) return nil } // Deprecated: Use LicenseRequestRaw_RequestType.Descriptor instead. func (LicenseRequestRaw_RequestType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9, 0} } type ProvisionedDeviceInfo_WvSecurityLevel int32 const ( ProvisionedDeviceInfo_LEVEL_UNSPECIFIED ProvisionedDeviceInfo_WvSecurityLevel = 0 ProvisionedDeviceInfo_LEVEL_1 ProvisionedDeviceInfo_WvSecurityLevel = 1 ProvisionedDeviceInfo_LEVEL_2 ProvisionedDeviceInfo_WvSecurityLevel = 2 ProvisionedDeviceInfo_LEVEL_3 ProvisionedDeviceInfo_WvSecurityLevel = 3 ) // Enum value maps for ProvisionedDeviceInfo_WvSecurityLevel. var ( ProvisionedDeviceInfo_WvSecurityLevel_name = map[int32]string{ 0: "LEVEL_UNSPECIFIED", 1: "LEVEL_1", 2: "LEVEL_2", 3: "LEVEL_3", } ProvisionedDeviceInfo_WvSecurityLevel_value = map[string]int32{ "LEVEL_UNSPECIFIED": 0, "LEVEL_1": 1, "LEVEL_2": 2, "LEVEL_3": 3, } ) func (x ProvisionedDeviceInfo_WvSecurityLevel) Enum() *ProvisionedDeviceInfo_WvSecurityLevel { p := new(ProvisionedDeviceInfo_WvSecurityLevel) *p = x return p } func (x ProvisionedDeviceInfo_WvSecurityLevel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ProvisionedDeviceInfo_WvSecurityLevel) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[12].Descriptor() } func (ProvisionedDeviceInfo_WvSecurityLevel) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[12] } func (x ProvisionedDeviceInfo_WvSecurityLevel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ProvisionedDeviceInfo_WvSecurityLevel) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ProvisionedDeviceInfo_WvSecurityLevel(num) return nil } // Deprecated: Use ProvisionedDeviceInfo_WvSecurityLevel.Descriptor instead. func (ProvisionedDeviceInfo_WvSecurityLevel) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{10, 0} } type SignedMessage_MessageType int32 const ( SignedMessage_LICENSE_REQUEST SignedMessage_MessageType = 1 SignedMessage_LICENSE SignedMessage_MessageType = 2 SignedMessage_ERROR_RESPONSE SignedMessage_MessageType = 3 SignedMessage_SERVICE_CERTIFICATE_REQUEST SignedMessage_MessageType = 4 SignedMessage_SERVICE_CERTIFICATE SignedMessage_MessageType = 5 ) // Enum value maps for SignedMessage_MessageType. var ( SignedMessage_MessageType_name = map[int32]string{ 1: "LICENSE_REQUEST", 2: "LICENSE", 3: "ERROR_RESPONSE", 4: "SERVICE_CERTIFICATE_REQUEST", 5: "SERVICE_CERTIFICATE", } SignedMessage_MessageType_value = map[string]int32{ "LICENSE_REQUEST": 1, "LICENSE": 2, "ERROR_RESPONSE": 3, "SERVICE_CERTIFICATE_REQUEST": 4, "SERVICE_CERTIFICATE": 5, } ) func (x SignedMessage_MessageType) Enum() *SignedMessage_MessageType { p := new(SignedMessage_MessageType) *p = x return p } func (x SignedMessage_MessageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SignedMessage_MessageType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[13].Descriptor() } func (SignedMessage_MessageType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[13] } func (x SignedMessage_MessageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SignedMessage_MessageType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SignedMessage_MessageType(num) return nil } // Deprecated: Use SignedMessage_MessageType.Descriptor instead. func (SignedMessage_MessageType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{20, 0} } type WidevineCencHeader_Algorithm int32 const ( WidevineCencHeader_UNENCRYPTED WidevineCencHeader_Algorithm = 0 WidevineCencHeader_AESCTR WidevineCencHeader_Algorithm = 1 ) // Enum value maps for WidevineCencHeader_Algorithm. var ( WidevineCencHeader_Algorithm_name = map[int32]string{ 0: "UNENCRYPTED", 1: "AESCTR", } WidevineCencHeader_Algorithm_value = map[string]int32{ "UNENCRYPTED": 0, "AESCTR": 1, } ) func (x WidevineCencHeader_Algorithm) Enum() *WidevineCencHeader_Algorithm { p := new(WidevineCencHeader_Algorithm) *p = x return p } func (x WidevineCencHeader_Algorithm) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (WidevineCencHeader_Algorithm) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[14].Descriptor() } func (WidevineCencHeader_Algorithm) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[14] } func (x WidevineCencHeader_Algorithm) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *WidevineCencHeader_Algorithm) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = WidevineCencHeader_Algorithm(num) return nil } // Deprecated: Use WidevineCencHeader_Algorithm.Descriptor instead. func (WidevineCencHeader_Algorithm) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{21, 0} } type SignedLicenseRequest_MessageType int32 const ( SignedLicenseRequest_LICENSE_REQUEST SignedLicenseRequest_MessageType = 1 SignedLicenseRequest_LICENSE SignedLicenseRequest_MessageType = 2 SignedLicenseRequest_ERROR_RESPONSE SignedLicenseRequest_MessageType = 3 SignedLicenseRequest_SERVICE_CERTIFICATE_REQUEST SignedLicenseRequest_MessageType = 4 SignedLicenseRequest_SERVICE_CERTIFICATE SignedLicenseRequest_MessageType = 5 ) // Enum value maps for SignedLicenseRequest_MessageType. var ( SignedLicenseRequest_MessageType_name = map[int32]string{ 1: "LICENSE_REQUEST", 2: "LICENSE", 3: "ERROR_RESPONSE", 4: "SERVICE_CERTIFICATE_REQUEST", 5: "SERVICE_CERTIFICATE", } SignedLicenseRequest_MessageType_value = map[string]int32{ "LICENSE_REQUEST": 1, "LICENSE": 2, "ERROR_RESPONSE": 3, "SERVICE_CERTIFICATE_REQUEST": 4, "SERVICE_CERTIFICATE": 5, } ) func (x SignedLicenseRequest_MessageType) Enum() *SignedLicenseRequest_MessageType { p := new(SignedLicenseRequest_MessageType) *p = x return p } func (x SignedLicenseRequest_MessageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SignedLicenseRequest_MessageType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[15].Descriptor() } func (SignedLicenseRequest_MessageType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[15] } func (x SignedLicenseRequest_MessageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SignedLicenseRequest_MessageType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SignedLicenseRequest_MessageType(num) return nil } // Deprecated: Use SignedLicenseRequest_MessageType.Descriptor instead. func (SignedLicenseRequest_MessageType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{22, 0} } type SignedLicenseRequestRaw_MessageType int32 const ( SignedLicenseRequestRaw_LICENSE_REQUEST SignedLicenseRequestRaw_MessageType = 1 SignedLicenseRequestRaw_LICENSE SignedLicenseRequestRaw_MessageType = 2 SignedLicenseRequestRaw_ERROR_RESPONSE SignedLicenseRequestRaw_MessageType = 3 SignedLicenseRequestRaw_SERVICE_CERTIFICATE_REQUEST SignedLicenseRequestRaw_MessageType = 4 SignedLicenseRequestRaw_SERVICE_CERTIFICATE SignedLicenseRequestRaw_MessageType = 5 ) // Enum value maps for SignedLicenseRequestRaw_MessageType. var ( SignedLicenseRequestRaw_MessageType_name = map[int32]string{ 1: "LICENSE_REQUEST", 2: "LICENSE", 3: "ERROR_RESPONSE", 4: "SERVICE_CERTIFICATE_REQUEST", 5: "SERVICE_CERTIFICATE", } SignedLicenseRequestRaw_MessageType_value = map[string]int32{ "LICENSE_REQUEST": 1, "LICENSE": 2, "ERROR_RESPONSE": 3, "SERVICE_CERTIFICATE_REQUEST": 4, "SERVICE_CERTIFICATE": 5, } ) func (x SignedLicenseRequestRaw_MessageType) Enum() *SignedLicenseRequestRaw_MessageType { p := new(SignedLicenseRequestRaw_MessageType) *p = x return p } func (x SignedLicenseRequestRaw_MessageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SignedLicenseRequestRaw_MessageType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[16].Descriptor() } func (SignedLicenseRequestRaw_MessageType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[16] } func (x SignedLicenseRequestRaw_MessageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SignedLicenseRequestRaw_MessageType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SignedLicenseRequestRaw_MessageType(num) return nil } // Deprecated: Use SignedLicenseRequestRaw_MessageType.Descriptor instead. func (SignedLicenseRequestRaw_MessageType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{23, 0} } type SignedLicense_MessageType int32 const ( SignedLicense_LICENSE_REQUEST SignedLicense_MessageType = 1 SignedLicense_LICENSE SignedLicense_MessageType = 2 SignedLicense_ERROR_RESPONSE SignedLicense_MessageType = 3 SignedLicense_SERVICE_CERTIFICATE_REQUEST SignedLicense_MessageType = 4 SignedLicense_SERVICE_CERTIFICATE SignedLicense_MessageType = 5 ) // Enum value maps for SignedLicense_MessageType. var ( SignedLicense_MessageType_name = map[int32]string{ 1: "LICENSE_REQUEST", 2: "LICENSE", 3: "ERROR_RESPONSE", 4: "SERVICE_CERTIFICATE_REQUEST", 5: "SERVICE_CERTIFICATE", } SignedLicense_MessageType_value = map[string]int32{ "LICENSE_REQUEST": 1, "LICENSE": 2, "ERROR_RESPONSE": 3, "SERVICE_CERTIFICATE_REQUEST": 4, "SERVICE_CERTIFICATE": 5, } ) func (x SignedLicense_MessageType) Enum() *SignedLicense_MessageType { p := new(SignedLicense_MessageType) *p = x return p } func (x SignedLicense_MessageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SignedLicense_MessageType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[17].Descriptor() } func (SignedLicense_MessageType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[17] } func (x SignedLicense_MessageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SignedLicense_MessageType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SignedLicense_MessageType(num) return nil } // Deprecated: Use SignedLicense_MessageType.Descriptor instead. func (SignedLicense_MessageType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{24, 0} } type SignedServiceCertificate_MessageType int32 const ( SignedServiceCertificate_LICENSE_REQUEST SignedServiceCertificate_MessageType = 1 SignedServiceCertificate_LICENSE SignedServiceCertificate_MessageType = 2 SignedServiceCertificate_ERROR_RESPONSE SignedServiceCertificate_MessageType = 3 SignedServiceCertificate_SERVICE_CERTIFICATE_REQUEST SignedServiceCertificate_MessageType = 4 SignedServiceCertificate_SERVICE_CERTIFICATE SignedServiceCertificate_MessageType = 5 ) // Enum value maps for SignedServiceCertificate_MessageType. var ( SignedServiceCertificate_MessageType_name = map[int32]string{ 1: "LICENSE_REQUEST", 2: "LICENSE", 3: "ERROR_RESPONSE", 4: "SERVICE_CERTIFICATE_REQUEST", 5: "SERVICE_CERTIFICATE", } SignedServiceCertificate_MessageType_value = map[string]int32{ "LICENSE_REQUEST": 1, "LICENSE": 2, "ERROR_RESPONSE": 3, "SERVICE_CERTIFICATE_REQUEST": 4, "SERVICE_CERTIFICATE": 5, } ) func (x SignedServiceCertificate_MessageType) Enum() *SignedServiceCertificate_MessageType { p := new(SignedServiceCertificate_MessageType) *p = x return p } func (x SignedServiceCertificate_MessageType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SignedServiceCertificate_MessageType) Descriptor() protoreflect.EnumDescriptor { return file_wv_proto2_proto_enumTypes[18].Descriptor() } func (SignedServiceCertificate_MessageType) Type() protoreflect.EnumType { return &file_wv_proto2_proto_enumTypes[18] } func (x SignedServiceCertificate_MessageType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SignedServiceCertificate_MessageType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SignedServiceCertificate_MessageType(num) return nil } // Deprecated: Use SignedServiceCertificate_MessageType.Descriptor instead. func (SignedServiceCertificate_MessageType) EnumDescriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{25, 0} } // from x86 (partial), most of it from the ARM version: type ClientIdentification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *ClientIdentification_TokenType `protobuf:"varint,1,req,name=Type,enum=ClientIdentification_TokenType" json:"Type,omitempty"` //optional bytes Token = 2; // by default the client treats this as blob, but it's usually a DeviceCertificate, so for usefulness sake, I'm replacing it with this one: Token *SignedDeviceCertificate `protobuf:"bytes,2,opt,name=Token" json:"Token,omitempty"` // use this when parsing, "bytes" when building a client id blob ClientInfo []*ClientIdentification_NameValue `protobuf:"bytes,3,rep,name=ClientInfo" json:"ClientInfo,omitempty"` ProviderClientToken []byte `protobuf:"bytes,4,opt,name=ProviderClientToken" json:"ProviderClientToken,omitempty"` LicenseCounter *uint32 `protobuf:"varint,5,opt,name=LicenseCounter" json:"LicenseCounter,omitempty"` XClientCapabilities *ClientIdentification_ClientCapabilities `protobuf:"bytes,6,opt,name=_ClientCapabilities,json=ClientCapabilities" json:"_ClientCapabilities,omitempty"` // how should we deal with duped names? will have to look at proto docs later XFileHashes *FileHashes `protobuf:"bytes,7,opt,name=_FileHashes,json=FileHashes" json:"_FileHashes,omitempty"` // vmp blob goes here } func (x *ClientIdentification) Reset() { *x = ClientIdentification{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ClientIdentification) String() string { return protoimpl.X.MessageStringOf(x) } func (*ClientIdentification) ProtoMessage() {} func (x *ClientIdentification) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ClientIdentification.ProtoReflect.Descriptor instead. func (*ClientIdentification) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0} } func (x *ClientIdentification) GetType() ClientIdentification_TokenType { if x != nil && x.Type != nil { return *x.Type } return ClientIdentification_KEYBOX } func (x *ClientIdentification) GetToken() *SignedDeviceCertificate { if x != nil { return x.Token } return nil } func (x *ClientIdentification) GetClientInfo() []*ClientIdentification_NameValue { if x != nil { return x.ClientInfo } return nil } func (x *ClientIdentification) GetProviderClientToken() []byte { if x != nil { return x.ProviderClientToken } return nil } func (x *ClientIdentification) GetLicenseCounter() uint32 { if x != nil && x.LicenseCounter != nil { return *x.LicenseCounter } return 0 } func (x *ClientIdentification) GetXClientCapabilities() *ClientIdentification_ClientCapabilities { if x != nil { return x.XClientCapabilities } return nil } func (x *ClientIdentification) GetXFileHashes() *FileHashes { if x != nil { return x.XFileHashes } return nil } type DeviceCertificate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *DeviceCertificate_CertificateType `protobuf:"varint,1,req,name=Type,enum=DeviceCertificate_CertificateType" json:"Type,omitempty"` // the compiled code reused this as ProvisionedDeviceInfo.WvSecurityLevel, however that is incorrect (compiler aliased it as they're both identical as a structure) SerialNumber []byte `protobuf:"bytes,2,opt,name=SerialNumber" json:"SerialNumber,omitempty"` CreationTimeSeconds *uint32 `protobuf:"varint,3,opt,name=CreationTimeSeconds" json:"CreationTimeSeconds,omitempty"` PublicKey []byte `protobuf:"bytes,4,opt,name=PublicKey" json:"PublicKey,omitempty"` SystemId *uint32 `protobuf:"varint,5,opt,name=SystemId" json:"SystemId,omitempty"` TestDeviceDeprecated *uint32 `protobuf:"varint,6,opt,name=TestDeviceDeprecated" json:"TestDeviceDeprecated,omitempty"` // is it bool or int? ServiceId []byte `protobuf:"bytes,7,opt,name=ServiceId" json:"ServiceId,omitempty"` // service URL for service certificates } func (x *DeviceCertificate) Reset() { *x = DeviceCertificate{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceCertificate) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceCertificate) ProtoMessage() {} func (x *DeviceCertificate) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DeviceCertificate.ProtoReflect.Descriptor instead. func (*DeviceCertificate) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{1} } func (x *DeviceCertificate) GetType() DeviceCertificate_CertificateType { if x != nil && x.Type != nil { return *x.Type } return DeviceCertificate_ROOT } func (x *DeviceCertificate) GetSerialNumber() []byte { if x != nil { return x.SerialNumber } return nil } func (x *DeviceCertificate) GetCreationTimeSeconds() uint32 { if x != nil && x.CreationTimeSeconds != nil { return *x.CreationTimeSeconds } return 0 } func (x *DeviceCertificate) GetPublicKey() []byte { if x != nil { return x.PublicKey } return nil } func (x *DeviceCertificate) GetSystemId() uint32 { if x != nil && x.SystemId != nil { return *x.SystemId } return 0 } func (x *DeviceCertificate) GetTestDeviceDeprecated() uint32 { if x != nil && x.TestDeviceDeprecated != nil { return *x.TestDeviceDeprecated } return 0 } func (x *DeviceCertificate) GetServiceId() []byte { if x != nil { return x.ServiceId } return nil } // missing some references, type DeviceCertificateStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SerialNumber []byte `protobuf:"bytes,1,opt,name=SerialNumber" json:"SerialNumber,omitempty"` Status *DeviceCertificateStatus_CertificateStatus `protobuf:"varint,2,opt,name=Status,enum=DeviceCertificateStatus_CertificateStatus" json:"Status,omitempty"` DeviceInfo *ProvisionedDeviceInfo `protobuf:"bytes,4,opt,name=DeviceInfo" json:"DeviceInfo,omitempty"` // where is 3? is it deprecated? } func (x *DeviceCertificateStatus) Reset() { *x = DeviceCertificateStatus{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceCertificateStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceCertificateStatus) ProtoMessage() {} func (x *DeviceCertificateStatus) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DeviceCertificateStatus.ProtoReflect.Descriptor instead. func (*DeviceCertificateStatus) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{2} } func (x *DeviceCertificateStatus) GetSerialNumber() []byte { if x != nil { return x.SerialNumber } return nil } func (x *DeviceCertificateStatus) GetStatus() DeviceCertificateStatus_CertificateStatus { if x != nil && x.Status != nil { return *x.Status } return DeviceCertificateStatus_VALID } func (x *DeviceCertificateStatus) GetDeviceInfo() *ProvisionedDeviceInfo { if x != nil { return x.DeviceInfo } return nil } type DeviceCertificateStatusList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CreationTimeSeconds *uint32 `protobuf:"varint,1,opt,name=CreationTimeSeconds" json:"CreationTimeSeconds,omitempty"` CertificateStatus []*DeviceCertificateStatus `protobuf:"bytes,2,rep,name=CertificateStatus" json:"CertificateStatus,omitempty"` } func (x *DeviceCertificateStatusList) Reset() { *x = DeviceCertificateStatusList{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceCertificateStatusList) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceCertificateStatusList) ProtoMessage() {} func (x *DeviceCertificateStatusList) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DeviceCertificateStatusList.ProtoReflect.Descriptor instead. func (*DeviceCertificateStatusList) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{3} } func (x *DeviceCertificateStatusList) GetCreationTimeSeconds() uint32 { if x != nil && x.CreationTimeSeconds != nil { return *x.CreationTimeSeconds } return 0 } func (x *DeviceCertificateStatusList) GetCertificateStatus() []*DeviceCertificateStatus { if x != nil { return x.CertificateStatus } return nil } type EncryptedClientIdentification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ServiceId *string `protobuf:"bytes,1,req,name=ServiceId" json:"ServiceId,omitempty"` ServiceCertificateSerialNumber []byte `protobuf:"bytes,2,opt,name=ServiceCertificateSerialNumber" json:"ServiceCertificateSerialNumber,omitempty"` EncryptedClientId []byte `protobuf:"bytes,3,req,name=EncryptedClientId" json:"EncryptedClientId,omitempty"` EncryptedClientIdIv []byte `protobuf:"bytes,4,req,name=EncryptedClientIdIv" json:"EncryptedClientIdIv,omitempty"` EncryptedPrivacyKey []byte `protobuf:"bytes,5,req,name=EncryptedPrivacyKey" json:"EncryptedPrivacyKey,omitempty"` } func (x *EncryptedClientIdentification) Reset() { *x = EncryptedClientIdentification{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EncryptedClientIdentification) String() string { return protoimpl.X.MessageStringOf(x) } func (*EncryptedClientIdentification) ProtoMessage() {} func (x *EncryptedClientIdentification) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EncryptedClientIdentification.ProtoReflect.Descriptor instead. func (*EncryptedClientIdentification) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{4} } func (x *EncryptedClientIdentification) GetServiceId() string { if x != nil && x.ServiceId != nil { return *x.ServiceId } return "" } func (x *EncryptedClientIdentification) GetServiceCertificateSerialNumber() []byte { if x != nil { return x.ServiceCertificateSerialNumber } return nil } func (x *EncryptedClientIdentification) GetEncryptedClientId() []byte { if x != nil { return x.EncryptedClientId } return nil } func (x *EncryptedClientIdentification) GetEncryptedClientIdIv() []byte { if x != nil { return x.EncryptedClientIdIv } return nil } func (x *EncryptedClientIdentification) GetEncryptedPrivacyKey() []byte { if x != nil { return x.EncryptedPrivacyKey } return nil } type LicenseIdentification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields RequestId []byte `protobuf:"bytes,1,opt,name=RequestId" json:"RequestId,omitempty"` SessionId []byte `protobuf:"bytes,2,opt,name=SessionId" json:"SessionId,omitempty"` PurchaseId []byte `protobuf:"bytes,3,opt,name=PurchaseId" json:"PurchaseId,omitempty"` Type *LicenseType `protobuf:"varint,4,opt,name=Type,enum=LicenseType" json:"Type,omitempty"` Version *uint32 `protobuf:"varint,5,opt,name=Version" json:"Version,omitempty"` ProviderSessionToken []byte `protobuf:"bytes,6,opt,name=ProviderSessionToken" json:"ProviderSessionToken,omitempty"` } func (x *LicenseIdentification) Reset() { *x = LicenseIdentification{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseIdentification) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseIdentification) ProtoMessage() {} func (x *LicenseIdentification) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseIdentification.ProtoReflect.Descriptor instead. func (*LicenseIdentification) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{5} } func (x *LicenseIdentification) GetRequestId() []byte { if x != nil { return x.RequestId } return nil } func (x *LicenseIdentification) GetSessionId() []byte { if x != nil { return x.SessionId } return nil } func (x *LicenseIdentification) GetPurchaseId() []byte { if x != nil { return x.PurchaseId } return nil } func (x *LicenseIdentification) GetType() LicenseType { if x != nil && x.Type != nil { return *x.Type } return LicenseType_ZERO } func (x *LicenseIdentification) GetVersion() uint32 { if x != nil && x.Version != nil { return *x.Version } return 0 } func (x *LicenseIdentification) GetProviderSessionToken() []byte { if x != nil { return x.ProviderSessionToken } return nil } type License struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id *LicenseIdentification `protobuf:"bytes,1,opt,name=Id" json:"Id,omitempty"` XPolicy *License_Policy `protobuf:"bytes,2,opt,name=_Policy,json=Policy" json:"_Policy,omitempty"` // duped names, etc Key []*License_KeyContainer `protobuf:"bytes,3,rep,name=Key" json:"Key,omitempty"` LicenseStartTime *uint32 `protobuf:"varint,4,opt,name=LicenseStartTime" json:"LicenseStartTime,omitempty"` RemoteAttestationVerified *uint32 `protobuf:"varint,5,opt,name=RemoteAttestationVerified" json:"RemoteAttestationVerified,omitempty"` // bool? ProviderClientToken []byte `protobuf:"bytes,6,opt,name=ProviderClientToken" json:"ProviderClientToken,omitempty"` // there might be more, check with newer versions (I see field 7-8 in a lic) // this appeared in latest x86: ProtectionScheme *uint32 `protobuf:"varint,7,opt,name=ProtectionScheme" json:"ProtectionScheme,omitempty"` // type unconfirmed fully, but it's likely as WidevineCencHeader describesit (fourcc) } func (x *License) Reset() { *x = License{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License) String() string { return protoimpl.X.MessageStringOf(x) } func (*License) ProtoMessage() {} func (x *License) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License.ProtoReflect.Descriptor instead. func (*License) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6} } func (x *License) GetId() *LicenseIdentification { if x != nil { return x.Id } return nil } func (x *License) GetXPolicy() *License_Policy { if x != nil { return x.XPolicy } return nil } func (x *License) GetKey() []*License_KeyContainer { if x != nil { return x.Key } return nil } func (x *License) GetLicenseStartTime() uint32 { if x != nil && x.LicenseStartTime != nil { return *x.LicenseStartTime } return 0 } func (x *License) GetRemoteAttestationVerified() uint32 { if x != nil && x.RemoteAttestationVerified != nil { return *x.RemoteAttestationVerified } return 0 } func (x *License) GetProviderClientToken() []byte { if x != nil { return x.ProviderClientToken } return nil } func (x *License) GetProtectionScheme() uint32 { if x != nil && x.ProtectionScheme != nil { return *x.ProtectionScheme } return 0 } type LicenseError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields //LicenseRequest.RequestType ErrorCode; // clang mismatch ErrorCode *LicenseError_Error `protobuf:"varint,1,opt,name=ErrorCode,enum=LicenseError_Error" json:"ErrorCode,omitempty"` } func (x *LicenseError) Reset() { *x = LicenseError{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseError) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseError) ProtoMessage() {} func (x *LicenseError) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseError.ProtoReflect.Descriptor instead. func (*LicenseError) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{7} } func (x *LicenseError) GetErrorCode() LicenseError_Error { if x != nil && x.ErrorCode != nil { return *x.ErrorCode } return LicenseError_INVALID_DEVICE_CERTIFICATE } type LicenseRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ClientId *ClientIdentification `protobuf:"bytes,1,opt,name=ClientId" json:"ClientId,omitempty"` ContentId *LicenseRequest_ContentIdentification `protobuf:"bytes,2,opt,name=ContentId" json:"ContentId,omitempty"` Type *LicenseRequest_RequestType `protobuf:"varint,3,opt,name=Type,enum=LicenseRequest_RequestType" json:"Type,omitempty"` RequestTime *uint32 `protobuf:"varint,4,opt,name=RequestTime" json:"RequestTime,omitempty"` KeyControlNonceDeprecated []byte `protobuf:"bytes,5,opt,name=KeyControlNonceDeprecated" json:"KeyControlNonceDeprecated,omitempty"` ProtocolVersion *ProtocolVersion `protobuf:"varint,6,opt,name=ProtocolVersion,enum=ProtocolVersion" json:"ProtocolVersion,omitempty"` // lacking symbols for this KeyControlNonce *uint32 `protobuf:"varint,7,opt,name=KeyControlNonce" json:"KeyControlNonce,omitempty"` EncryptedClientId *EncryptedClientIdentification `protobuf:"bytes,8,opt,name=EncryptedClientId" json:"EncryptedClientId,omitempty"` } func (x *LicenseRequest) Reset() { *x = LicenseRequest{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequest) ProtoMessage() {} func (x *LicenseRequest) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequest.ProtoReflect.Descriptor instead. func (*LicenseRequest) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8} } func (x *LicenseRequest) GetClientId() *ClientIdentification { if x != nil { return x.ClientId } return nil } func (x *LicenseRequest) GetContentId() *LicenseRequest_ContentIdentification { if x != nil { return x.ContentId } return nil } func (x *LicenseRequest) GetType() LicenseRequest_RequestType { if x != nil && x.Type != nil { return *x.Type } return LicenseRequest_NEW } func (x *LicenseRequest) GetRequestTime() uint32 { if x != nil && x.RequestTime != nil { return *x.RequestTime } return 0 } func (x *LicenseRequest) GetKeyControlNonceDeprecated() []byte { if x != nil { return x.KeyControlNonceDeprecated } return nil } func (x *LicenseRequest) GetProtocolVersion() ProtocolVersion { if x != nil && x.ProtocolVersion != nil { return *x.ProtocolVersion } return ProtocolVersion_CURRENT } func (x *LicenseRequest) GetKeyControlNonce() uint32 { if x != nil && x.KeyControlNonce != nil { return *x.KeyControlNonce } return 0 } func (x *LicenseRequest) GetEncryptedClientId() *EncryptedClientIdentification { if x != nil { return x.EncryptedClientId } return nil } // raw pssh hack type LicenseRequestRaw struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ClientId *ClientIdentification `protobuf:"bytes,1,opt,name=ClientId" json:"ClientId,omitempty"` ContentId *LicenseRequestRaw_ContentIdentification `protobuf:"bytes,2,opt,name=ContentId" json:"ContentId,omitempty"` Type *LicenseRequestRaw_RequestType `protobuf:"varint,3,opt,name=Type,enum=LicenseRequestRaw_RequestType" json:"Type,omitempty"` RequestTime *uint32 `protobuf:"varint,4,opt,name=RequestTime" json:"RequestTime,omitempty"` KeyControlNonceDeprecated []byte `protobuf:"bytes,5,opt,name=KeyControlNonceDeprecated" json:"KeyControlNonceDeprecated,omitempty"` ProtocolVersion *ProtocolVersion `protobuf:"varint,6,opt,name=ProtocolVersion,enum=ProtocolVersion" json:"ProtocolVersion,omitempty"` // lacking symbols for this KeyControlNonce *uint32 `protobuf:"varint,7,opt,name=KeyControlNonce" json:"KeyControlNonce,omitempty"` EncryptedClientId *EncryptedClientIdentification `protobuf:"bytes,8,opt,name=EncryptedClientId" json:"EncryptedClientId,omitempty"` } func (x *LicenseRequestRaw) Reset() { *x = LicenseRequestRaw{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequestRaw) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequestRaw) ProtoMessage() {} func (x *LicenseRequestRaw) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequestRaw.ProtoReflect.Descriptor instead. func (*LicenseRequestRaw) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9} } func (x *LicenseRequestRaw) GetClientId() *ClientIdentification { if x != nil { return x.ClientId } return nil } func (x *LicenseRequestRaw) GetContentId() *LicenseRequestRaw_ContentIdentification { if x != nil { return x.ContentId } return nil } func (x *LicenseRequestRaw) GetType() LicenseRequestRaw_RequestType { if x != nil && x.Type != nil { return *x.Type } return LicenseRequestRaw_NEW } func (x *LicenseRequestRaw) GetRequestTime() uint32 { if x != nil && x.RequestTime != nil { return *x.RequestTime } return 0 } func (x *LicenseRequestRaw) GetKeyControlNonceDeprecated() []byte { if x != nil { return x.KeyControlNonceDeprecated } return nil } func (x *LicenseRequestRaw) GetProtocolVersion() ProtocolVersion { if x != nil && x.ProtocolVersion != nil { return *x.ProtocolVersion } return ProtocolVersion_CURRENT } func (x *LicenseRequestRaw) GetKeyControlNonce() uint32 { if x != nil && x.KeyControlNonce != nil { return *x.KeyControlNonce } return 0 } func (x *LicenseRequestRaw) GetEncryptedClientId() *EncryptedClientIdentification { if x != nil { return x.EncryptedClientId } return nil } type ProvisionedDeviceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SystemId *uint32 `protobuf:"varint,1,opt,name=SystemId" json:"SystemId,omitempty"` Soc *string `protobuf:"bytes,2,opt,name=Soc" json:"Soc,omitempty"` Manufacturer *string `protobuf:"bytes,3,opt,name=Manufacturer" json:"Manufacturer,omitempty"` Model *string `protobuf:"bytes,4,opt,name=Model" json:"Model,omitempty"` DeviceType *string `protobuf:"bytes,5,opt,name=DeviceType" json:"DeviceType,omitempty"` ModelYear *uint32 `protobuf:"varint,6,opt,name=ModelYear" json:"ModelYear,omitempty"` SecurityLevel *ProvisionedDeviceInfo_WvSecurityLevel `protobuf:"varint,7,opt,name=SecurityLevel,enum=ProvisionedDeviceInfo_WvSecurityLevel" json:"SecurityLevel,omitempty"` TestDevice *uint32 `protobuf:"varint,8,opt,name=TestDevice" json:"TestDevice,omitempty"` // bool? } func (x *ProvisionedDeviceInfo) Reset() { *x = ProvisionedDeviceInfo{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProvisionedDeviceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProvisionedDeviceInfo) ProtoMessage() {} func (x *ProvisionedDeviceInfo) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProvisionedDeviceInfo.ProtoReflect.Descriptor instead. func (*ProvisionedDeviceInfo) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{10} } func (x *ProvisionedDeviceInfo) GetSystemId() uint32 { if x != nil && x.SystemId != nil { return *x.SystemId } return 0 } func (x *ProvisionedDeviceInfo) GetSoc() string { if x != nil && x.Soc != nil { return *x.Soc } return "" } func (x *ProvisionedDeviceInfo) GetManufacturer() string { if x != nil && x.Manufacturer != nil { return *x.Manufacturer } return "" } func (x *ProvisionedDeviceInfo) GetModel() string { if x != nil && x.Model != nil { return *x.Model } return "" } func (x *ProvisionedDeviceInfo) GetDeviceType() string { if x != nil && x.DeviceType != nil { return *x.DeviceType } return "" } func (x *ProvisionedDeviceInfo) GetModelYear() uint32 { if x != nil && x.ModelYear != nil { return *x.ModelYear } return 0 } func (x *ProvisionedDeviceInfo) GetSecurityLevel() ProvisionedDeviceInfo_WvSecurityLevel { if x != nil && x.SecurityLevel != nil { return *x.SecurityLevel } return ProvisionedDeviceInfo_LEVEL_UNSPECIFIED } func (x *ProvisionedDeviceInfo) GetTestDevice() uint32 { if x != nil && x.TestDevice != nil { return *x.TestDevice } return 0 } // todo: fill type ProvisioningOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ProvisioningOptions) Reset() { *x = ProvisioningOptions{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProvisioningOptions) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProvisioningOptions) ProtoMessage() {} func (x *ProvisioningOptions) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProvisioningOptions.ProtoReflect.Descriptor instead. func (*ProvisioningOptions) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{11} } // todo: fill type ProvisioningRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ProvisioningRequest) Reset() { *x = ProvisioningRequest{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProvisioningRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProvisioningRequest) ProtoMessage() {} func (x *ProvisioningRequest) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProvisioningRequest.ProtoReflect.Descriptor instead. func (*ProvisioningRequest) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{12} } // todo: fill type ProvisioningResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ProvisioningResponse) Reset() { *x = ProvisioningResponse{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ProvisioningResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ProvisioningResponse) ProtoMessage() {} func (x *ProvisioningResponse) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ProvisioningResponse.ProtoReflect.Descriptor instead. func (*ProvisioningResponse) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{13} } type RemoteAttestation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Certificate *EncryptedClientIdentification `protobuf:"bytes,1,opt,name=Certificate" json:"Certificate,omitempty"` Salt *string `protobuf:"bytes,2,opt,name=Salt" json:"Salt,omitempty"` Signature *string `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` } func (x *RemoteAttestation) Reset() { *x = RemoteAttestation{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RemoteAttestation) String() string { return protoimpl.X.MessageStringOf(x) } func (*RemoteAttestation) ProtoMessage() {} func (x *RemoteAttestation) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RemoteAttestation.ProtoReflect.Descriptor instead. func (*RemoteAttestation) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{14} } func (x *RemoteAttestation) GetCertificate() *EncryptedClientIdentification { if x != nil { return x.Certificate } return nil } func (x *RemoteAttestation) GetSalt() string { if x != nil && x.Salt != nil { return *x.Salt } return "" } func (x *RemoteAttestation) GetSignature() string { if x != nil && x.Signature != nil { return *x.Signature } return "" } // todo: fill type SessionInit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SessionInit) Reset() { *x = SessionInit{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionInit) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionInit) ProtoMessage() {} func (x *SessionInit) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionInit.ProtoReflect.Descriptor instead. func (*SessionInit) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{15} } // todo: fill type SessionState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SessionState) Reset() { *x = SessionState{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionState) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionState) ProtoMessage() {} func (x *SessionState) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionState.ProtoReflect.Descriptor instead. func (*SessionState) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{16} } // todo: fill type SignedCertificateStatusList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SignedCertificateStatusList) Reset() { *x = SignedCertificateStatusList{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedCertificateStatusList) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedCertificateStatusList) ProtoMessage() {} func (x *SignedCertificateStatusList) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedCertificateStatusList.ProtoReflect.Descriptor instead. func (*SignedCertificateStatusList) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{17} } type SignedDeviceCertificate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields //optional bytes DeviceCertificate = 1; // again, they use a buffer where it's supposed to be a message, so we'll replace it with what it really is: XDeviceCertificate *DeviceCertificate `protobuf:"bytes,1,opt,name=_DeviceCertificate,json=DeviceCertificate" json:"_DeviceCertificate,omitempty"` // how should we deal with duped names? will have to look at proto docs later Signature []byte `protobuf:"bytes,2,opt,name=Signature" json:"Signature,omitempty"` Signer *SignedDeviceCertificate `protobuf:"bytes,3,opt,name=Signer" json:"Signer,omitempty"` } func (x *SignedDeviceCertificate) Reset() { *x = SignedDeviceCertificate{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedDeviceCertificate) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedDeviceCertificate) ProtoMessage() {} func (x *SignedDeviceCertificate) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedDeviceCertificate.ProtoReflect.Descriptor instead. func (*SignedDeviceCertificate) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{18} } func (x *SignedDeviceCertificate) GetXDeviceCertificate() *DeviceCertificate { if x != nil { return x.XDeviceCertificate } return nil } func (x *SignedDeviceCertificate) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedDeviceCertificate) GetSigner() *SignedDeviceCertificate { if x != nil { return x.Signer } return nil } // todo: fill type SignedProvisioningMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SignedProvisioningMessage) Reset() { *x = SignedProvisioningMessage{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedProvisioningMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedProvisioningMessage) ProtoMessage() {} func (x *SignedProvisioningMessage) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedProvisioningMessage.ProtoReflect.Descriptor instead. func (*SignedProvisioningMessage) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{19} } // the root of all messages, from either server or client type SignedMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *SignedMessage_MessageType `protobuf:"varint,1,opt,name=Type,enum=SignedMessage_MessageType" json:"Type,omitempty"` // has in incorrect overlap with License_KeyContainer_SecurityLevel Msg []byte `protobuf:"bytes,2,opt,name=Msg" json:"Msg,omitempty"` // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE Signature []byte `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now) SessionKey []byte `protobuf:"bytes,4,opt,name=SessionKey" json:"SessionKey,omitempty"` // often RSA wrapped for licenses RemoteAttestation *RemoteAttestation `protobuf:"bytes,5,opt,name=RemoteAttestation" json:"RemoteAttestation,omitempty"` } func (x *SignedMessage) Reset() { *x = SignedMessage{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedMessage) ProtoMessage() {} func (x *SignedMessage) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedMessage.ProtoReflect.Descriptor instead. func (*SignedMessage) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{20} } func (x *SignedMessage) GetType() SignedMessage_MessageType { if x != nil && x.Type != nil { return *x.Type } return SignedMessage_LICENSE_REQUEST } func (x *SignedMessage) GetMsg() []byte { if x != nil { return x.Msg } return nil } func (x *SignedMessage) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedMessage) GetSessionKey() []byte { if x != nil { return x.SessionKey } return nil } func (x *SignedMessage) GetRemoteAttestation() *RemoteAttestation { if x != nil { return x.RemoteAttestation } return nil } // This message is copied from google's docs, not reversed: type WidevineCencHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Algorithm *WidevineCencHeader_Algorithm `protobuf:"varint,1,opt,name=algorithm,enum=WidevineCencHeader_Algorithm" json:"algorithm,omitempty"` KeyId [][]byte `protobuf:"bytes,2,rep,name=key_id,json=keyId" json:"key_id,omitempty"` // Content provider name. Provider *string `protobuf:"bytes,3,opt,name=provider" json:"provider,omitempty"` // A content identifier, specified by content provider. ContentId []byte `protobuf:"bytes,4,opt,name=content_id,json=contentId" json:"content_id,omitempty"` // Track type. Acceptable values are SD, HD and AUDIO. Used to // differentiate content keys used by an asset. TrackTypeDeprecated *string `protobuf:"bytes,5,opt,name=track_type_deprecated,json=trackTypeDeprecated" json:"track_type_deprecated,omitempty"` // The name of a registered policy to be used for this asset. Policy *string `protobuf:"bytes,6,opt,name=policy" json:"policy,omitempty"` // Crypto period index, for media using key rotation. CryptoPeriodIndex *uint32 `protobuf:"varint,7,opt,name=crypto_period_index,json=cryptoPeriodIndex" json:"crypto_period_index,omitempty"` // Optional protected context for group content. The grouped_license is a // serialized SignedMessage. GroupedLicense []byte `protobuf:"bytes,8,opt,name=grouped_license,json=groupedLicense" json:"grouped_license,omitempty"` // Protection scheme identifying the encryption algorithm. // Represented as one of the following 4CC values: // 'cenc' (AESCTR), 'cbc1' (AESCBC), // 'cens' (AESCTR subsample), 'cbcs' (AESCBC subsample). ProtectionScheme *uint32 `protobuf:"varint,9,opt,name=protection_scheme,json=protectionScheme" json:"protection_scheme,omitempty"` // Optional. For media using key rotation, this represents the duration // of each crypto period in seconds. CryptoPeriodSeconds *uint32 `protobuf:"varint,10,opt,name=crypto_period_seconds,json=cryptoPeriodSeconds" json:"crypto_period_seconds,omitempty"` } func (x *WidevineCencHeader) Reset() { *x = WidevineCencHeader{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WidevineCencHeader) String() string { return protoimpl.X.MessageStringOf(x) } func (*WidevineCencHeader) ProtoMessage() {} func (x *WidevineCencHeader) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use WidevineCencHeader.ProtoReflect.Descriptor instead. func (*WidevineCencHeader) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{21} } func (x *WidevineCencHeader) GetAlgorithm() WidevineCencHeader_Algorithm { if x != nil && x.Algorithm != nil { return *x.Algorithm } return WidevineCencHeader_UNENCRYPTED } func (x *WidevineCencHeader) GetKeyId() [][]byte { if x != nil { return x.KeyId } return nil } func (x *WidevineCencHeader) GetProvider() string { if x != nil && x.Provider != nil { return *x.Provider } return "" } func (x *WidevineCencHeader) GetContentId() []byte { if x != nil { return x.ContentId } return nil } func (x *WidevineCencHeader) GetTrackTypeDeprecated() string { if x != nil && x.TrackTypeDeprecated != nil { return *x.TrackTypeDeprecated } return "" } func (x *WidevineCencHeader) GetPolicy() string { if x != nil && x.Policy != nil { return *x.Policy } return "" } func (x *WidevineCencHeader) GetCryptoPeriodIndex() uint32 { if x != nil && x.CryptoPeriodIndex != nil { return *x.CryptoPeriodIndex } return 0 } func (x *WidevineCencHeader) GetGroupedLicense() []byte { if x != nil { return x.GroupedLicense } return nil } func (x *WidevineCencHeader) GetProtectionScheme() uint32 { if x != nil && x.ProtectionScheme != nil { return *x.ProtectionScheme } return 0 } func (x *WidevineCencHeader) GetCryptoPeriodSeconds() uint32 { if x != nil && x.CryptoPeriodSeconds != nil { return *x.CryptoPeriodSeconds } return 0 } // from here on, it's just for testing, these messages don't exist in the binaries, I'm adding them to avoid detecting type programmatically type SignedLicenseRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *SignedLicenseRequest_MessageType `protobuf:"varint,1,opt,name=Type,enum=SignedLicenseRequest_MessageType" json:"Type,omitempty"` // has in incorrect overlap with License_KeyContainer_SecurityLevel Msg *LicenseRequest `protobuf:"bytes,2,opt,name=Msg" json:"Msg,omitempty"` // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE Signature []byte `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now) SessionKey []byte `protobuf:"bytes,4,opt,name=SessionKey" json:"SessionKey,omitempty"` // often RSA wrapped for licenses RemoteAttestation *RemoteAttestation `protobuf:"bytes,5,opt,name=RemoteAttestation" json:"RemoteAttestation,omitempty"` } func (x *SignedLicenseRequest) Reset() { *x = SignedLicenseRequest{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedLicenseRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedLicenseRequest) ProtoMessage() {} func (x *SignedLicenseRequest) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedLicenseRequest.ProtoReflect.Descriptor instead. func (*SignedLicenseRequest) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{22} } func (x *SignedLicenseRequest) GetType() SignedLicenseRequest_MessageType { if x != nil && x.Type != nil { return *x.Type } return SignedLicenseRequest_LICENSE_REQUEST } func (x *SignedLicenseRequest) GetMsg() *LicenseRequest { if x != nil { return x.Msg } return nil } func (x *SignedLicenseRequest) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedLicenseRequest) GetSessionKey() []byte { if x != nil { return x.SessionKey } return nil } func (x *SignedLicenseRequest) GetRemoteAttestation() *RemoteAttestation { if x != nil { return x.RemoteAttestation } return nil } // hack type SignedLicenseRequestRaw struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *SignedLicenseRequestRaw_MessageType `protobuf:"varint,1,opt,name=Type,enum=SignedLicenseRequestRaw_MessageType" json:"Type,omitempty"` // has in incorrect overlap with License_KeyContainer_SecurityLevel Msg *LicenseRequestRaw `protobuf:"bytes,2,opt,name=Msg" json:"Msg,omitempty"` // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE Signature []byte `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now) SessionKey []byte `protobuf:"bytes,4,opt,name=SessionKey" json:"SessionKey,omitempty"` // often RSA wrapped for licenses RemoteAttestation *RemoteAttestation `protobuf:"bytes,5,opt,name=RemoteAttestation" json:"RemoteAttestation,omitempty"` } func (x *SignedLicenseRequestRaw) Reset() { *x = SignedLicenseRequestRaw{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedLicenseRequestRaw) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedLicenseRequestRaw) ProtoMessage() {} func (x *SignedLicenseRequestRaw) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedLicenseRequestRaw.ProtoReflect.Descriptor instead. func (*SignedLicenseRequestRaw) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{23} } func (x *SignedLicenseRequestRaw) GetType() SignedLicenseRequestRaw_MessageType { if x != nil && x.Type != nil { return *x.Type } return SignedLicenseRequestRaw_LICENSE_REQUEST } func (x *SignedLicenseRequestRaw) GetMsg() *LicenseRequestRaw { if x != nil { return x.Msg } return nil } func (x *SignedLicenseRequestRaw) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedLicenseRequestRaw) GetSessionKey() []byte { if x != nil { return x.SessionKey } return nil } func (x *SignedLicenseRequestRaw) GetRemoteAttestation() *RemoteAttestation { if x != nil { return x.RemoteAttestation } return nil } type SignedLicense struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *SignedLicense_MessageType `protobuf:"varint,1,opt,name=Type,enum=SignedLicense_MessageType" json:"Type,omitempty"` // has in incorrect overlap with License_KeyContainer_SecurityLevel Msg *License `protobuf:"bytes,2,opt,name=Msg" json:"Msg,omitempty"` // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE Signature []byte `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now) SessionKey []byte `protobuf:"bytes,4,opt,name=SessionKey" json:"SessionKey,omitempty"` // often RSA wrapped for licenses RemoteAttestation *RemoteAttestation `protobuf:"bytes,5,opt,name=RemoteAttestation" json:"RemoteAttestation,omitempty"` } func (x *SignedLicense) Reset() { *x = SignedLicense{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedLicense) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedLicense) ProtoMessage() {} func (x *SignedLicense) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedLicense.ProtoReflect.Descriptor instead. func (*SignedLicense) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{24} } func (x *SignedLicense) GetType() SignedLicense_MessageType { if x != nil && x.Type != nil { return *x.Type } return SignedLicense_LICENSE_REQUEST } func (x *SignedLicense) GetMsg() *License { if x != nil { return x.Msg } return nil } func (x *SignedLicense) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedLicense) GetSessionKey() []byte { if x != nil { return x.SessionKey } return nil } func (x *SignedLicense) GetRemoteAttestation() *RemoteAttestation { if x != nil { return x.RemoteAttestation } return nil } type SignedServiceCertificate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *SignedServiceCertificate_MessageType `protobuf:"varint,1,opt,name=Type,enum=SignedServiceCertificate_MessageType" json:"Type,omitempty"` // has in incorrect overlap with License_KeyContainer_SecurityLevel Msg *SignedDeviceCertificate `protobuf:"bytes,2,opt,name=Msg" json:"Msg,omitempty"` // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE Signature []byte `protobuf:"bytes,3,opt,name=Signature" json:"Signature,omitempty"` // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now) SessionKey []byte `protobuf:"bytes,4,opt,name=SessionKey" json:"SessionKey,omitempty"` // often RSA wrapped for licenses RemoteAttestation *RemoteAttestation `protobuf:"bytes,5,opt,name=RemoteAttestation" json:"RemoteAttestation,omitempty"` } func (x *SignedServiceCertificate) Reset() { *x = SignedServiceCertificate{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignedServiceCertificate) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignedServiceCertificate) ProtoMessage() {} func (x *SignedServiceCertificate) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SignedServiceCertificate.ProtoReflect.Descriptor instead. func (*SignedServiceCertificate) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{25} } func (x *SignedServiceCertificate) GetType() SignedServiceCertificate_MessageType { if x != nil && x.Type != nil { return *x.Type } return SignedServiceCertificate_LICENSE_REQUEST } func (x *SignedServiceCertificate) GetMsg() *SignedDeviceCertificate { if x != nil { return x.Msg } return nil } func (x *SignedServiceCertificate) GetSignature() []byte { if x != nil { return x.Signature } return nil } func (x *SignedServiceCertificate) GetSessionKey() []byte { if x != nil { return x.SessionKey } return nil } func (x *SignedServiceCertificate) GetRemoteAttestation() *RemoteAttestation { if x != nil { return x.RemoteAttestation } return nil } //vmp support type FileHashes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Signer []byte `protobuf:"bytes,1,opt,name=signer" json:"signer,omitempty"` Signatures []*FileHashes_Signature `protobuf:"bytes,2,rep,name=signatures" json:"signatures,omitempty"` } func (x *FileHashes) Reset() { *x = FileHashes{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FileHashes) String() string { return protoimpl.X.MessageStringOf(x) } func (*FileHashes) ProtoMessage() {} func (x *FileHashes) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FileHashes.ProtoReflect.Descriptor instead. func (*FileHashes) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{26} } func (x *FileHashes) GetSigner() []byte { if x != nil { return x.Signer } return nil } func (x *FileHashes) GetSignatures() []*FileHashes_Signature { if x != nil { return x.Signatures } return nil } type ClientIdentification_NameValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name *string `protobuf:"bytes,1,req,name=Name" json:"Name,omitempty"` Value *string `protobuf:"bytes,2,req,name=Value" json:"Value,omitempty"` } func (x *ClientIdentification_NameValue) Reset() { *x = ClientIdentification_NameValue{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ClientIdentification_NameValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*ClientIdentification_NameValue) ProtoMessage() {} func (x *ClientIdentification_NameValue) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ClientIdentification_NameValue.ProtoReflect.Descriptor instead. func (*ClientIdentification_NameValue) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0, 0} } func (x *ClientIdentification_NameValue) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } func (x *ClientIdentification_NameValue) GetValue() string { if x != nil && x.Value != nil { return *x.Value } return "" } type ClientIdentification_ClientCapabilities struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ClientToken *uint32 `protobuf:"varint,1,opt,name=ClientToken" json:"ClientToken,omitempty"` SessionToken *uint32 `protobuf:"varint,2,opt,name=SessionToken" json:"SessionToken,omitempty"` VideoResolutionConstraints *uint32 `protobuf:"varint,3,opt,name=VideoResolutionConstraints" json:"VideoResolutionConstraints,omitempty"` MaxHdcpVersion *ClientIdentification_ClientCapabilities_HdcpVersion `protobuf:"varint,4,opt,name=MaxHdcpVersion,enum=ClientIdentification_ClientCapabilities_HdcpVersion" json:"MaxHdcpVersion,omitempty"` OemCryptoApiVersion *uint32 `protobuf:"varint,5,opt,name=OemCryptoApiVersion" json:"OemCryptoApiVersion,omitempty"` } func (x *ClientIdentification_ClientCapabilities) Reset() { *x = ClientIdentification_ClientCapabilities{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ClientIdentification_ClientCapabilities) String() string { return protoimpl.X.MessageStringOf(x) } func (*ClientIdentification_ClientCapabilities) ProtoMessage() {} func (x *ClientIdentification_ClientCapabilities) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ClientIdentification_ClientCapabilities.ProtoReflect.Descriptor instead. func (*ClientIdentification_ClientCapabilities) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{0, 1} } func (x *ClientIdentification_ClientCapabilities) GetClientToken() uint32 { if x != nil && x.ClientToken != nil { return *x.ClientToken } return 0 } func (x *ClientIdentification_ClientCapabilities) GetSessionToken() uint32 { if x != nil && x.SessionToken != nil { return *x.SessionToken } return 0 } func (x *ClientIdentification_ClientCapabilities) GetVideoResolutionConstraints() uint32 { if x != nil && x.VideoResolutionConstraints != nil { return *x.VideoResolutionConstraints } return 0 } func (x *ClientIdentification_ClientCapabilities) GetMaxHdcpVersion() ClientIdentification_ClientCapabilities_HdcpVersion { if x != nil && x.MaxHdcpVersion != nil { return *x.MaxHdcpVersion } return ClientIdentification_ClientCapabilities_HDCP_NONE } func (x *ClientIdentification_ClientCapabilities) GetOemCryptoApiVersion() uint32 { if x != nil && x.OemCryptoApiVersion != nil { return *x.OemCryptoApiVersion } return 0 } type License_Policy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CanPlay *bool `protobuf:"varint,1,opt,name=CanPlay" json:"CanPlay,omitempty"` // changed from uint32 to bool CanPersist *bool `protobuf:"varint,2,opt,name=CanPersist" json:"CanPersist,omitempty"` CanRenew *bool `protobuf:"varint,3,opt,name=CanRenew" json:"CanRenew,omitempty"` RentalDurationSeconds *uint32 `protobuf:"varint,4,opt,name=RentalDurationSeconds" json:"RentalDurationSeconds,omitempty"` PlaybackDurationSeconds *uint32 `protobuf:"varint,5,opt,name=PlaybackDurationSeconds" json:"PlaybackDurationSeconds,omitempty"` LicenseDurationSeconds *uint32 `protobuf:"varint,6,opt,name=LicenseDurationSeconds" json:"LicenseDurationSeconds,omitempty"` RenewalRecoveryDurationSeconds *uint32 `protobuf:"varint,7,opt,name=RenewalRecoveryDurationSeconds" json:"RenewalRecoveryDurationSeconds,omitempty"` RenewalServerUrl *string `protobuf:"bytes,8,opt,name=RenewalServerUrl" json:"RenewalServerUrl,omitempty"` RenewalDelaySeconds *uint32 `protobuf:"varint,9,opt,name=RenewalDelaySeconds" json:"RenewalDelaySeconds,omitempty"` RenewalRetryIntervalSeconds *uint32 `protobuf:"varint,10,opt,name=RenewalRetryIntervalSeconds" json:"RenewalRetryIntervalSeconds,omitempty"` RenewWithUsage *bool `protobuf:"varint,11,opt,name=RenewWithUsage" json:"RenewWithUsage,omitempty"` // was uint32 } func (x *License_Policy) Reset() { *x = License_Policy{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_Policy) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_Policy) ProtoMessage() {} func (x *License_Policy) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_Policy.ProtoReflect.Descriptor instead. func (*License_Policy) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 0} } func (x *License_Policy) GetCanPlay() bool { if x != nil && x.CanPlay != nil { return *x.CanPlay } return false } func (x *License_Policy) GetCanPersist() bool { if x != nil && x.CanPersist != nil { return *x.CanPersist } return false } func (x *License_Policy) GetCanRenew() bool { if x != nil && x.CanRenew != nil { return *x.CanRenew } return false } func (x *License_Policy) GetRentalDurationSeconds() uint32 { if x != nil && x.RentalDurationSeconds != nil { return *x.RentalDurationSeconds } return 0 } func (x *License_Policy) GetPlaybackDurationSeconds() uint32 { if x != nil && x.PlaybackDurationSeconds != nil { return *x.PlaybackDurationSeconds } return 0 } func (x *License_Policy) GetLicenseDurationSeconds() uint32 { if x != nil && x.LicenseDurationSeconds != nil { return *x.LicenseDurationSeconds } return 0 } func (x *License_Policy) GetRenewalRecoveryDurationSeconds() uint32 { if x != nil && x.RenewalRecoveryDurationSeconds != nil { return *x.RenewalRecoveryDurationSeconds } return 0 } func (x *License_Policy) GetRenewalServerUrl() string { if x != nil && x.RenewalServerUrl != nil { return *x.RenewalServerUrl } return "" } func (x *License_Policy) GetRenewalDelaySeconds() uint32 { if x != nil && x.RenewalDelaySeconds != nil { return *x.RenewalDelaySeconds } return 0 } func (x *License_Policy) GetRenewalRetryIntervalSeconds() uint32 { if x != nil && x.RenewalRetryIntervalSeconds != nil { return *x.RenewalRetryIntervalSeconds } return 0 } func (x *License_Policy) GetRenewWithUsage() bool { if x != nil && x.RenewWithUsage != nil { return *x.RenewWithUsage } return false } type License_KeyContainer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id []byte `protobuf:"bytes,1,opt,name=Id" json:"Id,omitempty"` Iv []byte `protobuf:"bytes,2,opt,name=Iv" json:"Iv,omitempty"` Key []byte `protobuf:"bytes,3,opt,name=Key" json:"Key,omitempty"` Type *License_KeyContainer_KeyType `protobuf:"varint,4,opt,name=Type,enum=License_KeyContainer_KeyType" json:"Type,omitempty"` Level *License_KeyContainer_SecurityLevel `protobuf:"varint,5,opt,name=Level,enum=License_KeyContainer_SecurityLevel" json:"Level,omitempty"` RequiredProtection *License_KeyContainer_OutputProtection `protobuf:"bytes,6,opt,name=RequiredProtection" json:"RequiredProtection,omitempty"` RequestedProtection *License_KeyContainer_OutputProtection `protobuf:"bytes,7,opt,name=RequestedProtection" json:"RequestedProtection,omitempty"` XKeyControl *License_KeyContainer_KeyControl `protobuf:"bytes,8,opt,name=_KeyControl,json=KeyControl" json:"_KeyControl,omitempty"` // duped names, etc XOperatorSessionKeyPermissions *License_KeyContainer_OperatorSessionKeyPermissions `protobuf:"bytes,9,opt,name=_OperatorSessionKeyPermissions,json=OperatorSessionKeyPermissions" json:"_OperatorSessionKeyPermissions,omitempty"` // duped names, etc VideoResolutionConstraints []*License_KeyContainer_VideoResolutionConstraint `protobuf:"bytes,10,rep,name=VideoResolutionConstraints" json:"VideoResolutionConstraints,omitempty"` } func (x *License_KeyContainer) Reset() { *x = License_KeyContainer{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_KeyContainer) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_KeyContainer) ProtoMessage() {} func (x *License_KeyContainer) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_KeyContainer.ProtoReflect.Descriptor instead. func (*License_KeyContainer) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1} } func (x *License_KeyContainer) GetId() []byte { if x != nil { return x.Id } return nil } func (x *License_KeyContainer) GetIv() []byte { if x != nil { return x.Iv } return nil } func (x *License_KeyContainer) GetKey() []byte { if x != nil { return x.Key } return nil } func (x *License_KeyContainer) GetType() License_KeyContainer_KeyType { if x != nil && x.Type != nil { return *x.Type } return License_KeyContainer_SIGNING } func (x *License_KeyContainer) GetLevel() License_KeyContainer_SecurityLevel { if x != nil && x.Level != nil { return *x.Level } return License_KeyContainer_SW_SECURE_CRYPTO } func (x *License_KeyContainer) GetRequiredProtection() *License_KeyContainer_OutputProtection { if x != nil { return x.RequiredProtection } return nil } func (x *License_KeyContainer) GetRequestedProtection() *License_KeyContainer_OutputProtection { if x != nil { return x.RequestedProtection } return nil } func (x *License_KeyContainer) GetXKeyControl() *License_KeyContainer_KeyControl { if x != nil { return x.XKeyControl } return nil } func (x *License_KeyContainer) GetXOperatorSessionKeyPermissions() *License_KeyContainer_OperatorSessionKeyPermissions { if x != nil { return x.XOperatorSessionKeyPermissions } return nil } func (x *License_KeyContainer) GetVideoResolutionConstraints() []*License_KeyContainer_VideoResolutionConstraint { if x != nil { return x.VideoResolutionConstraints } return nil } type License_KeyContainer_OutputProtection struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Hdcp *ClientIdentification_ClientCapabilities_HdcpVersion `protobuf:"varint,1,opt,name=Hdcp,enum=ClientIdentification_ClientCapabilities_HdcpVersion" json:"Hdcp,omitempty"` // it's most likely a copy of Hdcp version available here, but compiler optimized it away CgmsFlags *License_KeyContainer_OutputProtection_CGMS `protobuf:"varint,2,opt,name=CgmsFlags,enum=License_KeyContainer_OutputProtection_CGMS" json:"CgmsFlags,omitempty"` } func (x *License_KeyContainer_OutputProtection) Reset() { *x = License_KeyContainer_OutputProtection{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_KeyContainer_OutputProtection) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_KeyContainer_OutputProtection) ProtoMessage() {} func (x *License_KeyContainer_OutputProtection) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_KeyContainer_OutputProtection.ProtoReflect.Descriptor instead. func (*License_KeyContainer_OutputProtection) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 0} } func (x *License_KeyContainer_OutputProtection) GetHdcp() ClientIdentification_ClientCapabilities_HdcpVersion { if x != nil && x.Hdcp != nil { return *x.Hdcp } return ClientIdentification_ClientCapabilities_HDCP_NONE } func (x *License_KeyContainer_OutputProtection) GetCgmsFlags() License_KeyContainer_OutputProtection_CGMS { if x != nil && x.CgmsFlags != nil { return *x.CgmsFlags } return License_KeyContainer_OutputProtection_COPY_FREE } type License_KeyContainer_KeyControl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields KeyControlBlock []byte `protobuf:"bytes,1,req,name=KeyControlBlock" json:"KeyControlBlock,omitempty"` // what is this? Iv []byte `protobuf:"bytes,2,req,name=Iv" json:"Iv,omitempty"` } func (x *License_KeyContainer_KeyControl) Reset() { *x = License_KeyContainer_KeyControl{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_KeyContainer_KeyControl) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_KeyContainer_KeyControl) ProtoMessage() {} func (x *License_KeyContainer_KeyControl) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_KeyContainer_KeyControl.ProtoReflect.Descriptor instead. func (*License_KeyContainer_KeyControl) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 1} } func (x *License_KeyContainer_KeyControl) GetKeyControlBlock() []byte { if x != nil { return x.KeyControlBlock } return nil } func (x *License_KeyContainer_KeyControl) GetIv() []byte { if x != nil { return x.Iv } return nil } type License_KeyContainer_OperatorSessionKeyPermissions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields AllowEncrypt *uint32 `protobuf:"varint,1,opt,name=AllowEncrypt" json:"AllowEncrypt,omitempty"` AllowDecrypt *uint32 `protobuf:"varint,2,opt,name=AllowDecrypt" json:"AllowDecrypt,omitempty"` AllowSign *uint32 `protobuf:"varint,3,opt,name=AllowSign" json:"AllowSign,omitempty"` AllowSignatureVerify *uint32 `protobuf:"varint,4,opt,name=AllowSignatureVerify" json:"AllowSignatureVerify,omitempty"` } func (x *License_KeyContainer_OperatorSessionKeyPermissions) Reset() { *x = License_KeyContainer_OperatorSessionKeyPermissions{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_KeyContainer_OperatorSessionKeyPermissions) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_KeyContainer_OperatorSessionKeyPermissions) ProtoMessage() {} func (x *License_KeyContainer_OperatorSessionKeyPermissions) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_KeyContainer_OperatorSessionKeyPermissions.ProtoReflect.Descriptor instead. func (*License_KeyContainer_OperatorSessionKeyPermissions) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 2} } func (x *License_KeyContainer_OperatorSessionKeyPermissions) GetAllowEncrypt() uint32 { if x != nil && x.AllowEncrypt != nil { return *x.AllowEncrypt } return 0 } func (x *License_KeyContainer_OperatorSessionKeyPermissions) GetAllowDecrypt() uint32 { if x != nil && x.AllowDecrypt != nil { return *x.AllowDecrypt } return 0 } func (x *License_KeyContainer_OperatorSessionKeyPermissions) GetAllowSign() uint32 { if x != nil && x.AllowSign != nil { return *x.AllowSign } return 0 } func (x *License_KeyContainer_OperatorSessionKeyPermissions) GetAllowSignatureVerify() uint32 { if x != nil && x.AllowSignatureVerify != nil { return *x.AllowSignatureVerify } return 0 } type License_KeyContainer_VideoResolutionConstraint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields MinResolutionPixels *uint32 `protobuf:"varint,1,opt,name=MinResolutionPixels" json:"MinResolutionPixels,omitempty"` MaxResolutionPixels *uint32 `protobuf:"varint,2,opt,name=MaxResolutionPixels" json:"MaxResolutionPixels,omitempty"` RequiredProtection *License_KeyContainer_OutputProtection `protobuf:"bytes,3,opt,name=RequiredProtection" json:"RequiredProtection,omitempty"` } func (x *License_KeyContainer_VideoResolutionConstraint) Reset() { *x = License_KeyContainer_VideoResolutionConstraint{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *License_KeyContainer_VideoResolutionConstraint) String() string { return protoimpl.X.MessageStringOf(x) } func (*License_KeyContainer_VideoResolutionConstraint) ProtoMessage() {} func (x *License_KeyContainer_VideoResolutionConstraint) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use License_KeyContainer_VideoResolutionConstraint.ProtoReflect.Descriptor instead. func (*License_KeyContainer_VideoResolutionConstraint) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{6, 1, 3} } func (x *License_KeyContainer_VideoResolutionConstraint) GetMinResolutionPixels() uint32 { if x != nil && x.MinResolutionPixels != nil { return *x.MinResolutionPixels } return 0 } func (x *License_KeyContainer_VideoResolutionConstraint) GetMaxResolutionPixels() uint32 { if x != nil && x.MaxResolutionPixels != nil { return *x.MaxResolutionPixels } return 0 } func (x *License_KeyContainer_VideoResolutionConstraint) GetRequiredProtection() *License_KeyContainer_OutputProtection { if x != nil { return x.RequiredProtection } return nil } type LicenseRequest_ContentIdentification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CencId *LicenseRequest_ContentIdentification_CENC `protobuf:"bytes,1,opt,name=CencId" json:"CencId,omitempty"` WebmId *LicenseRequest_ContentIdentification_WebM `protobuf:"bytes,2,opt,name=WebmId" json:"WebmId,omitempty"` License *LicenseRequest_ContentIdentification_ExistingLicense `protobuf:"bytes,3,opt,name=License" json:"License,omitempty"` } func (x *LicenseRequest_ContentIdentification) Reset() { *x = LicenseRequest_ContentIdentification{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequest_ContentIdentification) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequest_ContentIdentification) ProtoMessage() {} func (x *LicenseRequest_ContentIdentification) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequest_ContentIdentification.ProtoReflect.Descriptor instead. func (*LicenseRequest_ContentIdentification) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8, 0} } func (x *LicenseRequest_ContentIdentification) GetCencId() *LicenseRequest_ContentIdentification_CENC { if x != nil { return x.CencId } return nil } func (x *LicenseRequest_ContentIdentification) GetWebmId() *LicenseRequest_ContentIdentification_WebM { if x != nil { return x.WebmId } return nil } func (x *LicenseRequest_ContentIdentification) GetLicense() *LicenseRequest_ContentIdentification_ExistingLicense { if x != nil { return x.License } return nil } type LicenseRequest_ContentIdentification_CENC struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields //optional bytes Pssh = 1; // the client's definition is opaque, it doesn't care about the contents, but the PSSH has a clear definition that is understood and requested by the server, thus I'll replace it with: Pssh *WidevineCencHeader `protobuf:"bytes,1,opt,name=Pssh" json:"Pssh,omitempty"` LicenseType *LicenseType `protobuf:"varint,2,opt,name=LicenseType,enum=LicenseType" json:"LicenseType,omitempty"` // unfortunately the LicenseType symbols are not present, acceptable value seems to only be 1 (is this persist/don't persist? look into it!) RequestId []byte `protobuf:"bytes,3,opt,name=RequestId" json:"RequestId,omitempty"` } func (x *LicenseRequest_ContentIdentification_CENC) Reset() { *x = LicenseRequest_ContentIdentification_CENC{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequest_ContentIdentification_CENC) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequest_ContentIdentification_CENC) ProtoMessage() {} func (x *LicenseRequest_ContentIdentification_CENC) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequest_ContentIdentification_CENC.ProtoReflect.Descriptor instead. func (*LicenseRequest_ContentIdentification_CENC) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8, 0, 0} } func (x *LicenseRequest_ContentIdentification_CENC) GetPssh() *WidevineCencHeader { if x != nil { return x.Pssh } return nil } func (x *LicenseRequest_ContentIdentification_CENC) GetLicenseType() LicenseType { if x != nil && x.LicenseType != nil { return *x.LicenseType } return LicenseType_ZERO } func (x *LicenseRequest_ContentIdentification_CENC) GetRequestId() []byte { if x != nil { return x.RequestId } return nil } type LicenseRequest_ContentIdentification_WebM struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Header []byte `protobuf:"bytes,1,opt,name=Header" json:"Header,omitempty"` // identical to CENC, aside from PSSH and the parent field number used LicenseType *LicenseType `protobuf:"varint,2,opt,name=LicenseType,enum=LicenseType" json:"LicenseType,omitempty"` RequestId []byte `protobuf:"bytes,3,opt,name=RequestId" json:"RequestId,omitempty"` } func (x *LicenseRequest_ContentIdentification_WebM) Reset() { *x = LicenseRequest_ContentIdentification_WebM{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequest_ContentIdentification_WebM) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequest_ContentIdentification_WebM) ProtoMessage() {} func (x *LicenseRequest_ContentIdentification_WebM) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequest_ContentIdentification_WebM.ProtoReflect.Descriptor instead. func (*LicenseRequest_ContentIdentification_WebM) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8, 0, 1} } func (x *LicenseRequest_ContentIdentification_WebM) GetHeader() []byte { if x != nil { return x.Header } return nil } func (x *LicenseRequest_ContentIdentification_WebM) GetLicenseType() LicenseType { if x != nil && x.LicenseType != nil { return *x.LicenseType } return LicenseType_ZERO } func (x *LicenseRequest_ContentIdentification_WebM) GetRequestId() []byte { if x != nil { return x.RequestId } return nil } type LicenseRequest_ContentIdentification_ExistingLicense struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields LicenseId *LicenseIdentification `protobuf:"bytes,1,opt,name=LicenseId" json:"LicenseId,omitempty"` SecondsSinceStarted *uint32 `protobuf:"varint,2,opt,name=SecondsSinceStarted" json:"SecondsSinceStarted,omitempty"` SecondsSinceLastPlayed *uint32 `protobuf:"varint,3,opt,name=SecondsSinceLastPlayed" json:"SecondsSinceLastPlayed,omitempty"` SessionUsageTableEntry []byte `protobuf:"bytes,4,opt,name=SessionUsageTableEntry" json:"SessionUsageTableEntry,omitempty"` // interesting! try to figure out the connection between the usage table blob and KCB! } func (x *LicenseRequest_ContentIdentification_ExistingLicense) Reset() { *x = LicenseRequest_ContentIdentification_ExistingLicense{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequest_ContentIdentification_ExistingLicense) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequest_ContentIdentification_ExistingLicense) ProtoMessage() {} func (x *LicenseRequest_ContentIdentification_ExistingLicense) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequest_ContentIdentification_ExistingLicense.ProtoReflect.Descriptor instead. func (*LicenseRequest_ContentIdentification_ExistingLicense) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{8, 0, 2} } func (x *LicenseRequest_ContentIdentification_ExistingLicense) GetLicenseId() *LicenseIdentification { if x != nil { return x.LicenseId } return nil } func (x *LicenseRequest_ContentIdentification_ExistingLicense) GetSecondsSinceStarted() uint32 { if x != nil && x.SecondsSinceStarted != nil { return *x.SecondsSinceStarted } return 0 } func (x *LicenseRequest_ContentIdentification_ExistingLicense) GetSecondsSinceLastPlayed() uint32 { if x != nil && x.SecondsSinceLastPlayed != nil { return *x.SecondsSinceLastPlayed } return 0 } func (x *LicenseRequest_ContentIdentification_ExistingLicense) GetSessionUsageTableEntry() []byte { if x != nil { return x.SessionUsageTableEntry } return nil } type LicenseRequestRaw_ContentIdentification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CencId *LicenseRequestRaw_ContentIdentification_CENC `protobuf:"bytes,1,opt,name=CencId" json:"CencId,omitempty"` WebmId *LicenseRequestRaw_ContentIdentification_WebM `protobuf:"bytes,2,opt,name=WebmId" json:"WebmId,omitempty"` License *LicenseRequestRaw_ContentIdentification_ExistingLicense `protobuf:"bytes,3,opt,name=License" json:"License,omitempty"` } func (x *LicenseRequestRaw_ContentIdentification) Reset() { *x = LicenseRequestRaw_ContentIdentification{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequestRaw_ContentIdentification) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequestRaw_ContentIdentification) ProtoMessage() {} func (x *LicenseRequestRaw_ContentIdentification) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequestRaw_ContentIdentification.ProtoReflect.Descriptor instead. func (*LicenseRequestRaw_ContentIdentification) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9, 0} } func (x *LicenseRequestRaw_ContentIdentification) GetCencId() *LicenseRequestRaw_ContentIdentification_CENC { if x != nil { return x.CencId } return nil } func (x *LicenseRequestRaw_ContentIdentification) GetWebmId() *LicenseRequestRaw_ContentIdentification_WebM { if x != nil { return x.WebmId } return nil } func (x *LicenseRequestRaw_ContentIdentification) GetLicense() *LicenseRequestRaw_ContentIdentification_ExistingLicense { if x != nil { return x.License } return nil } type LicenseRequestRaw_ContentIdentification_CENC struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Pssh []byte `protobuf:"bytes,1,opt,name=Pssh" json:"Pssh,omitempty"` // the client's definition is opaque, it doesn't care about the contents, but the PSSH has a clear definition that is understood and requested by the server, thus I'll replace it with: //optional WidevineCencHeader Pssh = 1; LicenseType *LicenseType `protobuf:"varint,2,opt,name=LicenseType,enum=LicenseType" json:"LicenseType,omitempty"` // unfortunately the LicenseType symbols are not present, acceptable value seems to only be 1 (is this persist/don't persist? look into it!) RequestId []byte `protobuf:"bytes,3,opt,name=RequestId" json:"RequestId,omitempty"` } func (x *LicenseRequestRaw_ContentIdentification_CENC) Reset() { *x = LicenseRequestRaw_ContentIdentification_CENC{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequestRaw_ContentIdentification_CENC) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequestRaw_ContentIdentification_CENC) ProtoMessage() {} func (x *LicenseRequestRaw_ContentIdentification_CENC) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequestRaw_ContentIdentification_CENC.ProtoReflect.Descriptor instead. func (*LicenseRequestRaw_ContentIdentification_CENC) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9, 0, 0} } func (x *LicenseRequestRaw_ContentIdentification_CENC) GetPssh() []byte { if x != nil { return x.Pssh } return nil } func (x *LicenseRequestRaw_ContentIdentification_CENC) GetLicenseType() LicenseType { if x != nil && x.LicenseType != nil { return *x.LicenseType } return LicenseType_ZERO } func (x *LicenseRequestRaw_ContentIdentification_CENC) GetRequestId() []byte { if x != nil { return x.RequestId } return nil } type LicenseRequestRaw_ContentIdentification_WebM struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Header []byte `protobuf:"bytes,1,opt,name=Header" json:"Header,omitempty"` // identical to CENC, aside from PSSH and the parent field number used LicenseType *LicenseType `protobuf:"varint,2,opt,name=LicenseType,enum=LicenseType" json:"LicenseType,omitempty"` RequestId []byte `protobuf:"bytes,3,opt,name=RequestId" json:"RequestId,omitempty"` } func (x *LicenseRequestRaw_ContentIdentification_WebM) Reset() { *x = LicenseRequestRaw_ContentIdentification_WebM{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequestRaw_ContentIdentification_WebM) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequestRaw_ContentIdentification_WebM) ProtoMessage() {} func (x *LicenseRequestRaw_ContentIdentification_WebM) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequestRaw_ContentIdentification_WebM.ProtoReflect.Descriptor instead. func (*LicenseRequestRaw_ContentIdentification_WebM) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9, 0, 1} } func (x *LicenseRequestRaw_ContentIdentification_WebM) GetHeader() []byte { if x != nil { return x.Header } return nil } func (x *LicenseRequestRaw_ContentIdentification_WebM) GetLicenseType() LicenseType { if x != nil && x.LicenseType != nil { return *x.LicenseType } return LicenseType_ZERO } func (x *LicenseRequestRaw_ContentIdentification_WebM) GetRequestId() []byte { if x != nil { return x.RequestId } return nil } type LicenseRequestRaw_ContentIdentification_ExistingLicense struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields LicenseId *LicenseIdentification `protobuf:"bytes,1,opt,name=LicenseId" json:"LicenseId,omitempty"` SecondsSinceStarted *uint32 `protobuf:"varint,2,opt,name=SecondsSinceStarted" json:"SecondsSinceStarted,omitempty"` SecondsSinceLastPlayed *uint32 `protobuf:"varint,3,opt,name=SecondsSinceLastPlayed" json:"SecondsSinceLastPlayed,omitempty"` SessionUsageTableEntry []byte `protobuf:"bytes,4,opt,name=SessionUsageTableEntry" json:"SessionUsageTableEntry,omitempty"` // interesting! try to figure out the connection between the usage table blob and KCB! } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) Reset() { *x = LicenseRequestRaw_ContentIdentification_ExistingLicense{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) String() string { return protoimpl.X.MessageStringOf(x) } func (*LicenseRequestRaw_ContentIdentification_ExistingLicense) ProtoMessage() {} func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LicenseRequestRaw_ContentIdentification_ExistingLicense.ProtoReflect.Descriptor instead. func (*LicenseRequestRaw_ContentIdentification_ExistingLicense) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{9, 0, 2} } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) GetLicenseId() *LicenseIdentification { if x != nil { return x.LicenseId } return nil } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) GetSecondsSinceStarted() uint32 { if x != nil && x.SecondsSinceStarted != nil { return *x.SecondsSinceStarted } return 0 } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) GetSecondsSinceLastPlayed() uint32 { if x != nil && x.SecondsSinceLastPlayed != nil { return *x.SecondsSinceLastPlayed } return 0 } func (x *LicenseRequestRaw_ContentIdentification_ExistingLicense) GetSessionUsageTableEntry() []byte { if x != nil { return x.SessionUsageTableEntry } return nil } type FileHashes_Signature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Filename *string `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"` TestSigning *bool `protobuf:"varint,2,opt,name=test_signing,json=testSigning" json:"test_signing,omitempty"` //0 - release, 1 - testing SHA512Hash []byte `protobuf:"bytes,3,opt,name=SHA512Hash" json:"SHA512Hash,omitempty"` MainExe *bool `protobuf:"varint,4,opt,name=main_exe,json=mainExe" json:"main_exe,omitempty"` //0 for dlls, 1 for exe, this is field 3 in file Signature []byte `protobuf:"bytes,5,opt,name=signature" json:"signature,omitempty"` } func (x *FileHashes_Signature) Reset() { *x = FileHashes_Signature{} if protoimpl.UnsafeEnabled { mi := &file_wv_proto2_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FileHashes_Signature) String() string { return protoimpl.X.MessageStringOf(x) } func (*FileHashes_Signature) ProtoMessage() {} func (x *FileHashes_Signature) ProtoReflect() protoreflect.Message { mi := &file_wv_proto2_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FileHashes_Signature.ProtoReflect.Descriptor instead. func (*FileHashes_Signature) Descriptor() ([]byte, []int) { return file_wv_proto2_proto_rawDescGZIP(), []int{26, 0} } func (x *FileHashes_Signature) GetFilename() string { if x != nil && x.Filename != nil { return *x.Filename } return "" } func (x *FileHashes_Signature) GetTestSigning() bool { if x != nil && x.TestSigning != nil { return *x.TestSigning } return false } func (x *FileHashes_Signature) GetSHA512Hash() []byte { if x != nil { return x.SHA512Hash } return nil } func (x *FileHashes_Signature) GetMainExe() bool { if x != nil && x.MainExe != nil { return *x.MainExe } return false } func (x *FileHashes_Signature) GetSignature() []byte { if x != nil { return x.Signature } return nil } var File_wv_proto2_proto protoreflect.FileDescriptor var file_wv_proto2_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x77, 0x76, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x07, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x13, 0x5f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x0b, 0x5f, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x52, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x1a, 0x35, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x80, 0x03, 0x0a, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3e, 0x0a, 0x1a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x4d, 0x61, 0x78, 0x48, 0x64, 0x63, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x48, 0x64, 0x63, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x4d, 0x61, 0x78, 0x48, 0x64, 0x63, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x4f, 0x65, 0x6d, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x4f, 0x65, 0x6d, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x0b, 0x48, 0x64, 0x63, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x44, 0x43, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x44, 0x43, 0x50, 0x5f, 0x56, 0x31, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x44, 0x43, 0x50, 0x5f, 0x56, 0x32, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x44, 0x43, 0x50, 0x5f, 0x56, 0x32, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x44, 0x43, 0x50, 0x5f, 0x56, 0x32, 0x5f, 0x32, 0x10, 0x04, 0x22, 0x53, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4b, 0x45, 0x59, 0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x02, 0x22, 0xfa, 0x02, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x03, 0x22, 0xe6, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x2b, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x22, 0x97, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x97, 0x02, 0x0a, 0x1d, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x1e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x49, 0x76, 0x18, 0x04, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x13, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x49, 0x76, 0x12, 0x30, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x13, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xe3, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8d, 0x13, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x5f, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x27, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x1a, 0x96, 0x04, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x43, 0x61, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x61, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x43, 0x61, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x6e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x43, 0x61, 0x6e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x12, 0x34, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x52, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x30, 0x0a, 0x13, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x40, 0x0a, 0x1b, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x61, 0x6c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x61, 0x67, 0x65, 0x1a, 0xa5, 0x0c, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x76, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x49, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x56, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x13, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x5f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x7a, 0x0a, 0x1e, 0x5f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x1d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6f, 0x0a, 0x1a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x1a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0xec, 0x01, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x48, 0x64, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x48, 0x64, 0x63, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x48, 0x64, 0x63, 0x70, 0x12, 0x49, 0x0a, 0x09, 0x43, 0x67, 0x6d, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x47, 0x4d, 0x53, 0x52, 0x09, 0x43, 0x67, 0x6d, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x43, 0x0a, 0x04, 0x43, 0x47, 0x4d, 0x53, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x50, 0x59, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x50, 0x59, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x50, 0x59, 0x5f, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x47, 0x4d, 0x53, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x2a, 0x1a, 0x46, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x76, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x02, 0x49, 0x76, 0x1a, 0xb9, 0x01, 0x0a, 0x1d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x32, 0x0a, 0x14, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x1a, 0xd7, 0x01, 0x0a, 0x19, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x49, 0x47, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x22, 0x7a, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x59, 0x50, 0x54, 0x4f, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x59, 0x50, 0x54, 0x4f, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x57, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x05, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x60, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x22, 0xcb, 0x09, 0x0a, 0x0e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x19, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x1a, 0xc9, 0x05, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x06, 0x43, 0x65, 0x6e, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x45, 0x4e, 0x43, 0x52, 0x06, 0x43, 0x65, 0x6e, 0x63, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x06, 0x57, 0x65, 0x62, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, 0x4d, 0x52, 0x06, 0x57, 0x65, 0x62, 0x6d, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x1a, 0x7d, 0x0a, 0x04, 0x43, 0x45, 0x4e, 0x43, 0x12, 0x27, 0x0a, 0x04, 0x50, 0x73, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x69, 0x64, 0x65, 0x76, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x6e, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x04, 0x50, 0x73, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0x6c, 0x0a, 0x04, 0x57, 0x65, 0x62, 0x4d, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0xe9, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x30, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x4e, 0x45, 0x57, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x10, 0x03, 0x22, 0xc8, 0x09, 0x0a, 0x11, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x12, 0x31, 0x0a, 0x08, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x19, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x1a, 0xbd, 0x05, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x06, 0x43, 0x65, 0x6e, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x45, 0x4e, 0x43, 0x52, 0x06, 0x43, 0x65, 0x6e, 0x63, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x06, 0x57, 0x65, 0x62, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, 0x4d, 0x52, 0x06, 0x57, 0x65, 0x62, 0x6d, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x1a, 0x68, 0x0a, 0x04, 0x43, 0x45, 0x4e, 0x43, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x73, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x50, 0x73, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0x6c, 0x0a, 0x04, 0x57, 0x65, 0x62, 0x4d, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x1a, 0xe9, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x30, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x4e, 0x45, 0x57, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x10, 0x03, 0x22, 0xfc, 0x02, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x6f, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x53, 0x6f, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x4d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x59, 0x65, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x59, 0x65, 0x61, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x57, 0x76, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x0f, 0x57, 0x76, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x32, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x33, 0x10, 0x03, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x61, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x17, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x12, 0x5f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd0, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x05, 0x22, 0xd3, 0x03, 0x0a, 0x12, 0x57, 0x69, 0x64, 0x65, 0x76, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x6e, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x57, 0x69, 0x64, 0x65, 0x76, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x6e, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x28, 0x0a, 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x45, 0x53, 0x43, 0x54, 0x52, 0x10, 0x01, 0x22, 0xef, 0x02, 0x0a, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x05, 0x22, 0xf8, 0x02, 0x0a, 0x17, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x12, 0x38, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x77, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x05, 0x22, 0xda, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x05, 0x22, 0x80, 0x03, 0x0a, 0x18, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x10, 0x05, 0x22, 0x81, 0x02, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0xa3, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x48, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6d, 0x61, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2a, 0x31, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x1e, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x10, 0x15, 0x42, 0x07, 0x5a, 0x05, 0x2e, 0x3b, 0x67, 0x65, 0x6e, } var ( file_wv_proto2_proto_rawDescOnce sync.Once file_wv_proto2_proto_rawDescData = file_wv_proto2_proto_rawDesc ) func file_wv_proto2_proto_rawDescGZIP() []byte { file_wv_proto2_proto_rawDescOnce.Do(func() { file_wv_proto2_proto_rawDescData = protoimpl.X.CompressGZIP(file_wv_proto2_proto_rawDescData) }) return file_wv_proto2_proto_rawDescData } var file_wv_proto2_proto_enumTypes = make([]protoimpl.EnumInfo, 19) var file_wv_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_wv_proto2_proto_goTypes = []interface{}{ (LicenseType)(0), // 0: LicenseType (ProtocolVersion)(0), // 1: ProtocolVersion (ClientIdentification_TokenType)(0), // 2: ClientIdentification.TokenType (ClientIdentification_ClientCapabilities_HdcpVersion)(0), // 3: ClientIdentification.ClientCapabilities.HdcpVersion (DeviceCertificate_CertificateType)(0), // 4: DeviceCertificate.CertificateType (DeviceCertificateStatus_CertificateStatus)(0), // 5: DeviceCertificateStatus.CertificateStatus (License_KeyContainer_KeyType)(0), // 6: License.KeyContainer.KeyType (License_KeyContainer_SecurityLevel)(0), // 7: License.KeyContainer.SecurityLevel (License_KeyContainer_OutputProtection_CGMS)(0), // 8: License.KeyContainer.OutputProtection.CGMS (LicenseError_Error)(0), // 9: LicenseError.Error (LicenseRequest_RequestType)(0), // 10: LicenseRequest.RequestType (LicenseRequestRaw_RequestType)(0), // 11: LicenseRequestRaw.RequestType (ProvisionedDeviceInfo_WvSecurityLevel)(0), // 12: ProvisionedDeviceInfo.WvSecurityLevel (SignedMessage_MessageType)(0), // 13: SignedMessage.MessageType (WidevineCencHeader_Algorithm)(0), // 14: WidevineCencHeader.Algorithm (SignedLicenseRequest_MessageType)(0), // 15: SignedLicenseRequest.MessageType (SignedLicenseRequestRaw_MessageType)(0), // 16: SignedLicenseRequestRaw.MessageType (SignedLicense_MessageType)(0), // 17: SignedLicense.MessageType (SignedServiceCertificate_MessageType)(0), // 18: SignedServiceCertificate.MessageType (*ClientIdentification)(nil), // 19: ClientIdentification (*DeviceCertificate)(nil), // 20: DeviceCertificate (*DeviceCertificateStatus)(nil), // 21: DeviceCertificateStatus (*DeviceCertificateStatusList)(nil), // 22: DeviceCertificateStatusList (*EncryptedClientIdentification)(nil), // 23: EncryptedClientIdentification (*LicenseIdentification)(nil), // 24: LicenseIdentification (*License)(nil), // 25: License (*LicenseError)(nil), // 26: LicenseError (*LicenseRequest)(nil), // 27: LicenseRequest (*LicenseRequestRaw)(nil), // 28: LicenseRequestRaw (*ProvisionedDeviceInfo)(nil), // 29: ProvisionedDeviceInfo (*ProvisioningOptions)(nil), // 30: ProvisioningOptions (*ProvisioningRequest)(nil), // 31: ProvisioningRequest (*ProvisioningResponse)(nil), // 32: ProvisioningResponse (*RemoteAttestation)(nil), // 33: RemoteAttestation (*SessionInit)(nil), // 34: SessionInit (*SessionState)(nil), // 35: SessionState (*SignedCertificateStatusList)(nil), // 36: SignedCertificateStatusList (*SignedDeviceCertificate)(nil), // 37: SignedDeviceCertificate (*SignedProvisioningMessage)(nil), // 38: SignedProvisioningMessage (*SignedMessage)(nil), // 39: SignedMessage (*WidevineCencHeader)(nil), // 40: WidevineCencHeader (*SignedLicenseRequest)(nil), // 41: SignedLicenseRequest (*SignedLicenseRequestRaw)(nil), // 42: SignedLicenseRequestRaw (*SignedLicense)(nil), // 43: SignedLicense (*SignedServiceCertificate)(nil), // 44: SignedServiceCertificate (*FileHashes)(nil), // 45: FileHashes (*ClientIdentification_NameValue)(nil), // 46: ClientIdentification.NameValue (*ClientIdentification_ClientCapabilities)(nil), // 47: ClientIdentification.ClientCapabilities (*License_Policy)(nil), // 48: License.Policy (*License_KeyContainer)(nil), // 49: License.KeyContainer (*License_KeyContainer_OutputProtection)(nil), // 50: License.KeyContainer.OutputProtection (*License_KeyContainer_KeyControl)(nil), // 51: License.KeyContainer.KeyControl (*License_KeyContainer_OperatorSessionKeyPermissions)(nil), // 52: License.KeyContainer.OperatorSessionKeyPermissions (*License_KeyContainer_VideoResolutionConstraint)(nil), // 53: License.KeyContainer.VideoResolutionConstraint (*LicenseRequest_ContentIdentification)(nil), // 54: LicenseRequest.ContentIdentification (*LicenseRequest_ContentIdentification_CENC)(nil), // 55: LicenseRequest.ContentIdentification.CENC (*LicenseRequest_ContentIdentification_WebM)(nil), // 56: LicenseRequest.ContentIdentification.WebM (*LicenseRequest_ContentIdentification_ExistingLicense)(nil), // 57: LicenseRequest.ContentIdentification.ExistingLicense (*LicenseRequestRaw_ContentIdentification)(nil), // 58: LicenseRequestRaw.ContentIdentification (*LicenseRequestRaw_ContentIdentification_CENC)(nil), // 59: LicenseRequestRaw.ContentIdentification.CENC (*LicenseRequestRaw_ContentIdentification_WebM)(nil), // 60: LicenseRequestRaw.ContentIdentification.WebM (*LicenseRequestRaw_ContentIdentification_ExistingLicense)(nil), // 61: LicenseRequestRaw.ContentIdentification.ExistingLicense (*FileHashes_Signature)(nil), // 62: FileHashes.Signature } var file_wv_proto2_proto_depIdxs = []int32{ 2, // 0: ClientIdentification.Type:type_name -> ClientIdentification.TokenType 37, // 1: ClientIdentification.Token:type_name -> SignedDeviceCertificate 46, // 2: ClientIdentification.ClientInfo:type_name -> ClientIdentification.NameValue 47, // 3: ClientIdentification._ClientCapabilities:type_name -> ClientIdentification.ClientCapabilities 45, // 4: ClientIdentification._FileHashes:type_name -> FileHashes 4, // 5: DeviceCertificate.Type:type_name -> DeviceCertificate.CertificateType 5, // 6: DeviceCertificateStatus.Status:type_name -> DeviceCertificateStatus.CertificateStatus 29, // 7: DeviceCertificateStatus.DeviceInfo:type_name -> ProvisionedDeviceInfo 21, // 8: DeviceCertificateStatusList.CertificateStatus:type_name -> DeviceCertificateStatus 0, // 9: LicenseIdentification.Type:type_name -> LicenseType 24, // 10: License.Id:type_name -> LicenseIdentification 48, // 11: License._Policy:type_name -> License.Policy 49, // 12: License.Key:type_name -> License.KeyContainer 9, // 13: LicenseError.ErrorCode:type_name -> LicenseError.Error 19, // 14: LicenseRequest.ClientId:type_name -> ClientIdentification 54, // 15: LicenseRequest.ContentId:type_name -> LicenseRequest.ContentIdentification 10, // 16: LicenseRequest.Type:type_name -> LicenseRequest.RequestType 1, // 17: LicenseRequest.ProtocolVersion:type_name -> ProtocolVersion 23, // 18: LicenseRequest.EncryptedClientId:type_name -> EncryptedClientIdentification 19, // 19: LicenseRequestRaw.ClientId:type_name -> ClientIdentification 58, // 20: LicenseRequestRaw.ContentId:type_name -> LicenseRequestRaw.ContentIdentification 11, // 21: LicenseRequestRaw.Type:type_name -> LicenseRequestRaw.RequestType 1, // 22: LicenseRequestRaw.ProtocolVersion:type_name -> ProtocolVersion 23, // 23: LicenseRequestRaw.EncryptedClientId:type_name -> EncryptedClientIdentification 12, // 24: ProvisionedDeviceInfo.SecurityLevel:type_name -> ProvisionedDeviceInfo.WvSecurityLevel 23, // 25: RemoteAttestation.Certificate:type_name -> EncryptedClientIdentification 20, // 26: SignedDeviceCertificate._DeviceCertificate:type_name -> DeviceCertificate 37, // 27: SignedDeviceCertificate.Signer:type_name -> SignedDeviceCertificate 13, // 28: SignedMessage.Type:type_name -> SignedMessage.MessageType 33, // 29: SignedMessage.RemoteAttestation:type_name -> RemoteAttestation 14, // 30: WidevineCencHeader.algorithm:type_name -> WidevineCencHeader.Algorithm 15, // 31: SignedLicenseRequest.Type:type_name -> SignedLicenseRequest.MessageType 27, // 32: SignedLicenseRequest.Msg:type_name -> LicenseRequest 33, // 33: SignedLicenseRequest.RemoteAttestation:type_name -> RemoteAttestation 16, // 34: SignedLicenseRequestRaw.Type:type_name -> SignedLicenseRequestRaw.MessageType 28, // 35: SignedLicenseRequestRaw.Msg:type_name -> LicenseRequestRaw 33, // 36: SignedLicenseRequestRaw.RemoteAttestation:type_name -> RemoteAttestation 17, // 37: SignedLicense.Type:type_name -> SignedLicense.MessageType 25, // 38: SignedLicense.Msg:type_name -> License 33, // 39: SignedLicense.RemoteAttestation:type_name -> RemoteAttestation 18, // 40: SignedServiceCertificate.Type:type_name -> SignedServiceCertificate.MessageType 37, // 41: SignedServiceCertificate.Msg:type_name -> SignedDeviceCertificate 33, // 42: SignedServiceCertificate.RemoteAttestation:type_name -> RemoteAttestation 62, // 43: FileHashes.signatures:type_name -> FileHashes.Signature 3, // 44: ClientIdentification.ClientCapabilities.MaxHdcpVersion:type_name -> ClientIdentification.ClientCapabilities.HdcpVersion 6, // 45: License.KeyContainer.Type:type_name -> License.KeyContainer.KeyType 7, // 46: License.KeyContainer.Level:type_name -> License.KeyContainer.SecurityLevel 50, // 47: License.KeyContainer.RequiredProtection:type_name -> License.KeyContainer.OutputProtection 50, // 48: License.KeyContainer.RequestedProtection:type_name -> License.KeyContainer.OutputProtection 51, // 49: License.KeyContainer._KeyControl:type_name -> License.KeyContainer.KeyControl 52, // 50: License.KeyContainer._OperatorSessionKeyPermissions:type_name -> License.KeyContainer.OperatorSessionKeyPermissions 53, // 51: License.KeyContainer.VideoResolutionConstraints:type_name -> License.KeyContainer.VideoResolutionConstraint 3, // 52: License.KeyContainer.OutputProtection.Hdcp:type_name -> ClientIdentification.ClientCapabilities.HdcpVersion 8, // 53: License.KeyContainer.OutputProtection.CgmsFlags:type_name -> License.KeyContainer.OutputProtection.CGMS 50, // 54: License.KeyContainer.VideoResolutionConstraint.RequiredProtection:type_name -> License.KeyContainer.OutputProtection 55, // 55: LicenseRequest.ContentIdentification.CencId:type_name -> LicenseRequest.ContentIdentification.CENC 56, // 56: LicenseRequest.ContentIdentification.WebmId:type_name -> LicenseRequest.ContentIdentification.WebM 57, // 57: LicenseRequest.ContentIdentification.License:type_name -> LicenseRequest.ContentIdentification.ExistingLicense 40, // 58: LicenseRequest.ContentIdentification.CENC.Pssh:type_name -> WidevineCencHeader 0, // 59: LicenseRequest.ContentIdentification.CENC.LicenseType:type_name -> LicenseType 0, // 60: LicenseRequest.ContentIdentification.WebM.LicenseType:type_name -> LicenseType 24, // 61: LicenseRequest.ContentIdentification.ExistingLicense.LicenseId:type_name -> LicenseIdentification 59, // 62: LicenseRequestRaw.ContentIdentification.CencId:type_name -> LicenseRequestRaw.ContentIdentification.CENC 60, // 63: LicenseRequestRaw.ContentIdentification.WebmId:type_name -> LicenseRequestRaw.ContentIdentification.WebM 61, // 64: LicenseRequestRaw.ContentIdentification.License:type_name -> LicenseRequestRaw.ContentIdentification.ExistingLicense 0, // 65: LicenseRequestRaw.ContentIdentification.CENC.LicenseType:type_name -> LicenseType 0, // 66: LicenseRequestRaw.ContentIdentification.WebM.LicenseType:type_name -> LicenseType 24, // 67: LicenseRequestRaw.ContentIdentification.ExistingLicense.LicenseId:type_name -> LicenseIdentification 68, // [68:68] is the sub-list for method output_type 68, // [68:68] is the sub-list for method input_type 68, // [68:68] is the sub-list for extension type_name 68, // [68:68] is the sub-list for extension extendee 0, // [0:68] is the sub-list for field type_name } func init() { file_wv_proto2_proto_init() } func file_wv_proto2_proto_init() { if File_wv_proto2_proto != nil { return } if !protoimpl.UnsafeEnabled { file_wv_proto2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientIdentification); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceCertificate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceCertificateStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceCertificateStatusList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EncryptedClientIdentification); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseIdentification); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseError); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequestRaw); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisionedDeviceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisioningOptions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisioningRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisioningResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoteAttestation); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionInit); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedCertificateStatusList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedDeviceCertificate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedProvisioningMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WidevineCencHeader); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedLicenseRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedLicenseRequestRaw); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedLicense); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignedServiceCertificate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileHashes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientIdentification_NameValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientIdentification_ClientCapabilities); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_Policy); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_KeyContainer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_KeyContainer_OutputProtection); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_KeyContainer_KeyControl); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_KeyContainer_OperatorSessionKeyPermissions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*License_KeyContainer_VideoResolutionConstraint); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequest_ContentIdentification); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequest_ContentIdentification_CENC); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequest_ContentIdentification_WebM); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequest_ContentIdentification_ExistingLicense); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequestRaw_ContentIdentification); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequestRaw_ContentIdentification_CENC); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequestRaw_ContentIdentification_WebM); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LicenseRequestRaw_ContentIdentification_ExistingLicense); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_wv_proto2_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileHashes_Signature); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_wv_proto2_proto_rawDesc, NumEnums: 19, NumMessages: 44, NumExtensions: 0, NumServices: 0, }, GoTypes: file_wv_proto2_proto_goTypes, DependencyIndexes: file_wv_proto2_proto_depIdxs, EnumInfos: file_wv_proto2_proto_enumTypes, MessageInfos: file_wv_proto2_proto_msgTypes, }.Build() File_wv_proto2_proto = out.File file_wv_proto2_proto_rawDesc = nil file_wv_proto2_proto_goTypes = nil file_wv_proto2_proto_depIdxs = nil }