diff --git a/api-description/apidocs.swagger.yaml b/api-description/apidocs.swagger.yaml index 8423448920..423538a840 100644 --- a/api-description/apidocs.swagger.yaml +++ b/api-description/apidocs.swagger.yaml @@ -1097,9 +1097,9 @@ definitions: type: string event: $ref: '#/definitions/protobufAny' - environmentNamespace: + environmentId: type: string - description: SDK doens't need to set this field. It's set by gateway service. + description: service. clientSourceId: type: string enum: diff --git a/api-description/web-api.swagger.yaml b/api-description/web-api.swagger.yaml index 42823beca3..02d7907245 100644 --- a/api-description/web-api.swagger.yaml +++ b/api-description/web-api.swagger.yaml @@ -2851,7 +2851,7 @@ definitions: type: string command: $ref: '#/definitions/accountChangeAPIKeyNameCommand' - environmentNamespace: + environmentId: type: string accountChangeAPIKeyNameResponse: type: object @@ -2987,7 +2987,7 @@ definitions: properties: command: $ref: '#/definitions/accountCreateAPIKeyCommand' - environmentNamespace: + environmentId: type: string accountCreateAPIKeyResponse: type: object @@ -3113,7 +3113,7 @@ definitions: type: string command: $ref: '#/definitions/accountDisableAPIKeyCommand' - environmentNamespace: + environmentId: type: string accountDisableAPIKeyResponse: type: object @@ -3142,7 +3142,7 @@ definitions: type: string command: $ref: '#/definitions/accountEnableAPIKeyCommand' - environmentNamespace: + environmentId: type: string accountEnableAPIKeyResponse: type: object @@ -3165,8 +3165,6 @@ definitions: accountEnvironmentAPIKey: type: object properties: - environmentNamespace: - type: string apiKey: $ref: '#/definitions/accountAPIKey' environmentDisabled: @@ -3198,7 +3196,7 @@ definitions: properties: id: type: string - environmentNamespace: + environmentId: type: string accountGetAPIKeyResponse: type: object @@ -3268,8 +3266,6 @@ definitions: format: int64 cursor: type: string - environmentNamespace: - type: string orderBy: $ref: '#/definitions/accountListAPIKeysRequestOrderBy' orderDirection: @@ -3278,6 +3274,8 @@ definitions: type: string disabled: type: boolean + environmentId: + type: string accountListAPIKeysRequestOrderBy: type: string enum: diff --git a/hack/create-api-key/command.go b/hack/create-api-key/command.go index bdbcd58d60..7a6bfa5928 100644 --- a/hack/create-api-key/command.go +++ b/hack/create-api-key/command.go @@ -77,7 +77,7 @@ func (c *command) Run(ctx context.Context, metrics metrics.Metrics, logger *zap. Name: *c.name, Role: accountproto.APIKey_Role(role), }, - EnvironmentNamespace: *c.environmentNamespace, + EnvironmentId: *c.environmentNamespace, }) if err != nil { logger.Error("Failed to create api key", zap.Error(err)) diff --git a/hack/create-big-query-table/command.go b/hack/create-big-query-table/command.go index 58d8148ff2..6ad5387698 100644 --- a/hack/create-big-query-table/command.go +++ b/hack/create-big-query-table/command.go @@ -66,7 +66,7 @@ func (c *command) Run(ctx context.Context, metrics metrics.Metrics, logger *zap. // Create tables evaluationEventSchema := bigquery.Schema{ {Name: "id", Type: bigquery.StringFieldType}, - {Name: "environment_namespace", Type: bigquery.StringFieldType}, + {Name: "environment_id", Type: bigquery.StringFieldType}, {Name: "timestamp", Type: bigquery.TimestampFieldType}, {Name: "feature_id", Type: bigquery.StringFieldType}, {Name: "feature_version", Type: bigquery.IntegerFieldType}, @@ -85,7 +85,7 @@ func (c *command) Run(ctx context.Context, metrics metrics.Metrics, logger *zap. } goalEventSchema := bigquery.Schema{ {Name: "id", Type: bigquery.StringFieldType}, - {Name: "environment_namespace", Type: bigquery.StringFieldType}, + {Name: "environment_id", Type: bigquery.StringFieldType}, {Name: "timestamp", Type: bigquery.TimestampFieldType}, {Name: "goal_id", Type: bigquery.StringFieldType}, {Name: "value", Type: bigquery.FloatFieldType}, diff --git a/hack/delete-e2e-data-mysql/command.go b/hack/delete-e2e-data-mysql/command.go index 50f4e6e2e6..314c95d2b7 100644 --- a/hack/delete-e2e-data-mysql/command.go +++ b/hack/delete-e2e-data-mysql/command.go @@ -141,7 +141,7 @@ func (c *command) constructDeleteQuery(target *mysqlE2EInfo) (query string, args DELETE FROM %s WHERE - environment_namespace = ? AND + environment_id = ? AND %s LIKE ? `, target.table, target.targetField) args = []interface{}{ @@ -154,7 +154,7 @@ func (c *command) constructDeleteQuery(target *mysqlE2EInfo) (query string, args DELETE FROM %s WHERE - environment_namespace = ? + environment_id = ? `, target.table) args = []interface{}{ envNamespace, diff --git a/manifests/bucketeer/charts/api/values.yaml b/manifests/bucketeer/charts/api/values.yaml index 8deac0c254..e45b1d169d 100644 --- a/manifests/bucketeer/charts/api/values.yaml +++ b/manifests/bucketeer/charts/api/values.yaml @@ -53,7 +53,7 @@ envoy: tag: v1.31.0 pullPolicy: IfNotPresent lbPolicy: LEAST_REQUEST - descriptor: "CocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCuIFChxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvEg9nb29nbGUucHJvdG9idWYimAEKBlN0cnVjdBI7CgZmaWVsZHMYASADKAsyIy5nb29nbGUucHJvdG9idWYuU3RydWN0LkZpZWxkc0VudHJ5UgZmaWVsZHMaUQoLRmllbGRzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASKyAgoFVmFsdWUSOwoKbnVsbF92YWx1ZRgBIAEoDjIaLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWVIAFIJbnVsbFZhbHVlEiMKDG51bWJlcl92YWx1ZRgCIAEoAUgAUgtudW1iZXJWYWx1ZRIjCgxzdHJpbmdfdmFsdWUYAyABKAlIAFILc3RyaW5nVmFsdWUSHwoKYm9vbF92YWx1ZRgEIAEoCEgAUglib29sVmFsdWUSPAoMc3RydWN0X3ZhbHVlGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAUgtzdHJ1Y3RWYWx1ZRI7CgpsaXN0X3ZhbHVlGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZUgAUglsaXN0VmFsdWVCBgoEa2luZCI7CglMaXN0VmFsdWUSLgoGdmFsdWVzGAEgAygLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgZ2YWx1ZXMqGwoJTnVsbFZhbHVlEg4KCk5VTExfVkFMVUUQAEJ/ChNjb20uZ29vZ2xlLnByb3RvYnVmQgtTdHJ1Y3RQcm90b1ABWi9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9zdHJ1Y3RwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCqY+Cixwcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL29wZW5hcGl2Mi5wcm90bxIpZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMaHGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iswgKB1N3YWdnZXISGAoHc3dhZ2dlchgBIAEoCVIHc3dhZ2dlchJDCgRpbmZvGAIgASgLMi8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSW5mb1IEaW5mbxISCgRob3N0GAMgASgJUgRob3N0EhsKCWJhc2VfcGF0aBgEIAEoCVIIYmFzZVBhdGgSSwoHc2NoZW1lcxgFIAMoDjIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtZVIHc2NoZW1lcxIaCghjb25zdW1lcxgGIAMoCVIIY29uc3VtZXMSGgoIcHJvZHVjZXMYByADKAlSCHByb2R1Y2VzEl8KCXJlc3BvbnNlcxgKIAMoCzJBLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXIuUmVzcG9uc2VzRW50cnlSCXJlc3BvbnNlcxJxChRzZWN1cml0eV9kZWZpbml0aW9ucxgLIAEoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5RGVmaW5pdGlvbnNSE3NlY3VyaXR5RGVmaW5pdGlvbnMSWgoIc2VjdXJpdHkYDCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50UghzZWN1cml0eRJCCgR0YWdzGA0gAygLMi4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnUgR0YWdzEmUKDWV4dGVybmFsX2RvY3MYDiABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxJiCgpleHRlbnNpb25zGA8gAygLMkIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU3dhZ2dlci5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMacQoOUmVzcG9uc2VzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSSQoFdmFsdWUYAiABKAsyMy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBSgQICBAJSgQICRAKItYHCglPcGVyYXRpb24SEgoEdGFncxgBIAMoCVIEdGFncxIYCgdzdW1tYXJ5GAIgASgJUgdzdW1tYXJ5EiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhJlCg1leHRlcm5hbF9kb2NzGAQgASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSIQoMb3BlcmF0aW9uX2lkGAUgASgJUgtvcGVyYXRpb25JZBIaCghjb25zdW1lcxgGIAMoCVIIY29uc3VtZXMSGgoIcHJvZHVjZXMYByADKAlSCHByb2R1Y2VzEmEKCXJlc3BvbnNlcxgJIAMoCzJDLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLk9wZXJhdGlvbi5SZXNwb25zZXNFbnRyeVIJcmVzcG9uc2VzEksKB3NjaGVtZXMYCiADKA4yMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWVSB3NjaGVtZXMSHgoKZGVwcmVjYXRlZBgLIAEoCFIKZGVwcmVjYXRlZBJaCghzZWN1cml0eRgMIAMoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnRSCHNlY3VyaXR5EmQKCmV4dGVuc2lvbnMYDSADKAsyRC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb24uRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zElUKCnBhcmFtZXRlcnMYDiABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5QYXJhbWV0ZXJzUgpwYXJhbWV0ZXJzGnEKDlJlc3BvbnNlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkkKBXZhbHVlGAIgASgLMjMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2VSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4AUoECAgQCSJiCgpQYXJhbWV0ZXJzElQKB2hlYWRlcnMYASADKAsyOi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5IZWFkZXJQYXJhbWV0ZXJSB2hlYWRlcnMiowIKD0hlYWRlclBhcmFtZXRlchISCgRuYW1lGAEgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhJTCgR0eXBlGAMgASgOMj8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUGFyYW1ldGVyLlR5cGVSBHR5cGUSFgoGZm9ybWF0GAQgASgJUgZmb3JtYXQSGgoIcmVxdWlyZWQYBSABKAhSCHJlcXVpcmVkIkUKBFR5cGUSCwoHVU5LTk9XThAAEgoKBlNUUklORxABEgoKBk5VTUJFUhACEgsKB0lOVEVHRVIQAxILCgdCT09MRUFOEARKBAgGEAdKBAgHEAgi2AEKBkhlYWRlchIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SEgoEdHlwZRgCIAEoCVIEdHlwZRIWCgZmb3JtYXQYAyABKAlSBmZvcm1hdBIYCgdkZWZhdWx0GAYgASgJUgdkZWZhdWx0EhgKB3BhdHRlcm4YDSABKAlSB3BhdHRlcm5KBAgEEAVKBAgFEAZKBAgHEAhKBAgIEAlKBAgJEApKBAgKEAtKBAgLEAxKBAgMEA1KBAgOEA9KBAgPEBBKBAgQEBFKBAgREBJKBAgSEBMimgUKCFJlc3BvbnNlEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhJJCgZzY2hlbWEYAiABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWFSBnNjaGVtYRJaCgdoZWFkZXJzGAMgAygLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2UuSGVhZGVyc0VudHJ5UgdoZWFkZXJzEl0KCGV4YW1wbGVzGAQgAygLMkEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2UuRXhhbXBsZXNFbnRyeVIIZXhhbXBsZXMSYwoKZXh0ZW5zaW9ucxgFIAMoCzJDLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxptCgxIZWFkZXJzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSRwoFdmFsdWUYAiABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5IZWFkZXJSBXZhbHVlOgI4ARo7Cg1FeGFtcGxlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEi1gMKBEluZm8SFAoFdGl0bGUYASABKAlSBXRpdGxlEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhIoChB0ZXJtc19vZl9zZXJ2aWNlGAMgASgJUg50ZXJtc09mU2VydmljZRJMCgdjb250YWN0GAQgASgLMjIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuQ29udGFjdFIHY29udGFjdBJMCgdsaWNlbnNlGAUgASgLMjIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuTGljZW5zZVIHbGljZW5zZRIYCgd2ZXJzaW9uGAYgASgJUgd2ZXJzaW9uEl8KCmV4dGVuc2lvbnMYByADKAsyPy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5JbmZvLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJFCgdDb250YWN0EhIKBG5hbWUYASABKAlSBG5hbWUSEAoDdXJsGAIgASgJUgN1cmwSFAoFZW1haWwYAyABKAlSBWVtYWlsIi8KB0xpY2Vuc2USEgoEbmFtZRgBIAEoCVIEbmFtZRIQCgN1cmwYAiABKAlSA3VybCJLChVFeHRlcm5hbERvY3VtZW50YXRpb24SIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEhAKA3VybBgCIAEoCVIDdXJsIqoCCgZTY2hlbWESVgoLanNvbl9zY2hlbWEYASABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hUgpqc29uU2NoZW1hEiQKDWRpc2NyaW1pbmF0b3IYAiABKAlSDWRpc2NyaW1pbmF0b3ISGwoJcmVhZF9vbmx5GAMgASgIUghyZWFkT25seRJlCg1leHRlcm5hbF9kb2NzGAUgASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSGAoHZXhhbXBsZRgGIAEoCVIHZXhhbXBsZUoECAQQBSLXCgoKSlNPTlNjaGVtYRIQCgNyZWYYAyABKAlSA3JlZhIUCgV0aXRsZRgFIAEoCVIFdGl0bGUSIAoLZGVzY3JpcHRpb24YBiABKAlSC2Rlc2NyaXB0aW9uEhgKB2RlZmF1bHQYByABKAlSB2RlZmF1bHQSGwoJcmVhZF9vbmx5GAggASgIUghyZWFkT25seRIYCgdleGFtcGxlGAkgASgJUgdleGFtcGxlEh8KC211bHRpcGxlX29mGAogASgBUgptdWx0aXBsZU9mEhgKB21heGltdW0YCyABKAFSB21heGltdW0SKwoRZXhjbHVzaXZlX21heGltdW0YDCABKAhSEGV4Y2x1c2l2ZU1heGltdW0SGAoHbWluaW11bRgNIAEoAVIHbWluaW11bRIrChFleGNsdXNpdmVfbWluaW11bRgOIAEoCFIQZXhjbHVzaXZlTWluaW11bRIdCgptYXhfbGVuZ3RoGA8gASgEUgltYXhMZW5ndGgSHQoKbWluX2xlbmd0aBgQIAEoBFIJbWluTGVuZ3RoEhgKB3BhdHRlcm4YESABKAlSB3BhdHRlcm4SGwoJbWF4X2l0ZW1zGBQgASgEUghtYXhJdGVtcxIbCgltaW5faXRlbXMYFSABKARSCG1pbkl0ZW1zEiEKDHVuaXF1ZV9pdGVtcxgWIAEoCFILdW5pcXVlSXRlbXMSJQoObWF4X3Byb3BlcnRpZXMYGCABKARSDW1heFByb3BlcnRpZXMSJQoObWluX3Byb3BlcnRpZXMYGSABKARSDW1pblByb3BlcnRpZXMSGgoIcmVxdWlyZWQYGiADKAlSCHJlcXVpcmVkEhQKBWFycmF5GCIgAygJUgVhcnJheRJfCgR0eXBlGCMgAygOMksuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYS5KU09OU2NoZW1hU2ltcGxlVHlwZXNSBHR5cGUSFgoGZm9ybWF0GCQgASgJUgZmb3JtYXQSEgoEZW51bRguIAMoCVIEZW51bRJ6ChNmaWVsZF9jb25maWd1cmF0aW9uGOkHIAEoCzJILmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuRmllbGRDb25maWd1cmF0aW9uUhJmaWVsZENvbmZpZ3VyYXRpb24SZQoKZXh0ZW5zaW9ucxgwIAMoCzJFLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGjwKEkZpZWxkQ29uZmlndXJhdGlvbhImCg9wYXRoX3BhcmFtX25hbWUYLyABKAlSDXBhdGhQYXJhbU5hbWUaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEidwoVSlNPTlNjaGVtYVNpbXBsZVR5cGVzEgsKB1VOS05PV04QABIJCgVBUlJBWRABEgsKB0JPT0xFQU4QAhILCgdJTlRFR0VSEAMSCAoETlVMTBAEEgoKBk5VTUJFUhAFEgoKBk9CSkVDVBAGEgoKBlNUUklORxAHSgQIARACSgQIAhADSgQIBBAFSgQIEhATSgQIExAUSgQIFxAYSgQIGxAcSgQIHBAdSgQIHRAeSgQIHhAiSgQIJRAqSgQIKhArSgQIKxAuItkCCgNUYWcSEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SZQoNZXh0ZXJuYWxfZG9jcxgDIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEl4KCmV4dGVuc2lvbnMYBCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5UYWcuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIvcBChNTZWN1cml0eURlZmluaXRpb25zEmgKCHNlY3VyaXR5GAEgAygLMkwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlEZWZpbml0aW9ucy5TZWN1cml0eUVudHJ5UghzZWN1cml0eRp2Cg1TZWN1cml0eUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ek8KBXZhbHVlGAIgASgLMjkuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWVSBXZhbHVlOgI4ASL/BgoOU2VjdXJpdHlTY2hlbWUSUgoEdHlwZRgBIAEoDjI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLlR5cGVSBHR5cGUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEhIKBG5hbWUYAyABKAlSBG5hbWUSTAoCaW4YBCABKA4yPC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5JblICaW4SUgoEZmxvdxgFIAEoDjI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkZsb3dSBGZsb3cSKwoRYXV0aG9yaXphdGlvbl91cmwYBiABKAlSEGF1dGhvcml6YXRpb25VcmwSGwoJdG9rZW5fdXJsGAcgASgJUgh0b2tlblVybBJJCgZzY29wZXMYCCABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY29wZXNSBnNjb3BlcxJpCgpleHRlbnNpb25zGAkgAygLMkkuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIksKBFR5cGUSEAoMVFlQRV9JTlZBTElEEAASDgoKVFlQRV9CQVNJQxABEhAKDFRZUEVfQVBJX0tFWRACEg8KC1RZUEVfT0FVVEgyEAMiMQoCSW4SDgoKSU5fSU5WQUxJRBAAEgwKCElOX1FVRVJZEAESDQoJSU5fSEVBREVSEAIiagoERmxvdxIQCgxGTE9XX0lOVkFMSUQQABIRCg1GTE9XX0lNUExJQ0lUEAESEQoNRkxPV19QQVNTV09SRBACEhQKEEZMT1dfQVBQTElDQVRJT04QAxIUChBGTE9XX0FDQ0VTU19DT0RFEAQi9gIKE1NlY3VyaXR5UmVxdWlyZW1lbnQSigEKFHNlY3VyaXR5X3JlcXVpcmVtZW50GAEgAygLMlcuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudC5TZWN1cml0eVJlcXVpcmVtZW50RW50cnlSE3NlY3VyaXR5UmVxdWlyZW1lbnQaMAoYU2VjdXJpdHlSZXF1aXJlbWVudFZhbHVlEhQKBXNjb3BlGAEgAygJUgVzY29wZRqfAQoYU2VjdXJpdHlSZXF1aXJlbWVudEVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Em0KBXZhbHVlGAIgASgLMlcuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudC5TZWN1cml0eVJlcXVpcmVtZW50VmFsdWVSBXZhbHVlOgI4ASKWAQoGU2NvcGVzElIKBXNjb3BlGAEgAygLMjwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NvcGVzLlNjb3BlRW50cnlSBXNjb3BlGjgKClNjb3BlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASo7CgZTY2hlbWUSCwoHVU5LTk9XThAAEggKBEhUVFAQARIJCgVIVFRQUxACEgYKAldTEAMSBwoDV1NTEARCSFpGZ2l0aHViLmNvbS9ncnBjLWVjb3N5c3RlbS9ncnBjLWdhdGV3YXkvdjIvcHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9uc2IGcHJvdG8zCv0GCi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvEilncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8aLHByb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnMvb3BlbmFwaXYyLnByb3RvOn4KEW9wZW5hcGl2Ml9zd2FnZ2VyEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJIIIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXJSEG9wZW5hcGl2MlN3YWdnZXI6hgEKE29wZW5hcGl2Ml9vcGVyYXRpb24SHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiSCCABKAsyNC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb25SEm9wZW5hcGl2Mk9wZXJhdGlvbjp+ChBvcGVuYXBpdjJfc2NoZW1hEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJIIIAEoCzIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtYVIPb3BlbmFwaXYyU2NoZW1hOnUKDW9wZW5hcGl2Ml90YWcSHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYkgggASgLMi4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnUgxvcGVuYXBpdjJUYWc6fgoPb3BlbmFwaXYyX2ZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiSCCABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hUg5vcGVuYXBpdjJGaWVsZEJIWkZnaXRodWIuY29tL2dycGMtZWNvc3lzdGVtL2dycGMtZ2F0ZXdheS92Mi9wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zYgZwcm90bzMKwAQKFXByb3RvL3VzZXIvdXNlci5wcm90bxIOYnVja2V0ZWVyLnVzZXIi3gMKBFVzZXISDgoCaWQYASABKAlSAmlkEjIKBGRhdGEYAiADKAsyHi5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGFFbnRyeVIEZGF0YRJFCgt0YWdnZWRfZGF0YRgDIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuVGFnZ2VkRGF0YUVudHJ5Ugp0YWdnZWREYXRhEhsKCWxhc3Rfc2VlbhgEIAEoA1IIbGFzdFNlZW4SHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0GnwKBERhdGESOgoFdmFsdWUYASADKAsyJC5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGEuVmFsdWVFbnRyeVIFdmFsdWUaOAoKVmFsdWVFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGjcKCURhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlgKD1RhZ2dlZERhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YVIFdmFsdWU6AjgBQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by91c2VyYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCp4CChpwcm90by9mZWF0dXJlL3JlYXNvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUisQEKBlJlYXNvbhIyCgR0eXBlGAEgASgOMh4uYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uLlR5cGVSBHR5cGUSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIloKBFR5cGUSCgoGVEFSR0VUEAASCAoEUlVMRRABEgsKB0RFRkFVTFQQAxIKCgZDTElFTlQQBBIRCg1PRkZfVkFSSUFUSU9OEAUSEAoMUFJFUkVRVUlTSVRFEAZCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqYBgoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvIuMCCgpFdmFsdWF0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIXCgd1c2VyX2lkGAQgASgJUgZ1c2VySWQSIQoMdmFyaWF0aW9uX2lkGAUgASgJUgt2YXJpYXRpb25JZBI+Cgl2YXJpYXRpb24YBiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25CAhgBUgl2YXJpYXRpb24SMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SJwoPdmFyaWF0aW9uX3ZhbHVlGAggASgJUg52YXJpYXRpb25WYWx1ZRIlCg52YXJpYXRpb25fbmFtZRgJIAEoCVINdmFyaWF0aW9uTmFtZSKGAgoPVXNlckV2YWx1YXRpb25zEhIKAmlkGAEgASgJQgIYAVICaWQSPwoLZXZhbHVhdGlvbnMYAiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uUgtldmFsdWF0aW9ucxIdCgpjcmVhdGVkX2F0GAMgASgDUgljcmVhdGVkQXQSMAoUYXJjaGl2ZWRfZmVhdHVyZV9pZHMYBCADKAlSEmFyY2hpdmVkRmVhdHVyZUlkcxIhCgxmb3JjZV91cGRhdGUYBSABKAhSC2ZvcmNlVXBkYXRlIioKBVN0YXRlEgoKBlFVRVVFRBAAEgsKB1BBUlRJQUwQARIICgRGVUxMEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrHAwoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlItoCCgZDbGF1c2USDgoCaWQYASABKAlSAmlkEhwKCWF0dHJpYnV0ZRgCIAEoCVIJYXR0cmlidXRlEj4KCG9wZXJhdG9yGAMgASgOMiIuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvchIWCgZ2YWx1ZXMYBCADKAlSBnZhbHVlcyLJAQoIT3BlcmF0b3ISCgoGRVFVQUxTEAASBgoCSU4QARINCglFTkRTX1dJVEgQAhIPCgtTVEFSVFNfV0lUSBADEgsKB1NFR01FTlQQBBILCgdHUkVBVEVSEAUSFAoQR1JFQVRFUl9PUl9FUVVBTBAGEggKBExFU1MQBxIRCg1MRVNTX09SX0VRVUFMEAgSCgoGQkVGT1JFEAkSCQoFQUZURVIQChIQCgxGRUFUVVJFX0ZMQUcQCxITCg9QQVJUSUFMTFlfTUFUQ0gQDEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrsEChxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSItCg1GaXhlZFN0cmF0ZWd5EhwKCXZhcmlhdGlvbhgBIAEoCVIJdmFyaWF0aW9uIqIBCg9Sb2xsb3V0U3RyYXRlZ3kSTAoKdmFyaWF0aW9ucxgBIAMoCzIsLmJ1Y2tldGVlci5mZWF0dXJlLlJvbGxvdXRTdHJhdGVneS5WYXJpYXRpb25SCnZhcmlhdGlvbnMaQQoJVmFyaWF0aW9uEhwKCXZhcmlhdGlvbhgBIAEoCVIJdmFyaWF0aW9uEhYKBndlaWdodBgCIAEoBVIGd2VpZ2h0IvgBCghTdHJhdGVneRI0CgR0eXBlGAEgASgOMiAuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3kuVHlwZVIEdHlwZRJHCg5maXhlZF9zdHJhdGVneRgCIAEoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkZpeGVkU3RyYXRlZ3lSDWZpeGVkU3RyYXRlZ3kSTQoQcm9sbG91dF9zdHJhdGVneRgDIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlJvbGxvdXRTdHJhdGVneVIPcm9sbG91dFN0cmF0ZWd5Ih4KBFR5cGUSCQoFRklYRUQQABILCgdST0xMT1VUEAFCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqpAgoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8aHHByb3RvL2ZlYXR1cmUvc3RyYXRlZ3kucHJvdG8ihAEKBFJ1bGUSDgoCaWQYASABKAlSAmlkEjcKCHN0cmF0ZWd5GAIgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5EjMKB2NsYXVzZXMYAyADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSB2NsYXVzZXNCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqoAQoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIjwKBlRhcmdldBIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIUCgV1c2VycxgCIAMoCVIFdXNlcnNCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwr0AgoqcHJvdG8vZmVhdHVyZS9mZWF0dXJlX2xhc3RfdXNlZF9pbmZvLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSL3AQoTRmVhdHVyZUxhc3RVc2VkSW5mbxIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSGAoHdmVyc2lvbhgCIAEoBVIHdmVyc2lvbhIgCgxsYXN0X3VzZWRfYXQYAyABKANSCmxhc3RVc2VkQXQSHQoKY3JlYXRlZF9hdBgEIAEoA1IJY3JlYXRlZEF0EjIKFWNsaWVudF9vbGRlc3RfdmVyc2lvbhgFIAEoCVITY2xpZW50T2xkZXN0VmVyc2lvbhIyChVjbGllbnRfbGF0ZXN0X3ZlcnNpb24YBiABKAlSE2NsaWVudExhdGVzdFZlcnNpb25CMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrCAQogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIlAKDFByZXJlcXVpc2l0ZRIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSIQoMdmFyaWF0aW9uX2lkGAIgASgJUgt2YXJpYXRpb25JZEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCqoLChtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxoqcHJvdG8vZmVhdHVyZS9mZWF0dXJlX2xhc3RfdXNlZF9pbmZvLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90byLSBwoHRmVhdHVyZRIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGAoHZW5hYmxlZBgEIAEoCFIHZW5hYmxlZBIYCgdkZWxldGVkGAUgASgIUgdkZWxldGVkEjkKFmV2YWx1YXRpb25fdW5kZWxheWFibGUYBiABKAhCAhgBUhVldmFsdWF0aW9uVW5kZWxheWFibGUSEAoDdHRsGAcgASgFUgN0dGwSGAoHdmVyc2lvbhgIIAEoBVIHdmVyc2lvbhIdCgpjcmVhdGVkX2F0GAkgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgKIAEoA1IJdXBkYXRlZEF0EjwKCnZhcmlhdGlvbnMYCyADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSMwoHdGFyZ2V0cxgMIAMoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlRhcmdldFIHdGFyZ2V0cxItCgVydWxlcxgNIAMoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBXJ1bGVzEkYKEGRlZmF1bHRfc3RyYXRlZ3kYDiABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIPZGVmYXVsdFN0cmF0ZWd5EiMKDW9mZl92YXJpYXRpb24YDyABKAlSDG9mZlZhcmlhdGlvbhISCgR0YWdzGBAgAygJUgR0YWdzEkwKDmxhc3RfdXNlZF9pbmZvGBEgASgLMiYuYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZUxhc3RVc2VkSW5mb1IMbGFzdFVzZWRJbmZvEh4KCm1haW50YWluZXIYEiABKAlSCm1haW50YWluZXISTwoOdmFyaWF0aW9uX3R5cGUYEyABKA4yKC5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlLlZhcmlhdGlvblR5cGVSDXZhcmlhdGlvblR5cGUSGgoIYXJjaGl2ZWQYFCABKAhSCGFyY2hpdmVkEkUKDXByZXJlcXVpc2l0ZXMYFSADKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDXByZXJlcXVpc2l0ZXMSIwoNc2FtcGxpbmdfc2VlZBgWIAEoCVIMc2FtcGxpbmdTZWVkIj4KDVZhcmlhdGlvblR5cGUSCgoGU1RSSU5HEAASCwoHQk9PTEVBThABEgoKBk5VTUJFUhACEggKBEpTT04QAyJSCghGZWF0dXJlcxI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzEg4KAmlkGAIgASgJUgJpZCJTCgNUYWcSDgoCaWQYASABKAlSAmlkEh0KCmNyZWF0ZWRfYXQYAiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAMgASgDUgl1cGRhdGVkQXRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrkAQoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIjYKA0FueRIZCgh0eXBlX3VybBgBIAEoCVIHdHlwZVVybBIUCgV2YWx1ZRgCIAEoDFIFdmFsdWVCdgoTY29tLmdvb2dsZS5wcm90b2J1ZkIIQW55UHJvdG9QAVosZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vYW55cGKiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwq1CAobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8itAQKB1NlZ21lbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEi0KBXJ1bGVzGAQgAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBIcCgd2ZXJzaW9uGAcgASgDQgIYAVIHdmVyc2lvbhIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkEi4KE2luY2x1ZGVkX3VzZXJfY291bnQYCSABKANSEWluY2x1ZGVkVXNlckNvdW50EjIKE2V4Y2x1ZGVkX3VzZXJfY291bnQYCiABKANCAhgBUhFleGNsdWRlZFVzZXJDb3VudBI5CgZzdGF0dXMYCyABKA4yIS5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50LlN0YXR1c1IGc3RhdHVzEicKEGlzX2luX3VzZV9zdGF0dXMYDCABKAhSDWlzSW5Vc2VTdGF0dXMSNgoIZmVhdHVyZXMYDSADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcyI+CgZTdGF0dXMSCwoHSU5JVElBTBAAEg0KCVVQTE9BRElORxABEgwKCFNVQ0VFREVEEAISCgoGRkFJTEVEEAMi1AEKC1NlZ21lbnRVc2VyEg4KAmlkGAEgASgJUgJpZBIdCgpzZWdtZW50X2lkGAIgASgJUglzZWdtZW50SWQSFwoHdXNlcl9pZBgDIAEoCVIGdXNlcklkEjoKBXN0YXRlGAQgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQiJwoFU3RhdGUSDAoISU5DTFVERUQQABIQCghFWENMVURFRBABGgIIASKCAQoMU2VnbWVudFVzZXJzEh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBI0CgV1c2VycxgCIAMoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyUgV1c2VycxIdCgp1cGRhdGVkX2F0GAMgASgDUgl1cGRhdGVkQXRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqoBQogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIrUECgtGbGFnVHJpZ2dlchIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USNwoEdHlwZRgEIAEoDjIjLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLlR5cGVSBHR5cGUSPQoGYWN0aW9uGAUgASgOMiUuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuQWN0aW9uUgZhY3Rpb24SIAoLZGVzY3JpcHRpb24YBiABKAlSC2Rlc2NyaXB0aW9uEiMKDXRyaWdnZXJfY291bnQYByABKAVSDHRyaWdnZXJDb3VudBIqChFsYXN0X3RyaWdnZXJlZF9hdBgIIAEoA1IPbGFzdFRyaWdnZXJlZEF0EhQKBXRva2VuGAkgASgJUgV0b2tlbhIaCghkaXNhYmxlZBgKIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgLIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYDCABKANSCXVwZGF0ZWRBdCIqCgRUeXBlEhAKDFR5cGVfVU5LTk9XThAAEhAKDFR5cGVfV0VCSE9PSxABIjsKBkFjdGlvbhISCg5BY3Rpb25fVU5LTk9XThAAEg0KCUFjdGlvbl9PThABEg4KCkFjdGlvbl9PRkYQAkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsgjChtwcm90by9mZWF0dXJlL2NvbW1hbmQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8aGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aHHByb3RvL2ZlYXR1cmUvc3RyYXRlZ3kucHJvdG8aG3Byb3RvL2ZlYXR1cmUvc2VnbWVudC5wcm90bxogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8aIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvIjkKB0NvbW1hbmQSLgoHY29tbWFuZBgBIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSB2NvbW1hbmQitQMKFENyZWF0ZUZlYXR1cmVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhI8Cgp2YXJpYXRpb25zGAQgAygLMhwuYnVja2V0ZWVyLmZlYXR1cmUuVmFyaWF0aW9uUgp2YXJpYXRpb25zEhIKBHRhZ3MYBSADKAlSBHRhZ3MSWAoaZGVmYXVsdF9vbl92YXJpYXRpb25faW5kZXgYBiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIXZGVmYXVsdE9uVmFyaWF0aW9uSW5kZXgSWgobZGVmYXVsdF9vZmZfdmFyaWF0aW9uX2luZGV4GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSGGRlZmF1bHRPZmZWYXJpYXRpb25JbmRleBJPCg52YXJpYXRpb25fdHlwZRgIIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZSIXChVBcmNoaXZlRmVhdHVyZUNvbW1hbmQiGQoXVW5hcmNoaXZlRmVhdHVyZUNvbW1hbmQiFgoURGVsZXRlRmVhdHVyZUNvbW1hbmQiKgoUUmVuYW1lRmVhdHVyZUNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSI8ChhDaGFuZ2VEZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIrgBCilDaGFuZ2VCdWxrVXBsb2FkU2VnbWVudFVzZXJzU3RhdHVzQ29tbWFuZBI5CgZzdGF0dXMYASABKA4yIS5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50LlN0YXR1c1IGc3RhdHVzEjoKBXN0YXRlGAIgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEhQKBWNvdW50GAMgASgDUgVjb3VudCIhCg1BZGRUYWdDb21tYW5kEhAKA3RhZxgBIAEoCVIDdGFnIiQKEFJlbW92ZVRhZ0NvbW1hbmQSEAoDdGFnGAEgASgJUgN0YWciFgoURW5hYmxlRmVhdHVyZUNvbW1hbmQiFwoVRGlzYWJsZUZlYXR1cmVDb21tYW5kImEKE0FkZFZhcmlhdGlvbkNvbW1hbmQSFAoFdmFsdWUYASABKAlSBXZhbHVlEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uIigKFlJlbW92ZVZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkIkMKG0NoYW5nZVZhcmlhdGlvblZhbHVlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFAoFdmFsdWUYAiABKAlSBXZhbHVlIkAKGkNoYW5nZVZhcmlhdGlvbk5hbWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIlUKIUNoYW5nZVZhcmlhdGlvbkRlc2NyaXB0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIisKGUNoYW5nZU9mZlZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkIj8KGUFkZFVzZXJUb1ZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhIKBHVzZXIYAiABKAlSBHVzZXIiRAoeUmVtb3ZlVXNlckZyb21WYXJpYXRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgR1c2VyGAIgASgJUgR1c2VyIlcKHENoYW5nZURlZmF1bHRTdHJhdGVneUNvbW1hbmQSNwoIc3RyYXRlZ3kYASABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIIc3RyYXRlZ3kiPQoOQWRkUnVsZUNvbW1hbmQSKwoEcnVsZRgBIAEoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBHJ1bGUifQoZQ2hhbmdlUnVsZVN0cmF0ZWd5Q29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEjcKCHN0cmF0ZWd5GAMgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5IjQKF0NoYW5nZVJ1bGVzT3JkZXJDb21tYW5kEhkKCHJ1bGVfaWRzGAIgAygJUgdydWxlSWRzIiMKEURlbGV0ZVJ1bGVDb21tYW5kEg4KAmlkGAEgASgJUgJpZCJeChBBZGRDbGF1c2VDb21tYW5kEhcKB3J1bGVfaWQYASABKAlSBnJ1bGVJZBIxCgZjbGF1c2UYAiABKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSBmNsYXVzZSI+ChNEZWxldGVDbGF1c2VDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQiZQocQ2hhbmdlQ2xhdXNlQXR0cmlidXRlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhwKCWF0dHJpYnV0ZRgDIAEoCVIJYXR0cmlidXRlIoYBChtDaGFuZ2VDbGF1c2VPcGVyYXRvckNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI+CghvcGVyYXRvchgDIAEoDjIiLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3IiVgoVQWRkQ2xhdXNlVmFsdWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSFAoFdmFsdWUYAyABKAlSBXZhbHVlIlkKGFJlbW92ZUNsYXVzZVZhbHVlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhQKBXZhbHVlGAMgASgJUgV2YWx1ZSKDAQoaQ2hhbmdlRml4ZWRTdHJhdGVneUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI8CghzdHJhdGVneRgDIAEoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkZpeGVkU3RyYXRlZ3lSCHN0cmF0ZWd5IocBChxDaGFuZ2VSb2xsb3V0U3RyYXRlZ3lDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPgoIc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSCHN0cmF0ZWd5IkwKFENyZWF0ZVNlZ21lbnRDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIhYKFERlbGV0ZVNlZ21lbnRDb21tYW5kIi4KGENoYW5nZVNlZ21lbnROYW1lQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIkMKH0NoYW5nZVNlZ21lbnREZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIm4KFUFkZFNlZ21lbnRVc2VyQ29tbWFuZBIZCgh1c2VyX2lkcxgBIAMoCVIHdXNlcklkcxI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSJxChhEZWxldGVTZWdtZW50VXNlckNvbW1hbmQSGQoIdXNlcl9pZHMYASADKAlSB3VzZXJJZHMSOgoFc3RhdGUYAiABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUibwodQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc0NvbW1hbmQSEgoEZGF0YRgBIAEoDFIEZGF0YRI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSIgCh5JbmNyZW1lbnRGZWF0dXJlVmVyc2lvbkNvbW1hbmQiSgoTQ2xvbmVGZWF0dXJlQ29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhoKGFJlc2V0U2FtcGxpbmdTZWVkQ29tbWFuZCJdChZBZGRQcmVyZXF1aXNpdGVDb21tYW5kEkMKDHByZXJlcXVpc2l0ZRgBIAEoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVIMcHJlcmVxdWlzaXRlIjoKGVJlbW92ZVByZXJlcXVpc2l0ZUNvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkImkKIkNoYW5nZVByZXJlcXVpc2l0ZVZhcmlhdGlvbkNvbW1hbmQSQwoMcHJlcmVxdWlzaXRlGAEgASgLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUgxwcmVyZXF1aXNpdGUi0wEKGENyZWF0ZUZsYWdUcmlnZ2VyQ29tbWFuZBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSNwoEdHlwZRgCIAEoDjIjLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLlR5cGVSBHR5cGUSPQoGYWN0aW9uGAMgASgOMiUuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuQWN0aW9uUgZhY3Rpb24SIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uIhkKF1Jlc2V0RmxhZ1RyaWdnZXJDb21tYW5kIkcKI0NoYW5nZUZsYWdUcmlnZ2VyRGVzY3JpcHRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiIaChhFbmFibGVGbGFnVHJpZ2dlckNvbW1hbmQiGwoZRGlzYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZCIaChhEZWxldGVGbGFnVHJpZ2dlckNvbW1hbmQiHwodVXBkYXRlRmxhZ1RyaWdnZXJVc2FnZUNvbW1hbmRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwreewobcHJvdG8vZmVhdHVyZS9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhtwcm90by9mZWF0dXJlL2NvbW1hbmQucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvGhVwcm90by91c2VyL3VzZXIucHJvdG8aG3Byb3RvL2ZlYXR1cmUvc2VnbWVudC5wcm90bxogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhpwcm90by9mZWF0dXJlL3RhcmdldC5wcm90byJYChFHZXRGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJKChJHZXRGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUiWwoSR2V0RmVhdHVyZXNSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USEAoDaWRzGAIgAygJUgNpZHMiTQoTR2V0RmVhdHVyZXNSZXNwb25zZRI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIv0FChNMaXN0RmVhdHVyZXNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISEgoEdGFncxgDIAMoCVIEdGFncxJJCghvcmRlcl9ieRgEIAEoDjIuLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJeCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEh4KCm1haW50YWluZXIYByABKAlSCm1haW50YWluZXISNAoHZW5hYmxlZBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSB2VuYWJsZWQSQQoOaGFzX2V4cGVyaW1lbnQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUg1oYXNFeHBlcmltZW50EiUKDnNlYXJjaF9rZXl3b3JkGAogASgJUg1zZWFyY2hLZXl3b3JkEjYKCGFyY2hpdmVkGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSRwoRaGFzX3ByZXJlcXVpc2l0ZXMYDCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUhBoYXNQcmVyZXF1aXNpdGVzIlcKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADEggKBFRBR1MQBBILCgdFTkFCTEVEEAUiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIocBChRMaXN0RmVhdHVyZXNSZXNwb25zZRI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IpoBChpMaXN0RW5hYmxlZEZlYXR1cmVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEhIKBHRhZ3MYAyADKAlSBHRhZ3MSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAQgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJtChtMaXN0RW5hYmxlZEZlYXR1cmVzUmVzcG9uc2USNgoIZmVhdHVyZXMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKOAQoUQ3JlYXRlRmVhdHVyZVJlcXVlc3QSQQoHY29tbWFuZBgBIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiTQoVQ3JlYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIs8FChRVcGRhdGVGZWF0dXJlUmVxdWVzdBIYCgdjb21tZW50GAEgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAIgASgJUg1lbnZpcm9ubWVudElkEg4KAmlkGAMgASgJUgJpZBIwCgRuYW1lGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgRuYW1lEj4KC2Rlc2NyaXB0aW9uGAUgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgtkZXNjcmlwdGlvbhISCgR0YWdzGAYgAygJUgR0YWdzEjQKB2VuYWJsZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUgdlbmFibGVkEjYKCGFyY2hpdmVkGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSPAoKdmFyaWF0aW9ucxgJIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxJFCg1wcmVyZXF1aXNpdGVzGAogAygLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUg1wcmVyZXF1aXNpdGVzEjMKB3RhcmdldHMYCyADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5UYXJnZXRSB3RhcmdldHMSLQoFcnVsZXMYDCADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxJGChBkZWZhdWx0X3N0cmF0ZWd5GA0gASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSD2RlZmF1bHRTdHJhdGVneRJBCg1vZmZfdmFyaWF0aW9uGA4gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgxvZmZWYXJpYXRpb24iTQoVVXBkYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIrgBChRFbmFibGVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQQoHY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGAoHY29tbWVudBgEIAEoCVIHY29tbWVudCIXChVFbmFibGVGZWF0dXJlUmVzcG9uc2UiugEKFURpc2FibGVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQgoHY29tbWFuZBgCIAEoCzIoLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQiGAoWRGlzYWJsZUZlYXR1cmVSZXNwb25zZSK6AQoVQXJjaGl2ZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJCCgdjb21tYW5kGAIgASgLMiguYnVja2V0ZWVyLmZlYXR1cmUuQXJjaGl2ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGAoHY29tbWVudBgEIAEoCVIHY29tbWVudCIYChZBcmNoaXZlRmVhdHVyZVJlc3BvbnNlIr4BChdVbmFyY2hpdmVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSRAoHY29tbWFuZBgCIAEoCzIqLmJ1Y2tldGVlci5mZWF0dXJlLlVuYXJjaGl2ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGAoHY29tbWVudBgEIAEoCVIHY29tbWVudCIaChhVbmFyY2hpdmVGZWF0dXJlUmVzcG9uc2UiuAEKFERlbGV0ZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJBCgdjb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIYCgdjb21tZW50GAQgASgJUgdjb21tZW50IhcKFURlbGV0ZUZlYXR1cmVSZXNwb25zZSLnAwobVXBkYXRlRmVhdHVyZURldGFpbHNSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJdChZyZW5hbWVfZmVhdHVyZV9jb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuUmVuYW1lRmVhdHVyZUNvbW1hbmRSFHJlbmFtZUZlYXR1cmVDb21tYW5kEmkKGmNoYW5nZV9kZXNjcmlwdGlvbl9jb21tYW5kGAMgASgLMisuYnVja2V0ZWVyLmZlYXR1cmUuQ2hhbmdlRGVzY3JpcHRpb25Db21tYW5kUhhjaGFuZ2VEZXNjcmlwdGlvbkNvbW1hbmQSSgoQYWRkX3RhZ19jb21tYW5kcxgEIAMoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkFkZFRhZ0NvbW1hbmRSDmFkZFRhZ0NvbW1hbmRzElMKE3JlbW92ZV90YWdfY29tbWFuZHMYBSADKAsyIy5idWNrZXRlZXIuZmVhdHVyZS5SZW1vdmVUYWdDb21tYW5kUhFyZW1vdmVUYWdDb21tYW5kcxIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYByABKAlSB2NvbW1lbnQiHgocVXBkYXRlRmVhdHVyZURldGFpbHNSZXNwb25zZSK3AQoeVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnNSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBI2Cghjb21tYW5kcxgCIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkNvbW1hbmRSCGNvbW1hbmRzEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGAoHY29tbWVudBgEIAEoCVIHY29tbWVudCIhCh9VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1Jlc3BvbnNlIqkCCh1VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSNgoIY29tbWFuZHMYAiADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5Db21tYW5kUghjb21tYW5kcxIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQSSQoEZnJvbRgFIAEoDjI1LmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXF1ZXN0LkZyb21SBGZyb20iJgoERnJvbRILCgdVTktOT1dOEAASCAoEVVNFUhABEgcKA09QUxACIiAKHlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXNwb25zZSKcAQoTQ2xvbmVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQAoHY29tbWFuZBgCIAEoCzImLmJ1Y2tldGVlci5mZWF0dXJlLkNsb25lRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIWChRDbG9uZUZlYXR1cmVSZXNwb25zZSKOAQoUQ3JlYXRlU2VnbWVudFJlcXVlc3QSQQoHY29tbWFuZBgBIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZVNlZ21lbnRDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiTQoVQ3JlYXRlU2VnbWVudFJlc3BvbnNlEjQKB3NlZ21lbnQYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50UgdzZWdtZW50IlgKEUdldFNlZ21lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIkoKEkdldFNlZ21lbnRSZXNwb25zZRI0CgdzZWdtZW50GAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFIHc2VnbWVudCKyBAoTTGlzdFNlZ21lbnRzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USSQoIb3JkZXJfYnkYBCABKA4yLi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudHNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSXgoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjUuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSMwoGc3RhdHVzGAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSBnN0YXR1cxJDChBpc19pbl91c2Vfc3RhdHVzGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVINaXNJblVzZVN0YXR1cyJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEihwEKFExpc3RTZWdtZW50c1Jlc3BvbnNlEjYKCHNlZ21lbnRzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFIIc2VnbWVudHMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQingEKFERlbGV0ZVNlZ21lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJBCgdjb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudENvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIXChVEZWxldGVTZWdtZW50UmVzcG9uc2UikwEKFFVwZGF0ZVNlZ21lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBI2Cghjb21tYW5kcxgCIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkNvbW1hbmRSCGNvbW1hbmRzEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiFwoVVXBkYXRlU2VnbWVudFJlc3BvbnNlIqABChVBZGRTZWdtZW50VXNlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkIKB2NvbW1hbmQYAiABKAsyKC5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlckNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIYChZBZGRTZWdtZW50VXNlclJlc3BvbnNlIqYBChhEZWxldGVTZWdtZW50VXNlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkUKB2NvbW1hbmQYAiABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50VXNlckNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIbChlEZWxldGVTZWdtZW50VXNlclJlc3BvbnNlIsABChVHZXRTZWdtZW50VXNlclJlcXVlc3QSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3VzZXJfaWQYAiABKAlSBnVzZXJJZBI6CgVzdGF0ZRgDIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZRIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBCABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIkwKFkdldFNlZ21lbnRVc2VyUmVzcG9uc2USMgoEdXNlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyUgR1c2VyIu4BChdMaXN0U2VnbWVudFVzZXJzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh0KCnNlZ21lbnRfaWQYAyABKAlSCXNlZ21lbnRJZBIxCgVzdGF0ZRgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUgVzdGF0ZRIXCgd1c2VyX2lkGAUgASgJUgZ1c2VySWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAYgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJoChhMaXN0U2VnbWVudFVzZXJzUmVzcG9uc2USNAoFdXNlcnMYASADKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlclIFdXNlcnMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3IivwEKHUJ1bGtVcGxvYWRTZWdtZW50VXNlcnNSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USHQoKc2VnbWVudF9pZBgCIAEoCVIJc2VnbWVudElkEkoKB2NvbW1hbmQYAyABKAsyMC5idWNrZXRlZXIuZmVhdHVyZS5CdWxrVXBsb2FkU2VnbWVudFVzZXJzQ29tbWFuZFIHY29tbWFuZCIgCh5CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVzcG9uc2UisQEKH0J1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIdCgpzZWdtZW50X2lkGAIgASgJUglzZWdtZW50SWQSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUiNgogQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzUmVzcG9uc2USEgoEZGF0YRgBIAEoDFIEZGF0YSKpAQoXRXZhbHVhdGVGZWF0dXJlc1JlcXVlc3QSKAoEdXNlchgBIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIQCgN0YWcYAyABKAlSA3RhZxIdCgpmZWF0dXJlX2lkGAQgASgJUglmZWF0dXJlSWQiaQoYRXZhbHVhdGVGZWF0dXJlc1Jlc3BvbnNlEk0KEHVzZXJfZXZhbHVhdGlvbnMYASABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Vc2VyRXZhbHVhdGlvbnNSD3VzZXJFdmFsdWF0aW9ucyKqAwoPTGlzdFRhZ3NSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchJFCghvcmRlcl9ieRgEIAEoDjIqLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EloKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjIxLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQiPgoHT3JkZXJCeRILCgdERUZBVUxUEAASBgoCSUQQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQASJ3ChBMaXN0VGFnc1Jlc3BvbnNlEioKBHRhZ3MYASADKAsyFi5idWNrZXRlZXIuZmVhdHVyZS5UYWdSBHRhZ3MSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiuwEKGENyZWF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEmoKG2NyZWF0ZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgCIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZsYWdUcmlnZ2VyQ29tbWFuZFIYY3JlYXRlRmxhZ1RyaWdnZXJDb21tYW5kInAKGUNyZWF0ZUZsYWdUcmlnZ2VyUmVzcG9uc2USQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIssBChhEZWxldGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USagobZGVsZXRlX2ZsYWdfdHJpZ2dlcl9jb21tYW5kGAMgASgLMisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmxhZ1RyaWdnZXJDb21tYW5kUhhkZWxldGVGbGFnVHJpZ2dlckNvbW1hbmQiGwoZRGVsZXRlRmxhZ1RyaWdnZXJSZXNwb25zZSLuAQoYVXBkYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEowBCidjaGFuZ2VfZmxhZ190cmlnZ2VyX2Rlc2NyaXB0aW9uX2NvbW1hbmQYAyABKAsyNi5idWNrZXRlZXIuZmVhdHVyZS5DaGFuZ2VGbGFnVHJpZ2dlckRlc2NyaXB0aW9uQ29tbWFuZFIjY2hhbmdlRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNvbW1hbmQiGwoZVXBkYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSLLAQoYRW5hYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEmoKG2VuYWJsZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZFIYZW5hYmxlRmxhZ1RyaWdnZXJDb21tYW5kIhsKGUVuYWJsZUZsYWdUcmlnZ2VyUmVzcG9uc2UizwEKGURpc2FibGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USbQocZGlzYWJsZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIsLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGbGFnVHJpZ2dlckNvbW1hbmRSGWRpc2FibGVGbGFnVHJpZ2dlckNvbW1hbmQiHAoaRGlzYWJsZUZsYWdUcmlnZ2VyUmVzcG9uc2UixwEKF1Jlc2V0RmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEmcKGnJlc2V0X2ZsYWdfdHJpZ2dlcl9jb21tYW5kGAMgASgLMiouYnVja2V0ZWVyLmZlYXR1cmUuUmVzZXRGbGFnVHJpZ2dlckNvbW1hbmRSF3Jlc2V0RmxhZ1RyaWdnZXJDb21tYW5kIm8KGFJlc2V0RmxhZ1RyaWdnZXJSZXNwb25zZRJBCgxmbGFnX3RyaWdnZXIYASABKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlclILZmxhZ1RyaWdnZXISEAoDdXJsGAIgASgJUgN1cmwiXAoVR2V0RmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIm0KFkdldEZsYWdUcmlnZ2VyUmVzcG9uc2USQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIrIDChdMaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchIbCglwYWdlX3NpemUYBCABKAVSCHBhZ2VTaXplEk0KCG9yZGVyX2J5GAUgASgOMjIuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJiCg9vcmRlcl9kaXJlY3Rpb24YBiABKA4yOS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24iNgoHT3JkZXJCeRILCgdERUZBVUxUEAASDgoKQ1JFQVRFRF9BVBABEg4KClVQREFURURfQVQQAiIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEiowIKGExpc3RGbGFnVHJpZ2dlcnNSZXNwb25zZRJjCg1mbGFnX3RyaWdnZXJzGAEgAygLMj4uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1Jlc3BvbnNlLkZsYWdUcmlnZ2VyV2l0aFVybFIMZmxhZ1RyaWdnZXJzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50GmkKEkZsYWdUcmlnZ2VyV2l0aFVybBJBCgxmbGFnX3RyaWdnZXIYASABKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlclILZmxhZ1RyaWdnZXISEAoDdXJsGAIgASgJUgN1cmwiMQoZRmxhZ1RyaWdnZXJXZWJob29rUmVxdWVzdBIUCgV0b2tlbhgBIAEoCVIFdG9rZW4iHAoaRmxhZ1RyaWdnZXJXZWJob29rUmVzcG9uc2UygyAKDkZlYXR1cmVTZXJ2aWNlElsKCkdldEZlYXR1cmUSJC5idWNrZXRlZXIuZmVhdHVyZS5HZXRGZWF0dXJlUmVxdWVzdBolLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVSZXNwb25zZSIAEl4KC0dldEZlYXR1cmVzEiUuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmVhdHVyZXNSZXF1ZXN0GiYuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmVhdHVyZXNSZXNwb25zZSIAEmEKDExpc3RGZWF0dXJlcxImLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1JlcXVlc3QaJy5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXNwb25zZSIAEnYKE0xpc3RFbmFibGVkRmVhdHVyZXMSLS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RW5hYmxlZEZlYXR1cmVzUmVxdWVzdBouLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RFbmFibGVkRmVhdHVyZXNSZXNwb25zZSIAEmQKDUNyZWF0ZUZlYXR1cmUSJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZlYXR1cmVSZXNwb25zZSIAEmQKDVVwZGF0ZUZlYXR1cmUSJy5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVSZXNwb25zZSIAEmcKDUVuYWJsZUZlYXR1cmUSJy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZlYXR1cmVSZXNwb25zZSIDiAIBEmoKDkRpc2FibGVGZWF0dXJlEiguYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZlYXR1cmVSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZlYXR1cmVSZXNwb25zZSIDiAIBEmcKDkFyY2hpdmVGZWF0dXJlEiguYnVja2V0ZWVyLmZlYXR1cmUuQXJjaGl2ZUZlYXR1cmVSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuQXJjaGl2ZUZlYXR1cmVSZXNwb25zZSIAEm0KEFVuYXJjaGl2ZUZlYXR1cmUSKi5idWNrZXRlZXIuZmVhdHVyZS5VbmFyY2hpdmVGZWF0dXJlUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLlVuYXJjaGl2ZUZlYXR1cmVSZXNwb25zZSIAEmQKDURlbGV0ZUZlYXR1cmUSJy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZlYXR1cmVSZXNwb25zZSIAEnkKFFVwZGF0ZUZlYXR1cmVEZXRhaWxzEi4uYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZURldGFpbHNSZXF1ZXN0Gi8uYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZURldGFpbHNSZXNwb25zZSIAEoIBChdVcGRhdGVGZWF0dXJlVmFyaWF0aW9ucxIxLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVWYXJpYXRpb25zUmVxdWVzdBoyLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVWYXJpYXRpb25zUmVzcG9uc2UiABJ/ChZVcGRhdGVGZWF0dXJlVGFyZ2V0aW5nEjAuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVRhcmdldGluZ1JlcXVlc3QaMS5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVzcG9uc2UiABJhCgxDbG9uZUZlYXR1cmUSJi5idWNrZXRlZXIuZmVhdHVyZS5DbG9uZUZlYXR1cmVSZXF1ZXN0GicuYnVja2V0ZWVyLmZlYXR1cmUuQ2xvbmVGZWF0dXJlUmVzcG9uc2UiABJkCg1DcmVhdGVTZWdtZW50EicuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlU2VnbWVudFJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVTZWdtZW50UmVzcG9uc2UiABJbCgpHZXRTZWdtZW50EiQuYnVja2V0ZWVyLmZlYXR1cmUuR2V0U2VnbWVudFJlcXVlc3QaJS5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50UmVzcG9uc2UiABJhCgxMaXN0U2VnbWVudHMSJi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudHNSZXF1ZXN0GicuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVzcG9uc2UiABJkCg1EZWxldGVTZWdtZW50EicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50UmVzcG9uc2UiABJkCg1VcGRhdGVTZWdtZW50EicuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlU2VnbWVudFJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVTZWdtZW50UmVzcG9uc2UiABJqCg5BZGRTZWdtZW50VXNlchIoLmJ1Y2tldGVlci5mZWF0dXJlLkFkZFNlZ21lbnRVc2VyUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkFkZFNlZ21lbnRVc2VyUmVzcG9uc2UiA4gCARJzChFEZWxldGVTZWdtZW50VXNlchIrLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRVc2VyUmVxdWVzdBosLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRVc2VyUmVzcG9uc2UiA4gCARJqCg5HZXRTZWdtZW50VXNlchIoLmJ1Y2tldGVlci5mZWF0dXJlLkdldFNlZ21lbnRVc2VyUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkdldFNlZ21lbnRVc2VyUmVzcG9uc2UiA4gCARJtChBMaXN0U2VnbWVudFVzZXJzEiouYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRVc2Vyc1JlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudFVzZXJzUmVzcG9uc2UiABJ/ChZCdWxrVXBsb2FkU2VnbWVudFVzZXJzEjAuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QaMS5idWNrZXRlZXIuZmVhdHVyZS5CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVzcG9uc2UiABKFAQoYQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzEjIuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzUmVxdWVzdBozLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIgASbQoQRXZhbHVhdGVGZWF0dXJlcxIqLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRlRmVhdHVyZXNSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuRXZhbHVhdGVGZWF0dXJlc1Jlc3BvbnNlIgASVQoITGlzdFRhZ3MSIi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0VGFnc1JlcXVlc3QaIy5idWNrZXRlZXIuZmVhdHVyZS5MaXN0VGFnc1Jlc3BvbnNlIgAScAoRQ3JlYXRlRmxhZ1RyaWdnZXISKy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGbGFnVHJpZ2dlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGbGFnVHJpZ2dlclJlc3BvbnNlIgAScAoRVXBkYXRlRmxhZ1RyaWdnZXISKy5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGbGFnVHJpZ2dlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGbGFnVHJpZ2dlclJlc3BvbnNlIgAScAoRRW5hYmxlRmxhZ1RyaWdnZXISKy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGbGFnVHJpZ2dlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGbGFnVHJpZ2dlclJlc3BvbnNlIgAScwoSRGlzYWJsZUZsYWdUcmlnZ2VyEiwuYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZsYWdUcmlnZ2VyUmVxdWVzdBotLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGbGFnVHJpZ2dlclJlc3BvbnNlIgASbQoQUmVzZXRGbGFnVHJpZ2dlchIqLmJ1Y2tldGVlci5mZWF0dXJlLlJlc2V0RmxhZ1RyaWdnZXJSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuUmVzZXRGbGFnVHJpZ2dlclJlc3BvbnNlIgAScAoRRGVsZXRlRmxhZ1RyaWdnZXISKy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGbGFnVHJpZ2dlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGbGFnVHJpZ2dlclJlc3BvbnNlIgASZwoOR2V0RmxhZ1RyaWdnZXISKC5idWNrZXRlZXIuZmVhdHVyZS5HZXRGbGFnVHJpZ2dlclJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5HZXRGbGFnVHJpZ2dlclJlc3BvbnNlIgASbQoQTGlzdEZsYWdUcmlnZ2VycxIqLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1Jlc3BvbnNlIgASlAEKEkZsYWdUcmlnZ2VyV2ViaG9vaxIsLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyV2ViaG9va1JlcXVlc3QaLS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlcldlYmhvb2tSZXNwb25zZSIhgtPkkwIbIhkvd2ViaG9vay90cmlnZ2Vycy97dG9rZW59QjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKrgIKFXByb3RvL3B1c2gvcHVzaC5wcm90bxIOYnVja2V0ZWVyLnB1c2gizAEKBFB1c2gSDgoCaWQYASABKAlSAmlkEhIKBHRhZ3MYAyADKAlSBHRhZ3MSGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBISCgRuYW1lGAUgASgJUgRuYW1lEh0KCmNyZWF0ZWRfYXQYBiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgIIAEoCVIRZmNtU2VydmljZUFjY291bnRKBAgCEANCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3B1c2hiBnByb3RvMwrqAgoYcHJvdG8vcHVzaC9jb21tYW5kLnByb3RvEg5idWNrZXRlZXIucHVzaCJxChFDcmVhdGVQdXNoQ29tbWFuZBISCgR0YWdzGAIgAygJUgR0YWdzEhIKBG5hbWUYAyABKAlSBG5hbWUSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgEIAEoDFIRZmNtU2VydmljZUFjY291bnRKBAgBEAIiKAoSQWRkUHVzaFRhZ3NDb21tYW5kEhIKBHRhZ3MYASADKAlSBHRhZ3MiKwoVRGVsZXRlUHVzaFRhZ3NDb21tYW5kEhIKBHRhZ3MYASADKAlSBHRhZ3MiEwoRRGVsZXRlUHVzaENvbW1hbmQiJwoRUmVuYW1lUHVzaENvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZUIuWixnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vcHVzaGIGcHJvdG8zCvoRChhwcm90by9wdXNoL3NlcnZpY2UucHJvdG8SDmJ1Y2tldGVlci5wdXNoGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aFXByb3RvL3B1c2gvcHVzaC5wcm90bxoYcHJvdG8vcHVzaC9jb21tYW5kLnByb3RvIuEBChFDcmVhdGVQdXNoUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEj8KB2NvbW1hbmQYAiABKAsyIS5idWNrZXRlZXIucHVzaC5DcmVhdGVQdXNoQ29tbWFuZEICGAFSB2NvbW1hbmQSEgoEdGFncxgDIAMoCVIEdGFncxISCgRuYW1lGAQgASgJUgRuYW1lEi4KE2ZjbV9zZXJ2aWNlX2FjY291bnQYBSABKAxSEWZjbVNlcnZpY2VBY2NvdW50Ij4KEkNyZWF0ZVB1c2hSZXNwb25zZRIoCgRwdXNoGAEgASgLMhQuYnVja2V0ZWVyLnB1c2guUHVzaFIEcHVzaCKsAwoRTGlzdFB1c2hlc1JlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEkQKCG9yZGVyX2J5GAQgASgOMikuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJZCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yMC5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABInsKEkxpc3RQdXNoZXNSZXNwb25zZRIsCgZwdXNoZXMYASADKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgZwdXNoZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQimQEKEURlbGV0ZVB1c2hSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEj8KB2NvbW1hbmQYAyABKAsyIS5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoQ29tbWFuZEICGAFSB2NvbW1hbmQiFAoSRGVsZXRlUHVzaFJlc3BvbnNlIrQDChFVcGRhdGVQdXNoUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJZChVhZGRfcHVzaF90YWdzX2NvbW1hbmQYAyABKAsyIi5idWNrZXRlZXIucHVzaC5BZGRQdXNoVGFnc0NvbW1hbmRCAhgBUhJhZGRQdXNoVGFnc0NvbW1hbmQSYgoYZGVsZXRlX3B1c2hfdGFnc19jb21tYW5kGAQgASgLMiUuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFRhZ3NDb21tYW5kQgIYAVIVZGVsZXRlUHVzaFRhZ3NDb21tYW5kElUKE3JlbmFtZV9wdXNoX2NvbW1hbmQYBSABKAsyIS5idWNrZXRlZXIucHVzaC5SZW5hbWVQdXNoQ29tbWFuZEICGAFSEXJlbmFtZVB1c2hDb21tYW5kEhIKBHRhZ3MYBiADKAlSBHRhZ3MSMAoEbmFtZRgHIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZSI+ChJVcGRhdGVQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2giVQoOR2V0UHVzaFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQiOwoPR2V0UHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoMrcDCgtQdXNoU2VydmljZRJVCgpMaXN0UHVzaGVzEiEuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVzcG9uc2UiABJVCgpDcmVhdGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guQ3JlYXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5DcmVhdGVQdXNoUmVzcG9uc2UiABJVCgpEZWxldGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoUmVzcG9uc2UiABJVCgpVcGRhdGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guVXBkYXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5VcGRhdGVQdXNoUmVzcG9uc2UiABJMCgdHZXRQdXNoEh4uYnVja2V0ZWVyLnB1c2guR2V0UHVzaFJlcXVlc3QaHy5idWNrZXRlZXIucHVzaC5HZXRQdXNoUmVzcG9uc2UiAEIuWixnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vcHVzaGIGcHJvdG8zCvsBCh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI6CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW5vc0KDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKzjQKHnByb3RvL2V2ZW50L2NsaWVudC9ldmVudC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50LmNsaWVudBoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvGh5wcm90by9mZWF0dXJlL2V2YWx1YXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvGhVwcm90by91c2VyL3VzZXIucHJvdG8ieAoFRXZlbnQSDgoCaWQYASABKAlSAmlkEioKBWV2ZW50GAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIFZXZlbnQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSKSBAoPRXZhbHVhdGlvbkV2ZW50EhwKCXRpbWVzdGFtcBgBIAEoA1IJdGltZXN0YW1wEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhcKB3VzZXJfaWQYBCABKAlSBnVzZXJJZBIhCgx2YXJpYXRpb25faWQYBSABKAlSC3ZhcmlhdGlvbklkEigKBHVzZXIYBiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEjEKBnJlYXNvbhgHIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlJlYXNvblIGcmVhc29uEhAKA3RhZxgIIAEoCVIDdGFnEj0KCXNvdXJjZV9pZBgJIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAogASgJUgpzZGtWZXJzaW9uElEKCG1ldGFkYXRhGAsgAygLMjUuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5FdmFsdWF0aW9uRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBItwDCglHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhcKB3VzZXJfaWQYAyABKAlSBnVzZXJJZBIUCgV2YWx1ZRgEIAEoAVIFdmFsdWUSKAoEdXNlchgFIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISQwoLZXZhbHVhdGlvbnMYBiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uQgIYAVILZXZhbHVhdGlvbnMSEAoDdGFnGAcgASgJUgN0YWcSPQoJc291cmNlX2lkGAggASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YCSABKAlSCnNka1ZlcnNpb24SSwoIbWV0YWRhdGEYCiADKAsyLy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdvYWxFdmVudC5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRo7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEixQIKDE1ldHJpY3NFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIqCgVldmVudBgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBWV2ZW50Ej0KCXNvdXJjZV9pZBgDIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAQgASgJUgpzZGtWZXJzaW9uEk4KCG1ldGFkYXRhGAUgAygLMjIuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5NZXRyaWNzRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvYBCiBHZXRFdmFsdWF0aW9uTGF0ZW5jeU1ldHJpY3NFdmVudBJcCgZsYWJlbHMYASADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25MYXRlbmN5TWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSNQoIZHVyYXRpb24YAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SCGR1cmF0aW9uGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAE6AhgBItYBCh1HZXRFdmFsdWF0aW9uU2l6ZU1ldHJpY3NFdmVudBJZCgZsYWJlbHMYASADKAsyQS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAIgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBOgIYASK5AgoTTGF0ZW5jeU1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJPCgZsYWJlbHMYAiADKAsyNy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkxhdGVuY3lNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxI5CghkdXJhdGlvbhgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkICGAFSCGR1cmF0aW9uEiUKDmxhdGVuY3lfc2Vjb25kGAQgASgBUg1sYXRlbmN5U2Vjb25kGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi7gEKEFNpemVNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSTAoGbGFiZWxzGAIgAygLMjQuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAMgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIjUKHVRpbWVvdXRFcnJvckNvdW50TWV0cmljc0V2ZW50EhAKA3RhZxgBIAEoCVIDdGFnOgIYASI2Ch5JbnRlcm5hbEVycm9yQ291bnRNZXRyaWNzRXZlbnQSEAoDdGFnGAEgASgJUgN0YWc6AhgBIvEBCiBSZWRpcmVjdGlvblJlcXVlc3RFeGNlcHRpb25FdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJcCgZsYWJlbHMYAiADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlJlZGlyZWN0aW9uUmVxdWVzdEV4Y2VwdGlvbkV2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLnAQobQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElcKBmxhYmVscxgCIAMoCzI/LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLrAQodVW5hdXRob3JpemVkRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWQoGbGFiZWxzGAIgAygLMkEuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5VbmF1dGhvcml6ZWRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi5QEKGkZvcmJpZGRlbkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElYKBmxhYmVscxgCIAMoCzI+LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuRm9yYmlkZGVuRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlOb3RGb3VuZEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuTm90Rm91bmRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6wEKHVBheWxvYWRUb29MYXJnZUV4Y2VwdGlvbkV2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElkKBmxhYmVscxgCIAMoCzJBLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuUGF5bG9hZFRvb0xhcmdlRXhjZXB0aW9uRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvkBCiRDbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSYAoGbGFiZWxzGAIgAygLMkguYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5DbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIu8BCh9JbnRlcm5hbFNlcnZlckVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElsKBmxhYmVscxgCIAMoCzJDLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxTZXJ2ZXJFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi9wEKI1NlcnZpY2VVbmF2YWlsYWJsZUVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkEl8KBmxhYmVscxgCIAMoCzJHLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU2VydmljZVVuYXZhaWxhYmxlRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuEBChhUaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVAoGbGFiZWxzGAIgAygLMjwuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5UaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlJbnRlcm5hbEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4QEKGE5ldHdvcmtFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJUCgZsYWJlbHMYAiADKAsyPC5idWNrZXRlZXIuZXZlbnQuY2xpZW50Lk5ldHdvcmtFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6QEKHEludGVybmFsU2RrRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWAoGbGFiZWxzGAIgAygLMkAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5JbnRlcm5hbFNka0Vycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLhAQoYVW5rbm93bkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElQKBmxhYmVscxgCIAMoCzI8LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuVW5rbm93bkVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLFAQoIT3BzRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgDIAEoBVIOZmVhdHVyZVZlcnNpb24SIQoMdmFyaWF0aW9uX2lkGAQgASgJUgt2YXJpYXRpb25JZBIXCgdnb2FsX2lkGAUgASgJUgZnb2FsSWQSFwoHdXNlcl9pZBgGIAEoCVIGdXNlcklkIlwKDVVzZXJHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhQKBXZhbHVlGAMgASgBUgV2YWx1ZSpwCghTb3VyY2VJZBILCgdVTktOT1dOEAASCwoHQU5EUk9JRBABEgcKA0lPUxACEgsKA1dFQhADGgIIARINCglHT19TRVJWRVIQBRIPCgtOT0RFX1NFUlZFUhAGEg4KCkpBVkFTQ1JJUFQQByIECAQQBCqbAQoFQXBpSWQSDwoLVU5LTk9XTl9BUEkQABISCg5HRVRfRVZBTFVBVElPThABEhMKD0dFVF9FVkFMVUFUSU9OUxACEhMKD1JFR0lTVEVSX0VWRU5UUxADEhUKEUdFVF9GRUFUVVJFX0ZMQUdTEAQSFQoRR0VUX1NFR01FTlRfVVNFUlMQBRIVChFTREtfR0VUX1ZBUklBVElPThBkQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudC9jbGllbnRiBnByb3RvMwqMWgobcHJvdG8vZ2F0ZXdheS9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuZ2F0ZXdheRocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvGhVwcm90by91c2VyL3VzZXIucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxobcHJvdG8vZmVhdHVyZS9mZWF0dXJlLnByb3RvGhtwcm90by9mZWF0dXJlL3NlcnZpY2UucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhpwcm90by9mZWF0dXJlL3RhcmdldC5wcm90bxobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvGhVwcm90by9wdXNoL3B1c2gucHJvdG8aGHByb3RvL3B1c2gvc2VydmljZS5wcm90bxoecHJvdG8vZXZlbnQvY2xpZW50L2V2ZW50LnByb3RvIg0KC1BpbmdSZXF1ZXN0IiIKDFBpbmdSZXNwb25zZRISCgR0aW1lGAEgASgDUgR0aW1lItcBChZHZXRGZWF0dXJlRmxhZ3NSZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKEGZlYXR1cmVfZmxhZ3NfaWQYAiABKAlSDmZlYXR1cmVGbGFnc0lkEiEKDHJlcXVlc3RlZF9hdBgDIAEoA1ILcmVxdWVzdGVkQXQSPQoJc291cmNlX2lkGAQgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YBSABKAlSCnNka1ZlcnNpb24i/AEKF0dldEZlYXR1cmVGbGFnc1Jlc3BvbnNlEigKEGZlYXR1cmVfZmxhZ3NfaWQYASABKAlSDmZlYXR1cmVGbGFnc0lkEjYKCGZlYXR1cmVzGAIgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSOQoZYXJjaGl2ZWRfZmVhdHVyZV9mbGFnX2lkcxgDIAMoCVIWYXJjaGl2ZWRGZWF0dXJlRmxhZ0lkcxIhCgxyZXF1ZXN0ZWRfYXQYBCABKANSC3JlcXVlc3RlZEF0EiEKDGZvcmNlX3VwZGF0ZRgFIAEoCFILZm9yY2VVcGRhdGUivAEKFkdldFNlZ21lbnRVc2Vyc1JlcXVlc3QSHwoLc2VnbWVudF9pZHMYASADKAlSCnNlZ21lbnRJZHMSIQoMcmVxdWVzdGVkX2F0GAIgASgDUgtyZXF1ZXN0ZWRBdBI9Cglzb3VyY2VfaWQYAyABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIfCgtzZGtfdmVyc2lvbhgEIAEoCVIKc2RrVmVyc2lvbiLVAQoXR2V0U2VnbWVudFVzZXJzUmVzcG9uc2USRAoNc2VnbWVudF91c2VycxgBIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2Vyc1IMc2VnbWVudFVzZXJzEi4KE2RlbGV0ZWRfc2VnbWVudF9pZHMYAiADKAlSEWRlbGV0ZWRTZWdtZW50SWRzEiEKDHJlcXVlc3RlZF9hdBgDIAEoA1ILcmVxdWVzdGVkQXQSIQoMZm9yY2VfdXBkYXRlGAQgASgIUgtmb3JjZVVwZGF0ZSL6AwoVR2V0RXZhbHVhdGlvbnNSZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKBHVzZXIYAiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEi4KE3VzZXJfZXZhbHVhdGlvbnNfaWQYAyABKAlSEXVzZXJFdmFsdWF0aW9uc0lkEiEKCmZlYXR1cmVfaWQYBCABKAlCAhgBUglmZWF0dXJlSWQSPQoJc291cmNlX2lkGAUgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSfAoZdXNlcl9ldmFsdWF0aW9uX2NvbmRpdGlvbhgGIAEoCzJALmJ1Y2tldGVlci5nYXRld2F5LkdldEV2YWx1YXRpb25zUmVxdWVzdC5Vc2VyRXZhbHVhdGlvbkNvbmRpdGlvblIXdXNlckV2YWx1YXRpb25Db25kaXRpb24SHwoLc2RrX3ZlcnNpb24YByABKAlSCnNka1ZlcnNpb24adAoXVXNlckV2YWx1YXRpb25Db25kaXRpb24SIQoMZXZhbHVhdGVkX2F0GAEgASgDUgtldmFsdWF0ZWRBdBI2Chd1c2VyX2F0dHJpYnV0ZXNfdXBkYXRlZBgCIAEoCFIVdXNlckF0dHJpYnV0ZXNVcGRhdGVkIs4BChZHZXRFdmFsdWF0aW9uc1Jlc3BvbnNlEj4KBXN0YXRlGAEgASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuVXNlckV2YWx1YXRpb25zLlN0YXRlUgVzdGF0ZRJECgtldmFsdWF0aW9ucxgCIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlVzZXJFdmFsdWF0aW9uc1ILZXZhbHVhdGlvbnMSLgoTdXNlcl9ldmFsdWF0aW9uc19pZBgDIAEoCVIRdXNlckV2YWx1YXRpb25zSWQi0QEKFEdldEV2YWx1YXRpb25SZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKBHVzZXIYAiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEh0KCmZlYXR1cmVfaWQYAyABKAlSCWZlYXR1cmVJZBI9Cglzb3VyY2VfaWQYBCABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIfCgtzZGtfdmVyc2lvbhgFIAEoCVIKc2RrVmVyc2lvbiJWChVHZXRFdmFsdWF0aW9uUmVzcG9uc2USPQoKZXZhbHVhdGlvbhgBIAEoCzIdLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRpb25SCmV2YWx1YXRpb24irgEKFVJlZ2lzdGVyRXZlbnRzUmVxdWVzdBI1CgZldmVudHMYASADKAsyHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkV2ZW50UgZldmVudHMSHwoLc2RrX3ZlcnNpb24YAiABKAlSCnNka1ZlcnNpb24SPQoJc291cmNlX2lkGAMgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQilAIKFlJlZ2lzdGVyRXZlbnRzUmVzcG9uc2USTQoGZXJyb3JzGAEgAygLMjUuYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXNwb25zZS5FcnJvcnNFbnRyeVIGZXJyb3JzGj8KBUVycm9yEhwKCXJldHJpYWJsZRgBIAEoCFIJcmV0cmlhYmxlEhgKB21lc3NhZ2UYAiABKAlSB21lc3NhZ2UaagoLRXJyb3JzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSRQoFdmFsdWUYAiABKAsyLy5idWNrZXRlZXIuZ2F0ZXdheS5SZWdpc3RlckV2ZW50c1Jlc3BvbnNlLkVycm9yUgV2YWx1ZToCOAEinAEKDFRyYWNrUmVxdWVzdBIWCgZhcGlrZXkYASABKAlSBmFwaWtleRIWCgZ1c2VyaWQYAiABKAlSBnVzZXJpZBIWCgZnb2FsaWQYAyABKAlSBmdvYWxpZBIQCgN0YWcYBCABKAlSA3RhZxIcCgl0aW1lc3RhbXAYBSABKANSCXRpbWVzdGFtcBIUCgV2YWx1ZRgGIAEoAVIFdmFsdWUiDwoNVHJhY2tSZXNwb25zZSLdAgoUQ3JlYXRlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEk8KDnZhcmlhdGlvbl90eXBlGAQgASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZS5WYXJpYXRpb25UeXBlUg12YXJpYXRpb25UeXBlEjwKCnZhcmlhdGlvbnMYBSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSEgoEdGFncxgGIAMoCVIEdGFncxIsChJvbl92YXJpYXRpb25faW5kZXgYByABKAVSEG9uVmFyaWF0aW9uSW5kZXgSLgoTb2ZmX3ZhcmlhdGlvbl9pbmRleBgIIAEoBVIRb2ZmVmFyaWF0aW9uSW5kZXgiTQoVQ3JlYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIiMKEUdldEZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCJKChJHZXRGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUi9QEKE0xpc3RGZWF0dXJlc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJJCghvcmRlcl9ieRgDIAEoDjIuLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJeCg9vcmRlcl9kaXJlY3Rpb24YBCABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbiJOChRMaXN0RmVhdHVyZXNSZXNwb25zZRI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIqgFChRVcGRhdGVGZWF0dXJlUmVxdWVzdBIYCgdjb21tZW50GAEgASgJUgdjb21tZW50Eg4KAmlkGAIgASgJUgJpZBIwCgRuYW1lGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgRuYW1lEj4KC2Rlc2NyaXB0aW9uGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgtkZXNjcmlwdGlvbhISCgR0YWdzGAUgAygJUgR0YWdzEjQKB2VuYWJsZWQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUgdlbmFibGVkEjYKCGFyY2hpdmVkGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSPAoKdmFyaWF0aW9ucxgIIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxJFCg1wcmVyZXF1aXNpdGVzGAkgAygLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUg1wcmVyZXF1aXNpdGVzEjMKB3RhcmdldHMYCiADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5UYXJnZXRSB3RhcmdldHMSLQoFcnVsZXMYCyADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxJGChBkZWZhdWx0X3N0cmF0ZWd5GAwgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSD2RlZmF1bHRTdHJhdGVneRJBCg1vZmZfdmFyaWF0aW9uGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgxvZmZWYXJpYXRpb24iTQoVVXBkYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIpACChFMaXN0UHVzaGVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEkQKCG9yZGVyX2J5GAMgASgOMikuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJZCg9vcmRlcl9kaXJlY3Rpb24YBCABKA4yMC5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBSABKAlSDXNlYXJjaEtleXdvcmQiewoSTGlzdFB1c2hlc1Jlc3BvbnNlEiwKBnB1c2hlcxgBIAMoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBnB1c2hlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCJrChFDcmVhdGVQdXNoUmVxdWVzdBISCgR0YWdzGAEgAygJUgR0YWdzEhIKBG5hbWUYAiABKAlSBG5hbWUSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgDIAEoDFIRZmNtU2VydmljZUFjY291bnQiPgoSQ3JlYXRlUHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoIiAKDkdldFB1c2hSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCI7Cg9HZXRQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2gigAIKEVVwZGF0ZVB1c2hSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBISCgR0YWdzGAIgAygJUgR0YWdzEjAKBG5hbWUYAyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSBG5hbWUSlAEKB2RlbGV0ZWQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlQl6SQVsqB2RlbGV0ZWQyUGlmIHRydWUsIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiB3aWxsIGJlIGRlbGV0ZWQgYW5kIG90aGVyIGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQuUgdkZWxldGVkIj4KElVwZGF0ZVB1c2hSZXNwb25zZRIoCgRwdXNoGAEgASgLMhQuYnVja2V0ZWVyLnB1c2guUHVzaFIEcHVzaDKSJwoHR2F0ZXdheRL0AgoOR2V0RXZhbHVhdGlvbnMSKC5idWNrZXRlZXIuZ2F0ZXdheS5HZXRFdmFsdWF0aW9uc1JlcXVlc3QaKS5idWNrZXRlZXIuZ2F0ZXdheS5HZXRFdmFsdWF0aW9uc1Jlc3BvbnNlIowCkkHtAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIPR2V0IEV2YWx1YXRpb25zGmFHZXRzIGFsbCB0aGUgZXZhbHVhdGlvbnMgZm9yIGEgc3BlY2lmaWMgdXNlci4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgQ0xJRU5UYCBBUEkgS2V5IHJvbGUuKhthcGkuZ2F0ZXdheS5nZXRfZXZhbHVhdGlvbnNyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCFSIQL2dldF9ldmFsdWF0aW9uczoBKhLuAgoNR2V0RXZhbHVhdGlvbhInLmJ1Y2tldGVlci5nYXRld2F5LkdldEV2YWx1YXRpb25SZXF1ZXN0GiguYnVja2V0ZWVyLmdhdGV3YXkuR2V0RXZhbHVhdGlvblJlc3BvbnNlIokCkkHrAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIOR2V0IEV2YWx1YXRpb24aYUdldHMgYSBzaW5nbGUgZXZhbHVhdGlvbiBmb3IgYSBzcGVjaWZpYyB1c2VyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBDTElFTlRgIEFQSSBLZXkgcm9sZS4qGmFwaS5nYXRld2F5LmdldF9ldmFsdWF0aW9uckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhQiDy9nZXRfZXZhbHVhdGlvbjoBKhL6AgoPR2V0RmVhdHVyZUZsYWdzEikuYnVja2V0ZWVyLmdhdGV3YXkuR2V0RmVhdHVyZUZsYWdzUmVxdWVzdBoqLmJ1Y2tldGVlci5nYXRld2F5LkdldEZlYXR1cmVGbGFnc1Jlc3BvbnNlIo8CkkHuAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIRR2V0IEZlYXR1cmUgRmxhZ3MaXkdldHMgYWxsIHRoZSBmZWF0dXJlIGZsYWcgaW4gYW4gZW52aXJvbm1lbnQuIFRvIGNhbGwgdGhpcyBBUEksIGl0IG5lZWRzIGBTRVJWRVJgIEFQSSBLZXkgcm9sZS4qHWFwaS5nYXRld2F5LmdldF9mZWF0dXJlX2ZsYWdzckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhciEi9nZXRfZmVhdHVyZV9mbGFnczoBKhL7AgoPR2V0U2VnbWVudFVzZXJzEikuYnVja2V0ZWVyLmdhdGV3YXkuR2V0U2VnbWVudFVzZXJzUmVxdWVzdBoqLmJ1Y2tldGVlci5nYXRld2F5LkdldFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIpACkkHvAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIRR2V0IFNlZ21lbnQgVXNlcnMaX0dldHMgYWxsIHRoZSBzZWdtZW50IHVzZXJzIGluIGFuIGVudmlyb25tZW50LiBUbyBjYWxsIHRoaXMgQVBJLCBpdCBuZWVkcyBgU0VSVkVSYCBBUEkgS2V5IHJvbGUuKh1hcGkuZ2F0ZXdheS5nZXRfc2VnbWVudF91c2Vyc3JCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwIXIhIvZ2V0X3NlZ21lbnRfdXNlcnM6ASoS+QIKDlJlZ2lzdGVyRXZlbnRzEiguYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXF1ZXN0GikuYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXNwb25zZSKRApJB8gEKFkNsaWVudCBhbmQgU2VydmVyIFNES3MSD1JlZ2lzdGVyIEV2ZW50cxpmVGhpcyBBUEkgaXMgZm9yIHJlcG9ydGluZyBHb2FsIGV2ZW50cy4gVG8gY2FsbCB0aGlzIEFQSSwgaXQgbmVlZHMgYSBgQ0xJRU5UYCBvciBgU0VSVkVSYCBBUEkgS2V5IHJvbGUuKhthcGkuZ2F0ZXdheS5yZWdpc3Rlcl9ldmVudHNyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCFSIQL3JlZ2lzdGVyX2V2ZW50czoBKhKPAgoFVHJhY2sSHy5idWNrZXRlZXIuZ2F0ZXdheS5UcmFja1JlcXVlc3QaIC5idWNrZXRlZXIuZ2F0ZXdheS5UcmFja1Jlc3BvbnNlIsIBkkGwAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIFVHJhY2safFRoaXMgQVBJIGlzIGFuIGludGVncmF0aW9uIGZvciBHb29nbGUgVGFiIE1hbmFnZXIgdG8gcmVwb3J0IEdvYWwgZXZlbnRzLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBDTElFTlRgIEFQSSBLZXkgcm9sZS4qEWFwaS5nYXRld2F5LnRyYWNrgtPkkwIIEgYvdHJhY2sS1QIKDUNyZWF0ZUZlYXR1cmUSJy5idWNrZXRlZXIuZ2F0ZXdheS5DcmVhdGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5nYXRld2F5LkNyZWF0ZUZlYXR1cmVSZXNwb25zZSLwAZJB1QEKDUZlYXR1cmUgRmxhZ3MSBkNyZWF0ZRpYQ3JlYXRlIGEgbmV3IEZlYXR1cmUgRmxhZy4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgV1JJVEVgIG9yIGBBRE1JTmAgQVBJIEtleSByb2xlLioeYXBpLmdhdGV3YXkudjEuZmVhdHVyZXMuY3JlYXRlckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhEiDC92MS9mZWF0dXJlczoBKhK1AgoKR2V0RmVhdHVyZRIkLmJ1Y2tldGVlci5nYXRld2F5LkdldEZlYXR1cmVSZXF1ZXN0GiUuYnVja2V0ZWVyLmdhdGV3YXkuR2V0RmVhdHVyZVJlc3BvbnNlItkBkkG8AQoNRmVhdHVyZSBGbGFncxIDR2V0GkVHZXQgYSBGZWF0dXJlIEZsYWcuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFJFQURgIEFQSSBLZXkgcm9sZS4qG2FwaS5nYXRld2F5LnYxLmZlYXR1cmVzLmdldHJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwITEhEvdjEvZmVhdHVyZXMve2lkfRK4AgoMTGlzdEZlYXR1cmVzEiYuYnVja2V0ZWVyLmdhdGV3YXkuTGlzdEZlYXR1cmVzUmVxdWVzdBonLmJ1Y2tldGVlci5nYXRld2F5Lkxpc3RGZWF0dXJlc1Jlc3BvbnNlItYBkkG+AQoNRmVhdHVyZSBGbGFncxIETGlzdBpFTGlzdCBGZWF0dXJlIEZsYWdzLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBSRUFEYCBBUEkgS2V5IHJvbGUuKhxhcGkuZ2F0ZXdheS52MS5mZWF0dXJlcy5saXN0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAg4SDC92MS9mZWF0dXJlcxLWAgoNVXBkYXRlRmVhdHVyZRInLmJ1Y2tldGVlci5nYXRld2F5LlVwZGF0ZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmdhdGV3YXkuVXBkYXRlRmVhdHVyZVJlc3BvbnNlIvEBkkHRAQoNRmVhdHVyZSBGbGFncxIGVXBkYXRlGlRVcGRhdGUgYSBGZWF0dXJlIEZsYWcuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFdSSVRFYCBvciBgQURNSU5gIEFQSSBLZXkgcm9sZS4qHmFwaS5nYXRld2F5LnYxLmZlYXR1cmVzLnVwZGF0ZXJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwIWMhEvdjEvZmVhdHVyZXMve2lkfToBKhLuAQoEUGluZxIeLmJ1Y2tldGVlci5nYXRld2F5LlBpbmdSZXF1ZXN0Gh8uYnVja2V0ZWVyLmdhdGV3YXkuUGluZ1Jlc3BvbnNlIqQBkkGTAQoHVXRpbGl0eRIEUGluZxoqUGluZyB0aGUgc2VydmVyIHRvIGNoZWNrIGl0cyBhdmFpbGFiaWxpdHkuKhBhcGkuZ2F0ZXdheS5waW5nYgByQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCBxIFL3BpbmcSoAIKCkxpc3RQdXNoZXMSJC5idWNrZXRlZXIuZ2F0ZXdheS5MaXN0UHVzaGVzUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5Lkxpc3RQdXNoZXNSZXNwb25zZSLEAZJBrgEKBlB1c2hlcxIETGlzdBo+TGlzdCBwdXNoZXMuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFJFQURgIEFQSSBLZXkgcm9sZS4qGmFwaS5nYXRld2F5LnYxLnB1c2hlcy5saXN0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAgwSCi92MS9wdXNoZXMS8wIKCkNyZWF0ZVB1c2gSJC5idWNrZXRlZXIuZ2F0ZXdheS5DcmVhdGVQdXNoUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5LkNyZWF0ZVB1c2hSZXNwb25zZSKXApJBgAIKBlB1c2hlcxIGQ3JlYXRlGosBQ3JlYXRlIGEgbmV3IFB1c2ggbm90aWZpY2F0aW9uIHRocm91Z2ggR29vZ2xlIEZpcmViYXNlIENsb3VkIE1lc3NhZ2luZyAoRkNNKS4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgV1JJVEVgIG9yIGBBRE1JTmAgQVBJIEtleSByb2xlLiocYXBpLmdhdGV3YXkudjEucHVzaGVzLmNyZWF0ZXJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwINIggvdjEvcHVzaDoBKhKkAgoHR2V0UHVzaBIhLmJ1Y2tldGVlci5nYXRld2F5LkdldFB1c2hSZXF1ZXN0GiIuYnVja2V0ZWVyLmdhdGV3YXkuR2V0UHVzaFJlc3BvbnNlItEBkkG4AQoGUHVzaGVzEgNHZXQaSkdldCBhIFB1c2ggbm90aWZpY2F0aW9uLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBSRUFEYCBBUEkgS2V5IHJvbGUuKhlhcGkuZ2F0ZXdheS52MS5wdXNoZXMuZ2V0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAg8SDS92MS9wdXNoL3tpZH0SwAIKClVwZGF0ZVB1c2gSJC5idWNrZXRlZXIuZ2F0ZXdheS5VcGRhdGVQdXNoUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5LlVwZGF0ZVB1c2hSZXNwb25zZSLkAZJByAEKBlB1c2hlcxIGVXBkYXRlGlRVcGRhdGUgYSBQdXNoIG5vdGlmaWNhdGlvbi4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IGEgYFdSSVRFYCBvciBgQURNSU5gIEFQSSBLZXkgcm9sZS4qHGFwaS5nYXRld2F5LnYxLnB1c2hlcy51cGRhdGVyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCEjINL3YxL3B1c2gve2lkfToBKkKEBlovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2dhdGV3YXmSQc8FEiAKGUJ1Y2tldGVlciBHYXRld2F5IFNlcnZpY2UyAzEuMBoIRU5EUE9JTlQqAQIyEGFwcGxpY2F0aW9uL2pzb246EGFwcGxpY2F0aW9uL2pzb25StAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1SsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9UqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfVpQCk4KCkFwaUtleUF1dGgSQAgCEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGg1hdXRob3JpemF0aW9uIAJiEAoOCgpBcGlLZXlBdXRoEgBiBnByb3RvMw==" + descriptor: "CocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCuIFChxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvEg9nb29nbGUucHJvdG9idWYimAEKBlN0cnVjdBI7CgZmaWVsZHMYASADKAsyIy5nb29nbGUucHJvdG9idWYuU3RydWN0LkZpZWxkc0VudHJ5UgZmaWVsZHMaUQoLRmllbGRzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASKyAgoFVmFsdWUSOwoKbnVsbF92YWx1ZRgBIAEoDjIaLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWVIAFIJbnVsbFZhbHVlEiMKDG51bWJlcl92YWx1ZRgCIAEoAUgAUgtudW1iZXJWYWx1ZRIjCgxzdHJpbmdfdmFsdWUYAyABKAlIAFILc3RyaW5nVmFsdWUSHwoKYm9vbF92YWx1ZRgEIAEoCEgAUglib29sVmFsdWUSPAoMc3RydWN0X3ZhbHVlGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAUgtzdHJ1Y3RWYWx1ZRI7CgpsaXN0X3ZhbHVlGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZUgAUglsaXN0VmFsdWVCBgoEa2luZCI7CglMaXN0VmFsdWUSLgoGdmFsdWVzGAEgAygLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgZ2YWx1ZXMqGwoJTnVsbFZhbHVlEg4KCk5VTExfVkFMVUUQAEJ/ChNjb20uZ29vZ2xlLnByb3RvYnVmQgtTdHJ1Y3RQcm90b1ABWi9nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9zdHJ1Y3RwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCqY+Cixwcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL29wZW5hcGl2Mi5wcm90bxIpZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMaHGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iswgKB1N3YWdnZXISGAoHc3dhZ2dlchgBIAEoCVIHc3dhZ2dlchJDCgRpbmZvGAIgASgLMi8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSW5mb1IEaW5mbxISCgRob3N0GAMgASgJUgRob3N0EhsKCWJhc2VfcGF0aBgEIAEoCVIIYmFzZVBhdGgSSwoHc2NoZW1lcxgFIAMoDjIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtZVIHc2NoZW1lcxIaCghjb25zdW1lcxgGIAMoCVIIY29uc3VtZXMSGgoIcHJvZHVjZXMYByADKAlSCHByb2R1Y2VzEl8KCXJlc3BvbnNlcxgKIAMoCzJBLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXIuUmVzcG9uc2VzRW50cnlSCXJlc3BvbnNlcxJxChRzZWN1cml0eV9kZWZpbml0aW9ucxgLIAEoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5RGVmaW5pdGlvbnNSE3NlY3VyaXR5RGVmaW5pdGlvbnMSWgoIc2VjdXJpdHkYDCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50UghzZWN1cml0eRJCCgR0YWdzGA0gAygLMi4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnUgR0YWdzEmUKDWV4dGVybmFsX2RvY3MYDiABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxJiCgpleHRlbnNpb25zGA8gAygLMkIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU3dhZ2dlci5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMacQoOUmVzcG9uc2VzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSSQoFdmFsdWUYAiABKAsyMy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBSgQICBAJSgQICRAKItYHCglPcGVyYXRpb24SEgoEdGFncxgBIAMoCVIEdGFncxIYCgdzdW1tYXJ5GAIgASgJUgdzdW1tYXJ5EiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhJlCg1leHRlcm5hbF9kb2NzGAQgASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSIQoMb3BlcmF0aW9uX2lkGAUgASgJUgtvcGVyYXRpb25JZBIaCghjb25zdW1lcxgGIAMoCVIIY29uc3VtZXMSGgoIcHJvZHVjZXMYByADKAlSCHByb2R1Y2VzEmEKCXJlc3BvbnNlcxgJIAMoCzJDLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLk9wZXJhdGlvbi5SZXNwb25zZXNFbnRyeVIJcmVzcG9uc2VzEksKB3NjaGVtZXMYCiADKA4yMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWVSB3NjaGVtZXMSHgoKZGVwcmVjYXRlZBgLIAEoCFIKZGVwcmVjYXRlZBJaCghzZWN1cml0eRgMIAMoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnRSCHNlY3VyaXR5EmQKCmV4dGVuc2lvbnMYDSADKAsyRC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb24uRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zElUKCnBhcmFtZXRlcnMYDiABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5QYXJhbWV0ZXJzUgpwYXJhbWV0ZXJzGnEKDlJlc3BvbnNlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkkKBXZhbHVlGAIgASgLMjMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2VSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4AUoECAgQCSJiCgpQYXJhbWV0ZXJzElQKB2hlYWRlcnMYASADKAsyOi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5IZWFkZXJQYXJhbWV0ZXJSB2hlYWRlcnMiowIKD0hlYWRlclBhcmFtZXRlchISCgRuYW1lGAEgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhJTCgR0eXBlGAMgASgOMj8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUGFyYW1ldGVyLlR5cGVSBHR5cGUSFgoGZm9ybWF0GAQgASgJUgZmb3JtYXQSGgoIcmVxdWlyZWQYBSABKAhSCHJlcXVpcmVkIkUKBFR5cGUSCwoHVU5LTk9XThAAEgoKBlNUUklORxABEgoKBk5VTUJFUhACEgsKB0lOVEVHRVIQAxILCgdCT09MRUFOEARKBAgGEAdKBAgHEAgi2AEKBkhlYWRlchIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SEgoEdHlwZRgCIAEoCVIEdHlwZRIWCgZmb3JtYXQYAyABKAlSBmZvcm1hdBIYCgdkZWZhdWx0GAYgASgJUgdkZWZhdWx0EhgKB3BhdHRlcm4YDSABKAlSB3BhdHRlcm5KBAgEEAVKBAgFEAZKBAgHEAhKBAgIEAlKBAgJEApKBAgKEAtKBAgLEAxKBAgMEA1KBAgOEA9KBAgPEBBKBAgQEBFKBAgREBJKBAgSEBMimgUKCFJlc3BvbnNlEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhJJCgZzY2hlbWEYAiABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWFSBnNjaGVtYRJaCgdoZWFkZXJzGAMgAygLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2UuSGVhZGVyc0VudHJ5UgdoZWFkZXJzEl0KCGV4YW1wbGVzGAQgAygLMkEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2UuRXhhbXBsZXNFbnRyeVIIZXhhbXBsZXMSYwoKZXh0ZW5zaW9ucxgFIAMoCzJDLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxptCgxIZWFkZXJzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSRwoFdmFsdWUYAiABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5IZWFkZXJSBXZhbHVlOgI4ARo7Cg1FeGFtcGxlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEi1gMKBEluZm8SFAoFdGl0bGUYASABKAlSBXRpdGxlEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhIoChB0ZXJtc19vZl9zZXJ2aWNlGAMgASgJUg50ZXJtc09mU2VydmljZRJMCgdjb250YWN0GAQgASgLMjIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuQ29udGFjdFIHY29udGFjdBJMCgdsaWNlbnNlGAUgASgLMjIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuTGljZW5zZVIHbGljZW5zZRIYCgd2ZXJzaW9uGAYgASgJUgd2ZXJzaW9uEl8KCmV4dGVuc2lvbnMYByADKAsyPy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5JbmZvLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJFCgdDb250YWN0EhIKBG5hbWUYASABKAlSBG5hbWUSEAoDdXJsGAIgASgJUgN1cmwSFAoFZW1haWwYAyABKAlSBWVtYWlsIi8KB0xpY2Vuc2USEgoEbmFtZRgBIAEoCVIEbmFtZRIQCgN1cmwYAiABKAlSA3VybCJLChVFeHRlcm5hbERvY3VtZW50YXRpb24SIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEhAKA3VybBgCIAEoCVIDdXJsIqoCCgZTY2hlbWESVgoLanNvbl9zY2hlbWEYASABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hUgpqc29uU2NoZW1hEiQKDWRpc2NyaW1pbmF0b3IYAiABKAlSDWRpc2NyaW1pbmF0b3ISGwoJcmVhZF9vbmx5GAMgASgIUghyZWFkT25seRJlCg1leHRlcm5hbF9kb2NzGAUgASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSGAoHZXhhbXBsZRgGIAEoCVIHZXhhbXBsZUoECAQQBSLXCgoKSlNPTlNjaGVtYRIQCgNyZWYYAyABKAlSA3JlZhIUCgV0aXRsZRgFIAEoCVIFdGl0bGUSIAoLZGVzY3JpcHRpb24YBiABKAlSC2Rlc2NyaXB0aW9uEhgKB2RlZmF1bHQYByABKAlSB2RlZmF1bHQSGwoJcmVhZF9vbmx5GAggASgIUghyZWFkT25seRIYCgdleGFtcGxlGAkgASgJUgdleGFtcGxlEh8KC211bHRpcGxlX29mGAogASgBUgptdWx0aXBsZU9mEhgKB21heGltdW0YCyABKAFSB21heGltdW0SKwoRZXhjbHVzaXZlX21heGltdW0YDCABKAhSEGV4Y2x1c2l2ZU1heGltdW0SGAoHbWluaW11bRgNIAEoAVIHbWluaW11bRIrChFleGNsdXNpdmVfbWluaW11bRgOIAEoCFIQZXhjbHVzaXZlTWluaW11bRIdCgptYXhfbGVuZ3RoGA8gASgEUgltYXhMZW5ndGgSHQoKbWluX2xlbmd0aBgQIAEoBFIJbWluTGVuZ3RoEhgKB3BhdHRlcm4YESABKAlSB3BhdHRlcm4SGwoJbWF4X2l0ZW1zGBQgASgEUghtYXhJdGVtcxIbCgltaW5faXRlbXMYFSABKARSCG1pbkl0ZW1zEiEKDHVuaXF1ZV9pdGVtcxgWIAEoCFILdW5pcXVlSXRlbXMSJQoObWF4X3Byb3BlcnRpZXMYGCABKARSDW1heFByb3BlcnRpZXMSJQoObWluX3Byb3BlcnRpZXMYGSABKARSDW1pblByb3BlcnRpZXMSGgoIcmVxdWlyZWQYGiADKAlSCHJlcXVpcmVkEhQKBWFycmF5GCIgAygJUgVhcnJheRJfCgR0eXBlGCMgAygOMksuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYS5KU09OU2NoZW1hU2ltcGxlVHlwZXNSBHR5cGUSFgoGZm9ybWF0GCQgASgJUgZmb3JtYXQSEgoEZW51bRguIAMoCVIEZW51bRJ6ChNmaWVsZF9jb25maWd1cmF0aW9uGOkHIAEoCzJILmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuRmllbGRDb25maWd1cmF0aW9uUhJmaWVsZENvbmZpZ3VyYXRpb24SZQoKZXh0ZW5zaW9ucxgwIAMoCzJFLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGjwKEkZpZWxkQ29uZmlndXJhdGlvbhImCg9wYXRoX3BhcmFtX25hbWUYLyABKAlSDXBhdGhQYXJhbU5hbWUaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEidwoVSlNPTlNjaGVtYVNpbXBsZVR5cGVzEgsKB1VOS05PV04QABIJCgVBUlJBWRABEgsKB0JPT0xFQU4QAhILCgdJTlRFR0VSEAMSCAoETlVMTBAEEgoKBk5VTUJFUhAFEgoKBk9CSkVDVBAGEgoKBlNUUklORxAHSgQIARACSgQIAhADSgQIBBAFSgQIEhATSgQIExAUSgQIFxAYSgQIGxAcSgQIHBAdSgQIHRAeSgQIHhAiSgQIJRAqSgQIKhArSgQIKxAuItkCCgNUYWcSEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SZQoNZXh0ZXJuYWxfZG9jcxgDIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEl4KCmV4dGVuc2lvbnMYBCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5UYWcuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIvcBChNTZWN1cml0eURlZmluaXRpb25zEmgKCHNlY3VyaXR5GAEgAygLMkwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlEZWZpbml0aW9ucy5TZWN1cml0eUVudHJ5UghzZWN1cml0eRp2Cg1TZWN1cml0eUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ek8KBXZhbHVlGAIgASgLMjkuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWVSBXZhbHVlOgI4ASL/BgoOU2VjdXJpdHlTY2hlbWUSUgoEdHlwZRgBIAEoDjI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLlR5cGVSBHR5cGUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEhIKBG5hbWUYAyABKAlSBG5hbWUSTAoCaW4YBCABKA4yPC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5JblICaW4SUgoEZmxvdxgFIAEoDjI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkZsb3dSBGZsb3cSKwoRYXV0aG9yaXphdGlvbl91cmwYBiABKAlSEGF1dGhvcml6YXRpb25VcmwSGwoJdG9rZW5fdXJsGAcgASgJUgh0b2tlblVybBJJCgZzY29wZXMYCCABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY29wZXNSBnNjb3BlcxJpCgpleHRlbnNpb25zGAkgAygLMkkuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIksKBFR5cGUSEAoMVFlQRV9JTlZBTElEEAASDgoKVFlQRV9CQVNJQxABEhAKDFRZUEVfQVBJX0tFWRACEg8KC1RZUEVfT0FVVEgyEAMiMQoCSW4SDgoKSU5fSU5WQUxJRBAAEgwKCElOX1FVRVJZEAESDQoJSU5fSEVBREVSEAIiagoERmxvdxIQCgxGTE9XX0lOVkFMSUQQABIRCg1GTE9XX0lNUExJQ0lUEAESEQoNRkxPV19QQVNTV09SRBACEhQKEEZMT1dfQVBQTElDQVRJT04QAxIUChBGTE9XX0FDQ0VTU19DT0RFEAQi9gIKE1NlY3VyaXR5UmVxdWlyZW1lbnQSigEKFHNlY3VyaXR5X3JlcXVpcmVtZW50GAEgAygLMlcuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudC5TZWN1cml0eVJlcXVpcmVtZW50RW50cnlSE3NlY3VyaXR5UmVxdWlyZW1lbnQaMAoYU2VjdXJpdHlSZXF1aXJlbWVudFZhbHVlEhQKBXNjb3BlGAEgAygJUgVzY29wZRqfAQoYU2VjdXJpdHlSZXF1aXJlbWVudEVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Em0KBXZhbHVlGAIgASgLMlcuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudC5TZWN1cml0eVJlcXVpcmVtZW50VmFsdWVSBXZhbHVlOgI4ASKWAQoGU2NvcGVzElIKBXNjb3BlGAEgAygLMjwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NvcGVzLlNjb3BlRW50cnlSBXNjb3BlGjgKClNjb3BlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASo7CgZTY2hlbWUSCwoHVU5LTk9XThAAEggKBEhUVFAQARIJCgVIVFRQUxACEgYKAldTEAMSBwoDV1NTEARCSFpGZ2l0aHViLmNvbS9ncnBjLWVjb3N5c3RlbS9ncnBjLWdhdGV3YXkvdjIvcHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9uc2IGcHJvdG8zCv0GCi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvEilncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8aLHByb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnMvb3BlbmFwaXYyLnByb3RvOn4KEW9wZW5hcGl2Ml9zd2FnZ2VyEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJIIIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXJSEG9wZW5hcGl2MlN3YWdnZXI6hgEKE29wZW5hcGl2Ml9vcGVyYXRpb24SHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiSCCABKAsyNC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb25SEm9wZW5hcGl2Mk9wZXJhdGlvbjp+ChBvcGVuYXBpdjJfc2NoZW1hEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJIIIAEoCzIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtYVIPb3BlbmFwaXYyU2NoZW1hOnUKDW9wZW5hcGl2Ml90YWcSHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYkgggASgLMi4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnUgxvcGVuYXBpdjJUYWc6fgoPb3BlbmFwaXYyX2ZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiSCCABKAsyNS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hUg5vcGVuYXBpdjJGaWVsZEJIWkZnaXRodWIuY29tL2dycGMtZWNvc3lzdGVtL2dycGMtZ2F0ZXdheS92Mi9wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zYgZwcm90bzMKwAQKFXByb3RvL3VzZXIvdXNlci5wcm90bxIOYnVja2V0ZWVyLnVzZXIi3gMKBFVzZXISDgoCaWQYASABKAlSAmlkEjIKBGRhdGEYAiADKAsyHi5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGFFbnRyeVIEZGF0YRJFCgt0YWdnZWRfZGF0YRgDIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuVGFnZ2VkRGF0YUVudHJ5Ugp0YWdnZWREYXRhEhsKCWxhc3Rfc2VlbhgEIAEoA1IIbGFzdFNlZW4SHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0GnwKBERhdGESOgoFdmFsdWUYASADKAsyJC5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGEuVmFsdWVFbnRyeVIFdmFsdWUaOAoKVmFsdWVFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGjcKCURhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlgKD1RhZ2dlZERhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YVIFdmFsdWU6AjgBQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by91c2VyYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCp4CChpwcm90by9mZWF0dXJlL3JlYXNvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUisQEKBlJlYXNvbhIyCgR0eXBlGAEgASgOMh4uYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uLlR5cGVSBHR5cGUSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIloKBFR5cGUSCgoGVEFSR0VUEAASCAoEUlVMRRABEgsKB0RFRkFVTFQQAxIKCgZDTElFTlQQBBIRCg1PRkZfVkFSSUFUSU9OEAUSEAoMUFJFUkVRVUlTSVRFEAZCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqYBgoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvIuMCCgpFdmFsdWF0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIXCgd1c2VyX2lkGAQgASgJUgZ1c2VySWQSIQoMdmFyaWF0aW9uX2lkGAUgASgJUgt2YXJpYXRpb25JZBI+Cgl2YXJpYXRpb24YBiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25CAhgBUgl2YXJpYXRpb24SMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SJwoPdmFyaWF0aW9uX3ZhbHVlGAggASgJUg52YXJpYXRpb25WYWx1ZRIlCg52YXJpYXRpb25fbmFtZRgJIAEoCVINdmFyaWF0aW9uTmFtZSKGAgoPVXNlckV2YWx1YXRpb25zEhIKAmlkGAEgASgJQgIYAVICaWQSPwoLZXZhbHVhdGlvbnMYAiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uUgtldmFsdWF0aW9ucxIdCgpjcmVhdGVkX2F0GAMgASgDUgljcmVhdGVkQXQSMAoUYXJjaGl2ZWRfZmVhdHVyZV9pZHMYBCADKAlSEmFyY2hpdmVkRmVhdHVyZUlkcxIhCgxmb3JjZV91cGRhdGUYBSABKAhSC2ZvcmNlVXBkYXRlIioKBVN0YXRlEgoKBlFVRVVFRBAAEgsKB1BBUlRJQUwQARIICgRGVUxMEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrHAwoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlItoCCgZDbGF1c2USDgoCaWQYASABKAlSAmlkEhwKCWF0dHJpYnV0ZRgCIAEoCVIJYXR0cmlidXRlEj4KCG9wZXJhdG9yGAMgASgOMiIuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvchIWCgZ2YWx1ZXMYBCADKAlSBnZhbHVlcyLJAQoIT3BlcmF0b3ISCgoGRVFVQUxTEAASBgoCSU4QARINCglFTkRTX1dJVEgQAhIPCgtTVEFSVFNfV0lUSBADEgsKB1NFR01FTlQQBBILCgdHUkVBVEVSEAUSFAoQR1JFQVRFUl9PUl9FUVVBTBAGEggKBExFU1MQBxIRCg1MRVNTX09SX0VRVUFMEAgSCgoGQkVGT1JFEAkSCQoFQUZURVIQChIQCgxGRUFUVVJFX0ZMQUcQCxITCg9QQVJUSUFMTFlfTUFUQ0gQDEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrsEChxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSItCg1GaXhlZFN0cmF0ZWd5EhwKCXZhcmlhdGlvbhgBIAEoCVIJdmFyaWF0aW9uIqIBCg9Sb2xsb3V0U3RyYXRlZ3kSTAoKdmFyaWF0aW9ucxgBIAMoCzIsLmJ1Y2tldGVlci5mZWF0dXJlLlJvbGxvdXRTdHJhdGVneS5WYXJpYXRpb25SCnZhcmlhdGlvbnMaQQoJVmFyaWF0aW9uEhwKCXZhcmlhdGlvbhgBIAEoCVIJdmFyaWF0aW9uEhYKBndlaWdodBgCIAEoBVIGd2VpZ2h0IvgBCghTdHJhdGVneRI0CgR0eXBlGAEgASgOMiAuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3kuVHlwZVIEdHlwZRJHCg5maXhlZF9zdHJhdGVneRgCIAEoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkZpeGVkU3RyYXRlZ3lSDWZpeGVkU3RyYXRlZ3kSTQoQcm9sbG91dF9zdHJhdGVneRgDIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlJvbGxvdXRTdHJhdGVneVIPcm9sbG91dFN0cmF0ZWd5Ih4KBFR5cGUSCQoFRklYRUQQABILCgdST0xMT1VUEAFCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqpAgoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8aHHByb3RvL2ZlYXR1cmUvc3RyYXRlZ3kucHJvdG8ihAEKBFJ1bGUSDgoCaWQYASABKAlSAmlkEjcKCHN0cmF0ZWd5GAIgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5EjMKB2NsYXVzZXMYAyADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSB2NsYXVzZXNCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqoAQoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIjwKBlRhcmdldBIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIUCgV1c2VycxgCIAMoCVIFdXNlcnNCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwr0AgoqcHJvdG8vZmVhdHVyZS9mZWF0dXJlX2xhc3RfdXNlZF9pbmZvLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSL3AQoTRmVhdHVyZUxhc3RVc2VkSW5mbxIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSGAoHdmVyc2lvbhgCIAEoBVIHdmVyc2lvbhIgCgxsYXN0X3VzZWRfYXQYAyABKANSCmxhc3RVc2VkQXQSHQoKY3JlYXRlZF9hdBgEIAEoA1IJY3JlYXRlZEF0EjIKFWNsaWVudF9vbGRlc3RfdmVyc2lvbhgFIAEoCVITY2xpZW50T2xkZXN0VmVyc2lvbhIyChVjbGllbnRfbGF0ZXN0X3ZlcnNpb24YBiABKAlSE2NsaWVudExhdGVzdFZlcnNpb25CMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrCAQogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIlAKDFByZXJlcXVpc2l0ZRIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSIQoMdmFyaWF0aW9uX2lkGAIgASgJUgt2YXJpYXRpb25JZEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCqoLChtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxoqcHJvdG8vZmVhdHVyZS9mZWF0dXJlX2xhc3RfdXNlZF9pbmZvLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90byLSBwoHRmVhdHVyZRIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGAoHZW5hYmxlZBgEIAEoCFIHZW5hYmxlZBIYCgdkZWxldGVkGAUgASgIUgdkZWxldGVkEjkKFmV2YWx1YXRpb25fdW5kZWxheWFibGUYBiABKAhCAhgBUhVldmFsdWF0aW9uVW5kZWxheWFibGUSEAoDdHRsGAcgASgFUgN0dGwSGAoHdmVyc2lvbhgIIAEoBVIHdmVyc2lvbhIdCgpjcmVhdGVkX2F0GAkgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgKIAEoA1IJdXBkYXRlZEF0EjwKCnZhcmlhdGlvbnMYCyADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSMwoHdGFyZ2V0cxgMIAMoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlRhcmdldFIHdGFyZ2V0cxItCgVydWxlcxgNIAMoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBXJ1bGVzEkYKEGRlZmF1bHRfc3RyYXRlZ3kYDiABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIPZGVmYXVsdFN0cmF0ZWd5EiMKDW9mZl92YXJpYXRpb24YDyABKAlSDG9mZlZhcmlhdGlvbhISCgR0YWdzGBAgAygJUgR0YWdzEkwKDmxhc3RfdXNlZF9pbmZvGBEgASgLMiYuYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZUxhc3RVc2VkSW5mb1IMbGFzdFVzZWRJbmZvEh4KCm1haW50YWluZXIYEiABKAlSCm1haW50YWluZXISTwoOdmFyaWF0aW9uX3R5cGUYEyABKA4yKC5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlLlZhcmlhdGlvblR5cGVSDXZhcmlhdGlvblR5cGUSGgoIYXJjaGl2ZWQYFCABKAhSCGFyY2hpdmVkEkUKDXByZXJlcXVpc2l0ZXMYFSADKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDXByZXJlcXVpc2l0ZXMSIwoNc2FtcGxpbmdfc2VlZBgWIAEoCVIMc2FtcGxpbmdTZWVkIj4KDVZhcmlhdGlvblR5cGUSCgoGU1RSSU5HEAASCwoHQk9PTEVBThABEgoKBk5VTUJFUhACEggKBEpTT04QAyJSCghGZWF0dXJlcxI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzEg4KAmlkGAIgASgJUgJpZCJTCgNUYWcSDgoCaWQYASABKAlSAmlkEh0KCmNyZWF0ZWRfYXQYAiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAMgASgDUgl1cGRhdGVkQXRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrkAQoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIjYKA0FueRIZCgh0eXBlX3VybBgBIAEoCVIHdHlwZVVybBIUCgV2YWx1ZRgCIAEoDFIFdmFsdWVCdgoTY29tLmdvb2dsZS5wcm90b2J1ZkIIQW55UHJvdG9QAVosZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vYW55cGKiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwq1CAobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8itAQKB1NlZ21lbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEi0KBXJ1bGVzGAQgAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBIcCgd2ZXJzaW9uGAcgASgDQgIYAVIHdmVyc2lvbhIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkEi4KE2luY2x1ZGVkX3VzZXJfY291bnQYCSABKANSEWluY2x1ZGVkVXNlckNvdW50EjIKE2V4Y2x1ZGVkX3VzZXJfY291bnQYCiABKANCAhgBUhFleGNsdWRlZFVzZXJDb3VudBI5CgZzdGF0dXMYCyABKA4yIS5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50LlN0YXR1c1IGc3RhdHVzEicKEGlzX2luX3VzZV9zdGF0dXMYDCABKAhSDWlzSW5Vc2VTdGF0dXMSNgoIZmVhdHVyZXMYDSADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcyI+CgZTdGF0dXMSCwoHSU5JVElBTBAAEg0KCVVQTE9BRElORxABEgwKCFNVQ0VFREVEEAISCgoGRkFJTEVEEAMi1AEKC1NlZ21lbnRVc2VyEg4KAmlkGAEgASgJUgJpZBIdCgpzZWdtZW50X2lkGAIgASgJUglzZWdtZW50SWQSFwoHdXNlcl9pZBgDIAEoCVIGdXNlcklkEjoKBXN0YXRlGAQgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQiJwoFU3RhdGUSDAoISU5DTFVERUQQABIQCghFWENMVURFRBABGgIIASKCAQoMU2VnbWVudFVzZXJzEh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBI0CgV1c2VycxgCIAMoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyUgV1c2VycxIdCgp1cGRhdGVkX2F0GAMgASgDUgl1cGRhdGVkQXRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqgBQogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIq0ECgtGbGFnVHJpZ2dlchIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEjcKBHR5cGUYBCABKA4yIy5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5UeXBlUgR0eXBlEj0KBmFjdGlvbhgFIAEoDjIlLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLkFjdGlvblIGYWN0aW9uEiAKC2Rlc2NyaXB0aW9uGAYgASgJUgtkZXNjcmlwdGlvbhIjCg10cmlnZ2VyX2NvdW50GAcgASgFUgx0cmlnZ2VyQ291bnQSKgoRbGFzdF90cmlnZ2VyZWRfYXQYCCABKANSD2xhc3RUcmlnZ2VyZWRBdBIUCgV0b2tlbhgJIAEoCVIFdG9rZW4SGgoIZGlzYWJsZWQYCiABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCyABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAwgASgDUgl1cGRhdGVkQXQSJQoOZW52aXJvbm1lbnRfaWQYDSABKAlSDWVudmlyb25tZW50SWQiKgoEVHlwZRIQCgxUeXBlX1VOS05PV04QABIQCgxUeXBlX1dFQkhPT0sQASI7CgZBY3Rpb24SEgoOQWN0aW9uX1VOS05PV04QABINCglBY3Rpb25fT04QARIOCgpBY3Rpb25fT0ZGEAJKBAgDEARCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrAIwobcHJvdG8vZmVhdHVyZS9jb21tYW5kLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhpwcm90by9mZWF0dXJlL2NsYXVzZS5wcm90bxobcHJvdG8vZmVhdHVyZS9mZWF0dXJlLnByb3RvGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvGiBwcm90by9mZWF0dXJlL2ZsYWdfdHJpZ2dlci5wcm90byI5CgdDb21tYW5kEi4KB2NvbW1hbmQYASABKAsyFC5nb29nbGUucHJvdG9idWYuQW55Ugdjb21tYW5kIrUDChRDcmVhdGVGZWF0dXJlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SPAoKdmFyaWF0aW9ucxgEIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxISCgR0YWdzGAUgAygJUgR0YWdzElgKGmRlZmF1bHRfb25fdmFyaWF0aW9uX2luZGV4GAYgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSF2RlZmF1bHRPblZhcmlhdGlvbkluZGV4EloKG2RlZmF1bHRfb2ZmX3ZhcmlhdGlvbl9pbmRleBgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUhhkZWZhdWx0T2ZmVmFyaWF0aW9uSW5kZXgSTwoOdmFyaWF0aW9uX3R5cGUYCCABKA4yKC5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlLlZhcmlhdGlvblR5cGVSDXZhcmlhdGlvblR5cGUiFwoVQXJjaGl2ZUZlYXR1cmVDb21tYW5kIhkKF1VuYXJjaGl2ZUZlYXR1cmVDb21tYW5kIhYKFERlbGV0ZUZlYXR1cmVDb21tYW5kIioKFFJlbmFtZUZlYXR1cmVDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiPAoYQ2hhbmdlRGVzY3JpcHRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiK4AQopQ2hhbmdlQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1N0YXR1c0NvbW1hbmQSOQoGc3RhdHVzGAEgASgOMiEuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudC5TdGF0dXNSBnN0YXR1cxI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZRIUCgVjb3VudBgDIAEoA1IFY291bnQiIQoNQWRkVGFnQ29tbWFuZBIQCgN0YWcYASABKAlSA3RhZyIkChBSZW1vdmVUYWdDb21tYW5kEhAKA3RhZxgBIAEoCVIDdGFnIhYKFEVuYWJsZUZlYXR1cmVDb21tYW5kIhcKFURpc2FibGVGZWF0dXJlQ29tbWFuZCJhChNBZGRWYXJpYXRpb25Db21tYW5kEhQKBXZhbHVlGAEgASgJUgV2YWx1ZRISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbiIoChZSZW1vdmVWYXJpYXRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZCJDChtDaGFuZ2VWYXJpYXRpb25WYWx1ZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZSJAChpDaGFuZ2VWYXJpYXRpb25OYW1lQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJVCiFDaGFuZ2VWYXJpYXRpb25EZXNjcmlwdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiIrChlDaGFuZ2VPZmZWYXJpYXRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZCI/ChlBZGRVc2VyVG9WYXJpYXRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgR1c2VyGAIgASgJUgR1c2VyIkQKHlJlbW92ZVVzZXJGcm9tVmFyaWF0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEdXNlchgCIAEoCVIEdXNlciJXChxDaGFuZ2VEZWZhdWx0U3RyYXRlZ3lDb21tYW5kEjcKCHN0cmF0ZWd5GAEgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5Ij0KDkFkZFJ1bGVDb21tYW5kEisKBHJ1bGUYASABKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgRydWxlIn0KGUNoYW5nZVJ1bGVTdHJhdGVneUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI3CghzdHJhdGVneRgDIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneSI0ChdDaGFuZ2VSdWxlc09yZGVyQ29tbWFuZBIZCghydWxlX2lkcxgCIAMoCVIHcnVsZUlkcyIjChFEZWxldGVSdWxlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQiXgoQQWRkQ2xhdXNlQ29tbWFuZBIXCgdydWxlX2lkGAEgASgJUgZydWxlSWQSMQoGY2xhdXNlGAIgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlUgZjbGF1c2UiPgoTRGVsZXRlQ2xhdXNlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkImUKHENoYW5nZUNsYXVzZUF0dHJpYnV0ZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIcCglhdHRyaWJ1dGUYAyABKAlSCWF0dHJpYnV0ZSKGAQobQ2hhbmdlQ2xhdXNlT3BlcmF0b3JDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPgoIb3BlcmF0b3IYAyABKA4yIi5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2UuT3BlcmF0b3JSCG9wZXJhdG9yIlYKFUFkZENsYXVzZVZhbHVlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhQKBXZhbHVlGAMgASgJUgV2YWx1ZSJZChhSZW1vdmVDbGF1c2VWYWx1ZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIUCgV2YWx1ZRgDIAEoCVIFdmFsdWUigwEKGkNoYW5nZUZpeGVkU3RyYXRlZ3lDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPAoIc3RyYXRlZ3kYAyABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5UghzdHJhdGVneSKHAQocQ2hhbmdlUm9sbG91dFN0cmF0ZWd5Q29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEj4KCHN0cmF0ZWd5GAMgASgLMiIuYnVja2V0ZWVyLmZlYXR1cmUuUm9sbG91dFN0cmF0ZWd5UghzdHJhdGVneSJMChRDcmVhdGVTZWdtZW50Q29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiIWChREZWxldGVTZWdtZW50Q29tbWFuZCIuChhDaGFuZ2VTZWdtZW50TmFtZUNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSJDCh9DaGFuZ2VTZWdtZW50RGVzY3JpcHRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiJuChVBZGRTZWdtZW50VXNlckNvbW1hbmQSGQoIdXNlcl9pZHMYASADKAlSB3VzZXJJZHMSOgoFc3RhdGUYAiABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUicQoYRGVsZXRlU2VnbWVudFVzZXJDb21tYW5kEhkKCHVzZXJfaWRzGAEgAygJUgd1c2VySWRzEjoKBXN0YXRlGAIgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlIm8KHUJ1bGtVcGxvYWRTZWdtZW50VXNlcnNDb21tYW5kEhIKBGRhdGEYASABKAxSBGRhdGESOgoFc3RhdGUYAiABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUiIAoeSW5jcmVtZW50RmVhdHVyZVZlcnNpb25Db21tYW5kIkIKE0Nsb25lRmVhdHVyZUNvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYAiABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiGgoYUmVzZXRTYW1wbGluZ1NlZWRDb21tYW5kIl0KFkFkZFByZXJlcXVpc2l0ZUNvbW1hbmQSQwoMcHJlcmVxdWlzaXRlGAEgASgLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUgxwcmVyZXF1aXNpdGUiOgoZUmVtb3ZlUHJlcmVxdWlzaXRlQ29tbWFuZBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQiaQoiQ2hhbmdlUHJlcmVxdWlzaXRlVmFyaWF0aW9uQ29tbWFuZBJDCgxwcmVyZXF1aXNpdGUYASABKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDHByZXJlcXVpc2l0ZSLTAQoYQ3JlYXRlRmxhZ1RyaWdnZXJDb21tYW5kEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBI3CgR0eXBlGAIgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YAyABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb24iGQoXUmVzZXRGbGFnVHJpZ2dlckNvbW1hbmQiRwojQ2hhbmdlRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIhoKGEVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZCIbChlEaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kIhoKGERlbGV0ZUZsYWdUcmlnZ2VyQ29tbWFuZCIfCh1VcGRhdGVGbGFnVHJpZ2dlclVzYWdlQ29tbWFuZEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsZ5Chtwcm90by9mZWF0dXJlL3NlcnZpY2UucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aG3Byb3RvL2ZlYXR1cmUvY29tbWFuZC5wcm90bxobcHJvdG8vZmVhdHVyZS9mZWF0dXJlLnByb3RvGh5wcm90by9mZWF0dXJlL2V2YWx1YXRpb24ucHJvdG8aFXByb3RvL3VzZXIvdXNlci5wcm90bxobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvGiBwcm90by9mZWF0dXJlL2ZsYWdfdHJpZ2dlci5wcm90bxodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aHHByb3RvL2ZlYXR1cmUvc3RyYXRlZ3kucHJvdG8aGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvIlAKEUdldEZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJKChJHZXRGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUiUwoSR2V0RmVhdHVyZXNSZXF1ZXN0EhAKA2lkcxgCIAMoCVIDaWRzEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACIk0KE0dldEZlYXR1cmVzUmVzcG9uc2USNgoIZmVhdHVyZXMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcyL1BQoTTGlzdEZlYXR1cmVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEhIKBHRhZ3MYAyADKAlSBHRhZ3MSSQoIb3JkZXJfYnkYBCABKA4yLi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSXgoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjUuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SHgoKbWFpbnRhaW5lchgHIAEoCVIKbWFpbnRhaW5lchI0CgdlbmFibGVkGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIHZW5hYmxlZBJBCg5oYXNfZXhwZXJpbWVudBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSDWhhc0V4cGVyaW1lbnQSJQoOc2VhcmNoX2tleXdvcmQYCiABKAlSDXNlYXJjaEtleXdvcmQSNgoIYXJjaGl2ZWQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghhcmNoaXZlZBJHChFoYXNfcHJlcmVxdWlzaXRlcxgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSEGhhc1ByZXJlcXVpc2l0ZXMSJQoOZW52aXJvbm1lbnRfaWQYDSABKAlSDWVudmlyb25tZW50SWQiVwoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMSCAoEVEFHUxAEEgsKB0VOQUJMRUQQBSIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFKBAgGEAcihwEKFExpc3RGZWF0dXJlc1Jlc3BvbnNlEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQikgEKGkxpc3RFbmFibGVkRmVhdHVyZXNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISEgoEdGFncxgDIAMoCVIEdGFncxIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAQQBSJtChtMaXN0RW5hYmxlZEZlYXR1cmVzUmVzcG9uc2USNgoIZmVhdHVyZXMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKGAQoUQ3JlYXRlRmVhdHVyZVJlcXVlc3QSQQoHY29tbWFuZBgBIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIk0KFUNyZWF0ZUZlYXR1cmVSZXNwb25zZRI0CgdmZWF0dXJlGAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIHZmVhdHVyZSLPBQoUVXBkYXRlRmVhdHVyZVJlcXVlc3QSGAoHY29tbWVudBgBIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgCIAEoCVINZW52aXJvbm1lbnRJZBIOCgJpZBgDIAEoCVICaWQSMAoEbmFtZRgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRI+CgtkZXNjcmlwdGlvbhgFIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVILZGVzY3JpcHRpb24SEgoEdGFncxgGIAMoCVIEdGFncxI0CgdlbmFibGVkGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIHZW5hYmxlZBI2CghhcmNoaXZlZBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGFyY2hpdmVkEjwKCnZhcmlhdGlvbnMYCSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSRQoNcHJlcmVxdWlzaXRlcxgKIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIzCgd0YXJnZXRzGAsgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGAwgAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgNIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSQQoNb2ZmX3ZhcmlhdGlvbhgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIMb2ZmVmFyaWF0aW9uIk0KFVVwZGF0ZUZlYXR1cmVSZXNwb25zZRI0CgdmZWF0dXJlGAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIHZmVhdHVyZSKwAQoURW5hYmxlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhcKFUVuYWJsZUZlYXR1cmVSZXNwb25zZSKyAQoVRGlzYWJsZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJCCgdjb21tYW5kGAIgASgLMiguYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiGAoWRGlzYWJsZUZlYXR1cmVSZXNwb25zZSKyAQoVQXJjaGl2ZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJCCgdjb21tYW5kGAIgASgLMiguYnVja2V0ZWVyLmZlYXR1cmUuQXJjaGl2ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiGAoWQXJjaGl2ZUZlYXR1cmVSZXNwb25zZSK2AQoXVW5hcmNoaXZlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkQKB2NvbW1hbmQYAiABKAsyKi5idWNrZXRlZXIuZmVhdHVyZS5VbmFyY2hpdmVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhoKGFVuYXJjaGl2ZUZlYXR1cmVSZXNwb25zZSKwAQoURGVsZXRlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhcKFURlbGV0ZUZlYXR1cmVSZXNwb25zZSLfAwobVXBkYXRlRmVhdHVyZURldGFpbHNSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJdChZyZW5hbWVfZmVhdHVyZV9jb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuUmVuYW1lRmVhdHVyZUNvbW1hbmRSFHJlbmFtZUZlYXR1cmVDb21tYW5kEmkKGmNoYW5nZV9kZXNjcmlwdGlvbl9jb21tYW5kGAMgASgLMisuYnVja2V0ZWVyLmZlYXR1cmUuQ2hhbmdlRGVzY3JpcHRpb25Db21tYW5kUhhjaGFuZ2VEZXNjcmlwdGlvbkNvbW1hbmQSSgoQYWRkX3RhZ19jb21tYW5kcxgEIAMoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkFkZFRhZ0NvbW1hbmRSDmFkZFRhZ0NvbW1hbmRzElMKE3JlbW92ZV90YWdfY29tbWFuZHMYBSADKAsyIy5idWNrZXRlZXIuZmVhdHVyZS5SZW1vdmVUYWdDb21tYW5kUhFyZW1vdmVUYWdDb21tYW5kcxIYCgdjb21tZW50GAcgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAggASgJUg1lbnZpcm9ubWVudElkSgQIBhAHIh4KHFVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVzcG9uc2UirwEKHlVwZGF0ZUZlYXR1cmVWYXJpYXRpb25zUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSNgoIY29tbWFuZHMYAiADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5Db21tYW5kUghjb21tYW5kcxIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIiEKH1VwZGF0ZUZlYXR1cmVWYXJpYXRpb25zUmVzcG9uc2UioQIKHVVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBI2Cghjb21tYW5kcxgCIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkNvbW1hbmRSCGNvbW1hbmRzEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQSSQoEZnJvbRgFIAEoDjI1LmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXF1ZXN0LkZyb21SBGZyb20SJQoOZW52aXJvbm1lbnRfaWQYBiABKAlSDWVudmlyb25tZW50SWQiJgoERnJvbRILCgdVTktOT1dOEAASCAoEVVNFUhABEgcKA09QUxACSgQIAxAEIiAKHlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXNwb25zZSKUAQoTQ2xvbmVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQAoHY29tbWFuZBgCIAEoCzImLmJ1Y2tldGVlci5mZWF0dXJlLkNsb25lRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiFgoUQ2xvbmVGZWF0dXJlUmVzcG9uc2UihgEKFENyZWF0ZVNlZ21lbnRSZXF1ZXN0EkEKB2NvbW1hbmQYASABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVTZWdtZW50Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJNChVDcmVhdGVTZWdtZW50UmVzcG9uc2USNAoHc2VnbWVudBgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRSB3NlZ21lbnQiUAoRR2V0U2VnbWVudFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIkoKEkdldFNlZ21lbnRSZXNwb25zZRI0CgdzZWdtZW50GAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFIHc2VnbWVudCKqBAoTTGlzdFNlZ21lbnRzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEkkKCG9yZGVyX2J5GAQgASgOMi4uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5El4KD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI1LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAYgASgJUg1zZWFyY2hLZXl3b3JkEjMKBnN0YXR1cxgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUgZzdGF0dXMSQwoQaXNfaW5fdXNlX3N0YXR1cxgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSDWlzSW5Vc2VTdGF0dXMSJQoOZW52aXJvbm1lbnRfaWQYCSABKAlSDWVudmlyb25tZW50SWQiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABSgQIAxAEIocBChRMaXN0U2VnbWVudHNSZXNwb25zZRI2CghzZWdtZW50cxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRSCHNlZ21lbnRzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IpYBChREZWxldGVTZWdtZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQQoHY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhcKFURlbGV0ZVNlZ21lbnRSZXNwb25zZSKLAQoUVXBkYXRlU2VnbWVudFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEjYKCGNvbW1hbmRzGAIgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuQ29tbWFuZFIIY29tbWFuZHMSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiFwoVVXBkYXRlU2VnbWVudFJlc3BvbnNlIpgBChVBZGRTZWdtZW50VXNlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkIKB2NvbW1hbmQYAiABKAsyKC5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlckNvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiGAoWQWRkU2VnbWVudFVzZXJSZXNwb25zZSKeAQoYRGVsZXRlU2VnbWVudFVzZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJFCgdjb21tYW5kGAIgASgLMisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFVzZXJDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhsKGURlbGV0ZVNlZ21lbnRVc2VyUmVzcG9uc2UiuAEKFUdldFNlZ21lbnRVc2VyUmVxdWVzdBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHdXNlcl9pZBgCIAEoCVIGdXNlcklkEjoKBXN0YXRlGAMgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIBBAFIkwKFkdldFNlZ21lbnRVc2VyUmVzcG9uc2USMgoEdXNlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyUgR1c2VyIuYBChdMaXN0U2VnbWVudFVzZXJzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh0KCnNlZ21lbnRfaWQYAyABKAlSCXNlZ21lbnRJZBIxCgVzdGF0ZRgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUgVzdGF0ZRIXCgd1c2VyX2lkGAUgASgJUgZ1c2VySWQSJQoOZW52aXJvbm1lbnRfaWQYByABKAlSDWVudmlyb25tZW50SWRKBAgGEAciaAoYTGlzdFNlZ21lbnRVc2Vyc1Jlc3BvbnNlEjQKBXVzZXJzGAEgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yIrcBCh1CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVxdWVzdBIdCgpzZWdtZW50X2lkGAIgASgJUglzZWdtZW50SWQSSgoHY29tbWFuZBgDIAEoCzIwLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtVcGxvYWRTZWdtZW50VXNlcnNDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIiAKHkJ1bGtVcGxvYWRTZWdtZW50VXNlcnNSZXNwb25zZSKpAQofQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzUmVxdWVzdBIdCgpzZWdtZW50X2lkGAIgASgJUglzZWdtZW50SWQSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiNgogQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzUmVzcG9uc2USEgoEZGF0YRgBIAEoDFIEZGF0YSKhAQoXRXZhbHVhdGVGZWF0dXJlc1JlcXVlc3QSKAoEdXNlchgBIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISEAoDdGFnGAMgASgJUgN0YWcSHQoKZmVhdHVyZV9pZBgEIAEoCVIJZmVhdHVyZUlkEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAhADImkKGEV2YWx1YXRlRmVhdHVyZXNSZXNwb25zZRJNChB1c2VyX2V2YWx1YXRpb25zGAEgASgLMiIuYnVja2V0ZWVyLmZlYXR1cmUuVXNlckV2YWx1YXRpb25zUg91c2VyRXZhbHVhdGlvbnMiogMKD0xpc3RUYWdzUmVxdWVzdBIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEkUKCG9yZGVyX2J5GAQgASgOMiouYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSWgoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjEuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBIlCg5lbnZpcm9ubWVudF9pZBgHIAEoCVINZW52aXJvbm1lbnRJZCI+CgdPcmRlckJ5EgsKB0RFRkFVTFQQABIGCgJJRBABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABSgQIARACIncKEExpc3RUYWdzUmVzcG9uc2USKgoEdGFncxgBIAMoCzIWLmJ1Y2tldGVlci5mZWF0dXJlLlRhZ1IEdGFncxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKzAQoYQ3JlYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0EmoKG2NyZWF0ZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgCIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZsYWdUcmlnZ2VyQ29tbWFuZFIYY3JlYXRlRmxhZ1RyaWdnZXJDb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACInAKGUNyZWF0ZUZsYWdUcmlnZ2VyUmVzcG9uc2USQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIsMBChhEZWxldGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEmoKG2RlbGV0ZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZsYWdUcmlnZ2VyQ29tbWFuZFIYZGVsZXRlRmxhZ1RyaWdnZXJDb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIhsKGURlbGV0ZUZsYWdUcmlnZ2VyUmVzcG9uc2Ui5gEKGFVwZGF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSjAEKJ2NoYW5nZV9mbGFnX3RyaWdnZXJfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzI2LmJ1Y2tldGVlci5mZWF0dXJlLkNoYW5nZUZsYWdUcmlnZ2VyRGVzY3JpcHRpb25Db21tYW5kUiNjaGFuZ2VGbGFnVHJpZ2dlckRlc2NyaXB0aW9uQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyIbChlVcGRhdGVGbGFnVHJpZ2dlclJlc3BvbnNlIsMBChhFbmFibGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEmoKG2VuYWJsZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZFIYZW5hYmxlRmxhZ1RyaWdnZXJDb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIhsKGUVuYWJsZUZsYWdUcmlnZ2VyUmVzcG9uc2UixwEKGURpc2FibGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEm0KHGRpc2FibGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kUhlkaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIhwKGkRpc2FibGVGbGFnVHJpZ2dlclJlc3BvbnNlIr8BChdSZXNldEZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSZwoacmVzZXRfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyKi5idWNrZXRlZXIuZmVhdHVyZS5SZXNldEZsYWdUcmlnZ2VyQ29tbWFuZFIXcmVzZXRGbGFnVHJpZ2dlckNvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgCEAMibwoYUmVzZXRGbGFnVHJpZ2dlclJlc3BvbnNlEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCJUChVHZXRGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIm0KFkdldEZsYWdUcmlnZ2VyUmVzcG9uc2USQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIqoDChdMaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISGwoJcGFnZV9zaXplGAQgASgFUghwYWdlU2l6ZRJNCghvcmRlcl9ieRgFIAEoDjIyLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSYgoPb3JkZXJfZGlyZWN0aW9uGAYgASgOMjkuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDmVudmlyb25tZW50X2lkGAcgASgJUg1lbnZpcm9ubWVudElkIjYKB09yZGVyQnkSCwoHREVGQVVMVBAAEg4KCkNSRUFURURfQVQQARIOCgpVUERBVEVEX0FUEAIiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABSgQIAhADIqMCChhMaXN0RmxhZ1RyaWdnZXJzUmVzcG9uc2USYwoNZmxhZ190cmlnZ2VycxgBIAMoCzI+LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXNwb25zZS5GbGFnVHJpZ2dlcldpdGhVcmxSDGZsYWdUcmlnZ2VycxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudBppChJGbGFnVHJpZ2dlcldpdGhVcmwSQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIjEKGUZsYWdUcmlnZ2VyV2ViaG9va1JlcXVlc3QSFAoFdG9rZW4YASABKAlSBXRva2VuIhwKGkZsYWdUcmlnZ2VyV2ViaG9va1Jlc3BvbnNlMoMgCg5GZWF0dXJlU2VydmljZRJbCgpHZXRGZWF0dXJlEiQuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmVhdHVyZVJlcXVlc3QaJS5idWNrZXRlZXIuZmVhdHVyZS5HZXRGZWF0dXJlUmVzcG9uc2UiABJeCgtHZXRGZWF0dXJlcxIlLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVzUmVxdWVzdBomLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVzUmVzcG9uc2UiABJhCgxMaXN0RmVhdHVyZXMSJi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0GicuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVzcG9uc2UiABJ2ChNMaXN0RW5hYmxlZEZlYXR1cmVzEi0uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEVuYWJsZWRGZWF0dXJlc1JlcXVlc3QaLi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RW5hYmxlZEZlYXR1cmVzUmVzcG9uc2UiABJkCg1DcmVhdGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGZWF0dXJlUmVzcG9uc2UiABJkCg1VcGRhdGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlUmVzcG9uc2UiABJnCg1FbmFibGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGZWF0dXJlUmVzcG9uc2UiA4gCARJqCg5EaXNhYmxlRmVhdHVyZRIoLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlUmVzcG9uc2UiA4gCARJnCg5BcmNoaXZlRmVhdHVyZRIoLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlUmVzcG9uc2UiABJtChBVbmFyY2hpdmVGZWF0dXJlEiouYnVja2V0ZWVyLmZlYXR1cmUuVW5hcmNoaXZlRmVhdHVyZVJlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5VbmFyY2hpdmVGZWF0dXJlUmVzcG9uc2UiABJkCg1EZWxldGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGZWF0dXJlUmVzcG9uc2UiABJ5ChRVcGRhdGVGZWF0dXJlRGV0YWlscxIuLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVxdWVzdBovLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVzcG9uc2UiABKCAQoXVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnMSMS5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1JlcXVlc3QaMi5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1Jlc3BvbnNlIgASfwoWVXBkYXRlRmVhdHVyZVRhcmdldGluZxIwLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXF1ZXN0GjEuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVRhcmdldGluZ1Jlc3BvbnNlIgASYQoMQ2xvbmVGZWF0dXJlEiYuYnVja2V0ZWVyLmZlYXR1cmUuQ2xvbmVGZWF0dXJlUmVxdWVzdBonLmJ1Y2tldGVlci5mZWF0dXJlLkNsb25lRmVhdHVyZVJlc3BvbnNlIgASZAoNQ3JlYXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlU2VnbWVudFJlc3BvbnNlIgASWwoKR2V0U2VnbWVudBIkLmJ1Y2tldGVlci5mZWF0dXJlLkdldFNlZ21lbnRSZXF1ZXN0GiUuYnVja2V0ZWVyLmZlYXR1cmUuR2V0U2VnbWVudFJlc3BvbnNlIgASYQoMTGlzdFNlZ21lbnRzEiYuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVxdWVzdBonLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1Jlc3BvbnNlIgASZAoNRGVsZXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFJlc3BvbnNlIgASZAoNVXBkYXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlU2VnbWVudFJlc3BvbnNlIgASagoOQWRkU2VnbWVudFVzZXISKC5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlclJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlclJlc3BvbnNlIgOIAgEScwoRRGVsZXRlU2VnbWVudFVzZXISKy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50VXNlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50VXNlclJlc3BvbnNlIgOIAgESagoOR2V0U2VnbWVudFVzZXISKC5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50VXNlclJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50VXNlclJlc3BvbnNlIgOIAgESbQoQTGlzdFNlZ21lbnRVc2VycxIqLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50VXNlcnNSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIgASfwoWQnVsa1VwbG9hZFNlZ21lbnRVc2VycxIwLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtVcGxvYWRTZWdtZW50VXNlcnNSZXF1ZXN0GjEuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIgAShQEKGEJ1bGtEb3dubG9hZFNlZ21lbnRVc2VycxIyLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QaMy5idWNrZXRlZXIuZmVhdHVyZS5CdWxrRG93bmxvYWRTZWdtZW50VXNlcnNSZXNwb25zZSIAEm0KEEV2YWx1YXRlRmVhdHVyZXMSKi5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0ZUZlYXR1cmVzUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRlRmVhdHVyZXNSZXNwb25zZSIAElUKCExpc3RUYWdzEiIuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXF1ZXN0GiMuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXNwb25zZSIAEnAKEUNyZWF0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEVVwZGF0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEUVuYWJsZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnMKEkRpc2FibGVGbGFnVHJpZ2dlchIsLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGbGFnVHJpZ2dlclJlcXVlc3QaLS5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEm0KEFJlc2V0RmxhZ1RyaWdnZXISKi5idWNrZXRlZXIuZmVhdHVyZS5SZXNldEZsYWdUcmlnZ2VyUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLlJlc2V0RmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEURlbGV0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEmcKDkdldEZsYWdUcmlnZ2VyEiguYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmxhZ1RyaWdnZXJSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmxhZ1RyaWdnZXJSZXNwb25zZSIAEm0KEExpc3RGbGFnVHJpZ2dlcnMSKi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXNwb25zZSIAEpQBChJGbGFnVHJpZ2dlcldlYmhvb2sSLC5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlcldlYmhvb2tSZXF1ZXN0Gi0uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJXZWJob29rUmVzcG9uc2UiIYLT5JMCGyIZL3dlYmhvb2svdHJpZ2dlcnMve3Rva2VufUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCq4CChVwcm90by9wdXNoL3B1c2gucHJvdG8SDmJ1Y2tldGVlci5wdXNoIswBCgRQdXNoEg4KAmlkGAEgASgJUgJpZBISCgR0YWdzGAMgAygJUgR0YWdzEhgKB2RlbGV0ZWQYBCABKAhSB2RlbGV0ZWQSEgoEbmFtZRgFIAEoCVIEbmFtZRIdCgpjcmVhdGVkX2F0GAYgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgHIAEoA1IJdXBkYXRlZEF0Ei4KE2ZjbV9zZXJ2aWNlX2FjY291bnQYCCABKAlSEWZjbVNlcnZpY2VBY2NvdW50SgQIAhADQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9wdXNoYgZwcm90bzMK6gIKGHByb3RvL3B1c2gvY29tbWFuZC5wcm90bxIOYnVja2V0ZWVyLnB1c2gicQoRQ3JlYXRlUHVzaENvbW1hbmQSEgoEdGFncxgCIAMoCVIEdGFncxISCgRuYW1lGAMgASgJUgRuYW1lEi4KE2ZjbV9zZXJ2aWNlX2FjY291bnQYBCABKAxSEWZjbVNlcnZpY2VBY2NvdW50SgQIARACIigKEkFkZFB1c2hUYWdzQ29tbWFuZBISCgR0YWdzGAEgAygJUgR0YWdzIisKFURlbGV0ZVB1c2hUYWdzQ29tbWFuZBISCgR0YWdzGAEgAygJUgR0YWdzIhMKEURlbGV0ZVB1c2hDb21tYW5kIicKEVJlbmFtZVB1c2hDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWVCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3B1c2hiBnByb3RvMwrIEQoYcHJvdG8vcHVzaC9zZXJ2aWNlLnByb3RvEg5idWNrZXRlZXIucHVzaBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhVwcm90by9wdXNoL3B1c2gucHJvdG8aGHByb3RvL3B1c2gvY29tbWFuZC5wcm90byLZAQoRQ3JlYXRlUHVzaFJlcXVlc3QSPwoHY29tbWFuZBgCIAEoCzIhLmJ1Y2tldGVlci5wdXNoLkNyZWF0ZVB1c2hDb21tYW5kQgIYAVIHY29tbWFuZBISCgR0YWdzGAMgAygJUgR0YWdzEhIKBG5hbWUYBCABKAlSBG5hbWUSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgFIAEoDFIRZmNtU2VydmljZUFjY291bnQSJQoOZW52aXJvbm1lbnRfaWQYBiABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiPgoSQ3JlYXRlUHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoIqQDChFMaXN0UHVzaGVzUmVxdWVzdBIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEkQKCG9yZGVyX2J5GAQgASgOMikuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJZCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yMC5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSJQoOZW52aXJvbm1lbnRfaWQYByABKAlSDWVudmlyb25tZW50SWQiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABSgQIARACInsKEkxpc3RQdXNoZXNSZXNwb25zZRIsCgZwdXNoZXMYASADKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgZwdXNoZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQijQEKEURlbGV0ZVB1c2hSZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBI7Cgdjb21tYW5kGAMgASgLMiEuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaENvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiFAoSRGVsZXRlUHVzaFJlc3BvbnNlIqwDChFVcGRhdGVQdXNoUmVxdWVzdBIOCgJpZBgCIAEoCVICaWQSWQoVYWRkX3B1c2hfdGFnc19jb21tYW5kGAMgASgLMiIuYnVja2V0ZWVyLnB1c2guQWRkUHVzaFRhZ3NDb21tYW5kQgIYAVISYWRkUHVzaFRhZ3NDb21tYW5kEmIKGGRlbGV0ZV9wdXNoX3RhZ3NfY29tbWFuZBgEIAEoCzIlLmJ1Y2tldGVlci5wdXNoLkRlbGV0ZVB1c2hUYWdzQ29tbWFuZEICGAFSFWRlbGV0ZVB1c2hUYWdzQ29tbWFuZBJVChNyZW5hbWVfcHVzaF9jb21tYW5kGAUgASgLMiEuYnVja2V0ZWVyLnB1c2guUmVuYW1lUHVzaENvbW1hbmRCAhgBUhFyZW5hbWVQdXNoQ29tbWFuZBISCgR0YWdzGAYgAygJUgR0YWdzEjAKBG5hbWUYByABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSBG5hbWUSJQoOZW52aXJvbm1lbnRfaWQYCCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiPgoSVXBkYXRlUHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoIkcKDkdldFB1c2hSZXF1ZXN0EiUKDmVudmlyb25tZW50X2lkGAEgASgJUg1lbnZpcm9ubWVudElkEg4KAmlkGAIgASgJUgJpZCI7Cg9HZXRQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2gytwMKC1B1c2hTZXJ2aWNlElUKCkxpc3RQdXNoZXMSIS5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdBoiLmJ1Y2tldGVlci5wdXNoLkxpc3RQdXNoZXNSZXNwb25zZSIAElUKCkNyZWF0ZVB1c2gSIS5idWNrZXRlZXIucHVzaC5DcmVhdGVQdXNoUmVxdWVzdBoiLmJ1Y2tldGVlci5wdXNoLkNyZWF0ZVB1c2hSZXNwb25zZSIAElUKCkRlbGV0ZVB1c2gSIS5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoUmVxdWVzdBoiLmJ1Y2tldGVlci5wdXNoLkRlbGV0ZVB1c2hSZXNwb25zZSIAElUKClVwZGF0ZVB1c2gSIS5idWNrZXRlZXIucHVzaC5VcGRhdGVQdXNoUmVxdWVzdBoiLmJ1Y2tldGVlci5wdXNoLlVwZGF0ZVB1c2hSZXNwb25zZSIAEkwKB0dldFB1c2gSHi5idWNrZXRlZXIucHVzaC5HZXRQdXNoUmVxdWVzdBofLmJ1Y2tldGVlci5wdXNoLkdldFB1c2hSZXNwb25zZSIAQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9wdXNoYgZwcm90bzMK+wEKHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIjoKCER1cmF0aW9uEhgKB3NlY29uZHMYASABKANSB3NlY29uZHMSFAoFbmFub3MYAiABKAVSBW5hbm9zQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1EdXJhdGlvblByb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2R1cmF0aW9ucGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwrGNAoecHJvdG8vZXZlbnQvY2xpZW50L2V2ZW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnQuY2xpZW50Ghlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxoacHJvdG8vZmVhdHVyZS9yZWFzb24ucHJvdG8aFXByb3RvL3VzZXIvdXNlci5wcm90byJwCgVFdmVudBIOCgJpZBgBIAEoCVICaWQSKgoFZXZlbnQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgVldmVudBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCKSBAoPRXZhbHVhdGlvbkV2ZW50EhwKCXRpbWVzdGFtcBgBIAEoA1IJdGltZXN0YW1wEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhcKB3VzZXJfaWQYBCABKAlSBnVzZXJJZBIhCgx2YXJpYXRpb25faWQYBSABKAlSC3ZhcmlhdGlvbklkEigKBHVzZXIYBiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEjEKBnJlYXNvbhgHIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlJlYXNvblIGcmVhc29uEhAKA3RhZxgIIAEoCVIDdGFnEj0KCXNvdXJjZV9pZBgJIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAogASgJUgpzZGtWZXJzaW9uElEKCG1ldGFkYXRhGAsgAygLMjUuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5FdmFsdWF0aW9uRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBItwDCglHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhcKB3VzZXJfaWQYAyABKAlSBnVzZXJJZBIUCgV2YWx1ZRgEIAEoAVIFdmFsdWUSKAoEdXNlchgFIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISQwoLZXZhbHVhdGlvbnMYBiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uQgIYAVILZXZhbHVhdGlvbnMSEAoDdGFnGAcgASgJUgN0YWcSPQoJc291cmNlX2lkGAggASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YCSABKAlSCnNka1ZlcnNpb24SSwoIbWV0YWRhdGEYCiADKAsyLy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdvYWxFdmVudC5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRo7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEixQIKDE1ldHJpY3NFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIqCgVldmVudBgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBWV2ZW50Ej0KCXNvdXJjZV9pZBgDIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAQgASgJUgpzZGtWZXJzaW9uEk4KCG1ldGFkYXRhGAUgAygLMjIuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5NZXRyaWNzRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvYBCiBHZXRFdmFsdWF0aW9uTGF0ZW5jeU1ldHJpY3NFdmVudBJcCgZsYWJlbHMYASADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25MYXRlbmN5TWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSNQoIZHVyYXRpb24YAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SCGR1cmF0aW9uGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAE6AhgBItYBCh1HZXRFdmFsdWF0aW9uU2l6ZU1ldHJpY3NFdmVudBJZCgZsYWJlbHMYASADKAsyQS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAIgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBOgIYASK5AgoTTGF0ZW5jeU1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJPCgZsYWJlbHMYAiADKAsyNy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkxhdGVuY3lNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxI5CghkdXJhdGlvbhgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkICGAFSCGR1cmF0aW9uEiUKDmxhdGVuY3lfc2Vjb25kGAQgASgBUg1sYXRlbmN5U2Vjb25kGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi7gEKEFNpemVNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSTAoGbGFiZWxzGAIgAygLMjQuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAMgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIjUKHVRpbWVvdXRFcnJvckNvdW50TWV0cmljc0V2ZW50EhAKA3RhZxgBIAEoCVIDdGFnOgIYASI2Ch5JbnRlcm5hbEVycm9yQ291bnRNZXRyaWNzRXZlbnQSEAoDdGFnGAEgASgJUgN0YWc6AhgBIvEBCiBSZWRpcmVjdGlvblJlcXVlc3RFeGNlcHRpb25FdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJcCgZsYWJlbHMYAiADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlJlZGlyZWN0aW9uUmVxdWVzdEV4Y2VwdGlvbkV2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLnAQobQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElcKBmxhYmVscxgCIAMoCzI/LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLrAQodVW5hdXRob3JpemVkRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWQoGbGFiZWxzGAIgAygLMkEuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5VbmF1dGhvcml6ZWRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi5QEKGkZvcmJpZGRlbkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElYKBmxhYmVscxgCIAMoCzI+LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuRm9yYmlkZGVuRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlOb3RGb3VuZEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuTm90Rm91bmRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6wEKHVBheWxvYWRUb29MYXJnZUV4Y2VwdGlvbkV2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElkKBmxhYmVscxgCIAMoCzJBLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuUGF5bG9hZFRvb0xhcmdlRXhjZXB0aW9uRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvkBCiRDbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSYAoGbGFiZWxzGAIgAygLMkguYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5DbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIu8BCh9JbnRlcm5hbFNlcnZlckVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElsKBmxhYmVscxgCIAMoCzJDLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxTZXJ2ZXJFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi9wEKI1NlcnZpY2VVbmF2YWlsYWJsZUVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkEl8KBmxhYmVscxgCIAMoCzJHLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU2VydmljZVVuYXZhaWxhYmxlRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuEBChhUaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVAoGbGFiZWxzGAIgAygLMjwuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5UaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlJbnRlcm5hbEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4QEKGE5ldHdvcmtFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJUCgZsYWJlbHMYAiADKAsyPC5idWNrZXRlZXIuZXZlbnQuY2xpZW50Lk5ldHdvcmtFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6QEKHEludGVybmFsU2RrRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWAoGbGFiZWxzGAIgAygLMkAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5JbnRlcm5hbFNka0Vycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLhAQoYVW5rbm93bkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElQKBmxhYmVscxgCIAMoCzI8LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuVW5rbm93bkVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLFAQoIT3BzRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgDIAEoBVIOZmVhdHVyZVZlcnNpb24SIQoMdmFyaWF0aW9uX2lkGAQgASgJUgt2YXJpYXRpb25JZBIXCgdnb2FsX2lkGAUgASgJUgZnb2FsSWQSFwoHdXNlcl9pZBgGIAEoCVIGdXNlcklkIlwKDVVzZXJHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhQKBXZhbHVlGAMgASgBUgV2YWx1ZSpwCghTb3VyY2VJZBILCgdVTktOT1dOEAASCwoHQU5EUk9JRBABEgcKA0lPUxACEgsKA1dFQhADGgIIARINCglHT19TRVJWRVIQBRIPCgtOT0RFX1NFUlZFUhAGEg4KCkpBVkFTQ1JJUFQQByIECAQQBCqbAQoFQXBpSWQSDwoLVU5LTk9XTl9BUEkQABISCg5HRVRfRVZBTFVBVElPThABEhMKD0dFVF9FVkFMVUFUSU9OUxACEhMKD1JFR0lTVEVSX0VWRU5UUxADEhUKEUdFVF9GRUFUVVJFX0ZMQUdTEAQSFQoRR0VUX1NFR01FTlRfVVNFUlMQBRIVChFTREtfR0VUX1ZBUklBVElPThBkQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudC9jbGllbnRiBnByb3RvMwqMWgobcHJvdG8vZ2F0ZXdheS9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuZ2F0ZXdheRocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvGhVwcm90by91c2VyL3VzZXIucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxobcHJvdG8vZmVhdHVyZS9mZWF0dXJlLnByb3RvGhtwcm90by9mZWF0dXJlL3NlcnZpY2UucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhpwcm90by9mZWF0dXJlL3RhcmdldC5wcm90bxobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvGhVwcm90by9wdXNoL3B1c2gucHJvdG8aGHByb3RvL3B1c2gvc2VydmljZS5wcm90bxoecHJvdG8vZXZlbnQvY2xpZW50L2V2ZW50LnByb3RvIg0KC1BpbmdSZXF1ZXN0IiIKDFBpbmdSZXNwb25zZRISCgR0aW1lGAEgASgDUgR0aW1lItcBChZHZXRGZWF0dXJlRmxhZ3NSZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKEGZlYXR1cmVfZmxhZ3NfaWQYAiABKAlSDmZlYXR1cmVGbGFnc0lkEiEKDHJlcXVlc3RlZF9hdBgDIAEoA1ILcmVxdWVzdGVkQXQSPQoJc291cmNlX2lkGAQgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YBSABKAlSCnNka1ZlcnNpb24i/AEKF0dldEZlYXR1cmVGbGFnc1Jlc3BvbnNlEigKEGZlYXR1cmVfZmxhZ3NfaWQYASABKAlSDmZlYXR1cmVGbGFnc0lkEjYKCGZlYXR1cmVzGAIgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSOQoZYXJjaGl2ZWRfZmVhdHVyZV9mbGFnX2lkcxgDIAMoCVIWYXJjaGl2ZWRGZWF0dXJlRmxhZ0lkcxIhCgxyZXF1ZXN0ZWRfYXQYBCABKANSC3JlcXVlc3RlZEF0EiEKDGZvcmNlX3VwZGF0ZRgFIAEoCFILZm9yY2VVcGRhdGUivAEKFkdldFNlZ21lbnRVc2Vyc1JlcXVlc3QSHwoLc2VnbWVudF9pZHMYASADKAlSCnNlZ21lbnRJZHMSIQoMcmVxdWVzdGVkX2F0GAIgASgDUgtyZXF1ZXN0ZWRBdBI9Cglzb3VyY2VfaWQYAyABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIfCgtzZGtfdmVyc2lvbhgEIAEoCVIKc2RrVmVyc2lvbiLVAQoXR2V0U2VnbWVudFVzZXJzUmVzcG9uc2USRAoNc2VnbWVudF91c2VycxgBIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2Vyc1IMc2VnbWVudFVzZXJzEi4KE2RlbGV0ZWRfc2VnbWVudF9pZHMYAiADKAlSEWRlbGV0ZWRTZWdtZW50SWRzEiEKDHJlcXVlc3RlZF9hdBgDIAEoA1ILcmVxdWVzdGVkQXQSIQoMZm9yY2VfdXBkYXRlGAQgASgIUgtmb3JjZVVwZGF0ZSL6AwoVR2V0RXZhbHVhdGlvbnNSZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKBHVzZXIYAiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEi4KE3VzZXJfZXZhbHVhdGlvbnNfaWQYAyABKAlSEXVzZXJFdmFsdWF0aW9uc0lkEiEKCmZlYXR1cmVfaWQYBCABKAlCAhgBUglmZWF0dXJlSWQSPQoJc291cmNlX2lkGAUgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSfAoZdXNlcl9ldmFsdWF0aW9uX2NvbmRpdGlvbhgGIAEoCzJALmJ1Y2tldGVlci5nYXRld2F5LkdldEV2YWx1YXRpb25zUmVxdWVzdC5Vc2VyRXZhbHVhdGlvbkNvbmRpdGlvblIXdXNlckV2YWx1YXRpb25Db25kaXRpb24SHwoLc2RrX3ZlcnNpb24YByABKAlSCnNka1ZlcnNpb24adAoXVXNlckV2YWx1YXRpb25Db25kaXRpb24SIQoMZXZhbHVhdGVkX2F0GAEgASgDUgtldmFsdWF0ZWRBdBI2Chd1c2VyX2F0dHJpYnV0ZXNfdXBkYXRlZBgCIAEoCFIVdXNlckF0dHJpYnV0ZXNVcGRhdGVkIs4BChZHZXRFdmFsdWF0aW9uc1Jlc3BvbnNlEj4KBXN0YXRlGAEgASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuVXNlckV2YWx1YXRpb25zLlN0YXRlUgVzdGF0ZRJECgtldmFsdWF0aW9ucxgCIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlVzZXJFdmFsdWF0aW9uc1ILZXZhbHVhdGlvbnMSLgoTdXNlcl9ldmFsdWF0aW9uc19pZBgDIAEoCVIRdXNlckV2YWx1YXRpb25zSWQi0QEKFEdldEV2YWx1YXRpb25SZXF1ZXN0EhAKA3RhZxgBIAEoCVIDdGFnEigKBHVzZXIYAiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEh0KCmZlYXR1cmVfaWQYAyABKAlSCWZlYXR1cmVJZBI9Cglzb3VyY2VfaWQYBCABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIfCgtzZGtfdmVyc2lvbhgFIAEoCVIKc2RrVmVyc2lvbiJWChVHZXRFdmFsdWF0aW9uUmVzcG9uc2USPQoKZXZhbHVhdGlvbhgBIAEoCzIdLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRpb25SCmV2YWx1YXRpb24irgEKFVJlZ2lzdGVyRXZlbnRzUmVxdWVzdBI1CgZldmVudHMYASADKAsyHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkV2ZW50UgZldmVudHMSHwoLc2RrX3ZlcnNpb24YAiABKAlSCnNka1ZlcnNpb24SPQoJc291cmNlX2lkGAMgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQilAIKFlJlZ2lzdGVyRXZlbnRzUmVzcG9uc2USTQoGZXJyb3JzGAEgAygLMjUuYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXNwb25zZS5FcnJvcnNFbnRyeVIGZXJyb3JzGj8KBUVycm9yEhwKCXJldHJpYWJsZRgBIAEoCFIJcmV0cmlhYmxlEhgKB21lc3NhZ2UYAiABKAlSB21lc3NhZ2UaagoLRXJyb3JzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSRQoFdmFsdWUYAiABKAsyLy5idWNrZXRlZXIuZ2F0ZXdheS5SZWdpc3RlckV2ZW50c1Jlc3BvbnNlLkVycm9yUgV2YWx1ZToCOAEinAEKDFRyYWNrUmVxdWVzdBIWCgZhcGlrZXkYASABKAlSBmFwaWtleRIWCgZ1c2VyaWQYAiABKAlSBnVzZXJpZBIWCgZnb2FsaWQYAyABKAlSBmdvYWxpZBIQCgN0YWcYBCABKAlSA3RhZxIcCgl0aW1lc3RhbXAYBSABKANSCXRpbWVzdGFtcBIUCgV2YWx1ZRgGIAEoAVIFdmFsdWUiDwoNVHJhY2tSZXNwb25zZSLdAgoUQ3JlYXRlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEk8KDnZhcmlhdGlvbl90eXBlGAQgASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZS5WYXJpYXRpb25UeXBlUg12YXJpYXRpb25UeXBlEjwKCnZhcmlhdGlvbnMYBSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSEgoEdGFncxgGIAMoCVIEdGFncxIsChJvbl92YXJpYXRpb25faW5kZXgYByABKAVSEG9uVmFyaWF0aW9uSW5kZXgSLgoTb2ZmX3ZhcmlhdGlvbl9pbmRleBgIIAEoBVIRb2ZmVmFyaWF0aW9uSW5kZXgiTQoVQ3JlYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIiMKEUdldEZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCJKChJHZXRGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUi9QEKE0xpc3RGZWF0dXJlc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJJCghvcmRlcl9ieRgDIAEoDjIuLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJeCg9vcmRlcl9kaXJlY3Rpb24YBCABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbiJOChRMaXN0RmVhdHVyZXNSZXNwb25zZRI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIqgFChRVcGRhdGVGZWF0dXJlUmVxdWVzdBIYCgdjb21tZW50GAEgASgJUgdjb21tZW50Eg4KAmlkGAIgASgJUgJpZBIwCgRuYW1lGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgRuYW1lEj4KC2Rlc2NyaXB0aW9uGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgtkZXNjcmlwdGlvbhISCgR0YWdzGAUgAygJUgR0YWdzEjQKB2VuYWJsZWQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUgdlbmFibGVkEjYKCGFyY2hpdmVkGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSPAoKdmFyaWF0aW9ucxgIIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxJFCg1wcmVyZXF1aXNpdGVzGAkgAygLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUg1wcmVyZXF1aXNpdGVzEjMKB3RhcmdldHMYCiADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5UYXJnZXRSB3RhcmdldHMSLQoFcnVsZXMYCyADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxJGChBkZWZhdWx0X3N0cmF0ZWd5GAwgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSD2RlZmF1bHRTdHJhdGVneRJBCg1vZmZfdmFyaWF0aW9uGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgxvZmZWYXJpYXRpb24iTQoVVXBkYXRlRmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIpACChFMaXN0UHVzaGVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEkQKCG9yZGVyX2J5GAMgASgOMikuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJZCg9vcmRlcl9kaXJlY3Rpb24YBCABKA4yMC5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBSABKAlSDXNlYXJjaEtleXdvcmQiewoSTGlzdFB1c2hlc1Jlc3BvbnNlEiwKBnB1c2hlcxgBIAMoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBnB1c2hlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCJrChFDcmVhdGVQdXNoUmVxdWVzdBISCgR0YWdzGAEgAygJUgR0YWdzEhIKBG5hbWUYAiABKAlSBG5hbWUSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgDIAEoDFIRZmNtU2VydmljZUFjY291bnQiPgoSQ3JlYXRlUHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoIiAKDkdldFB1c2hSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCI7Cg9HZXRQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2gigAIKEVVwZGF0ZVB1c2hSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBISCgR0YWdzGAIgAygJUgR0YWdzEjAKBG5hbWUYAyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSBG5hbWUSlAEKB2RlbGV0ZWQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlQl6SQVsqB2RlbGV0ZWQyUGlmIHRydWUsIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiB3aWxsIGJlIGRlbGV0ZWQgYW5kIG90aGVyIGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQuUgdkZWxldGVkIj4KElVwZGF0ZVB1c2hSZXNwb25zZRIoCgRwdXNoGAEgASgLMhQuYnVja2V0ZWVyLnB1c2guUHVzaFIEcHVzaDKSJwoHR2F0ZXdheRL0AgoOR2V0RXZhbHVhdGlvbnMSKC5idWNrZXRlZXIuZ2F0ZXdheS5HZXRFdmFsdWF0aW9uc1JlcXVlc3QaKS5idWNrZXRlZXIuZ2F0ZXdheS5HZXRFdmFsdWF0aW9uc1Jlc3BvbnNlIowCkkHtAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIPR2V0IEV2YWx1YXRpb25zGmFHZXRzIGFsbCB0aGUgZXZhbHVhdGlvbnMgZm9yIGEgc3BlY2lmaWMgdXNlci4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgQ0xJRU5UYCBBUEkgS2V5IHJvbGUuKhthcGkuZ2F0ZXdheS5nZXRfZXZhbHVhdGlvbnNyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCFSIQL2dldF9ldmFsdWF0aW9uczoBKhLuAgoNR2V0RXZhbHVhdGlvbhInLmJ1Y2tldGVlci5nYXRld2F5LkdldEV2YWx1YXRpb25SZXF1ZXN0GiguYnVja2V0ZWVyLmdhdGV3YXkuR2V0RXZhbHVhdGlvblJlc3BvbnNlIokCkkHrAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIOR2V0IEV2YWx1YXRpb24aYUdldHMgYSBzaW5nbGUgZXZhbHVhdGlvbiBmb3IgYSBzcGVjaWZpYyB1c2VyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBDTElFTlRgIEFQSSBLZXkgcm9sZS4qGmFwaS5nYXRld2F5LmdldF9ldmFsdWF0aW9uckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhQiDy9nZXRfZXZhbHVhdGlvbjoBKhL6AgoPR2V0RmVhdHVyZUZsYWdzEikuYnVja2V0ZWVyLmdhdGV3YXkuR2V0RmVhdHVyZUZsYWdzUmVxdWVzdBoqLmJ1Y2tldGVlci5nYXRld2F5LkdldEZlYXR1cmVGbGFnc1Jlc3BvbnNlIo8CkkHuAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIRR2V0IEZlYXR1cmUgRmxhZ3MaXkdldHMgYWxsIHRoZSBmZWF0dXJlIGZsYWcgaW4gYW4gZW52aXJvbm1lbnQuIFRvIGNhbGwgdGhpcyBBUEksIGl0IG5lZWRzIGBTRVJWRVJgIEFQSSBLZXkgcm9sZS4qHWFwaS5nYXRld2F5LmdldF9mZWF0dXJlX2ZsYWdzckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhciEi9nZXRfZmVhdHVyZV9mbGFnczoBKhL7AgoPR2V0U2VnbWVudFVzZXJzEikuYnVja2V0ZWVyLmdhdGV3YXkuR2V0U2VnbWVudFVzZXJzUmVxdWVzdBoqLmJ1Y2tldGVlci5nYXRld2F5LkdldFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIpACkkHvAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIRR2V0IFNlZ21lbnQgVXNlcnMaX0dldHMgYWxsIHRoZSBzZWdtZW50IHVzZXJzIGluIGFuIGVudmlyb25tZW50LiBUbyBjYWxsIHRoaXMgQVBJLCBpdCBuZWVkcyBgU0VSVkVSYCBBUEkgS2V5IHJvbGUuKh1hcGkuZ2F0ZXdheS5nZXRfc2VnbWVudF91c2Vyc3JCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwIXIhIvZ2V0X3NlZ21lbnRfdXNlcnM6ASoS+QIKDlJlZ2lzdGVyRXZlbnRzEiguYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXF1ZXN0GikuYnVja2V0ZWVyLmdhdGV3YXkuUmVnaXN0ZXJFdmVudHNSZXNwb25zZSKRApJB8gEKFkNsaWVudCBhbmQgU2VydmVyIFNES3MSD1JlZ2lzdGVyIEV2ZW50cxpmVGhpcyBBUEkgaXMgZm9yIHJlcG9ydGluZyBHb2FsIGV2ZW50cy4gVG8gY2FsbCB0aGlzIEFQSSwgaXQgbmVlZHMgYSBgQ0xJRU5UYCBvciBgU0VSVkVSYCBBUEkgS2V5IHJvbGUuKhthcGkuZ2F0ZXdheS5yZWdpc3Rlcl9ldmVudHNyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCFSIQL3JlZ2lzdGVyX2V2ZW50czoBKhKPAgoFVHJhY2sSHy5idWNrZXRlZXIuZ2F0ZXdheS5UcmFja1JlcXVlc3QaIC5idWNrZXRlZXIuZ2F0ZXdheS5UcmFja1Jlc3BvbnNlIsIBkkGwAQoWQ2xpZW50IGFuZCBTZXJ2ZXIgU0RLcxIFVHJhY2safFRoaXMgQVBJIGlzIGFuIGludGVncmF0aW9uIGZvciBHb29nbGUgVGFiIE1hbmFnZXIgdG8gcmVwb3J0IEdvYWwgZXZlbnRzLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBDTElFTlRgIEFQSSBLZXkgcm9sZS4qEWFwaS5nYXRld2F5LnRyYWNrgtPkkwIIEgYvdHJhY2sS1QIKDUNyZWF0ZUZlYXR1cmUSJy5idWNrZXRlZXIuZ2F0ZXdheS5DcmVhdGVGZWF0dXJlUmVxdWVzdBooLmJ1Y2tldGVlci5nYXRld2F5LkNyZWF0ZUZlYXR1cmVSZXNwb25zZSLwAZJB1QEKDUZlYXR1cmUgRmxhZ3MSBkNyZWF0ZRpYQ3JlYXRlIGEgbmV3IEZlYXR1cmUgRmxhZy4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgV1JJVEVgIG9yIGBBRE1JTmAgQVBJIEtleSByb2xlLioeYXBpLmdhdGV3YXkudjEuZmVhdHVyZXMuY3JlYXRlckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAhEiDC92MS9mZWF0dXJlczoBKhK1AgoKR2V0RmVhdHVyZRIkLmJ1Y2tldGVlci5nYXRld2F5LkdldEZlYXR1cmVSZXF1ZXN0GiUuYnVja2V0ZWVyLmdhdGV3YXkuR2V0RmVhdHVyZVJlc3BvbnNlItkBkkG8AQoNRmVhdHVyZSBGbGFncxIDR2V0GkVHZXQgYSBGZWF0dXJlIEZsYWcuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFJFQURgIEFQSSBLZXkgcm9sZS4qG2FwaS5nYXRld2F5LnYxLmZlYXR1cmVzLmdldHJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwITEhEvdjEvZmVhdHVyZXMve2lkfRK4AgoMTGlzdEZlYXR1cmVzEiYuYnVja2V0ZWVyLmdhdGV3YXkuTGlzdEZlYXR1cmVzUmVxdWVzdBonLmJ1Y2tldGVlci5nYXRld2F5Lkxpc3RGZWF0dXJlc1Jlc3BvbnNlItYBkkG+AQoNRmVhdHVyZSBGbGFncxIETGlzdBpFTGlzdCBGZWF0dXJlIEZsYWdzLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBSRUFEYCBBUEkgS2V5IHJvbGUuKhxhcGkuZ2F0ZXdheS52MS5mZWF0dXJlcy5saXN0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAg4SDC92MS9mZWF0dXJlcxLWAgoNVXBkYXRlRmVhdHVyZRInLmJ1Y2tldGVlci5nYXRld2F5LlVwZGF0ZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmdhdGV3YXkuVXBkYXRlRmVhdHVyZVJlc3BvbnNlIvEBkkHRAQoNRmVhdHVyZSBGbGFncxIGVXBkYXRlGlRVcGRhdGUgYSBGZWF0dXJlIEZsYWcuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFdSSVRFYCBvciBgQURNSU5gIEFQSSBLZXkgcm9sZS4qHmFwaS5nYXRld2F5LnYxLmZlYXR1cmVzLnVwZGF0ZXJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwIWMhEvdjEvZmVhdHVyZXMve2lkfToBKhLuAQoEUGluZxIeLmJ1Y2tldGVlci5nYXRld2F5LlBpbmdSZXF1ZXN0Gh8uYnVja2V0ZWVyLmdhdGV3YXkuUGluZ1Jlc3BvbnNlIqQBkkGTAQoHVXRpbGl0eRIEUGluZxoqUGluZyB0aGUgc2VydmVyIHRvIGNoZWNrIGl0cyBhdmFpbGFiaWxpdHkuKhBhcGkuZ2F0ZXdheS5waW5nYgByQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCBxIFL3BpbmcSoAIKCkxpc3RQdXNoZXMSJC5idWNrZXRlZXIuZ2F0ZXdheS5MaXN0UHVzaGVzUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5Lkxpc3RQdXNoZXNSZXNwb25zZSLEAZJBrgEKBlB1c2hlcxIETGlzdBo+TGlzdCBwdXNoZXMuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGEgYFJFQURgIEFQSSBLZXkgcm9sZS4qGmFwaS5nYXRld2F5LnYxLnB1c2hlcy5saXN0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAgwSCi92MS9wdXNoZXMS8wIKCkNyZWF0ZVB1c2gSJC5idWNrZXRlZXIuZ2F0ZXdheS5DcmVhdGVQdXNoUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5LkNyZWF0ZVB1c2hSZXNwb25zZSKXApJBgAIKBlB1c2hlcxIGQ3JlYXRlGosBQ3JlYXRlIGEgbmV3IFB1c2ggbm90aWZpY2F0aW9uIHRocm91Z2ggR29vZ2xlIEZpcmViYXNlIENsb3VkIE1lc3NhZ2luZyAoRkNNKS4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYSBgV1JJVEVgIG9yIGBBRE1JTmAgQVBJIEtleSByb2xlLiocYXBpLmdhdGV3YXkudjEucHVzaGVzLmNyZWF0ZXJCCkAKDWF1dGhvcml6YXRpb24SK1RoZSBBUEkgS2V5IGdlbmVyYXRlZCBvbiB0aGUgQWRtaW4gQ29uc29sZS4YASgBgtPkkwINIggvdjEvcHVzaDoBKhKkAgoHR2V0UHVzaBIhLmJ1Y2tldGVlci5nYXRld2F5LkdldFB1c2hSZXF1ZXN0GiIuYnVja2V0ZWVyLmdhdGV3YXkuR2V0UHVzaFJlc3BvbnNlItEBkkG4AQoGUHVzaGVzEgNHZXQaSkdldCBhIFB1c2ggbm90aWZpY2F0aW9uLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhIGBSRUFEYCBBUEkgS2V5IHJvbGUuKhlhcGkuZ2F0ZXdheS52MS5wdXNoZXMuZ2V0ckIKQAoNYXV0aG9yaXphdGlvbhIrVGhlIEFQSSBLZXkgZ2VuZXJhdGVkIG9uIHRoZSBBZG1pbiBDb25zb2xlLhgBKAGC0+STAg8SDS92MS9wdXNoL3tpZH0SwAIKClVwZGF0ZVB1c2gSJC5idWNrZXRlZXIuZ2F0ZXdheS5VcGRhdGVQdXNoUmVxdWVzdBolLmJ1Y2tldGVlci5nYXRld2F5LlVwZGF0ZVB1c2hSZXNwb25zZSLkAZJByAEKBlB1c2hlcxIGVXBkYXRlGlRVcGRhdGUgYSBQdXNoIG5vdGlmaWNhdGlvbi4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IGEgYFdSSVRFYCBvciBgQURNSU5gIEFQSSBLZXkgcm9sZS4qHGFwaS5nYXRld2F5LnYxLnB1c2hlcy51cGRhdGVyQgpACg1hdXRob3JpemF0aW9uEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGAEoAYLT5JMCEjINL3YxL3B1c2gve2lkfToBKkKEBlovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2dhdGV3YXmSQc8FEiAKGUJ1Y2tldGVlciBHYXRld2F5IFNlcnZpY2UyAzEuMBoIRU5EUE9JTlQqAQIyEGFwcGxpY2F0aW9uL2pzb246EGFwcGxpY2F0aW9uL2pzb25StAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1SsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9UqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfVpQCk4KCkFwaUtleUF1dGgSQAgCEitUaGUgQVBJIEtleSBnZW5lcmF0ZWQgb24gdGhlIEFkbWluIENvbnNvbGUuGg1hdXRob3JpemF0aW9uIAJiEAoOCgpBcGlLZXlBdXRoEgBiBnByb3RvMw==" config: port: 9000 adminPort: 8001 diff --git a/manifests/bucketeer/charts/web/values.yaml b/manifests/bucketeer/charts/web/values.yaml index caa665a5e0..e7710b3c5d 100644 --- a/manifests/bucketeer/charts/web/values.yaml +++ b/manifests/bucketeer/charts/web/values.yaml @@ -102,18 +102,18 @@ envoy: tag: v1.31.0 pullPolicy: IfNotPresent lbPolicy: LEAST_REQUEST - eventcounterDescriptor: CrEBCiJwcm90by9ldmVudGNvdW50ZXIvaGlzdG9ncmFtLnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyIjMKCUhpc3RvZ3JhbRISCgRoaXN0GAEgAygDUgRoaXN0EhIKBGJpbnMYAiADKAFSBGJpbnNCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCqADCi1wcm90by9ldmVudGNvdW50ZXIvZGlzdHJpYnV0aW9uX3N1bW1hcnkucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIaInByb3RvL2V2ZW50Y291bnRlci9oaXN0b2dyYW0ucHJvdG8i8gEKE0Rpc3RyaWJ1dGlvblN1bW1hcnkSEgoEbWVhbhgBIAEoAVIEbWVhbhIOCgJzZBgCIAEoAVICc2QSEgoEcmhhdBgDIAEoAVIEcmhhdBI/CgloaXN0b2dyYW0YBCABKAsyIS5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkhpc3RvZ3JhbVIJaGlzdG9ncmFtEhYKBm1lZGlhbhgFIAEoAVIGbWVkaWFuEiQKDXBlcmNlbnRpbGUwMjUYBiABKAFSDXBlcmNlbnRpbGUwMjUSJAoNcGVyY2VudGlsZTk3NRgHIAEoAVINcGVyY2VudGlsZTk3NUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK0QMKKHByb3RvL2V2ZW50Y291bnRlci92YXJpYXRpb25fY291bnQucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIizAIKDlZhcmlhdGlvbkNvdW50EiEKDHZhcmlhdGlvbl9pZBgBIAEoCVILdmFyaWF0aW9uSWQSHQoKdXNlcl9jb3VudBgCIAEoA1IJdXNlckNvdW50Eh8KC2V2ZW50X2NvdW50GAMgASgDUgpldmVudENvdW50EhsKCXZhbHVlX3N1bRgEIAEoAVIIdmFsdWVTdW0SHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0EicKD3ZhcmlhdGlvbl92YWx1ZRgGIAEoCVIOdmFyaWF0aW9uVmFsdWUSNAoXdmFsdWVfc3VtX3Blcl91c2VyX21lYW4YByABKAFSE3ZhbHVlU3VtUGVyVXNlck1lYW4SPAobdmFsdWVfc3VtX3Blcl91c2VyX3ZhcmlhbmNlGAggASgBUhd2YWx1ZVN1bVBlclVzZXJWYXJpYW5jZUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK1AMKKXByb3RvL2V2ZW50Y291bnRlci9ldmFsdWF0aW9uX2NvdW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyGihwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX2NvdW50LnByb3RvIqQCCg9FdmFsdWF0aW9uQ291bnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEk8KD3JlYWx0aW1lX2NvdW50cxgEIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSDnJlYWx0aW1lQ291bnRzEkkKDGJhdGNoX2NvdW50cxgFIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSC2JhdGNoQ291bnRzEh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdEI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKhgYKKXByb3RvL2V2ZW50Y291bnRlci9leHBlcmltZW50X2NvdW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyGihwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX2NvdW50LnByb3RvIo4DCg9FeHBlcmltZW50Q291bnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhsKB2dvYWxfaWQYBCABKAlCAhgBUgZnb2FsSWQSUwoPcmVhbHRpbWVfY291bnRzGAUgAygLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudEICGAFSDnJlYWx0aW1lQ291bnRzEk0KDGJhdGNoX2NvdW50cxgGIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRCAhgBUgtiYXRjaENvdW50cxIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSQwoLZ29hbF9jb3VudHMYCCADKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdvYWxDb3VudHNSCmdvYWxDb3VudHMixQEKCkdvYWxDb3VudHMSFwoHZ29hbF9pZBgBIAEoCVIGZ29hbElkEk8KD3JlYWx0aW1lX2NvdW50cxgCIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSDnJlYWx0aW1lQ291bnRzEk0KDGJhdGNoX2NvdW50cxgDIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRCAhgBUgtiYXRjaENvdW50c0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKvQMKI3Byb3RvL2V2ZW50Y291bnRlci90aW1lc2VyaWVzLnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyInwKE1ZhcmlhdGlvblRpbWVzZXJpZXMSIQoMdmFyaWF0aW9uX2lkGAEgASgJUgt2YXJpYXRpb25JZBJCCgp0aW1lc2VyaWVzGAIgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUgp0aW1lc2VyaWVzIr8BCgpUaW1lc2VyaWVzEh4KCnRpbWVzdGFtcHMYASADKANSCnRpbWVzdGFtcHMSFgoGdmFsdWVzGAIgAygBUgZ2YWx1ZXMSOwoEdW5pdBgDIAEoDjInLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllcy5Vbml0UgR1bml0EiEKDHRvdGFsX2NvdW50cxgEIAEoA1ILdG90YWxDb3VudHMiGQoEVW5pdBIICgRIT1VSEAASBwoDREFZEAFCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCrATCilwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchoocHJvdG8vZXZlbnRjb3VudGVyL3ZhcmlhdGlvbl9jb3VudC5wcm90bxotcHJvdG8vZXZlbnRjb3VudGVyL2Rpc3RyaWJ1dGlvbl9zdW1tYXJ5LnByb3RvGiNwcm90by9ldmVudGNvdW50ZXIvdGltZXNlcmllcy5wcm90byKsEQoPVmFyaWF0aW9uUmVzdWx0EiEKDHZhcmlhdGlvbl9pZBgBIAEoCVILdmFyaWF0aW9uSWQSUQoQZXhwZXJpbWVudF9jb3VudBgCIAEoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSD2V4cGVyaW1lbnRDb3VudBJRChBldmFsdWF0aW9uX2NvdW50GAMgASgLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudFIPZXZhbHVhdGlvbkNvdW50Ek8KDWN2cl9wcm9iX2Jlc3QYBCABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSC2N2clByb2JCZXN0EmAKFmN2cl9wcm9iX2JlYXRfYmFzZWxpbmUYBSABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSE2N2clByb2JCZWF0QmFzZWxpbmUSRgoIY3ZyX3Byb2IYBiABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSB2N2clByb2ISawogZXZhbHVhdGlvbl91c2VyX2NvdW50X3RpbWVzZXJpZXMYByABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSHWV2YWx1YXRpb25Vc2VyQ291bnRUaW1lc2VyaWVzEm0KIWV2YWx1YXRpb25fZXZlbnRfY291bnRfdGltZXNlcmllcxgIIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IeZXZhbHVhdGlvbkV2ZW50Q291bnRUaW1lc2VyaWVzEl8KGmdvYWxfdXNlcl9jb3VudF90aW1lc2VyaWVzGAkgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhdnb2FsVXNlckNvdW50VGltZXNlcmllcxJhChtnb2FsX2V2ZW50X2NvdW50X3RpbWVzZXJpZXMYCiABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSGGdvYWxFdmVudENvdW50VGltZXNlcmllcxJdChlnb2FsX3ZhbHVlX3N1bV90aW1lc2VyaWVzGAsgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhZnb2FsVmFsdWVTdW1UaW1lc2VyaWVzElYKFWN2cl9tZWRpYW5fdGltZXNlcmllcxgMIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1ITY3ZyTWVkaWFuVGltZXNlcmllcxJkChxjdnJfcGVyY2VudGlsZTAyNV90aW1lc2VyaWVzGA0gASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhpjdnJQZXJjZW50aWxlMDI1VGltZXNlcmllcxJkChxjdnJfcGVyY2VudGlsZTk3NV90aW1lc2VyaWVzGA4gASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhpjdnJQZXJjZW50aWxlOTc1VGltZXNlcmllcxJJCg5jdnJfdGltZXNlcmllcxgPIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1INY3ZyVGltZXNlcmllcxJtCiJnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl90aW1lc2VyaWVzGBAgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUh1nb2FsVmFsdWVTdW1QZXJVc2VyVGltZXNlcmllcxJqChxnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wcm9iGBEgASgLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5EaXN0cmlidXRpb25TdW1tYXJ5Uhdnb2FsVmFsdWVTdW1QZXJVc2VyUHJvYhJzCiFnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wcm9iX2Jlc3QYEiABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSG2dvYWxWYWx1ZVN1bVBlclVzZXJQcm9iQmVzdBKEAQoqZ29hbF92YWx1ZV9zdW1fcGVyX3VzZXJfcHJvYl9iZWF0X2Jhc2VsaW5lGBMgASgLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5EaXN0cmlidXRpb25TdW1tYXJ5UiNnb2FsVmFsdWVTdW1QZXJVc2VyUHJvYkJlYXRCYXNlbGluZRJ6Cilnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9tZWRpYW5fdGltZXNlcmllcxgUIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IjZ29hbFZhbHVlU3VtUGVyVXNlck1lZGlhblRpbWVzZXJpZXMSiAEKMGdvYWxfdmFsdWVfc3VtX3Blcl91c2VyX3BlcmNlbnRpbGUwMjVfdGltZXNlcmllcxgVIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IqZ29hbFZhbHVlU3VtUGVyVXNlclBlcmNlbnRpbGUwMjVUaW1lc2VyaWVzEogBCjBnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wZXJjZW50aWxlOTc1X3RpbWVzZXJpZXMYFiABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSKmdvYWxWYWx1ZVN1bVBlclVzZXJQZXJjZW50aWxlOTc1VGltZXNlcmllc0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKpgIKJHByb3RvL2V2ZW50Y291bnRlci9nb2FsX3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchopcHJvdG8vZXZlbnRjb3VudGVyL3ZhcmlhdGlvbl9yZXN1bHQucHJvdG8iewoKR29hbFJlc3VsdBIXCgdnb2FsX2lkGAEgASgJUgZnb2FsSWQSVAoRdmFyaWF0aW9uX3Jlc3VsdHMYAiADKAsyJy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlZhcmlhdGlvblJlc3VsdFIQdmFyaWF0aW9uUmVzdWx0c0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK2gIKKnByb3RvL2V2ZW50Y291bnRlci9leHBlcmltZW50X3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchokcHJvdG8vZXZlbnRjb3VudGVyL2dvYWxfcmVzdWx0LnByb3RvIq0BChBFeHBlcmltZW50UmVzdWx0Eg4KAmlkGAEgASgJUgJpZBIjCg1leHBlcmltZW50X2lkGAIgASgJUgxleHBlcmltZW50SWQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EkUKDGdvYWxfcmVzdWx0cxgEIAMoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR29hbFJlc3VsdFILZ29hbFJlc3VsdHNCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCvsBCh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI6CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW5vc0KDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCp4CChpwcm90by9mZWF0dXJlL3JlYXNvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUisQEKBlJlYXNvbhIyCgR0eXBlGAEgASgOMh4uYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uLlR5cGVSBHR5cGUSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIloKBFR5cGUSCgoGVEFSR0VUEAASCAoEUlVMRRABEgsKB0RFRkFVTFQQAxIKCgZDTElFTlQQBBIRCg1PRkZfVkFSSUFUSU9OEAUSEAoMUFJFUkVRVUlTSVRFEAZCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqYBgoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvIuMCCgpFdmFsdWF0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIXCgd1c2VyX2lkGAQgASgJUgZ1c2VySWQSIQoMdmFyaWF0aW9uX2lkGAUgASgJUgt2YXJpYXRpb25JZBI+Cgl2YXJpYXRpb24YBiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25CAhgBUgl2YXJpYXRpb24SMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SJwoPdmFyaWF0aW9uX3ZhbHVlGAggASgJUg52YXJpYXRpb25WYWx1ZRIlCg52YXJpYXRpb25fbmFtZRgJIAEoCVINdmFyaWF0aW9uTmFtZSKGAgoPVXNlckV2YWx1YXRpb25zEhIKAmlkGAEgASgJQgIYAVICaWQSPwoLZXZhbHVhdGlvbnMYAiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uUgtldmFsdWF0aW9ucxIdCgpjcmVhdGVkX2F0GAMgASgDUgljcmVhdGVkQXQSMAoUYXJjaGl2ZWRfZmVhdHVyZV9pZHMYBCADKAlSEmFyY2hpdmVkRmVhdHVyZUlkcxIhCgxmb3JjZV91cGRhdGUYBSABKAhSC2ZvcmNlVXBkYXRlIioKBVN0YXRlEgoKBlFVRVVFRBAAEgsKB1BBUlRJQUwQARIICgRGVUxMEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrABAoVcHJvdG8vdXNlci91c2VyLnByb3RvEg5idWNrZXRlZXIudXNlciLeAwoEVXNlchIOCgJpZBgBIAEoCVICaWQSMgoEZGF0YRgCIAMoCzIeLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YUVudHJ5UgRkYXRhEkUKC3RhZ2dlZF9kYXRhGAMgAygLMiQuYnVja2V0ZWVyLnVzZXIuVXNlci5UYWdnZWREYXRhRW50cnlSCnRhZ2dlZERhdGESGwoJbGFzdF9zZWVuGAQgASgDUghsYXN0U2VlbhIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQafAoERGF0YRI6CgV2YWx1ZRgBIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YS5WYWx1ZUVudHJ5UgV2YWx1ZRo4CgpWYWx1ZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaNwoJRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaWAoPVGFnZ2VkRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuYnVja2V0ZWVyLnVzZXIuVXNlci5EYXRhUgV2YWx1ZToCOAFCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3VzZXJiBnByb3RvMwrONAoecHJvdG8vZXZlbnQvY2xpZW50L2V2ZW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnQuY2xpZW50Ghlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxoacHJvdG8vZmVhdHVyZS9yZWFzb24ucHJvdG8aFXByb3RvL3VzZXIvdXNlci5wcm90byJ4CgVFdmVudBIOCgJpZBgBIAEoCVICaWQSKgoFZXZlbnQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgVldmVudBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIpIECg9FdmFsdWF0aW9uRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgDIAEoBVIOZmVhdHVyZVZlcnNpb24SFwoHdXNlcl9pZBgEIAEoCVIGdXNlcklkEiEKDHZhcmlhdGlvbl9pZBgFIAEoCVILdmFyaWF0aW9uSWQSKAoEdXNlchgGIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SEAoDdGFnGAggASgJUgN0YWcSPQoJc291cmNlX2lkGAkgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YCiABKAlSCnNka1ZlcnNpb24SUQoIbWV0YWRhdGEYCyADKAsyNS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkV2YWx1YXRpb25FdmVudC5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRo7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi3AMKCUdvYWxFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIXCgdnb2FsX2lkGAIgASgJUgZnb2FsSWQSFwoHdXNlcl9pZBgDIAEoCVIGdXNlcklkEhQKBXZhbHVlGAQgASgBUgV2YWx1ZRIoCgR1c2VyGAUgASgLMhQuYnVja2V0ZWVyLnVzZXIuVXNlclIEdXNlchJDCgtldmFsdWF0aW9ucxgGIAMoCzIdLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRpb25CAhgBUgtldmFsdWF0aW9ucxIQCgN0YWcYByABKAlSA3RhZxI9Cglzb3VyY2VfaWQYCCABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIfCgtzZGtfdmVyc2lvbhgJIAEoCVIKc2RrVmVyc2lvbhJLCghtZXRhZGF0YRgKIAMoCzIvLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuR29hbEV2ZW50Lk1ldGFkYXRhRW50cnlSCG1ldGFkYXRhGjsKDU1ldGFkYXRhRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLFAgoMTWV0cmljc0V2ZW50EhwKCXRpbWVzdGFtcBgBIAEoA1IJdGltZXN0YW1wEioKBWV2ZW50GAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIFZXZlbnQSPQoJc291cmNlX2lkGAMgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YBCABKAlSCnNka1ZlcnNpb24STgoIbWV0YWRhdGEYBSADKAsyMi5idWNrZXRlZXIuZXZlbnQuY2xpZW50Lk1ldHJpY3NFdmVudC5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRo7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi9gEKIEdldEV2YWx1YXRpb25MYXRlbmN5TWV0cmljc0V2ZW50ElwKBmxhYmVscxgBIAMoCzJELmJ1Y2tldGVlci5ldmVudC5jbGllbnQuR2V0RXZhbHVhdGlvbkxhdGVuY3lNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxI1CghkdXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIIZHVyYXRpb24aOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4AToCGAEi1gEKHUdldEV2YWx1YXRpb25TaXplTWV0cmljc0V2ZW50ElkKBmxhYmVscxgBIAMoCzJBLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuR2V0RXZhbHVhdGlvblNpemVNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxIbCglzaXplX2J5dGUYAiABKAVSCHNpemVCeXRlGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAE6AhgBIrkCChNMYXRlbmN5TWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkEk8KBmxhYmVscxgCIAMoCzI3LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuTGF0ZW5jeU1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzEjkKCGR1cmF0aW9uGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgIYAVIIZHVyYXRpb24SJQoObGF0ZW5jeV9zZWNvbmQYBCABKAFSDWxhdGVuY3lTZWNvbmQaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLuAQoQU2l6ZU1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJMCgZsYWJlbHMYAiADKAsyNC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNpemVNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxIbCglzaXplX2J5dGUYAyABKAVSCHNpemVCeXRlGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEiNQodVGltZW91dEVycm9yQ291bnRNZXRyaWNzRXZlbnQSEAoDdGFnGAEgASgJUgN0YWc6AhgBIjYKHkludGVybmFsRXJyb3JDb3VudE1ldHJpY3NFdmVudBIQCgN0YWcYASABKAlSA3RhZzoCGAEi8QEKIFJlZGlyZWN0aW9uUmVxdWVzdEV4Y2VwdGlvbkV2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElwKBmxhYmVscxgCIAMoCzJELmJ1Y2tldGVlci5ldmVudC5jbGllbnQuUmVkaXJlY3Rpb25SZXF1ZXN0RXhjZXB0aW9uRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIucBChtCYWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVwoGbGFiZWxzGAIgAygLMj8uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5CYWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIusBCh1VbmF1dGhvcml6ZWRFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJZCgZsYWJlbHMYAiADKAsyQS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlVuYXV0aG9yaXplZEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLlAQoaRm9yYmlkZGVuRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVgoGbGFiZWxzGAIgAygLMj4uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Gb3JiaWRkZW5FcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4wEKGU5vdEZvdW5kRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVQoGbGFiZWxzGAIgAygLMj0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Ob3RGb3VuZEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLrAQodUGF5bG9hZFRvb0xhcmdlRXhjZXB0aW9uRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWQoGbGFiZWxzGAIgAygLMkEuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5QYXlsb2FkVG9vTGFyZ2VFeGNlcHRpb25FdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi+QEKJENsaWVudENsb3NlZFJlcXVlc3RFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJgCgZsYWJlbHMYAiADKAsySC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkNsaWVudENsb3NlZFJlcXVlc3RFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi7wEKH0ludGVybmFsU2VydmVyRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWwoGbGFiZWxzGAIgAygLMkMuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5JbnRlcm5hbFNlcnZlckVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASL3AQojU2VydmljZVVuYXZhaWxhYmxlRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSXwoGbGFiZWxzGAIgAygLMkcuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5TZXJ2aWNlVW5hdmFpbGFibGVFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4QEKGFRpbWVvdXRFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJUCgZsYWJlbHMYAiADKAsyPC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlRpbWVvdXRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4wEKGUludGVybmFsRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVQoGbGFiZWxzGAIgAygLMj0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5JbnRlcm5hbEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLhAQoYTmV0d29ya0Vycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElQKBmxhYmVscxgCIAMoCzI8LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuTmV0d29ya0Vycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLpAQocSW50ZXJuYWxTZGtFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJYCgZsYWJlbHMYAiADKAsyQC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkludGVybmFsU2RrRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuEBChhVbmtub3duRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVAoGbGFiZWxzGAIgAygLMjwuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Vbmtub3duRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIsUBCghPcHNFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIhCgx2YXJpYXRpb25faWQYBCABKAlSC3ZhcmlhdGlvbklkEhcKB2dvYWxfaWQYBSABKAlSBmdvYWxJZBIXCgd1c2VyX2lkGAYgASgJUgZ1c2VySWQiXAoNVXNlckdvYWxFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIXCgdnb2FsX2lkGAIgASgJUgZnb2FsSWQSFAoFdmFsdWUYAyABKAFSBXZhbHVlKnAKCFNvdXJjZUlkEgsKB1VOS05PV04QABILCgdBTkRST0lEEAESBwoDSU9TEAISCwoDV0VCEAMaAggBEg0KCUdPX1NFUlZFUhAFEg8KC05PREVfU0VSVkVSEAYSDgoKSkFWQVNDUklQVBAHIgQIBBAEKpsBCgVBcGlJZBIPCgtVTktOT1dOX0FQSRAAEhIKDkdFVF9FVkFMVUFUSU9OEAESEwoPR0VUX0VWQUxVQVRJT05TEAISEwoPUkVHSVNURVJfRVZFTlRTEAMSFQoRR0VUX0ZFQVRVUkVfRkxBR1MQBBIVChFHRVRfU0VHTUVOVF9VU0VSUxAFEhUKEVNES19HRVRfVkFSSUFUSU9OEGRCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50L2NsaWVudGIGcHJvdG8zCrUECiRwcm90by9ldmVudGNvdW50ZXIvbWF1X3N1bW1hcnkucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIaHnByb3RvL2V2ZW50L2NsaWVudC9ldmVudC5wcm90byKUAwoKTUFVU3VtbWFyeRIcCgl5ZWFybW9udGgYASABKAlSCXllYXJtb250aBIlCg5lbnZpcm9ubWVudF9pZBgCIAEoCVINZW52aXJvbm1lbnRJZBI9Cglzb3VyY2VfaWQYAyABKA4yIC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlNvdXJjZUlkUghzb3VyY2VJZBIdCgp1c2VyX2NvdW50GAQgASgDUgl1c2VyQ291bnQSIwoNcmVxdWVzdF9jb3VudBgFIAEoA1IMcmVxdWVzdENvdW50EikKEGV2YWx1YXRpb25fY291bnQYBiABKANSD2V2YWx1YXRpb25Db3VudBIdCgpnb2FsX2NvdW50GAcgASgDUglnb2FsQ291bnQSFQoGaXNfYWxsGAggASgIUgVpc0FsbBIfCgtpc19maW5pc2hlZBgJIAEoCFIKaXNGaW5pc2hlZBIdCgpjcmVhdGVkX2F0GAogASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgLIAEoA1IJdXBkYXRlZEF0QjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudGNvdW50ZXJiBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCqEkCiBwcm90by9ldmVudGNvdW50ZXIvc2VydmljZS5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGipwcm90by9ldmVudGNvdW50ZXIvZXhwZXJpbWVudF9yZXN1bHQucHJvdG8aI3Byb3RvL2V2ZW50Y291bnRlci90aW1lc2VyaWVzLnByb3RvGihwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX2NvdW50LnByb3RvIvkBCiNHZXRFeHBlcmltZW50RXZhbHVhdGlvbkNvdW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhkKCHN0YXJ0X2F0GAIgASgDUgdzdGFydEF0EhUKBmVuZF9hdBgDIAEoA1IFZW5kQXQSHQoKZmVhdHVyZV9pZBgEIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgFIAEoBVIOZmVhdHVyZVZlcnNpb24SIwoNdmFyaWF0aW9uX2lkcxgGIAMoCVIMdmFyaWF0aW9uSWRzIsEBCiRHZXRFeHBlcmltZW50RXZhbHVhdGlvbkNvdW50UmVzcG9uc2USHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgCIAEoBVIOZmVhdHVyZVZlcnNpb24SUQoQdmFyaWF0aW9uX2NvdW50cxgDIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSD3ZhcmlhdGlvbkNvdW50cyLEAgojR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSZAoKdGltZV9yYW5nZRgDIAEoDjJFLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlcXVlc3QuVGltZVJhbmdlUgl0aW1lUmFuZ2UiYwoJVGltZVJhbmdlEgsKB1VOS05PV04QABIVChFUV0VOVFlfRk9VUl9IT1VSUxABEg4KClNFVkVOX0RBWVMQAhIRCg1GT1VSVEVFTl9EQVlTEAMSDwoLVEhJUlRZX0RBWVMQBCLEAQokR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlc3BvbnNlEkwKC3VzZXJfY291bnRzGAEgAygLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25UaW1lc2VyaWVzUgp1c2VyQ291bnRzEk4KDGV2ZW50X2NvdW50cxgCIAMoCzIrLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uVGltZXNlcmllc1ILZXZlbnRDb3VudHMidgoaR2V0RXhwZXJpbWVudFJlc3VsdFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIjCg1leHBlcmltZW50X2lkGAIgASgJUgxleHBlcmltZW50SWQidAobR2V0RXhwZXJpbWVudFJlc3VsdFJlc3BvbnNlElUKEWV4cGVyaW1lbnRfcmVzdWx0GAEgASgLMiguYnVja2V0ZWVyLmV2ZW50Y291bnRlci5FeHBlcmltZW50UmVzdWx0UhBleHBlcmltZW50UmVzdWx0IrgBChxMaXN0RXhwZXJpbWVudFJlc3VsdHNSZXF1ZXN0Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBJECg9mZWF0dXJlX3ZlcnNpb24YAiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIOZmVhdHVyZVZlcnNpb24SMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSLjAQodTGlzdEV4cGVyaW1lbnRSZXN1bHRzUmVzcG9uc2USXAoHcmVzdWx0cxgBIAMoCzJCLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuTGlzdEV4cGVyaW1lbnRSZXN1bHRzUmVzcG9uc2UuUmVzdWx0c0VudHJ5UgdyZXN1bHRzGmQKDFJlc3VsdHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRI+CgV2YWx1ZRgCIAEoCzIoLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuRXhwZXJpbWVudFJlc3VsdFIFdmFsdWU6AjgBIowCCh1HZXRFeHBlcmltZW50R29hbENvdW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhkKCHN0YXJ0X2F0GAIgASgDUgdzdGFydEF0EhUKBmVuZF9hdBgDIAEoA1IFZW5kQXQSFwoHZ29hbF9pZBgEIAEoCVIGZ29hbElkEh0KCmZlYXR1cmVfaWQYBSABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YBiABKAVSDmZlYXR1cmVWZXJzaW9uEiMKDXZhcmlhdGlvbl9pZHMYByADKAlSDHZhcmlhdGlvbklkcyKMAQoeR2V0RXhwZXJpbWVudEdvYWxDb3VudFJlc3BvbnNlEhcKB2dvYWxfaWQYASABKAlSBmdvYWxJZBJRChB2YXJpYXRpb25fY291bnRzGAIgAygLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudFIPdmFyaWF0aW9uQ291bnRzIv8BCiBHZXRPcHNFdmFsdWF0aW9uVXNlckNvdW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEh4KC29wc19ydWxlX2lkGAIgASgJUglvcHNSdWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZBIdCgpmZWF0dXJlX2lkGAQgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAUgASgFUg5mZWF0dXJlVmVyc2lvbhIhCgx2YXJpYXRpb25faWQYBiABKAlSC3ZhcmlhdGlvbklkInYKIUdldE9wc0V2YWx1YXRpb25Vc2VyQ291bnRSZXNwb25zZRIeCgtvcHNfcnVsZV9pZBgBIAEoCVIJb3BzUnVsZUlkEhsKCWNsYXVzZV9pZBgCIAEoCVIIY2xhdXNlSWQSFAoFY291bnQYAyABKANSBWNvdW50IvkBChpHZXRPcHNHb2FsVXNlckNvdW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEh4KC29wc19ydWxlX2lkGAIgASgJUglvcHNSdWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZBIdCgpmZWF0dXJlX2lkGAQgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAUgASgFUg5mZWF0dXJlVmVyc2lvbhIhCgx2YXJpYXRpb25faWQYBiABKAlSC3ZhcmlhdGlvbklkInAKG0dldE9wc0dvYWxVc2VyQ291bnRSZXNwb25zZRIeCgtvcHNfcnVsZV9pZBgBIAEoCVIJb3BzUnVsZUlkEhsKCWNsYXVzZV9pZBgCIAEoCVIIY2xhdXNlSWQSFAoFY291bnQYAyABKANSBWNvdW50ImgKEkdldE1BVUNvdW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEh0KCnllYXJfbW9udGgYAiABKAlSCXllYXJNb250aCJVChNHZXRNQVVDb3VudFJlc3BvbnNlEh8KC2V2ZW50X2NvdW50GAEgASgDUgpldmVudENvdW50Eh0KCnVzZXJfY291bnQYAiABKANSCXVzZXJDb3VudCJbChlTdW1tYXJpemVNQVVDb3VudHNSZXF1ZXN0Eh0KCnllYXJfbW9udGgYASABKAlSCXllYXJNb250aBIfCgtpc19maW5pc2hlZBgCIAEoCFIKaXNGaW5pc2hlZCIcChpTdW1tYXJpemVNQVVDb3VudHNSZXNwb25zZTLqCQoTRXZlbnRDb3VudGVyU2VydmljZRKbAQocR2V0RXhwZXJpbWVudEV2YWx1YXRpb25Db3VudBI7LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXhwZXJpbWVudEV2YWx1YXRpb25Db3VudFJlcXVlc3QaPC5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldEV4cGVyaW1lbnRFdmFsdWF0aW9uQ291bnRSZXNwb25zZSIAEpsBChxHZXRFdmFsdWF0aW9uVGltZXNlcmllc0NvdW50EjsuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFdmFsdWF0aW9uVGltZXNlcmllc0NvdW50UmVxdWVzdBo8LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlc3BvbnNlIgASgAEKE0dldEV4cGVyaW1lbnRSZXN1bHQSMi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldEV4cGVyaW1lbnRSZXN1bHRSZXF1ZXN0GjMuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFeHBlcmltZW50UmVzdWx0UmVzcG9uc2UiABKGAQoVTGlzdEV4cGVyaW1lbnRSZXN1bHRzEjQuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXF1ZXN0GjUuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXNwb25zZSIAEokBChZHZXRFeHBlcmltZW50R29hbENvdW50EjUuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFeHBlcmltZW50R29hbENvdW50UmVxdWVzdBo2LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXhwZXJpbWVudEdvYWxDb3VudFJlc3BvbnNlIgASaAoLR2V0TUFVQ291bnQSKi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldE1BVUNvdW50UmVxdWVzdBorLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0TUFVQ291bnRSZXNwb25zZSIAEn0KElN1bW1hcml6ZU1BVUNvdW50cxIxLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuU3VtbWFyaXplTUFVQ291bnRzUmVxdWVzdBoyLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuU3VtbWFyaXplTUFVQ291bnRzUmVzcG9uc2UiABKSAQoZR2V0T3BzRXZhbHVhdGlvblVzZXJDb3VudBI4LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0T3BzRXZhbHVhdGlvblVzZXJDb3VudFJlcXVlc3QaOS5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldE9wc0V2YWx1YXRpb25Vc2VyQ291bnRSZXNwb25zZSIAEoABChNHZXRPcHNHb2FsVXNlckNvdW50EjIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRPcHNHb2FsVXNlckNvdW50UmVxdWVzdBozLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0T3BzR29hbFVzZXJDb3VudFJlc3BvbnNlIgBCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8z - autoopsDescriptor: CuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCpoLChpwcm90by9hdXRvb3BzL2NsYXVzZS5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8ihgEKBkNsYXVzZRIOCgJpZBgBIAEoCVICaWQSLAoGY2xhdXNlGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIGY2xhdXNlEj4KC2FjdGlvbl90eXBlGAMgASgOMh0uYnVja2V0ZWVyLmF1dG9vcHMuQWN0aW9uVHlwZVIKYWN0aW9uVHlwZSLfAgoST3BzRXZlbnRSYXRlQ2xhdXNlEiEKDHZhcmlhdGlvbl9pZBgCIAEoCVILdmFyaWF0aW9uSWQSFwoHZ29hbF9pZBgDIAEoCVIGZ29hbElkEhsKCW1pbl9jb3VudBgEIAEoA1IIbWluQ291bnQSKQoQdGhyZWFkc2hvbGRfcmF0ZRgFIAEoAVIPdGhyZWFkc2hvbGRSYXRlEkoKCG9wZXJhdG9yGAYgASgOMi4uYnVja2V0ZWVyLmF1dG9vcHMuT3BzRXZlbnRSYXRlQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvchI+CgthY3Rpb25fdHlwZRgHIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUiMwoIT3BlcmF0b3ISFAoQR1JFQVRFUl9PUl9FUVVBTBAAEhEKDUxFU1NfT1JfRVFVQUwQAUoECAEQAiJkCg5EYXRldGltZUNsYXVzZRISCgR0aW1lGAEgASgDUgR0aW1lEj4KC2FjdGlvbl90eXBlGAIgASgOMh0uYnVja2V0ZWVyLmF1dG9vcHMuQWN0aW9uVHlwZVIKYWN0aW9uVHlwZSKXAQoaUHJvZ3Jlc3NpdmVSb2xsb3V0U2NoZWR1bGUSHwoLc2NoZWR1bGVfaWQYASABKAlSCnNjaGVkdWxlSWQSHQoKZXhlY3V0ZV9hdBgCIAEoA1IJZXhlY3V0ZUF0EhYKBndlaWdodBgDIAEoBVIGd2VpZ2h0EiEKDHRyaWdnZXJlZF9hdBgEIAEoA1ILdHJpZ2dlcmVkQXQimAEKJlByb2dyZXNzaXZlUm9sbG91dE1hbnVhbFNjaGVkdWxlQ2xhdXNlEksKCXNjaGVkdWxlcxgBIAMoCzItLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlUglzY2hlZHVsZXMSIQoMdmFyaWF0aW9uX2lkGAIgASgJUgt2YXJpYXRpb25JZCLYAgooUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZRJLCglzY2hlZHVsZXMYASADKAsyLS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVIJc2NoZWR1bGVzEmAKCGludGVydmFsGAIgASgOMkQuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZS5JbnRlcnZhbFIIaW50ZXJ2YWwSHgoKaW5jcmVtZW50cxgDIAEoA1IKaW5jcmVtZW50cxIhCgx2YXJpYXRpb25faWQYBCABKAlSC3ZhcmlhdGlvbklkIjoKCEludGVydmFsEgsKB1VOS05PV04QABIKCgZIT1VSTFkQARIJCgVEQUlMWRACEgoKBldFRUtMWRADKjIKCkFjdGlvblR5cGUSCwoHVU5LTk9XThAAEgoKBkVOQUJMRRABEgsKB0RJU0FCTEUQAkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYXV0b29wc2IGcHJvdG8zCr0FCiFwcm90by9hdXRvb3BzL2F1dG9fb3BzX3J1bGUucHJvdG8SEWJ1Y2tldGVlci5hdXRvb3BzGhpwcm90by9hdXRvb3BzL2NsYXVzZS5wcm90byLQAgoLQXV0b09wc1J1bGUSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBI1CghvcHNfdHlwZRgDIAEoDjIaLmJ1Y2tldGVlci5hdXRvb3BzLk9wc1R5cGVSB29wc1R5cGUSMwoHY2xhdXNlcxgEIAMoCzIZLmJ1Y2tldGVlci5hdXRvb3BzLkNsYXVzZVIHY2xhdXNlcxIdCgpjcmVhdGVkX2F0GAcgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgIIAEoA1IJdXBkYXRlZEF0EhgKB2RlbGV0ZWQYCSABKAhSB2RlbGV0ZWQSSAoPYXV0b19vcHNfc3RhdHVzGAogASgOMiAuYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1N0YXR1c1INYXV0b09wc1N0YXR1c0oECAYQByJUCgxBdXRvT3BzUnVsZXMSRAoOYXV0b19vcHNfcnVsZXMYASADKAsyHi5idWNrZXRlZXIuYXV0b29wcy5BdXRvT3BzUnVsZVIMYXV0b09wc1J1bGVzKj8KB09wc1R5cGUSEAoMVFlQRV9VTktOT1dOEAASDAoIU0NIRURVTEUQAhIOCgpFVkVOVF9SQVRFEAMiBAgBEAEqRAoNQXV0b09wc1N0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMK9wUKJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8i4gQKElByb2dyZXNzaXZlUm9sbG91dBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiwKBmNsYXVzZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRJECgZzdGF0dXMYBCABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzUgZzdGF0dXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBI+CgR0eXBlGAcgASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVSBHR5cGUSTgoKc3RvcHBlZF9ieRgIIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeRIdCgpzdG9wcGVkX2F0GAkgASgDUglzdG9wcGVkQXQiMgoEVHlwZRITCg9NQU5VQUxfU0NIRURVTEUQABIVChFURU1QTEFURV9TQ0hFRFVMRRABIj0KBlN0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADIkkKCVN0b3BwZWRCeRILCgdVTktOT1dOEAASCAoEVVNFUhABEhAKDE9QU19TQ0hFRFVMRRACEhMKD09QU19LSUxMX1NXSVRDSBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMKrBEKG3Byb3RvL2F1dG9vcHMvY29tbWFuZC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaIXByb3RvL2F1dG9vcHMvYXV0b19vcHNfcnVsZS5wcm90bxoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8aJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90byKaAgoYQ3JlYXRlQXV0b09wc1J1bGVDb21tYW5kEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBI1CghvcHNfdHlwZRgCIAEoDjIaLmJ1Y2tldGVlci5hdXRvb3BzLk9wc1R5cGVSB29wc1R5cGUSWgoWb3BzX2V2ZW50X3JhdGVfY2xhdXNlcxgDIAMoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVITb3BzRXZlbnRSYXRlQ2xhdXNlcxJMChBkYXRldGltZV9jbGF1c2VzGAQgAygLMiEuYnVja2V0ZWVyLmF1dG9vcHMuRGF0ZXRpbWVDbGF1c2VSD2RhdGV0aW1lQ2xhdXNlcyIaChhEZWxldGVBdXRvT3BzUnVsZUNvbW1hbmQiGAoWU3RvcEF1dG9PcHNSdWxlQ29tbWFuZCJWChpDaGFuZ2VBdXRvT3BzU3RhdHVzQ29tbWFuZBI4CgZzdGF0dXMYASABKA4yIC5idWNrZXRlZXIuYXV0b29wcy5BdXRvT3BzU3RhdHVzUgZzdGF0dXMiOAoZRXhlY3V0ZUF1dG9PcHNSdWxlQ29tbWFuZBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkIngKHEFkZE9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmQSWAoVb3BzX2V2ZW50X3JhdGVfY2xhdXNlGAEgASgLMiUuYnVja2V0ZWVyLmF1dG9vcHMuT3BzRXZlbnRSYXRlQ2xhdXNlUhJvcHNFdmVudFJhdGVDbGF1c2UiiwEKH0NoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkElgKFW9wc19ldmVudF9yYXRlX2NsYXVzZRgCIAEoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVISb3BzRXZlbnRSYXRlQ2xhdXNlIiUKE0RlbGV0ZUNsYXVzZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkImYKGEFkZERhdGV0aW1lQ2xhdXNlQ29tbWFuZBJKCg9kYXRldGltZV9jbGF1c2UYASABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2UieQobQ2hhbmdlRGF0ZXRpbWVDbGF1c2VDb21tYW5kEg4KAmlkGAEgASgJUgJpZBJKCg9kYXRldGltZV9jbGF1c2UYAiABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2Ui4AMKH0NyZWF0ZVByb2dyZXNzaXZlUm9sbG91dENvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEpoBCipwcm9ncmVzc2l2ZV9yb2xsb3V0X21hbnVhbF9zY2hlZHVsZV9jbGF1c2UYAiABKAsyOS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZUgAUiZwcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZYgBARKgAQoscHJvZ3Jlc3NpdmVfcm9sbG91dF90ZW1wbGF0ZV9zY2hlZHVsZV9jbGF1c2UYAyABKAsyOy5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRUZW1wbGF0ZVNjaGVkdWxlQ2xhdXNlSAFSKHByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2WIAQFCLQorX3Byb2dyZXNzaXZlX3JvbGxvdXRfbWFudWFsX3NjaGVkdWxlX2NsYXVzZUIvCi1fcHJvZ3Jlc3NpdmVfcm9sbG91dF90ZW1wbGF0ZV9zY2hlZHVsZV9jbGF1c2UibwodU3RvcFByb2dyZXNzaXZlUm9sbG91dENvbW1hbmQSTgoKc3RvcHBlZF9ieRgBIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeSIhCh9EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kIoUBCjBBZGRQcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZUNvbW1hbmQSUQoGY2xhdXNlGAEgASgLMjkuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0TWFudWFsU2NoZWR1bGVDbGF1c2VSBmNsYXVzZSKJAQoyQWRkUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZUNvbW1hbmQSUwoGY2xhdXNlGAEgASgLMjsuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZVIGY2xhdXNlIlUKMkNoYW5nZVByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlVHJpZ2dlcmVkQXRDb21tYW5kEh8KC3NjaGVkdWxlX2lkGAEgASgJUgpzY2hlZHVsZUlkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMK4QIKHXByb3RvL2F1dG9vcHMvb3BzX2NvdW50LnByb3RvEhFidWNrZXRlZXIuYXV0b29wcyLxAQoIT3BzQ291bnQSDgoCaWQYASABKAlSAmlkEicKEGF1dG9fb3BzX3J1bGVfaWQYAiABKAlSDWF1dG9PcHNSdWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZBIdCgp1cGRhdGVkX2F0GAQgASgDUgl1cGRhdGVkQXQSJgoPb3BzX2V2ZW50X2NvdW50GAUgASgDUg1vcHNFdmVudENvdW50EikKEGV2YWx1YXRpb25fY291bnQYBiABKANSD2V2YWx1YXRpb25Db3VudBIdCgpmZWF0dXJlX2lkGAcgASgJUglmZWF0dXJlSWRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dG9vcHNiBnByb3RvMwqFMQobcHJvdG8vYXV0b29wcy9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuYXV0b29wcxohcHJvdG8vYXV0b29wcy9hdXRvX29wc19ydWxlLnByb3RvGhtwcm90by9hdXRvb3BzL2NvbW1hbmQucHJvdG8aHXByb3RvL2F1dG9vcHMvb3BzX2NvdW50LnByb3RvGidwcm90by9hdXRvb3BzL3Byb2dyZXNzaXZlX3JvbGxvdXQucHJvdG8iXAoVR2V0QXV0b09wc1J1bGVSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkIlwKFkdldEF1dG9PcHNSdWxlUmVzcG9uc2USQgoNYXV0b19vcHNfcnVsZRgBIAEoCzIeLmJ1Y2tldGVlci5hdXRvb3BzLkF1dG9PcHNSdWxlUgthdXRvT3BzUnVsZSKWAQoYQ3JlYXRlQXV0b09wc1J1bGVSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USRQoHY29tbWFuZBgCIAEoCzIrLmJ1Y2tldGVlci5hdXRvb3BzLkNyZWF0ZUF1dG9PcHNSdWxlQ29tbWFuZFIHY29tbWFuZCIbChlDcmVhdGVBdXRvT3BzUnVsZVJlc3BvbnNlIqQBChdMaXN0QXV0b09wc1J1bGVzUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISHwoLZmVhdHVyZV9pZHMYBCADKAlSCmZlYXR1cmVJZHMieAoYTGlzdEF1dG9PcHNSdWxlc1Jlc3BvbnNlEkQKDmF1dG9fb3BzX3J1bGVzGAEgAygLMh4uYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1J1bGVSDGF1dG9PcHNSdWxlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKiAQoWU3RvcEF1dG9PcHNSdWxlUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJDCgdjb21tYW5kGAMgASgLMikuYnVja2V0ZWVyLmF1dG9vcHMuU3RvcEF1dG9PcHNSdWxlQ29tbWFuZFIHY29tbWFuZCIZChdTdG9wQXV0b09wc1J1bGVSZXNwb25zZSKmAQoYRGVsZXRlQXV0b09wc1J1bGVSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEkUKB2NvbW1hbmQYAyABKAsyKy5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVBdXRvT3BzUnVsZUNvbW1hbmRSB2NvbW1hbmQiGwoZRGVsZXRlQXV0b09wc1J1bGVSZXNwb25zZSKqBQoYVXBkYXRlQXV0b09wc1J1bGVSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEnoKImFkZF9vcHNfZXZlbnRfcmF0ZV9jbGF1c2VfY29tbWFuZHMYBCADKAsyLy5idWNrZXRlZXIuYXV0b29wcy5BZGRPcHNFdmVudFJhdGVDbGF1c2VDb21tYW5kUh1hZGRPcHNFdmVudFJhdGVDbGF1c2VDb21tYW5kcxKDAQolY2hhbmdlX29wc19ldmVudF9yYXRlX2NsYXVzZV9jb21tYW5kcxgFIAMoCzIyLmJ1Y2tldGVlci5hdXRvb3BzLkNoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmRSIGNoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmRzElwKFmRlbGV0ZV9jbGF1c2VfY29tbWFuZHMYBiADKAsyJi5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVDbGF1c2VDb21tYW5kUhRkZWxldGVDbGF1c2VDb21tYW5kcxJsChxhZGRfZGF0ZXRpbWVfY2xhdXNlX2NvbW1hbmRzGAcgAygLMisuYnVja2V0ZWVyLmF1dG9vcHMuQWRkRGF0ZXRpbWVDbGF1c2VDb21tYW5kUhlhZGREYXRldGltZUNsYXVzZUNvbW1hbmRzEnUKH2NoYW5nZV9kYXRldGltZV9jbGF1c2VfY29tbWFuZHMYCCADKAsyLi5idWNrZXRlZXIuYXV0b29wcy5DaGFuZ2VEYXRldGltZUNsYXVzZUNvbW1hbmRSHGNoYW5nZURhdGV0aW1lQ2xhdXNlQ29tbWFuZHNKBAgDEAQiGwoZVXBkYXRlQXV0b09wc1J1bGVSZXNwb25zZSLSAQoVRXhlY3V0ZUF1dG9PcHNSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEm4KHWV4ZWN1dGVfYXV0b19vcHNfcnVsZV9jb21tYW5kGAQgASgLMiwuYnVja2V0ZWVyLmF1dG9vcHMuRXhlY3V0ZUF1dG9PcHNSdWxlQ29tbWFuZFIZZXhlY3V0ZUF1dG9PcHNSdWxlQ29tbWFuZEoECAMQBCJFChZFeGVjdXRlQXV0b09wc1Jlc3BvbnNlEisKEWFscmVhZHlfdHJpZ2dlcmVkGAEgASgIUhBhbHJlYWR5VHJpZ2dlcmVkIswBChRMaXN0T3BzQ291bnRzUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISKQoRYXV0b19vcHNfcnVsZV9pZHMYBCADKAlSDmF1dG9PcHNSdWxlSWRzEh8KC2ZlYXR1cmVfaWRzGAUgAygJUgpmZWF0dXJlSWRzImsKFUxpc3RPcHNDb3VudHNSZXNwb25zZRIWCgZjdXJzb3IYASABKAlSBmN1cnNvchI6CgpvcHNfY291bnRzGAIgAygLMhsuYnVja2V0ZWVyLmF1dG9vcHMuT3BzQ291bnRSCW9wc0NvdW50cyKkAQofQ3JlYXRlUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEkwKB2NvbW1hbmQYAiABKAsyMi5idWNrZXRlZXIuYXV0b29wcy5DcmVhdGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kUgdjb21tYW5kIiIKIENyZWF0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlImMKHEdldFByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQidwodR2V0UHJvZ3Jlc3NpdmVSb2xsb3V0UmVzcG9uc2USVgoTcHJvZ3Jlc3NpdmVfcm9sbG91dBgBIAEoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFIScHJvZ3Jlc3NpdmVSb2xsb3V0IrABCh1TdG9wUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJKCgdjb21tYW5kGAMgASgLMjAuYnVja2V0ZWVyLmF1dG9vcHMuU3RvcFByb2dyZXNzaXZlUm9sbG91dENvbW1hbmRSB2NvbW1hbmQiIAoeU3RvcFByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIrQBCh9EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEkwKB2NvbW1hbmQYAyABKAsyMi5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kUgdjb21tYW5kIiIKIERlbGV0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIu0ECh5MaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0c1JlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEh8KC2ZlYXR1cmVfaWRzGAQgAygJUgpmZWF0dXJlSWRzElQKCG9yZGVyX2J5GAUgASgOMjkuYnVja2V0ZWVyLmF1dG9vcHMuTGlzdFByb2dyZXNzaXZlUm9sbG91dHNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSaQoPb3JkZXJfZGlyZWN0aW9uGAYgASgOMkAuYnVja2V0ZWVyLmF1dG9vcHMuTGlzdFByb2dyZXNzaXZlUm9sbG91dHNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhJJCgZzdGF0dXMYByABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzSABSBnN0YXR1c4gBARJDCgR0eXBlGAggASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVIAVIEdHlwZYgBASI2CgdPcmRlckJ5EgsKB0RFRkFVTFQQABIOCgpDUkVBVEVEX0FUEAESDgoKVVBEQVRFRF9BVBACIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQAUIJCgdfc3RhdHVzQgcKBV90eXBlIrQBCh9MaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0c1Jlc3BvbnNlElgKFHByb2dyZXNzaXZlX3JvbGxvdXRzGAEgAygLMiUuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0UhNwcm9ncmVzc2l2ZVJvbGxvdXRzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IpQCCiBFeGVjdXRlUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBKqAQovY2hhbmdlX3Byb2dyZXNzaXZlX3JvbGxvdXRfdHJpZ2dlcmVkX2F0X2NvbW1hbmQYAyABKAsyRS5idWNrZXRlZXIuYXV0b29wcy5DaGFuZ2VQcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVRyaWdnZXJlZEF0Q29tbWFuZFIqY2hhbmdlUHJvZ3Jlc3NpdmVSb2xsb3V0VHJpZ2dlcmVkQXRDb21tYW5kIiMKIUV4ZWN1dGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZTKYDQoOQXV0b09wc1NlcnZpY2USZwoOR2V0QXV0b09wc1J1bGUSKC5idWNrZXRlZXIuYXV0b29wcy5HZXRBdXRvT3BzUnVsZVJlcXVlc3QaKS5idWNrZXRlZXIuYXV0b29wcy5HZXRBdXRvT3BzUnVsZVJlc3BvbnNlIgASbQoQTGlzdEF1dG9PcHNSdWxlcxIqLmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RBdXRvT3BzUnVsZXNSZXF1ZXN0GisuYnVja2V0ZWVyLmF1dG9vcHMuTGlzdEF1dG9PcHNSdWxlc1Jlc3BvbnNlIgAScAoRQ3JlYXRlQXV0b09wc1J1bGUSKy5idWNrZXRlZXIuYXV0b29wcy5DcmVhdGVBdXRvT3BzUnVsZVJlcXVlc3QaLC5idWNrZXRlZXIuYXV0b29wcy5DcmVhdGVBdXRvT3BzUnVsZVJlc3BvbnNlIgASagoPU3RvcEF1dG9PcHNSdWxlEikuYnVja2V0ZWVyLmF1dG9vcHMuU3RvcEF1dG9PcHNSdWxlUmVxdWVzdBoqLmJ1Y2tldGVlci5hdXRvb3BzLlN0b3BBdXRvT3BzUnVsZVJlc3BvbnNlIgAScAoRRGVsZXRlQXV0b09wc1J1bGUSKy5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVBdXRvT3BzUnVsZVJlcXVlc3QaLC5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVBdXRvT3BzUnVsZVJlc3BvbnNlIgAScAoRVXBkYXRlQXV0b09wc1J1bGUSKy5idWNrZXRlZXIuYXV0b29wcy5VcGRhdGVBdXRvT3BzUnVsZVJlcXVlc3QaLC5idWNrZXRlZXIuYXV0b29wcy5VcGRhdGVBdXRvT3BzUnVsZVJlc3BvbnNlIgASZwoORXhlY3V0ZUF1dG9PcHMSKC5idWNrZXRlZXIuYXV0b29wcy5FeGVjdXRlQXV0b09wc1JlcXVlc3QaKS5idWNrZXRlZXIuYXV0b29wcy5FeGVjdXRlQXV0b09wc1Jlc3BvbnNlIgASZAoNTGlzdE9wc0NvdW50cxInLmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RPcHNDb3VudHNSZXF1ZXN0GiguYnVja2V0ZWVyLmF1dG9vcHMuTGlzdE9wc0NvdW50c1Jlc3BvbnNlIgAShQEKGENyZWF0ZVByb2dyZXNzaXZlUm9sbG91dBIyLmJ1Y2tldGVlci5hdXRvb3BzLkNyZWF0ZVByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QaMy5idWNrZXRlZXIuYXV0b29wcy5DcmVhdGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZSIAEnwKFUdldFByb2dyZXNzaXZlUm9sbG91dBIvLmJ1Y2tldGVlci5hdXRvb3BzLkdldFByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QaMC5idWNrZXRlZXIuYXV0b29wcy5HZXRQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZSIAEn8KFlN0b3BQcm9ncmVzc2l2ZVJvbGxvdXQSMC5idWNrZXRlZXIuYXV0b29wcy5TdG9wUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBoxLmJ1Y2tldGVlci5hdXRvb3BzLlN0b3BQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZSIAEoUBChhEZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXQSMi5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXF1ZXN0GjMuYnVja2V0ZWVyLmF1dG9vcHMuRGVsZXRlUHJvZ3Jlc3NpdmVSb2xsb3V0UmVzcG9uc2UiABKCAQoXTGlzdFByb2dyZXNzaXZlUm9sbG91dHMSMS5idWNrZXRlZXIuYXV0b29wcy5MaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0c1JlcXVlc3QaMi5idWNrZXRlZXIuYXV0b29wcy5MaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0c1Jlc3BvbnNlIgASiAEKGUV4ZWN1dGVQcm9ncmVzc2l2ZVJvbGxvdXQSMy5idWNrZXRlZXIuYXV0b29wcy5FeGVjdXRlUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBo0LmJ1Y2tldGVlci5hdXRvb3BzLkV4ZWN1dGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZSIAQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzM= + eventcounterDescriptor: CrEBCiJwcm90by9ldmVudGNvdW50ZXIvaGlzdG9ncmFtLnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyIjMKCUhpc3RvZ3JhbRISCgRoaXN0GAEgAygDUgRoaXN0EhIKBGJpbnMYAiADKAFSBGJpbnNCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCqADCi1wcm90by9ldmVudGNvdW50ZXIvZGlzdHJpYnV0aW9uX3N1bW1hcnkucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIaInByb3RvL2V2ZW50Y291bnRlci9oaXN0b2dyYW0ucHJvdG8i8gEKE0Rpc3RyaWJ1dGlvblN1bW1hcnkSEgoEbWVhbhgBIAEoAVIEbWVhbhIOCgJzZBgCIAEoAVICc2QSEgoEcmhhdBgDIAEoAVIEcmhhdBI/CgloaXN0b2dyYW0YBCABKAsyIS5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkhpc3RvZ3JhbVIJaGlzdG9ncmFtEhYKBm1lZGlhbhgFIAEoAVIGbWVkaWFuEiQKDXBlcmNlbnRpbGUwMjUYBiABKAFSDXBlcmNlbnRpbGUwMjUSJAoNcGVyY2VudGlsZTk3NRgHIAEoAVINcGVyY2VudGlsZTk3NUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK0QMKKHByb3RvL2V2ZW50Y291bnRlci92YXJpYXRpb25fY291bnQucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIizAIKDlZhcmlhdGlvbkNvdW50EiEKDHZhcmlhdGlvbl9pZBgBIAEoCVILdmFyaWF0aW9uSWQSHQoKdXNlcl9jb3VudBgCIAEoA1IJdXNlckNvdW50Eh8KC2V2ZW50X2NvdW50GAMgASgDUgpldmVudENvdW50EhsKCXZhbHVlX3N1bRgEIAEoAVIIdmFsdWVTdW0SHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0EicKD3ZhcmlhdGlvbl92YWx1ZRgGIAEoCVIOdmFyaWF0aW9uVmFsdWUSNAoXdmFsdWVfc3VtX3Blcl91c2VyX21lYW4YByABKAFSE3ZhbHVlU3VtUGVyVXNlck1lYW4SPAobdmFsdWVfc3VtX3Blcl91c2VyX3ZhcmlhbmNlGAggASgBUhd2YWx1ZVN1bVBlclVzZXJWYXJpYW5jZUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK1AMKKXByb3RvL2V2ZW50Y291bnRlci9ldmFsdWF0aW9uX2NvdW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyGihwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX2NvdW50LnByb3RvIqQCCg9FdmFsdWF0aW9uQ291bnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEk8KD3JlYWx0aW1lX2NvdW50cxgEIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSDnJlYWx0aW1lQ291bnRzEkkKDGJhdGNoX2NvdW50cxgFIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSC2JhdGNoQ291bnRzEh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdEI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKhgYKKXByb3RvL2V2ZW50Y291bnRlci9leHBlcmltZW50X2NvdW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyGihwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX2NvdW50LnByb3RvIo4DCg9FeHBlcmltZW50Q291bnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhsKB2dvYWxfaWQYBCABKAlCAhgBUgZnb2FsSWQSUwoPcmVhbHRpbWVfY291bnRzGAUgAygLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudEICGAFSDnJlYWx0aW1lQ291bnRzEk0KDGJhdGNoX2NvdW50cxgGIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRCAhgBUgtiYXRjaENvdW50cxIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSQwoLZ29hbF9jb3VudHMYCCADKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdvYWxDb3VudHNSCmdvYWxDb3VudHMixQEKCkdvYWxDb3VudHMSFwoHZ29hbF9pZBgBIAEoCVIGZ29hbElkEk8KD3JlYWx0aW1lX2NvdW50cxgCIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSDnJlYWx0aW1lQ291bnRzEk0KDGJhdGNoX2NvdW50cxgDIAMoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRCAhgBUgtiYXRjaENvdW50c0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKvQMKI3Byb3RvL2V2ZW50Y291bnRlci90aW1lc2VyaWVzLnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyInwKE1ZhcmlhdGlvblRpbWVzZXJpZXMSIQoMdmFyaWF0aW9uX2lkGAEgASgJUgt2YXJpYXRpb25JZBJCCgp0aW1lc2VyaWVzGAIgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUgp0aW1lc2VyaWVzIr8BCgpUaW1lc2VyaWVzEh4KCnRpbWVzdGFtcHMYASADKANSCnRpbWVzdGFtcHMSFgoGdmFsdWVzGAIgAygBUgZ2YWx1ZXMSOwoEdW5pdBgDIAEoDjInLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllcy5Vbml0UgR1bml0EiEKDHRvdGFsX2NvdW50cxgEIAEoA1ILdG90YWxDb3VudHMiGQoEVW5pdBIICgRIT1VSEAASBwoDREFZEAFCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCrATCilwcm90by9ldmVudGNvdW50ZXIvdmFyaWF0aW9uX3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchoocHJvdG8vZXZlbnRjb3VudGVyL3ZhcmlhdGlvbl9jb3VudC5wcm90bxotcHJvdG8vZXZlbnRjb3VudGVyL2Rpc3RyaWJ1dGlvbl9zdW1tYXJ5LnByb3RvGiNwcm90by9ldmVudGNvdW50ZXIvdGltZXNlcmllcy5wcm90byKsEQoPVmFyaWF0aW9uUmVzdWx0EiEKDHZhcmlhdGlvbl9pZBgBIAEoCVILdmFyaWF0aW9uSWQSUQoQZXhwZXJpbWVudF9jb3VudBgCIAEoCzImLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uQ291bnRSD2V4cGVyaW1lbnRDb3VudBJRChBldmFsdWF0aW9uX2NvdW50GAMgASgLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudFIPZXZhbHVhdGlvbkNvdW50Ek8KDWN2cl9wcm9iX2Jlc3QYBCABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSC2N2clByb2JCZXN0EmAKFmN2cl9wcm9iX2JlYXRfYmFzZWxpbmUYBSABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSE2N2clByb2JCZWF0QmFzZWxpbmUSRgoIY3ZyX3Byb2IYBiABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSB2N2clByb2ISawogZXZhbHVhdGlvbl91c2VyX2NvdW50X3RpbWVzZXJpZXMYByABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSHWV2YWx1YXRpb25Vc2VyQ291bnRUaW1lc2VyaWVzEm0KIWV2YWx1YXRpb25fZXZlbnRfY291bnRfdGltZXNlcmllcxgIIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IeZXZhbHVhdGlvbkV2ZW50Q291bnRUaW1lc2VyaWVzEl8KGmdvYWxfdXNlcl9jb3VudF90aW1lc2VyaWVzGAkgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhdnb2FsVXNlckNvdW50VGltZXNlcmllcxJhChtnb2FsX2V2ZW50X2NvdW50X3RpbWVzZXJpZXMYCiABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSGGdvYWxFdmVudENvdW50VGltZXNlcmllcxJdChlnb2FsX3ZhbHVlX3N1bV90aW1lc2VyaWVzGAsgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhZnb2FsVmFsdWVTdW1UaW1lc2VyaWVzElYKFWN2cl9tZWRpYW5fdGltZXNlcmllcxgMIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1ITY3ZyTWVkaWFuVGltZXNlcmllcxJkChxjdnJfcGVyY2VudGlsZTAyNV90aW1lc2VyaWVzGA0gASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhpjdnJQZXJjZW50aWxlMDI1VGltZXNlcmllcxJkChxjdnJfcGVyY2VudGlsZTk3NV90aW1lc2VyaWVzGA4gASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUhpjdnJQZXJjZW50aWxlOTc1VGltZXNlcmllcxJJCg5jdnJfdGltZXNlcmllcxgPIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1INY3ZyVGltZXNlcmllcxJtCiJnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl90aW1lc2VyaWVzGBAgASgLMiIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5UaW1lc2VyaWVzUh1nb2FsVmFsdWVTdW1QZXJVc2VyVGltZXNlcmllcxJqChxnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wcm9iGBEgASgLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5EaXN0cmlidXRpb25TdW1tYXJ5Uhdnb2FsVmFsdWVTdW1QZXJVc2VyUHJvYhJzCiFnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wcm9iX2Jlc3QYEiABKAsyKy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkRpc3RyaWJ1dGlvblN1bW1hcnlSG2dvYWxWYWx1ZVN1bVBlclVzZXJQcm9iQmVzdBKEAQoqZ29hbF92YWx1ZV9zdW1fcGVyX3VzZXJfcHJvYl9iZWF0X2Jhc2VsaW5lGBMgASgLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5EaXN0cmlidXRpb25TdW1tYXJ5UiNnb2FsVmFsdWVTdW1QZXJVc2VyUHJvYkJlYXRCYXNlbGluZRJ6Cilnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9tZWRpYW5fdGltZXNlcmllcxgUIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IjZ29hbFZhbHVlU3VtUGVyVXNlck1lZGlhblRpbWVzZXJpZXMSiAEKMGdvYWxfdmFsdWVfc3VtX3Blcl91c2VyX3BlcmNlbnRpbGUwMjVfdGltZXNlcmllcxgVIAEoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVGltZXNlcmllc1IqZ29hbFZhbHVlU3VtUGVyVXNlclBlcmNlbnRpbGUwMjVUaW1lc2VyaWVzEogBCjBnb2FsX3ZhbHVlX3N1bV9wZXJfdXNlcl9wZXJjZW50aWxlOTc1X3RpbWVzZXJpZXMYFiABKAsyIi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlRpbWVzZXJpZXNSKmdvYWxWYWx1ZVN1bVBlclVzZXJQZXJjZW50aWxlOTc1VGltZXNlcmllc0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKpgIKJHByb3RvL2V2ZW50Y291bnRlci9nb2FsX3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchopcHJvdG8vZXZlbnRjb3VudGVyL3ZhcmlhdGlvbl9yZXN1bHQucHJvdG8iewoKR29hbFJlc3VsdBIXCgdnb2FsX2lkGAEgASgJUgZnb2FsSWQSVAoRdmFyaWF0aW9uX3Jlc3VsdHMYAiADKAsyJy5idWNrZXRlZXIuZXZlbnRjb3VudGVyLlZhcmlhdGlvblJlc3VsdFIQdmFyaWF0aW9uUmVzdWx0c0I2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMK2gIKKnByb3RvL2V2ZW50Y291bnRlci9leHBlcmltZW50X3Jlc3VsdC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50Y291bnRlchokcHJvdG8vZXZlbnRjb3VudGVyL2dvYWxfcmVzdWx0LnByb3RvIq0BChBFeHBlcmltZW50UmVzdWx0Eg4KAmlkGAEgASgJUgJpZBIjCg1leHBlcmltZW50X2lkGAIgASgJUgxleHBlcmltZW50SWQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EkUKDGdvYWxfcmVzdWx0cxgEIAMoCzIiLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR29hbFJlc3VsdFILZ29hbFJlc3VsdHNCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8zCuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCvsBCh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI6CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW5vc0KDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9kdXJhdGlvbnBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCp4CChpwcm90by9mZWF0dXJlL3JlYXNvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUisQEKBlJlYXNvbhIyCgR0eXBlGAEgASgOMh4uYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uLlR5cGVSBHR5cGUSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIloKBFR5cGUSCgoGVEFSR0VUEAASCAoEUlVMRRABEgsKB0RFRkFVTFQQAxIKCgZDTElFTlQQBBIRCg1PRkZfVkFSSUFUSU9OEAUSEAoMUFJFUkVRVUlTSVRFEAZCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqYBgoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvIuMCCgpFdmFsdWF0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIXCgd1c2VyX2lkGAQgASgJUgZ1c2VySWQSIQoMdmFyaWF0aW9uX2lkGAUgASgJUgt2YXJpYXRpb25JZBI+Cgl2YXJpYXRpb24YBiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25CAhgBUgl2YXJpYXRpb24SMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SJwoPdmFyaWF0aW9uX3ZhbHVlGAggASgJUg52YXJpYXRpb25WYWx1ZRIlCg52YXJpYXRpb25fbmFtZRgJIAEoCVINdmFyaWF0aW9uTmFtZSKGAgoPVXNlckV2YWx1YXRpb25zEhIKAmlkGAEgASgJQgIYAVICaWQSPwoLZXZhbHVhdGlvbnMYAiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uUgtldmFsdWF0aW9ucxIdCgpjcmVhdGVkX2F0GAMgASgDUgljcmVhdGVkQXQSMAoUYXJjaGl2ZWRfZmVhdHVyZV9pZHMYBCADKAlSEmFyY2hpdmVkRmVhdHVyZUlkcxIhCgxmb3JjZV91cGRhdGUYBSABKAhSC2ZvcmNlVXBkYXRlIioKBVN0YXRlEgoKBlFVRVVFRBAAEgsKB1BBUlRJQUwQARIICgRGVUxMEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrABAoVcHJvdG8vdXNlci91c2VyLnByb3RvEg5idWNrZXRlZXIudXNlciLeAwoEVXNlchIOCgJpZBgBIAEoCVICaWQSMgoEZGF0YRgCIAMoCzIeLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YUVudHJ5UgRkYXRhEkUKC3RhZ2dlZF9kYXRhGAMgAygLMiQuYnVja2V0ZWVyLnVzZXIuVXNlci5UYWdnZWREYXRhRW50cnlSCnRhZ2dlZERhdGESGwoJbGFzdF9zZWVuGAQgASgDUghsYXN0U2VlbhIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQafAoERGF0YRI6CgV2YWx1ZRgBIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YS5WYWx1ZUVudHJ5UgV2YWx1ZRo4CgpWYWx1ZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaNwoJRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaWAoPVGFnZ2VkRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuYnVja2V0ZWVyLnVzZXIuVXNlci5EYXRhUgV2YWx1ZToCOAFCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3VzZXJiBnByb3RvMwrGNAoecHJvdG8vZXZlbnQvY2xpZW50L2V2ZW50LnByb3RvEhZidWNrZXRlZXIuZXZlbnQuY2xpZW50Ghlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxoacHJvdG8vZmVhdHVyZS9yZWFzb24ucHJvdG8aFXByb3RvL3VzZXIvdXNlci5wcm90byJwCgVFdmVudBIOCgJpZBgBIAEoCVICaWQSKgoFZXZlbnQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgVldmVudBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCKSBAoPRXZhbHVhdGlvbkV2ZW50EhwKCXRpbWVzdGFtcBgBIAEoA1IJdGltZXN0YW1wEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhcKB3VzZXJfaWQYBCABKAlSBnVzZXJJZBIhCgx2YXJpYXRpb25faWQYBSABKAlSC3ZhcmlhdGlvbklkEigKBHVzZXIYBiABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEjEKBnJlYXNvbhgHIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlJlYXNvblIGcmVhc29uEhAKA3RhZxgIIAEoCVIDdGFnEj0KCXNvdXJjZV9pZBgJIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAogASgJUgpzZGtWZXJzaW9uElEKCG1ldGFkYXRhGAsgAygLMjUuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5FdmFsdWF0aW9uRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBItwDCglHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhcKB3VzZXJfaWQYAyABKAlSBnVzZXJJZBIUCgV2YWx1ZRgEIAEoAVIFdmFsdWUSKAoEdXNlchgFIAEoCzIULmJ1Y2tldGVlci51c2VyLlVzZXJSBHVzZXISQwoLZXZhbHVhdGlvbnMYBiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uQgIYAVILZXZhbHVhdGlvbnMSEAoDdGFnGAcgASgJUgN0YWcSPQoJc291cmNlX2lkGAggASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHwoLc2RrX3ZlcnNpb24YCSABKAlSCnNka1ZlcnNpb24SSwoIbWV0YWRhdGEYCiADKAsyLy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdvYWxFdmVudC5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRo7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEixQIKDE1ldHJpY3NFdmVudBIcCgl0aW1lc3RhbXAYASABKANSCXRpbWVzdGFtcBIqCgVldmVudBgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBWV2ZW50Ej0KCXNvdXJjZV9pZBgDIAEoDjIgLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU291cmNlSWRSCHNvdXJjZUlkEh8KC3Nka192ZXJzaW9uGAQgASgJUgpzZGtWZXJzaW9uEk4KCG1ldGFkYXRhGAUgAygLMjIuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5NZXRyaWNzRXZlbnQuTWV0YWRhdGFFbnRyeVIIbWV0YWRhdGEaOwoNTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvYBCiBHZXRFdmFsdWF0aW9uTGF0ZW5jeU1ldHJpY3NFdmVudBJcCgZsYWJlbHMYASADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25MYXRlbmN5TWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSNQoIZHVyYXRpb24YAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SCGR1cmF0aW9uGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAE6AhgBItYBCh1HZXRFdmFsdWF0aW9uU2l6ZU1ldHJpY3NFdmVudBJZCgZsYWJlbHMYASADKAsyQS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkdldEV2YWx1YXRpb25TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAIgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBOgIYASK5AgoTTGF0ZW5jeU1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJPCgZsYWJlbHMYAiADKAsyNy5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkxhdGVuY3lNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxI5CghkdXJhdGlvbhgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkICGAFSCGR1cmF0aW9uEiUKDmxhdGVuY3lfc2Vjb25kGAQgASgBUg1sYXRlbmN5U2Vjb25kGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi7gEKEFNpemVNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSTAoGbGFiZWxzGAIgAygLMjQuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5TaXplTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMSGwoJc2l6ZV9ieXRlGAMgASgFUghzaXplQnl0ZRo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIjUKHVRpbWVvdXRFcnJvckNvdW50TWV0cmljc0V2ZW50EhAKA3RhZxgBIAEoCVIDdGFnOgIYASI2Ch5JbnRlcm5hbEVycm9yQ291bnRNZXRyaWNzRXZlbnQSEAoDdGFnGAEgASgJUgN0YWc6AhgBIvEBCiBSZWRpcmVjdGlvblJlcXVlc3RFeGNlcHRpb25FdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJcCgZsYWJlbHMYAiADKAsyRC5idWNrZXRlZXIuZXZlbnQuY2xpZW50LlJlZGlyZWN0aW9uUmVxdWVzdEV4Y2VwdGlvbkV2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLnAQobQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElcKBmxhYmVscxgCIAMoCzI/LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQmFkUmVxdWVzdEVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLrAQodVW5hdXRob3JpemVkRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWQoGbGFiZWxzGAIgAygLMkEuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5VbmF1dGhvcml6ZWRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi5QEKGkZvcmJpZGRlbkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElYKBmxhYmVscxgCIAMoCzI+LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuRm9yYmlkZGVuRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlOb3RGb3VuZEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuTm90Rm91bmRFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6wEKHVBheWxvYWRUb29MYXJnZUV4Y2VwdGlvbkV2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElkKBmxhYmVscxgCIAMoCzJBLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuUGF5bG9hZFRvb0xhcmdlRXhjZXB0aW9uRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIvkBCiRDbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSYAoGbGFiZWxzGAIgAygLMkguYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5DbGllbnRDbG9zZWRSZXF1ZXN0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIu8BCh9JbnRlcm5hbFNlcnZlckVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElsKBmxhYmVscxgCIAMoCzJDLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxTZXJ2ZXJFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi9wEKI1NlcnZpY2VVbmF2YWlsYWJsZUVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkEl8KBmxhYmVscxgCIAMoCzJHLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuU2VydmljZVVuYXZhaWxhYmxlRXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuEBChhUaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSVAoGbGFiZWxzGAIgAygLMjwuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5UaW1lb3V0RXJyb3JNZXRyaWNzRXZlbnQuTGFiZWxzRW50cnlSBmxhYmVscxo5CgtMYWJlbHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBIuMBChlJbnRlcm5hbEVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElUKBmxhYmVscxgCIAMoCzI9LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuSW50ZXJuYWxFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi4QEKGE5ldHdvcmtFcnJvck1ldHJpY3NFdmVudBI0CgZhcGlfaWQYASABKA4yHS5idWNrZXRlZXIuZXZlbnQuY2xpZW50LkFwaUlkUgVhcGlJZBJUCgZsYWJlbHMYAiADKAsyPC5idWNrZXRlZXIuZXZlbnQuY2xpZW50Lk5ldHdvcmtFcnJvck1ldHJpY3NFdmVudC5MYWJlbHNFbnRyeVIGbGFiZWxzGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEi6QEKHEludGVybmFsU2RrRXJyb3JNZXRyaWNzRXZlbnQSNAoGYXBpX2lkGAEgASgOMh0uYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5BcGlJZFIFYXBpSWQSWAoGbGFiZWxzGAIgAygLMkAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5JbnRlcm5hbFNka0Vycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLhAQoYVW5rbm93bkVycm9yTWV0cmljc0V2ZW50EjQKBmFwaV9pZBgBIAEoDjIdLmJ1Y2tldGVlci5ldmVudC5jbGllbnQuQXBpSWRSBWFwaUlkElQKBmxhYmVscxgCIAMoCzI8LmJ1Y2tldGVlci5ldmVudC5jbGllbnQuVW5rbm93bkVycm9yTWV0cmljc0V2ZW50LkxhYmVsc0VudHJ5UgZsYWJlbHMaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ASLFAQoIT3BzRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgDIAEoBVIOZmVhdHVyZVZlcnNpb24SIQoMdmFyaWF0aW9uX2lkGAQgASgJUgt2YXJpYXRpb25JZBIXCgdnb2FsX2lkGAUgASgJUgZnb2FsSWQSFwoHdXNlcl9pZBgGIAEoCVIGdXNlcklkIlwKDVVzZXJHb2FsRXZlbnQSHAoJdGltZXN0YW1wGAEgASgDUgl0aW1lc3RhbXASFwoHZ29hbF9pZBgCIAEoCVIGZ29hbElkEhQKBXZhbHVlGAMgASgBUgV2YWx1ZSpwCghTb3VyY2VJZBILCgdVTktOT1dOEAASCwoHQU5EUk9JRBABEgcKA0lPUxACEgsKA1dFQhADGgIIARINCglHT19TRVJWRVIQBRIPCgtOT0RFX1NFUlZFUhAGEg4KCkpBVkFTQ1JJUFQQByIECAQQBCqbAQoFQXBpSWQSDwoLVU5LTk9XTl9BUEkQABISCg5HRVRfRVZBTFVBVElPThABEhMKD0dFVF9FVkFMVUFUSU9OUxACEhMKD1JFR0lTVEVSX0VWRU5UUxADEhUKEUdFVF9GRUFUVVJFX0ZMQUdTEAQSFQoRR0VUX1NFR01FTlRfVVNFUlMQBRIVChFTREtfR0VUX1ZBUklBVElPThBkQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudC9jbGllbnRiBnByb3RvMwq1BAokcHJvdG8vZXZlbnRjb3VudGVyL21hdV9zdW1tYXJ5LnByb3RvEhZidWNrZXRlZXIuZXZlbnRjb3VudGVyGh5wcm90by9ldmVudC9jbGllbnQvZXZlbnQucHJvdG8ilAMKCk1BVVN1bW1hcnkSHAoJeWVhcm1vbnRoGAEgASgJUgl5ZWFybW9udGgSJQoOZW52aXJvbm1lbnRfaWQYAiABKAlSDWVudmlyb25tZW50SWQSPQoJc291cmNlX2lkGAMgASgOMiAuYnVja2V0ZWVyLmV2ZW50LmNsaWVudC5Tb3VyY2VJZFIIc291cmNlSWQSHQoKdXNlcl9jb3VudBgEIAEoA1IJdXNlckNvdW50EiMKDXJlcXVlc3RfY291bnQYBSABKANSDHJlcXVlc3RDb3VudBIpChBldmFsdWF0aW9uX2NvdW50GAYgASgDUg9ldmFsdWF0aW9uQ291bnQSHQoKZ29hbF9jb3VudBgHIAEoA1IJZ29hbENvdW50EhUKBmlzX2FsbBgIIAEoCFIFaXNBbGwSHwoLaXNfZmluaXNoZWQYCSABKAhSCmlzRmluaXNoZWQSHQoKY3JlYXRlZF9hdBgKIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCyABKANSCXVwZGF0ZWRBdEI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnRjb3VudGVyYgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwrhIwogcHJvdG8vZXZlbnRjb3VudGVyL3NlcnZpY2UucHJvdG8SFmJ1Y2tldGVlci5ldmVudGNvdW50ZXIaHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxoqcHJvdG8vZXZlbnRjb3VudGVyL2V4cGVyaW1lbnRfcmVzdWx0LnByb3RvGiNwcm90by9ldmVudGNvdW50ZXIvdGltZXNlcmllcy5wcm90bxoocHJvdG8vZXZlbnRjb3VudGVyL3ZhcmlhdGlvbl9jb3VudC5wcm90byLxAQojR2V0RXhwZXJpbWVudEV2YWx1YXRpb25Db3VudFJlcXVlc3QSGQoIc3RhcnRfYXQYAiABKANSB3N0YXJ0QXQSFQoGZW5kX2F0GAMgASgDUgVlbmRBdBIdCgpmZWF0dXJlX2lkGAQgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAUgASgFUg5mZWF0dXJlVmVyc2lvbhIjCg12YXJpYXRpb25faWRzGAYgAygJUgx2YXJpYXRpb25JZHMSJQoOZW52aXJvbm1lbnRfaWQYByABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiwQEKJEdldEV4cGVyaW1lbnRFdmFsdWF0aW9uQ291bnRSZXNwb25zZRIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAIgASgFUg5mZWF0dXJlVmVyc2lvbhJRChB2YXJpYXRpb25fY291bnRzGAMgAygLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudFIPdmFyaWF0aW9uQ291bnRzIrwCCiNHZXRFdmFsdWF0aW9uVGltZXNlcmllc0NvdW50UmVxdWVzdBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSZAoKdGltZV9yYW5nZRgDIAEoDjJFLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlcXVlc3QuVGltZVJhbmdlUgl0aW1lUmFuZ2USJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWQiYwoJVGltZVJhbmdlEgsKB1VOS05PV04QABIVChFUV0VOVFlfRk9VUl9IT1VSUxABEg4KClNFVkVOX0RBWVMQAhIRCg1GT1VSVEVFTl9EQVlTEAMSDwoLVEhJUlRZX0RBWVMQBEoECAEQAiLEAQokR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlc3BvbnNlEkwKC3VzZXJfY291bnRzGAEgAygLMisuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25UaW1lc2VyaWVzUgp1c2VyQ291bnRzEk4KDGV2ZW50X2NvdW50cxgCIAMoCzIrLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuVmFyaWF0aW9uVGltZXNlcmllc1ILZXZlbnRDb3VudHMibgoaR2V0RXhwZXJpbWVudFJlc3VsdFJlcXVlc3QSIwoNZXhwZXJpbWVudF9pZBgCIAEoCVIMZXhwZXJpbWVudElkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACInQKG0dldEV4cGVyaW1lbnRSZXN1bHRSZXNwb25zZRJVChFleHBlcmltZW50X3Jlc3VsdBgBIAEoCzIoLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuRXhwZXJpbWVudFJlc3VsdFIQZXhwZXJpbWVudFJlc3VsdCKwAQocTGlzdEV4cGVyaW1lbnRSZXN1bHRzUmVxdWVzdBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSRAoPZmVhdHVyZV92ZXJzaW9uGAIgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSDmZlYXR1cmVWZXJzaW9uEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIuMBCh1MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXNwb25zZRJcCgdyZXN1bHRzGAEgAygLMkIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXNwb25zZS5SZXN1bHRzRW50cnlSB3Jlc3VsdHMaZAoMUmVzdWx0c0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ej4KBXZhbHVlGAIgASgLMiguYnVja2V0ZWVyLmV2ZW50Y291bnRlci5FeHBlcmltZW50UmVzdWx0UgV2YWx1ZToCOAEihAIKHUdldEV4cGVyaW1lbnRHb2FsQ291bnRSZXF1ZXN0EhkKCHN0YXJ0X2F0GAIgASgDUgdzdGFydEF0EhUKBmVuZF9hdBgDIAEoA1IFZW5kQXQSFwoHZ29hbF9pZBgEIAEoCVIGZ29hbElkEh0KCmZlYXR1cmVfaWQYBSABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YBiABKAVSDmZlYXR1cmVWZXJzaW9uEiMKDXZhcmlhdGlvbl9pZHMYByADKAlSDHZhcmlhdGlvbklkcxIlCg5lbnZpcm9ubWVudF9pZBgIIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiKMAQoeR2V0RXhwZXJpbWVudEdvYWxDb3VudFJlc3BvbnNlEhcKB2dvYWxfaWQYASABKAlSBmdvYWxJZBJRChB2YXJpYXRpb25fY291bnRzGAIgAygLMiYuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5WYXJpYXRpb25Db3VudFIPdmFyaWF0aW9uQ291bnRzIvcBCiBHZXRPcHNFdmFsdWF0aW9uVXNlckNvdW50UmVxdWVzdBIeCgtvcHNfcnVsZV9pZBgCIAEoCVIJb3BzUnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQSHQoKZmVhdHVyZV9pZBgEIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgFIAEoBVIOZmVhdHVyZVZlcnNpb24SIQoMdmFyaWF0aW9uX2lkGAYgASgJUgt2YXJpYXRpb25JZBIlCg5lbnZpcm9ubWVudF9pZBgHIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiJ2CiFHZXRPcHNFdmFsdWF0aW9uVXNlckNvdW50UmVzcG9uc2USHgoLb3BzX3J1bGVfaWQYASABKAlSCW9wc1J1bGVJZBIbCgljbGF1c2VfaWQYAiABKAlSCGNsYXVzZUlkEhQKBWNvdW50GAMgASgDUgVjb3VudCLxAQoaR2V0T3BzR29hbFVzZXJDb3VudFJlcXVlc3QSHgoLb3BzX3J1bGVfaWQYAiABKAlSCW9wc1J1bGVJZBIbCgljbGF1c2VfaWQYAyABKAlSCGNsYXVzZUlkEh0KCmZlYXR1cmVfaWQYBCABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YBSABKAVSDmZlYXR1cmVWZXJzaW9uEiEKDHZhcmlhdGlvbl9pZBgGIAEoCVILdmFyaWF0aW9uSWQSJQoOZW52aXJvbm1lbnRfaWQYByABKAlSDWVudmlyb25tZW50SWRKBAgBEAIicAobR2V0T3BzR29hbFVzZXJDb3VudFJlc3BvbnNlEh4KC29wc19ydWxlX2lkGAEgASgJUglvcHNSdWxlSWQSGwoJY2xhdXNlX2lkGAIgASgJUghjbGF1c2VJZBIUCgVjb3VudBgDIAEoA1IFY291bnQiYAoSR2V0TUFVQ291bnRSZXF1ZXN0Eh0KCnllYXJfbW9udGgYAiABKAlSCXllYXJNb250aBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiJVChNHZXRNQVVDb3VudFJlc3BvbnNlEh8KC2V2ZW50X2NvdW50GAEgASgDUgpldmVudENvdW50Eh0KCnVzZXJfY291bnQYAiABKANSCXVzZXJDb3VudCJbChlTdW1tYXJpemVNQVVDb3VudHNSZXF1ZXN0Eh0KCnllYXJfbW9udGgYASABKAlSCXllYXJNb250aBIfCgtpc19maW5pc2hlZBgCIAEoCFIKaXNGaW5pc2hlZCIcChpTdW1tYXJpemVNQVVDb3VudHNSZXNwb25zZTLqCQoTRXZlbnRDb3VudGVyU2VydmljZRKbAQocR2V0RXhwZXJpbWVudEV2YWx1YXRpb25Db3VudBI7LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXhwZXJpbWVudEV2YWx1YXRpb25Db3VudFJlcXVlc3QaPC5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldEV4cGVyaW1lbnRFdmFsdWF0aW9uQ291bnRSZXNwb25zZSIAEpsBChxHZXRFdmFsdWF0aW9uVGltZXNlcmllc0NvdW50EjsuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFdmFsdWF0aW9uVGltZXNlcmllc0NvdW50UmVxdWVzdBo8LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXZhbHVhdGlvblRpbWVzZXJpZXNDb3VudFJlc3BvbnNlIgASgAEKE0dldEV4cGVyaW1lbnRSZXN1bHQSMi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldEV4cGVyaW1lbnRSZXN1bHRSZXF1ZXN0GjMuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFeHBlcmltZW50UmVzdWx0UmVzcG9uc2UiABKGAQoVTGlzdEV4cGVyaW1lbnRSZXN1bHRzEjQuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXF1ZXN0GjUuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5MaXN0RXhwZXJpbWVudFJlc3VsdHNSZXNwb25zZSIAEokBChZHZXRFeHBlcmltZW50R29hbENvdW50EjUuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRFeHBlcmltZW50R29hbENvdW50UmVxdWVzdBo2LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0RXhwZXJpbWVudEdvYWxDb3VudFJlc3BvbnNlIgASaAoLR2V0TUFVQ291bnQSKi5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldE1BVUNvdW50UmVxdWVzdBorLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0TUFVQ291bnRSZXNwb25zZSIAEn0KElN1bW1hcml6ZU1BVUNvdW50cxIxLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuU3VtbWFyaXplTUFVQ291bnRzUmVxdWVzdBoyLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuU3VtbWFyaXplTUFVQ291bnRzUmVzcG9uc2UiABKSAQoZR2V0T3BzRXZhbHVhdGlvblVzZXJDb3VudBI4LmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0T3BzRXZhbHVhdGlvblVzZXJDb3VudFJlcXVlc3QaOS5idWNrZXRlZXIuZXZlbnRjb3VudGVyLkdldE9wc0V2YWx1YXRpb25Vc2VyQ291bnRSZXNwb25zZSIAEoABChNHZXRPcHNHb2FsVXNlckNvdW50EjIuYnVja2V0ZWVyLmV2ZW50Y291bnRlci5HZXRPcHNHb2FsVXNlckNvdW50UmVxdWVzdBozLmJ1Y2tldGVlci5ldmVudGNvdW50ZXIuR2V0T3BzR29hbFVzZXJDb3VudFJlc3BvbnNlIgBCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V2ZW50Y291bnRlcmIGcHJvdG8z + autoopsDescriptor: CuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCpoLChpwcm90by9hdXRvb3BzL2NsYXVzZS5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8ihgEKBkNsYXVzZRIOCgJpZBgBIAEoCVICaWQSLAoGY2xhdXNlGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIGY2xhdXNlEj4KC2FjdGlvbl90eXBlGAMgASgOMh0uYnVja2V0ZWVyLmF1dG9vcHMuQWN0aW9uVHlwZVIKYWN0aW9uVHlwZSLfAgoST3BzRXZlbnRSYXRlQ2xhdXNlEiEKDHZhcmlhdGlvbl9pZBgCIAEoCVILdmFyaWF0aW9uSWQSFwoHZ29hbF9pZBgDIAEoCVIGZ29hbElkEhsKCW1pbl9jb3VudBgEIAEoA1IIbWluQ291bnQSKQoQdGhyZWFkc2hvbGRfcmF0ZRgFIAEoAVIPdGhyZWFkc2hvbGRSYXRlEkoKCG9wZXJhdG9yGAYgASgOMi4uYnVja2V0ZWVyLmF1dG9vcHMuT3BzRXZlbnRSYXRlQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvchI+CgthY3Rpb25fdHlwZRgHIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUiMwoIT3BlcmF0b3ISFAoQR1JFQVRFUl9PUl9FUVVBTBAAEhEKDUxFU1NfT1JfRVFVQUwQAUoECAEQAiJkCg5EYXRldGltZUNsYXVzZRISCgR0aW1lGAEgASgDUgR0aW1lEj4KC2FjdGlvbl90eXBlGAIgASgOMh0uYnVja2V0ZWVyLmF1dG9vcHMuQWN0aW9uVHlwZVIKYWN0aW9uVHlwZSKXAQoaUHJvZ3Jlc3NpdmVSb2xsb3V0U2NoZWR1bGUSHwoLc2NoZWR1bGVfaWQYASABKAlSCnNjaGVkdWxlSWQSHQoKZXhlY3V0ZV9hdBgCIAEoA1IJZXhlY3V0ZUF0EhYKBndlaWdodBgDIAEoBVIGd2VpZ2h0EiEKDHRyaWdnZXJlZF9hdBgEIAEoA1ILdHJpZ2dlcmVkQXQimAEKJlByb2dyZXNzaXZlUm9sbG91dE1hbnVhbFNjaGVkdWxlQ2xhdXNlEksKCXNjaGVkdWxlcxgBIAMoCzItLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlUglzY2hlZHVsZXMSIQoMdmFyaWF0aW9uX2lkGAIgASgJUgt2YXJpYXRpb25JZCLYAgooUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZRJLCglzY2hlZHVsZXMYASADKAsyLS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVIJc2NoZWR1bGVzEmAKCGludGVydmFsGAIgASgOMkQuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZS5JbnRlcnZhbFIIaW50ZXJ2YWwSHgoKaW5jcmVtZW50cxgDIAEoA1IKaW5jcmVtZW50cxIhCgx2YXJpYXRpb25faWQYBCABKAlSC3ZhcmlhdGlvbklkIjoKCEludGVydmFsEgsKB1VOS05PV04QABIKCgZIT1VSTFkQARIJCgVEQUlMWRACEgoKBldFRUtMWRADKjIKCkFjdGlvblR5cGUSCwoHVU5LTk9XThAAEgoKBkVOQUJMRRABEgsKB0RJU0FCTEUQAkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYXV0b29wc2IGcHJvdG8zCr0FCiFwcm90by9hdXRvb3BzL2F1dG9fb3BzX3J1bGUucHJvdG8SEWJ1Y2tldGVlci5hdXRvb3BzGhpwcm90by9hdXRvb3BzL2NsYXVzZS5wcm90byLQAgoLQXV0b09wc1J1bGUSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBI1CghvcHNfdHlwZRgDIAEoDjIaLmJ1Y2tldGVlci5hdXRvb3BzLk9wc1R5cGVSB29wc1R5cGUSMwoHY2xhdXNlcxgEIAMoCzIZLmJ1Y2tldGVlci5hdXRvb3BzLkNsYXVzZVIHY2xhdXNlcxIdCgpjcmVhdGVkX2F0GAcgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgIIAEoA1IJdXBkYXRlZEF0EhgKB2RlbGV0ZWQYCSABKAhSB2RlbGV0ZWQSSAoPYXV0b19vcHNfc3RhdHVzGAogASgOMiAuYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1N0YXR1c1INYXV0b09wc1N0YXR1c0oECAYQByJUCgxBdXRvT3BzUnVsZXMSRAoOYXV0b19vcHNfcnVsZXMYASADKAsyHi5idWNrZXRlZXIuYXV0b29wcy5BdXRvT3BzUnVsZVIMYXV0b09wc1J1bGVzKj8KB09wc1R5cGUSEAoMVFlQRV9VTktOT1dOEAASDAoIU0NIRURVTEUQAhIOCgpFVkVOVF9SQVRFEAMiBAgBEAEqRAoNQXV0b09wc1N0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMK9wUKJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8i4gQKElByb2dyZXNzaXZlUm9sbG91dBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiwKBmNsYXVzZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRJECgZzdGF0dXMYBCABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzUgZzdGF0dXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBI+CgR0eXBlGAcgASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVSBHR5cGUSTgoKc3RvcHBlZF9ieRgIIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeRIdCgpzdG9wcGVkX2F0GAkgASgDUglzdG9wcGVkQXQiMgoEVHlwZRITCg9NQU5VQUxfU0NIRURVTEUQABIVChFURU1QTEFURV9TQ0hFRFVMRRABIj0KBlN0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADIkkKCVN0b3BwZWRCeRILCgdVTktOT1dOEAASCAoEVVNFUhABEhAKDE9QU19TQ0hFRFVMRRACEhMKD09QU19LSUxMX1NXSVRDSBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMKrBEKG3Byb3RvL2F1dG9vcHMvY29tbWFuZC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaIXByb3RvL2F1dG9vcHMvYXV0b19vcHNfcnVsZS5wcm90bxoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8aJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90byKaAgoYQ3JlYXRlQXV0b09wc1J1bGVDb21tYW5kEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBI1CghvcHNfdHlwZRgCIAEoDjIaLmJ1Y2tldGVlci5hdXRvb3BzLk9wc1R5cGVSB29wc1R5cGUSWgoWb3BzX2V2ZW50X3JhdGVfY2xhdXNlcxgDIAMoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVITb3BzRXZlbnRSYXRlQ2xhdXNlcxJMChBkYXRldGltZV9jbGF1c2VzGAQgAygLMiEuYnVja2V0ZWVyLmF1dG9vcHMuRGF0ZXRpbWVDbGF1c2VSD2RhdGV0aW1lQ2xhdXNlcyIaChhEZWxldGVBdXRvT3BzUnVsZUNvbW1hbmQiGAoWU3RvcEF1dG9PcHNSdWxlQ29tbWFuZCJWChpDaGFuZ2VBdXRvT3BzU3RhdHVzQ29tbWFuZBI4CgZzdGF0dXMYASABKA4yIC5idWNrZXRlZXIuYXV0b29wcy5BdXRvT3BzU3RhdHVzUgZzdGF0dXMiOAoZRXhlY3V0ZUF1dG9PcHNSdWxlQ29tbWFuZBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkIngKHEFkZE9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmQSWAoVb3BzX2V2ZW50X3JhdGVfY2xhdXNlGAEgASgLMiUuYnVja2V0ZWVyLmF1dG9vcHMuT3BzRXZlbnRSYXRlQ2xhdXNlUhJvcHNFdmVudFJhdGVDbGF1c2UiiwEKH0NoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkElgKFW9wc19ldmVudF9yYXRlX2NsYXVzZRgCIAEoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVISb3BzRXZlbnRSYXRlQ2xhdXNlIiUKE0RlbGV0ZUNsYXVzZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkImYKGEFkZERhdGV0aW1lQ2xhdXNlQ29tbWFuZBJKCg9kYXRldGltZV9jbGF1c2UYASABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2UieQobQ2hhbmdlRGF0ZXRpbWVDbGF1c2VDb21tYW5kEg4KAmlkGAEgASgJUgJpZBJKCg9kYXRldGltZV9jbGF1c2UYAiABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2Ui4AMKH0NyZWF0ZVByb2dyZXNzaXZlUm9sbG91dENvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEpoBCipwcm9ncmVzc2l2ZV9yb2xsb3V0X21hbnVhbF9zY2hlZHVsZV9jbGF1c2UYAiABKAsyOS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZUgAUiZwcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZYgBARKgAQoscHJvZ3Jlc3NpdmVfcm9sbG91dF90ZW1wbGF0ZV9zY2hlZHVsZV9jbGF1c2UYAyABKAsyOy5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRUZW1wbGF0ZVNjaGVkdWxlQ2xhdXNlSAFSKHByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2WIAQFCLQorX3Byb2dyZXNzaXZlX3JvbGxvdXRfbWFudWFsX3NjaGVkdWxlX2NsYXVzZUIvCi1fcHJvZ3Jlc3NpdmVfcm9sbG91dF90ZW1wbGF0ZV9zY2hlZHVsZV9jbGF1c2UibwodU3RvcFByb2dyZXNzaXZlUm9sbG91dENvbW1hbmQSTgoKc3RvcHBlZF9ieRgBIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeSIhCh9EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kIoUBCjBBZGRQcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZUNvbW1hbmQSUQoGY2xhdXNlGAEgASgLMjkuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0TWFudWFsU2NoZWR1bGVDbGF1c2VSBmNsYXVzZSKJAQoyQWRkUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZUNvbW1hbmQSUwoGY2xhdXNlGAEgASgLMjsuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0VGVtcGxhdGVTY2hlZHVsZUNsYXVzZVIGY2xhdXNlIlUKMkNoYW5nZVByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlVHJpZ2dlcmVkQXRDb21tYW5kEh8KC3NjaGVkdWxlX2lkGAEgASgJUgpzY2hlZHVsZUlkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMK4QIKHXByb3RvL2F1dG9vcHMvb3BzX2NvdW50LnByb3RvEhFidWNrZXRlZXIuYXV0b29wcyLxAQoIT3BzQ291bnQSDgoCaWQYASABKAlSAmlkEicKEGF1dG9fb3BzX3J1bGVfaWQYAiABKAlSDWF1dG9PcHNSdWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZBIdCgp1cGRhdGVkX2F0GAQgASgDUgl1cGRhdGVkQXQSJgoPb3BzX2V2ZW50X2NvdW50GAUgASgDUg1vcHNFdmVudENvdW50EikKEGV2YWx1YXRpb25fY291bnQYBiABKANSD2V2YWx1YXRpb25Db3VudBIdCgpmZWF0dXJlX2lkGAcgASgJUglmZWF0dXJlSWRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dG9vcHNiBnByb3RvMwqVMAobcHJvdG8vYXV0b29wcy9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuYXV0b29wcxohcHJvdG8vYXV0b29wcy9hdXRvX29wc19ydWxlLnByb3RvGhtwcm90by9hdXRvb3BzL2NvbW1hbmQucHJvdG8aHXByb3RvL2F1dG9vcHMvb3BzX2NvdW50LnByb3RvGidwcm90by9hdXRvb3BzL3Byb2dyZXNzaXZlX3JvbGxvdXQucHJvdG8iVAoVR2V0QXV0b09wc1J1bGVSZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiJcChZHZXRBdXRvT3BzUnVsZVJlc3BvbnNlEkIKDWF1dG9fb3BzX3J1bGUYASABKAsyHi5idWNrZXRlZXIuYXV0b29wcy5BdXRvT3BzUnVsZVILYXV0b09wc1J1bGUijgEKGENyZWF0ZUF1dG9PcHNSdWxlUmVxdWVzdBJFCgdjb21tYW5kGAIgASgLMisuYnVja2V0ZWVyLmF1dG9vcHMuQ3JlYXRlQXV0b09wc1J1bGVDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhsKGUNyZWF0ZUF1dG9PcHNSdWxlUmVzcG9uc2UinAEKF0xpc3RBdXRvT3BzUnVsZXNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISHwoLZmVhdHVyZV9pZHMYBCADKAlSCmZlYXR1cmVJZHMSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgBEAIieAoYTGlzdEF1dG9PcHNSdWxlc1Jlc3BvbnNlEkQKDmF1dG9fb3BzX3J1bGVzGAEgAygLMh4uYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1J1bGVSDGF1dG9PcHNSdWxlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKaAQoWU3RvcEF1dG9PcHNSdWxlUmVxdWVzdBIOCgJpZBgCIAEoCVICaWQSQwoHY29tbWFuZBgDIAEoCzIpLmJ1Y2tldGVlci5hdXRvb3BzLlN0b3BBdXRvT3BzUnVsZUNvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiGQoXU3RvcEF1dG9PcHNSdWxlUmVzcG9uc2UingEKGERlbGV0ZUF1dG9PcHNSdWxlUmVxdWVzdBIOCgJpZBgCIAEoCVICaWQSRQoHY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5hdXRvb3BzLkRlbGV0ZUF1dG9PcHNSdWxlQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiIbChlEZWxldGVBdXRvT3BzUnVsZVJlc3BvbnNlIqIFChhVcGRhdGVBdXRvT3BzUnVsZVJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEnoKImFkZF9vcHNfZXZlbnRfcmF0ZV9jbGF1c2VfY29tbWFuZHMYBCADKAsyLy5idWNrZXRlZXIuYXV0b29wcy5BZGRPcHNFdmVudFJhdGVDbGF1c2VDb21tYW5kUh1hZGRPcHNFdmVudFJhdGVDbGF1c2VDb21tYW5kcxKDAQolY2hhbmdlX29wc19ldmVudF9yYXRlX2NsYXVzZV9jb21tYW5kcxgFIAMoCzIyLmJ1Y2tldGVlci5hdXRvb3BzLkNoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmRSIGNoYW5nZU9wc0V2ZW50UmF0ZUNsYXVzZUNvbW1hbmRzElwKFmRlbGV0ZV9jbGF1c2VfY29tbWFuZHMYBiADKAsyJi5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVDbGF1c2VDb21tYW5kUhRkZWxldGVDbGF1c2VDb21tYW5kcxJsChxhZGRfZGF0ZXRpbWVfY2xhdXNlX2NvbW1hbmRzGAcgAygLMisuYnVja2V0ZWVyLmF1dG9vcHMuQWRkRGF0ZXRpbWVDbGF1c2VDb21tYW5kUhlhZGREYXRldGltZUNsYXVzZUNvbW1hbmRzEnUKH2NoYW5nZV9kYXRldGltZV9jbGF1c2VfY29tbWFuZHMYCCADKAsyLi5idWNrZXRlZXIuYXV0b29wcy5DaGFuZ2VEYXRldGltZUNsYXVzZUNvbW1hbmRSHGNoYW5nZURhdGV0aW1lQ2xhdXNlQ29tbWFuZHMSJQoOZW52aXJvbm1lbnRfaWQYCSABKAlSDWVudmlyb25tZW50SWRKBAgBEAJKBAgDEAQiGwoZVXBkYXRlQXV0b09wc1J1bGVSZXNwb25zZSLKAQoVRXhlY3V0ZUF1dG9PcHNSZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBJuCh1leGVjdXRlX2F1dG9fb3BzX3J1bGVfY29tbWFuZBgEIAEoCzIsLmJ1Y2tldGVlci5hdXRvb3BzLkV4ZWN1dGVBdXRvT3BzUnVsZUNvbW1hbmRSGWV4ZWN1dGVBdXRvT3BzUnVsZUNvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgBEAJKBAgDEAQiRQoWRXhlY3V0ZUF1dG9PcHNSZXNwb25zZRIrChFhbHJlYWR5X3RyaWdnZXJlZBgBIAEoCFIQYWxyZWFkeVRyaWdnZXJlZCLEAQoUTGlzdE9wc0NvdW50c1JlcXVlc3QSGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchIpChFhdXRvX29wc19ydWxlX2lkcxgEIAMoCVIOYXV0b09wc1J1bGVJZHMSHwoLZmVhdHVyZV9pZHMYBSADKAlSCmZlYXR1cmVJZHMSJQoOZW52aXJvbm1lbnRfaWQYBiABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiawoVTGlzdE9wc0NvdW50c1Jlc3BvbnNlEhYKBmN1cnNvchgBIAEoCVIGY3Vyc29yEjoKCm9wc19jb3VudHMYAiADKAsyGy5idWNrZXRlZXIuYXV0b29wcy5PcHNDb3VudFIJb3BzQ291bnRzIpwBCh9DcmVhdGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXF1ZXN0EkwKB2NvbW1hbmQYAiABKAsyMi5idWNrZXRlZXIuYXV0b29wcy5DcmVhdGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACIiIKIENyZWF0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIlsKHEdldFByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACIncKHUdldFByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlElYKE3Byb2dyZXNzaXZlX3JvbGxvdXQYASABKAsyJS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRSEnByb2dyZXNzaXZlUm9sbG91dCKoAQodU3RvcFByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEkoKB2NvbW1hbmQYAyABKAsyMC5idWNrZXRlZXIuYXV0b29wcy5TdG9wUHJvZ3Jlc3NpdmVSb2xsb3V0Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiIgCh5TdG9wUHJvZ3Jlc3NpdmVSb2xsb3V0UmVzcG9uc2UirAEKH0RlbGV0ZVByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEkwKB2NvbW1hbmQYAyABKAsyMi5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIiIKIERlbGV0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIuUECh5MaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0c1JlcXVlc3QSGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchIfCgtmZWF0dXJlX2lkcxgEIAMoCVIKZmVhdHVyZUlkcxJUCghvcmRlcl9ieRgFIAEoDjI5LmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RQcm9ncmVzc2l2ZVJvbGxvdXRzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmkKD29yZGVyX2RpcmVjdGlvbhgGIAEoDjJALmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RQcm9ncmVzc2l2ZVJvbGxvdXRzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SSQoGc3RhdHVzGAcgASgOMiwuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlN0YXR1c0gAUgZzdGF0dXOIAQESQwoEdHlwZRgIIAEoDjIqLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5UeXBlSAFSBHR5cGWIAQESJQoOZW52aXJvbm1lbnRfaWQYCSABKAlSDWVudmlyb25tZW50SWQiNgoHT3JkZXJCeRILCgdERUZBVUxUEAASDgoKQ1JFQVRFRF9BVBABEg4KClVQREFURURfQVQQAiIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFCCQoHX3N0YXR1c0IHCgVfdHlwZUoECAEQAiK0AQofTGlzdFByb2dyZXNzaXZlUm9sbG91dHNSZXNwb25zZRJYChRwcm9ncmVzc2l2ZV9yb2xsb3V0cxgBIAMoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFITcHJvZ3Jlc3NpdmVSb2xsb3V0cxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKMAgogRXhlY3V0ZVByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEqoBCi9jaGFuZ2VfcHJvZ3Jlc3NpdmVfcm9sbG91dF90cmlnZ2VyZWRfYXRfY29tbWFuZBgDIAEoCzJFLmJ1Y2tldGVlci5hdXRvb3BzLkNoYW5nZVByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlVHJpZ2dlcmVkQXRDb21tYW5kUipjaGFuZ2VQcm9ncmVzc2l2ZVJvbGxvdXRUcmlnZ2VyZWRBdENvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiIwohRXhlY3V0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlMpgNCg5BdXRvT3BzU2VydmljZRJnCg5HZXRBdXRvT3BzUnVsZRIoLmJ1Y2tldGVlci5hdXRvb3BzLkdldEF1dG9PcHNSdWxlUmVxdWVzdBopLmJ1Y2tldGVlci5hdXRvb3BzLkdldEF1dG9PcHNSdWxlUmVzcG9uc2UiABJtChBMaXN0QXV0b09wc1J1bGVzEiouYnVja2V0ZWVyLmF1dG9vcHMuTGlzdEF1dG9PcHNSdWxlc1JlcXVlc3QaKy5idWNrZXRlZXIuYXV0b29wcy5MaXN0QXV0b09wc1J1bGVzUmVzcG9uc2UiABJwChFDcmVhdGVBdXRvT3BzUnVsZRIrLmJ1Y2tldGVlci5hdXRvb3BzLkNyZWF0ZUF1dG9PcHNSdWxlUmVxdWVzdBosLmJ1Y2tldGVlci5hdXRvb3BzLkNyZWF0ZUF1dG9PcHNSdWxlUmVzcG9uc2UiABJqCg9TdG9wQXV0b09wc1J1bGUSKS5idWNrZXRlZXIuYXV0b29wcy5TdG9wQXV0b09wc1J1bGVSZXF1ZXN0GiouYnVja2V0ZWVyLmF1dG9vcHMuU3RvcEF1dG9PcHNSdWxlUmVzcG9uc2UiABJwChFEZWxldGVBdXRvT3BzUnVsZRIrLmJ1Y2tldGVlci5hdXRvb3BzLkRlbGV0ZUF1dG9PcHNSdWxlUmVxdWVzdBosLmJ1Y2tldGVlci5hdXRvb3BzLkRlbGV0ZUF1dG9PcHNSdWxlUmVzcG9uc2UiABJwChFVcGRhdGVBdXRvT3BzUnVsZRIrLmJ1Y2tldGVlci5hdXRvb3BzLlVwZGF0ZUF1dG9PcHNSdWxlUmVxdWVzdBosLmJ1Y2tldGVlci5hdXRvb3BzLlVwZGF0ZUF1dG9PcHNSdWxlUmVzcG9uc2UiABJnCg5FeGVjdXRlQXV0b09wcxIoLmJ1Y2tldGVlci5hdXRvb3BzLkV4ZWN1dGVBdXRvT3BzUmVxdWVzdBopLmJ1Y2tldGVlci5hdXRvb3BzLkV4ZWN1dGVBdXRvT3BzUmVzcG9uc2UiABJkCg1MaXN0T3BzQ291bnRzEicuYnVja2V0ZWVyLmF1dG9vcHMuTGlzdE9wc0NvdW50c1JlcXVlc3QaKC5idWNrZXRlZXIuYXV0b29wcy5MaXN0T3BzQ291bnRzUmVzcG9uc2UiABKFAQoYQ3JlYXRlUHJvZ3Jlc3NpdmVSb2xsb3V0EjIuYnVja2V0ZWVyLmF1dG9vcHMuQ3JlYXRlUHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBozLmJ1Y2tldGVlci5hdXRvb3BzLkNyZWF0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIgASfAoVR2V0UHJvZ3Jlc3NpdmVSb2xsb3V0Ei8uYnVja2V0ZWVyLmF1dG9vcHMuR2V0UHJvZ3Jlc3NpdmVSb2xsb3V0UmVxdWVzdBowLmJ1Y2tldGVlci5hdXRvb3BzLkdldFByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIgASfwoWU3RvcFByb2dyZXNzaXZlUm9sbG91dBIwLmJ1Y2tldGVlci5hdXRvb3BzLlN0b3BQcm9ncmVzc2l2ZVJvbGxvdXRSZXF1ZXN0GjEuYnVja2V0ZWVyLmF1dG9vcHMuU3RvcFByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIgAShQEKGERlbGV0ZVByb2dyZXNzaXZlUm9sbG91dBIyLmJ1Y2tldGVlci5hdXRvb3BzLkRlbGV0ZVByb2dyZXNzaXZlUm9sbG91dFJlcXVlc3QaMy5idWNrZXRlZXIuYXV0b29wcy5EZWxldGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXNwb25zZSIAEoIBChdMaXN0UHJvZ3Jlc3NpdmVSb2xsb3V0cxIxLmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RQcm9ncmVzc2l2ZVJvbGxvdXRzUmVxdWVzdBoyLmJ1Y2tldGVlci5hdXRvb3BzLkxpc3RQcm9ncmVzc2l2ZVJvbGxvdXRzUmVzcG9uc2UiABKIAQoZRXhlY3V0ZVByb2dyZXNzaXZlUm9sbG91dBIzLmJ1Y2tldGVlci5hdXRvb3BzLkV4ZWN1dGVQcm9ncmVzc2l2ZVJvbGxvdXRSZXF1ZXN0GjQuYnVja2V0ZWVyLmF1dG9vcHMuRXhlY3V0ZVByb2dyZXNzaXZlUm9sbG91dFJlc3BvbnNlIgBCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dG9vcHNiBnByb3RvMw== authDescriptor: CocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwriBQocZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIpgBCgZTdHJ1Y3QSOwoGZmllbGRzGAEgAygLMiMuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5GaWVsZHNFbnRyeVIGZmllbGRzGlEKC0ZpZWxkc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEisgIKBVZhbHVlEjsKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSABSCW51bGxWYWx1ZRIjCgxudW1iZXJfdmFsdWUYAiABKAFIAFILbnVtYmVyVmFsdWUSIwoMc3RyaW5nX3ZhbHVlGAMgASgJSABSC3N0cmluZ1ZhbHVlEh8KCmJvb2xfdmFsdWUYBCABKAhIAFIJYm9vbFZhbHVlEjwKDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAFILc3RydWN0VmFsdWUSOwoKbGlzdF92YWx1ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVIAFIJbGlzdFZhbHVlQgYKBGtpbmQiOwoJTGlzdFZhbHVlEi4KBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIGdmFsdWVzKhsKCU51bGxWYWx1ZRIOCgpOVUxMX1ZBTFVFEABCfwoTY29tLmdvb2dsZS5wcm90b2J1ZkILU3RydWN0UHJvdG9QAVovZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vc3RydWN0cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqmPgoscHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9vcGVuYXBpdjIucHJvdG8SKWdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zGhxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvIrMICgdTd2FnZ2VyEhgKB3N3YWdnZXIYASABKAlSB3N3YWdnZXISQwoEaW5mbxgCIAEoCzIvLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkluZm9SBGluZm8SEgoEaG9zdBgDIAEoCVIEaG9zdBIbCgliYXNlX3BhdGgYBCABKAlSCGJhc2VQYXRoEksKB3NjaGVtZXMYBSADKA4yMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWVSB3NjaGVtZXMSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJfCglyZXNwb25zZXMYCiADKAsyQS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyLlJlc3BvbnNlc0VudHJ5UglyZXNwb25zZXMScQoUc2VjdXJpdHlfZGVmaW5pdGlvbnMYCyABKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eURlZmluaXRpb25zUhNzZWN1cml0eURlZmluaXRpb25zEloKCHNlY3VyaXR5GAwgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudFIIc2VjdXJpdHkSQgoEdGFncxgNIAMoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IEdGFncxJlCg1leHRlcm5hbF9kb2NzGA4gASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSYgoKZXh0ZW5zaW9ucxgPIAMoCzJCLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXIuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGnEKDlJlc3BvbnNlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkkKBXZhbHVlGAIgASgLMjMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2VSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4AUoECAgQCUoECAkQCiLWBwoJT3BlcmF0aW9uEhIKBHRhZ3MYASADKAlSBHRhZ3MSGAoHc3VtbWFyeRgCIAEoCVIHc3VtbWFyeRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SZQoNZXh0ZXJuYWxfZG9jcxgEIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEiEKDG9wZXJhdGlvbl9pZBgFIAEoCVILb3BlcmF0aW9uSWQSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJhCglyZXNwb25zZXMYCSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb24uUmVzcG9uc2VzRW50cnlSCXJlc3BvbnNlcxJLCgdzY2hlbWVzGAogAygOMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1lUgdzY2hlbWVzEh4KCmRlcHJlY2F0ZWQYCyABKAhSCmRlcHJlY2F0ZWQSWgoIc2VjdXJpdHkYDCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50UghzZWN1cml0eRJkCgpleHRlbnNpb25zGA0gAygLMkQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxJVCgpwYXJhbWV0ZXJzGA4gASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUGFyYW1ldGVyc1IKcGFyYW1ldGVycxpxCg5SZXNwb25zZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRJJCgV2YWx1ZRgCIAEoCzIzLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAFKBAgIEAkiYgoKUGFyYW1ldGVycxJUCgdoZWFkZXJzGAEgAygLMjouZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUGFyYW1ldGVyUgdoZWFkZXJzIqMCCg9IZWFkZXJQYXJhbWV0ZXISEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SUwoEdHlwZRgDIAEoDjI/LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkhlYWRlclBhcmFtZXRlci5UeXBlUgR0eXBlEhYKBmZvcm1hdBgEIAEoCVIGZm9ybWF0EhoKCHJlcXVpcmVkGAUgASgIUghyZXF1aXJlZCJFCgRUeXBlEgsKB1VOS05PV04QABIKCgZTVFJJTkcQARIKCgZOVU1CRVIQAhILCgdJTlRFR0VSEAMSCwoHQk9PTEVBThAESgQIBhAHSgQIBxAIItgBCgZIZWFkZXISIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEhIKBHR5cGUYAiABKAlSBHR5cGUSFgoGZm9ybWF0GAMgASgJUgZmb3JtYXQSGAoHZGVmYXVsdBgGIAEoCVIHZGVmYXVsdBIYCgdwYXR0ZXJuGA0gASgJUgdwYXR0ZXJuSgQIBBAFSgQIBRAGSgQIBxAISgQICBAJSgQICRAKSgQIChALSgQICxAMSgQIDBANSgQIDhAPSgQIDxAQSgQIEBARSgQIERASSgQIEhATIpoFCghSZXNwb25zZRIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SSQoGc2NoZW1hGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1hUgZzY2hlbWESWgoHaGVhZGVycxgDIAMoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkhlYWRlcnNFbnRyeVIHaGVhZGVycxJdCghleGFtcGxlcxgEIAMoCzJBLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkV4YW1wbGVzRW50cnlSCGV4YW1wbGVzEmMKCmV4dGVuc2lvbnMYBSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZS5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMabQoMSGVhZGVyc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkcKBXZhbHVlGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUgV2YWx1ZToCOAEaOwoNRXhhbXBsZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBItYDCgRJbmZvEhQKBXRpdGxlGAEgASgJUgV0aXRsZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SKAoQdGVybXNfb2Zfc2VydmljZRgDIAEoCVIOdGVybXNPZlNlcnZpY2USTAoHY29udGFjdBgEIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkNvbnRhY3RSB2NvbnRhY3QSTAoHbGljZW5zZRgFIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkxpY2Vuc2VSB2xpY2Vuc2USGAoHdmVyc2lvbhgGIAEoCVIHdmVyc2lvbhJfCgpleHRlbnNpb25zGAcgAygLMj8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSW5mby5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEiRQoHQ29udGFjdBISCgRuYW1lGAEgASgJUgRuYW1lEhAKA3VybBgCIAEoCVIDdXJsEhQKBWVtYWlsGAMgASgJUgVlbWFpbCIvCgdMaWNlbnNlEhIKBG5hbWUYASABKAlSBG5hbWUSEAoDdXJsGAIgASgJUgN1cmwiSwoVRXh0ZXJuYWxEb2N1bWVudGF0aW9uEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhIQCgN1cmwYAiABKAlSA3VybCKqAgoGU2NoZW1hElYKC2pzb25fc2NoZW1hGAEgASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIKanNvblNjaGVtYRIkCg1kaXNjcmltaW5hdG9yGAIgASgJUg1kaXNjcmltaW5hdG9yEhsKCXJlYWRfb25seRgDIAEoCFIIcmVhZE9ubHkSZQoNZXh0ZXJuYWxfZG9jcxgFIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEhgKB2V4YW1wbGUYBiABKAlSB2V4YW1wbGVKBAgEEAUi1woKCkpTT05TY2hlbWESEAoDcmVmGAMgASgJUgNyZWYSFAoFdGl0bGUYBSABKAlSBXRpdGxlEiAKC2Rlc2NyaXB0aW9uGAYgASgJUgtkZXNjcmlwdGlvbhIYCgdkZWZhdWx0GAcgASgJUgdkZWZhdWx0EhsKCXJlYWRfb25seRgIIAEoCFIIcmVhZE9ubHkSGAoHZXhhbXBsZRgJIAEoCVIHZXhhbXBsZRIfCgttdWx0aXBsZV9vZhgKIAEoAVIKbXVsdGlwbGVPZhIYCgdtYXhpbXVtGAsgASgBUgdtYXhpbXVtEisKEWV4Y2x1c2l2ZV9tYXhpbXVtGAwgASgIUhBleGNsdXNpdmVNYXhpbXVtEhgKB21pbmltdW0YDSABKAFSB21pbmltdW0SKwoRZXhjbHVzaXZlX21pbmltdW0YDiABKAhSEGV4Y2x1c2l2ZU1pbmltdW0SHQoKbWF4X2xlbmd0aBgPIAEoBFIJbWF4TGVuZ3RoEh0KCm1pbl9sZW5ndGgYECABKARSCW1pbkxlbmd0aBIYCgdwYXR0ZXJuGBEgASgJUgdwYXR0ZXJuEhsKCW1heF9pdGVtcxgUIAEoBFIIbWF4SXRlbXMSGwoJbWluX2l0ZW1zGBUgASgEUghtaW5JdGVtcxIhCgx1bmlxdWVfaXRlbXMYFiABKAhSC3VuaXF1ZUl0ZW1zEiUKDm1heF9wcm9wZXJ0aWVzGBggASgEUg1tYXhQcm9wZXJ0aWVzEiUKDm1pbl9wcm9wZXJ0aWVzGBkgASgEUg1taW5Qcm9wZXJ0aWVzEhoKCHJlcXVpcmVkGBogAygJUghyZXF1aXJlZBIUCgVhcnJheRgiIAMoCVIFYXJyYXkSXwoEdHlwZRgjIAMoDjJLLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuSlNPTlNjaGVtYVNpbXBsZVR5cGVzUgR0eXBlEhYKBmZvcm1hdBgkIAEoCVIGZm9ybWF0EhIKBGVudW0YLiADKAlSBGVudW0SegoTZmllbGRfY29uZmlndXJhdGlvbhjpByABKAsySC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkZpZWxkQ29uZmlndXJhdGlvblISZmllbGRDb25maWd1cmF0aW9uEmUKCmV4dGVuc2lvbnMYMCADKAsyRS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxo8ChJGaWVsZENvbmZpZ3VyYXRpb24SJgoPcGF0aF9wYXJhbV9uYW1lGC8gASgJUg1wYXRoUGFyYW1OYW1lGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIncKFUpTT05TY2hlbWFTaW1wbGVUeXBlcxILCgdVTktOT1dOEAASCQoFQVJSQVkQARILCgdCT09MRUFOEAISCwoHSU5URUdFUhADEggKBE5VTEwQBBIKCgZOVU1CRVIQBRIKCgZPQkpFQ1QQBhIKCgZTVFJJTkcQB0oECAEQAkoECAIQA0oECAQQBUoECBIQE0oECBMQFEoECBcQGEoECBsQHEoECBwQHUoECB0QHkoECB4QIkoECCUQKkoECCoQK0oECCsQLiLZAgoDVGFnEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEmUKDWV4dGVybmFsX2RvY3MYAyABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxJeCgpleHRlbnNpb25zGAQgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASL3AQoTU2VjdXJpdHlEZWZpbml0aW9ucxJoCghzZWN1cml0eRgBIAMoCzJMLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5RGVmaW5pdGlvbnMuU2VjdXJpdHlFbnRyeVIIc2VjdXJpdHkadgoNU2VjdXJpdHlFbnRyeRIQCgNrZXkYASABKAlSA2tleRJPCgV2YWx1ZRgCIAEoCzI5LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lUgV2YWx1ZToCOAEi/wYKDlNlY3VyaXR5U2NoZW1lElIKBHR5cGUYASABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5UeXBlUgR0eXBlEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhISCgRuYW1lGAMgASgJUgRuYW1lEkwKAmluGAQgASgOMjwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuSW5SAmluElIKBGZsb3cYBSABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5GbG93UgRmbG93EisKEWF1dGhvcml6YXRpb25fdXJsGAYgASgJUhBhdXRob3JpemF0aW9uVXJsEhsKCXRva2VuX3VybBgHIAEoCVIIdG9rZW5VcmwSSQoGc2NvcGVzGAggASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NvcGVzUgZzY29wZXMSaQoKZXh0ZW5zaW9ucxgJIAMoCzJJLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJLCgRUeXBlEhAKDFRZUEVfSU5WQUxJRBAAEg4KClRZUEVfQkFTSUMQARIQCgxUWVBFX0FQSV9LRVkQAhIPCgtUWVBFX09BVVRIMhADIjEKAkluEg4KCklOX0lOVkFMSUQQABIMCghJTl9RVUVSWRABEg0KCUlOX0hFQURFUhACImoKBEZsb3cSEAoMRkxPV19JTlZBTElEEAASEQoNRkxPV19JTVBMSUNJVBABEhEKDUZMT1dfUEFTU1dPUkQQAhIUChBGTE9XX0FQUExJQ0FUSU9OEAMSFAoQRkxPV19BQ0NFU1NfQ09ERRAEIvYCChNTZWN1cml0eVJlcXVpcmVtZW50EooBChRzZWN1cml0eV9yZXF1aXJlbWVudBgBIAMoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudEVudHJ5UhNzZWN1cml0eVJlcXVpcmVtZW50GjAKGFNlY3VyaXR5UmVxdWlyZW1lbnRWYWx1ZRIUCgVzY29wZRgBIAMoCVIFc2NvcGUanwEKGFNlY3VyaXR5UmVxdWlyZW1lbnRFbnRyeRIQCgNrZXkYASABKAlSA2tleRJtCgV2YWx1ZRgCIAEoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudFZhbHVlUgV2YWx1ZToCOAEilgEKBlNjb3BlcxJSCgVzY29wZRgBIAMoCzI8LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjb3Blcy5TY29wZUVudHJ5UgVzY29wZRo4CgpTY29wZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEqOwoGU2NoZW1lEgsKB1VOS05PV04QABIICgRIVFRQEAESCQoFSFRUUFMQAhIGCgJXUxADEgcKA1dTUxAEQkhaRmdpdGh1Yi5jb20vZ3JwYy1lY29zeXN0ZW0vZ3JwYy1nYXRld2F5L3YyL3Byb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnNiBnByb3RvMwr9BgoucHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9hbm5vdGF0aW9ucy5wcm90bxIpZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMaIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvGixwcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL29wZW5hcGl2Mi5wcm90bzp+ChFvcGVuYXBpdjJfc3dhZ2dlchIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiSCCABKAsyMi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyUhBvcGVuYXBpdjJTd2FnZ2VyOoYBChNvcGVuYXBpdjJfb3BlcmF0aW9uEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYkgggASgLMjQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uUhJvcGVuYXBpdjJPcGVyYXRpb246fgoQb3BlbmFwaXYyX3NjaGVtYRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiSCCABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWFSD29wZW5hcGl2MlNjaGVtYTp1Cg1vcGVuYXBpdjJfdGFnEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJIIIAEoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IMb3BlbmFwaXYyVGFnOn4KD29wZW5hcGl2Ml9maWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYkgggASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIOb3BlbmFwaXYyRmllbGRCSFpGZ2l0aHViLmNvbS9ncnBjLWVjb3N5c3RlbS9ncnBjLWdhdGV3YXkvdjIvcHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9uc2IGcHJvdG8zCukBChZwcm90by9hdXRoL3Rva2VuLnByb3RvEg5idWNrZXRlZXIuYXV0aCKGAQoFVG9rZW4SIQoMYWNjZXNzX3Rva2VuGAEgASgJUgthY2Nlc3NUb2tlbhIdCgp0b2tlbl90eXBlGAIgASgJUgl0b2tlblR5cGUSIwoNcmVmcmVzaF90b2tlbhgDIAEoCVIMcmVmcmVzaFRva2VuEhYKBmV4cGlyeRgEIAEoA1IGZXhwaXJ5Qi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRoYgZwcm90bzMKuhoKGHByb3RvL2F1dGgvc2VydmljZS5wcm90bxIOYnVja2V0ZWVyLmF1dGgaHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8aLnByb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnMvYW5ub3RhdGlvbnMucHJvdG8aFnByb3RvL2F1dGgvdG9rZW4ucHJvdG8ihAEKG0dldEF1dGhlbnRpY2F0aW9uVVJMUmVxdWVzdBIUCgVzdGF0ZRgBIAEoCVIFc3RhdGUSIQoMcmVkaXJlY3RfdXJsGAIgASgJUgtyZWRpcmVjdFVybBIsCgR0eXBlGAMgASgOMhguYnVja2V0ZWVyLmF1dGguQXV0aFR5cGVSBHR5cGUiMAocR2V0QXV0aGVudGljYXRpb25VUkxSZXNwb25zZRIQCgN1cmwYASABKAlSA3VybCJ7ChRFeGNoYW5nZVRva2VuUmVxdWVzdBISCgRjb2RlGAEgASgJUgRjb2RlEiEKDHJlZGlyZWN0X3VybBgCIAEoCVILcmVkaXJlY3RVcmwSLAoEdHlwZRgDIAEoDjIYLmJ1Y2tldGVlci5hdXRoLkF1dGhUeXBlUgR0eXBlIkQKFUV4Y2hhbmdlVG9rZW5SZXNwb25zZRIrCgV0b2tlbhgBIAEoCzIVLmJ1Y2tldGVlci5hdXRoLlRva2VuUgV0b2tlbiI6ChNSZWZyZXNoVG9rZW5SZXF1ZXN0EiMKDXJlZnJlc2hfdG9rZW4YASABKAlSDHJlZnJlc2hUb2tlbiJDChRSZWZyZXNoVG9rZW5SZXNwb25zZRIrCgV0b2tlbhgBIAEoCzIVLmJ1Y2tldGVlci5hdXRoLlRva2VuUgV0b2tlbiJBCg1TaWduSW5SZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBIaCghwYXNzd29yZBgCIAEoCVIIcGFzc3dvcmQiPQoOU2lnbkluUmVzcG9uc2USKwoFdG9rZW4YASABKAsyFS5idWNrZXRlZXIuYXV0aC5Ub2tlblIFdG9rZW4qcgoIQXV0aFR5cGUSGQoVQVVUSF9UWVBFX1VOU1BFQ0lGSUVEEAASHwoXQVVUSF9UWVBFX1VTRVJfUEFTU1dPUkQQARoCCAESFAoQQVVUSF9UWVBFX0dPT0dMRRACEhQKEEFVVEhfVFlQRV9HSVRIVUIQAzL8EgoLQXV0aFNlcnZpY2USlAUKDUV4Y2hhbmdlVG9rZW4SJC5idWNrZXRlZXIuYXV0aC5FeGNoYW5nZVRva2VuUmVxdWVzdBolLmJ1Y2tldGVlci5hdXRoLkV4Y2hhbmdlVG9rZW5SZXNwb25zZSK1BJJBjwQKDkF1dGhlbnRpY2F0aW9uEg5FeGNoYW5nZSBUb2tlbhplRXhjaGFuZ2UgdGhlIHRva2VuIGZyb20gdGhlIE9BdXRoIHByb3ZpZGVyIHRvIHRoZSBCdWNrZXRlZXIgdG9rZW4uCkN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IEdvb2dsZS4qGndlYi52MS5hdXRoLmV4Y2hhbmdlX3Rva2VuSrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfYLT5JMCHCIXL3YxL2F1dGgvZXhjaGFuZ2VfdG9rZW46ASoSsgQKFEdldEF1dGhlbnRpY2F0aW9uVVJMEisuYnVja2V0ZWVyLmF1dGguR2V0QXV0aGVudGljYXRpb25VUkxSZXF1ZXN0GiwuYnVja2V0ZWVyLmF1dGguR2V0QXV0aGVudGljYXRpb25VUkxSZXNwb25zZSK+A5JBlAMKDkF1dGhlbnRpY2F0aW9uEhZHZXQgQXV0aGVudGljYXRpb24gVVJMGpIBVGhlIE9BdXRoIGNyZWRlbnRpYWxzIG11c3QgYmUgY29uZmlndXJlZCBvbiB0aGUgc2VydmVyIHRvIGNhbGwgdGhpcyBBUEkuIEl0IHdpbGwgcmV0dXJuIHRoZSBBdXRoZW50aWNhdGlvbiBVUkwuCkN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IEdvb2dsZS4qHndlYi52MS5hdXRoLmF1dGhlbnRpY2F0aW9uX3VybEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfYLT5JMCICIbL3YxL2F1dGgvYXV0aGVudGljYXRpb25fdXJsOgEqEuMECgxSZWZyZXNoVG9rZW4SIy5idWNrZXRlZXIuYXV0aC5SZWZyZXNoVG9rZW5SZXF1ZXN0GiQuYnVja2V0ZWVyLmF1dGguUmVmcmVzaFRva2VuUmVzcG9uc2UihwSSQeIDCg5BdXRoZW50aWNhdGlvbhINUmVmcmVzaCBUb2tlbho6UmVmcmVzaCB0aGUgQnVja2V0ZWVyIHRva2VuIG1haW50YWluZWQgYnkgdGhlIHdlYiBjb25zb2xlLioZd2ViLnYxLmF1dGgucmVmcmVzaF90b2tlbkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhsiFi92MS9hdXRoL3JlZnJlc2hfdG9rZW46ASoSugQKBlNpZ25JbhIdLmJ1Y2tldGVlci5hdXRoLlNpZ25JblJlcXVlc3QaHi5idWNrZXRlZXIuYXV0aC5TaWduSW5SZXNwb25zZSLwA5JB0gMKDkF1dGhlbnRpY2F0aW9uEgdTaWduIEluGjdTaWduIGluIG9uIHRoZSB3ZWIgY29uc29sZSB1c2luZyBhbiBlbWFpbCBhbmQgcGFzc3dvcmQuKhJ3ZWIudjEuYXV0aC5zaWduaW5KtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIUIg8vdjEvYXV0aC9zaWduaW46ASpCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dGhiBnByb3RvMw== - notificationDescriptor: CvADCiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uIrcCCglSZWNpcGllbnQSOgoEdHlwZRgBIAEoDjImLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50LlR5cGVSBHR5cGUSZQoXc2xhY2tfY2hhbm5lbF9yZWNpcGllbnQYAiABKAsyLS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlNsYWNrQ2hhbm5lbFJlY2lwaWVudFIVc2xhY2tDaGFubmVsUmVjaXBpZW50EkYKCGxhbmd1YWdlGAMgASgOMiouYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnQuTGFuZ3VhZ2VSCGxhbmd1YWdlIhgKBFR5cGUSEAoMU2xhY2tDaGFubmVsEAAiJQoITGFuZ3VhZ2USCwoHRU5HTElTSBAAEgwKCEpBUEFORVNFEAEiOAoVU2xhY2tDaGFubmVsUmVjaXBpZW50Eh8KC3dlYmhvb2tfdXJsGAEgASgJUgp3ZWJob29rVXJsQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwr9BwolcHJvdG8vbm90aWZpY2F0aW9uL3N1YnNjcmlwdGlvbi5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoicHJvdG8vbm90aWZpY2F0aW9uL3JlY2lwaWVudC5wcm90byLXBgoMU3Vic2NyaXB0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpjcmVhdGVkX2F0GAIgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EhoKCGRpc2FibGVkGAQgASgIUghkaXNhYmxlZBJSCgxzb3VyY2VfdHlwZXMYBSADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYBiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYByABKAlSBG5hbWUiswQKClNvdXJjZVR5cGUSGAoURE9NQUlOX0VWRU5UX0ZFQVRVUkUQABIVChFET01BSU5fRVZFTlRfR09BTBABEhsKF0RPTUFJTl9FVkVOVF9FWFBFUklNRU5UEAISGAoURE9NQUlOX0VWRU5UX0FDQ09VTlQQAxIXChNET01BSU5fRVZFTlRfQVBJS0VZEAQSGAoURE9NQUlOX0VWRU5UX1NFR01FTlQQBRIcChhET01BSU5fRVZFTlRfRU5WSVJPTk1FTlQQBhIeChpET01BSU5fRVZFTlRfQURNSU5fQUNDT1VOVBAHEh0KGURPTUFJTl9FVkVOVF9BVVRPT1BTX1JVTEUQCBIVChFET01BSU5fRVZFTlRfUFVTSBAJEh0KGURPTUFJTl9FVkVOVF9TVUJTQ1JJUFRJT04QChIjCh9ET01BSU5fRVZFTlRfQURNSU5fU1VCU0NSSVBUSU9OEAsSGAoURE9NQUlOX0VWRU5UX1BST0pFQ1QQDBIYChRET01BSU5fRVZFTlRfV0VCSE9PSxANEiQKIERPTUFJTl9FVkVOVF9QUk9HUkVTU0lWRV9ST0xMT1VUEA4SHQoZRE9NQUlOX0VWRU5UX09SR0FOSVpBVElPThAPEh0KGURPTUFJTl9FVkVOVF9GTEFHX1RSSUdHRVIQEBIRCg1GRUFUVVJFX1NUQUxFEGQSFwoSRVhQRVJJTUVOVF9SVU5OSU5HEMgBEg4KCU1BVV9DT1VOVBCsAkI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vbm90aWZpY2F0aW9uYgZwcm90bzMK2goKIHByb3RvL25vdGlmaWNhdGlvbi9jb21tYW5kLnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uGiVwcm90by9ub3RpZmljYXRpb24vc3Vic2NyaXB0aW9uLnByb3RvGiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvIskBCh5DcmVhdGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMSPwoJcmVjaXBpZW50GAIgASgLMiEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnRSCXJlY2lwaWVudBISCgRuYW1lGAMgASgJUgRuYW1lInwKJkFkZEFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIn8KKURlbGV0ZUFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIiAKHkVuYWJsZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZCIhCh9EaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25Db21tYW5kIiAKHkRlbGV0ZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZCI0Ch5SZW5hbWVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSLEAQoZQ3JlYXRlU3Vic2NyaXB0aW9uQ29tbWFuZBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYAiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYAyABKAlSBG5hbWUiawoVQWRkU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIm4KGERlbGV0ZVNvdXJjZVR5cGVzQ29tbWFuZBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcyIbChlFbmFibGVTdWJzY3JpcHRpb25Db21tYW5kIhwKGkRpc2FibGVTdWJzY3JpcHRpb25Db21tYW5kIhsKGURlbGV0ZVN1YnNjcmlwdGlvbkNvbW1hbmQiLwoZUmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCsA5CiBwcm90by9ub3RpZmljYXRpb24vc2VydmljZS5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGiVwcm90by9ub3RpZmljYXRpb24vc3Vic2NyaXB0aW9uLnByb3RvGiBwcm90by9ub3RpZmljYXRpb24vY29tbWFuZC5wcm90byItChtHZXRBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QSDgoCaWQYASABKAlSAmlkImgKHEdldEFkbWluU3Vic2NyaXB0aW9uUmVzcG9uc2USSAoMc3Vic2NyaXB0aW9uGAEgASgLMiQuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb25SDHN1YnNjcmlwdGlvbiK3BAodTGlzdEFkbWluU3Vic2NyaXB0aW9uc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJSCgxzb3VyY2VfdHlwZXMYAyADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxJYCghvcmRlcl9ieRgEIAEoDjI9LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdEFkbWluU3Vic2NyaXB0aW9uc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJtCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yRC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RBZG1pblN1YnNjcmlwdGlvbnNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBI2CghkaXNhYmxlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGRpc2FibGVkIkAKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQASKlAQoeTGlzdEFkbWluU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEkoKDXN1YnNjcmlwdGlvbnMYASADKAsyJC5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvblINc3Vic2NyaXB0aW9ucxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKvAQokTGlzdEVuYWJsZWRBZG1pblN1YnNjcmlwdGlvbnNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISUgoMc291cmNlX3R5cGVzGAMgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMiiwEKJUxpc3RFbmFibGVkQWRtaW5TdWJzY3JpcHRpb25zUmVzcG9uc2USSgoNc3Vic2NyaXB0aW9ucxgBIAMoCzIkLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uUg1zdWJzY3JpcHRpb25zEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yInIKHkNyZWF0ZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBJQCgdjb21tYW5kGAEgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofQ3JlYXRlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKCAQoeRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJQCgdjb21tYW5kGAIgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EZWxldGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKCAQoeRW5hYmxlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJQCgdjb21tYW5kGAIgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofRW5hYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKEAQofRGlzYWJsZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSUQoHY29tbWFuZBgCIAEoCzI3LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGlzYWJsZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZFIHY29tbWFuZCIiCiBEaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKkAwoeVXBkYXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJ3ChhhZGRfc291cmNlX3R5cGVzX2NvbW1hbmQYAiABKAsyPi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkFkZEFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kUhVhZGRTb3VyY2VUeXBlc0NvbW1hbmQSgAEKG2RlbGV0ZV9zb3VyY2VfdHlwZXNfY29tbWFuZBgDIAEoCzJBLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25Tb3VyY2VUeXBlc0NvbW1hbmRSGGRlbGV0ZVNvdXJjZVR5cGVzQ29tbWFuZBJ2ChtyZW5hbWVfc3Vic2NyaXB0aW9uX2NvbW1hbmQYBCABKAsyNi5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlbmFtZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZFIZcmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZCIhCh9VcGRhdGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIl0KFkdldFN1YnNjcmlwdGlvblJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQiYwoXR2V0U3Vic2NyaXB0aW9uUmVzcG9uc2USSAoMc3Vic2NyaXB0aW9uGAEgASgLMiQuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb25SDHN1YnNjcmlwdGlvbiLdBAoYTGlzdFN1YnNjcmlwdGlvbnNSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchJSCgxzb3VyY2VfdHlwZXMYBCADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxJTCghvcmRlcl9ieRgFIAEoDjI4LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdFN1YnNjcmlwdGlvbnNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSaAoPb3JkZXJfZGlyZWN0aW9uGAYgASgOMj8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAcgASgJUg1zZWFyY2hLZXl3b3JkEjYKCGRpc2FibGVkGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIZGlzYWJsZWQiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIqABChlMaXN0U3Vic2NyaXB0aW9uc1Jlc3BvbnNlEkoKDXN1YnNjcmlwdGlvbnMYASADKAsyJC5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvblINc3Vic2NyaXB0aW9ucxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCLfAQofTGlzdEVuYWJsZWRTdWJzY3JpcHRpb25zUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISUgoMc291cmNlX3R5cGVzGAQgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMihgEKIExpc3RFbmFibGVkU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEkoKDXN1YnNjcmlwdGlvbnMYASADKAsyJC5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvblINc3Vic2NyaXB0aW9ucxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKdAQoZQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEksKB2NvbW1hbmQYAiABKAsyMS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkNyZWF0ZVN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiHAoaQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2UirQEKGURlbGV0ZVN1YnNjcmlwdGlvblJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQSSwoHY29tbWFuZBgDIAEoCzIxLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlU3Vic2NyaXB0aW9uQ29tbWFuZFIHY29tbWFuZCIcChpEZWxldGVTdWJzY3JpcHRpb25SZXNwb25zZSKtAQoZRW5hYmxlU3Vic2NyaXB0aW9uUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJLCgdjb21tYW5kGAMgASgLMjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVTdWJzY3JpcHRpb25Db21tYW5kUgdjb21tYW5kIhwKGkVuYWJsZVN1YnNjcmlwdGlvblJlc3BvbnNlIq8BChpEaXNhYmxlU3Vic2NyaXB0aW9uUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJMCgdjb21tYW5kGAMgASgLMjIuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EaXNhYmxlU3Vic2NyaXB0aW9uQ29tbWFuZFIHY29tbWFuZCIdChtEaXNhYmxlU3Vic2NyaXB0aW9uUmVzcG9uc2UirAMKGVVwZGF0ZVN1YnNjcmlwdGlvblJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQSZgoYYWRkX3NvdXJjZV90eXBlc19jb21tYW5kGAMgASgLMi0uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5BZGRTb3VyY2VUeXBlc0NvbW1hbmRSFWFkZFNvdXJjZVR5cGVzQ29tbWFuZBJvChtkZWxldGVfc291cmNlX3R5cGVzX2NvbW1hbmQYBCABKAsyMC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRlbGV0ZVNvdXJjZVR5cGVzQ29tbWFuZFIYZGVsZXRlU291cmNlVHlwZXNDb21tYW5kEnEKG3JlbmFtZV9zdWJzY3JpcHRpb25fY29tbWFuZBgFIAEoCzIxLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZFIZcmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZCIcChpVcGRhdGVTdWJzY3JpcHRpb25SZXNwb25zZTKZEQoTTm90aWZpY2F0aW9uU2VydmljZRKDAQoUR2V0QWRtaW5TdWJzY3JpcHRpb24SMy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkdldEFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBo0LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uR2V0QWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSIAEokBChZMaXN0QWRtaW5TdWJzY3JpcHRpb25zEjUuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0QWRtaW5TdWJzY3JpcHRpb25zUmVxdWVzdBo2LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdEFkbWluU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIgASngEKHUxpc3RFbmFibGVkQWRtaW5TdWJzY3JpcHRpb25zEjwuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0RW5hYmxlZEFkbWluU3Vic2NyaXB0aW9uc1JlcXVlc3QaPS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RFbmFibGVkQWRtaW5TdWJzY3JpcHRpb25zUmVzcG9uc2UiABKMAQoXQ3JlYXRlQWRtaW5TdWJzY3JpcHRpb24SNi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkNyZWF0ZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBo3LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uQ3JlYXRlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSIAEowBChdEZWxldGVBZG1pblN1YnNjcmlwdGlvbhI2LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0GjcuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EZWxldGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIgASjAEKF0VuYWJsZUFkbWluU3Vic2NyaXB0aW9uEjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QaNy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkVuYWJsZUFkbWluU3Vic2NyaXB0aW9uUmVzcG9uc2UiABKPAQoYRGlzYWJsZUFkbWluU3Vic2NyaXB0aW9uEjcuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0GjguYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSIAEowBChdVcGRhdGVBZG1pblN1YnNjcmlwdGlvbhI2LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uVXBkYXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0GjcuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5VcGRhdGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIgASdAoPR2V0U3Vic2NyaXB0aW9uEi4uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5HZXRTdWJzY3JpcHRpb25SZXF1ZXN0Gi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5HZXRTdWJzY3JpcHRpb25SZXNwb25zZSIAEnoKEUxpc3RTdWJzY3JpcHRpb25zEjAuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3QaMS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2UiABKPAQoYTGlzdEVuYWJsZWRTdWJzY3JpcHRpb25zEjcuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0RW5hYmxlZFN1YnNjcmlwdGlvbnNSZXF1ZXN0GjguYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0RW5hYmxlZFN1YnNjcmlwdGlvbnNSZXNwb25zZSIAEn0KEkNyZWF0ZVN1YnNjcmlwdGlvbhIxLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdBoyLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2UiABJ9ChJEZWxldGVTdWJzY3JpcHRpb24SMS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRlbGV0ZVN1YnNjcmlwdGlvblJlcXVlc3QaMi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRlbGV0ZVN1YnNjcmlwdGlvblJlc3BvbnNlIgASfQoSRW5hYmxlU3Vic2NyaXB0aW9uEjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVTdWJzY3JpcHRpb25SZXF1ZXN0GjIuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVTdWJzY3JpcHRpb25SZXNwb25zZSIAEoABChNEaXNhYmxlU3Vic2NyaXB0aW9uEjIuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EaXNhYmxlU3Vic2NyaXB0aW9uUmVxdWVzdBozLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGlzYWJsZVN1YnNjcmlwdGlvblJlc3BvbnNlIgASfQoSVXBkYXRlU3Vic2NyaXB0aW9uEjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5VcGRhdGVTdWJzY3JpcHRpb25SZXF1ZXN0GjIuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5VcGRhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIAQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMw== - pushDescriptor: CuoCChhwcm90by9wdXNoL2NvbW1hbmQucHJvdG8SDmJ1Y2tldGVlci5wdXNoInEKEUNyZWF0ZVB1c2hDb21tYW5kEhIKBHRhZ3MYAiADKAlSBHRhZ3MSEgoEbmFtZRgDIAEoCVIEbmFtZRIuChNmY21fc2VydmljZV9hY2NvdW50GAQgASgMUhFmY21TZXJ2aWNlQWNjb3VudEoECAEQAiIoChJBZGRQdXNoVGFnc0NvbW1hbmQSEgoEdGFncxgBIAMoCVIEdGFncyIrChVEZWxldGVQdXNoVGFnc0NvbW1hbmQSEgoEdGFncxgBIAMoCVIEdGFncyITChFEZWxldGVQdXNoQ29tbWFuZCInChFSZW5hbWVQdXNoQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9wdXNoYgZwcm90bzMKrgIKFXByb3RvL3B1c2gvcHVzaC5wcm90bxIOYnVja2V0ZWVyLnB1c2gizAEKBFB1c2gSDgoCaWQYASABKAlSAmlkEhIKBHRhZ3MYAyADKAlSBHRhZ3MSGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBISCgRuYW1lGAUgASgJUgRuYW1lEh0KCmNyZWF0ZWRfYXQYBiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgIIAEoCVIRZmNtU2VydmljZUFjY291bnRKBAgCEANCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3B1c2hiBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCvoRChhwcm90by9wdXNoL3NlcnZpY2UucHJvdG8SDmJ1Y2tldGVlci5wdXNoGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aFXByb3RvL3B1c2gvcHVzaC5wcm90bxoYcHJvdG8vcHVzaC9jb21tYW5kLnByb3RvIuEBChFDcmVhdGVQdXNoUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEj8KB2NvbW1hbmQYAiABKAsyIS5idWNrZXRlZXIucHVzaC5DcmVhdGVQdXNoQ29tbWFuZEICGAFSB2NvbW1hbmQSEgoEdGFncxgDIAMoCVIEdGFncxISCgRuYW1lGAQgASgJUgRuYW1lEi4KE2ZjbV9zZXJ2aWNlX2FjY291bnQYBSABKAxSEWZjbVNlcnZpY2VBY2NvdW50Ij4KEkNyZWF0ZVB1c2hSZXNwb25zZRIoCgRwdXNoGAEgASgLMhQuYnVja2V0ZWVyLnB1c2guUHVzaFIEcHVzaCKsAwoRTGlzdFB1c2hlc1JlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEkQKCG9yZGVyX2J5GAQgASgOMikuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJZCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yMC5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABInsKEkxpc3RQdXNoZXNSZXNwb25zZRIsCgZwdXNoZXMYASADKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgZwdXNoZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQimQEKEURlbGV0ZVB1c2hSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USDgoCaWQYAiABKAlSAmlkEj8KB2NvbW1hbmQYAyABKAsyIS5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoQ29tbWFuZEICGAFSB2NvbW1hbmQiFAoSRGVsZXRlUHVzaFJlc3BvbnNlIrQDChFVcGRhdGVQdXNoUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJZChVhZGRfcHVzaF90YWdzX2NvbW1hbmQYAyABKAsyIi5idWNrZXRlZXIucHVzaC5BZGRQdXNoVGFnc0NvbW1hbmRCAhgBUhJhZGRQdXNoVGFnc0NvbW1hbmQSYgoYZGVsZXRlX3B1c2hfdGFnc19jb21tYW5kGAQgASgLMiUuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFRhZ3NDb21tYW5kQgIYAVIVZGVsZXRlUHVzaFRhZ3NDb21tYW5kElUKE3JlbmFtZV9wdXNoX2NvbW1hbmQYBSABKAsyIS5idWNrZXRlZXIucHVzaC5SZW5hbWVQdXNoQ29tbWFuZEICGAFSEXJlbmFtZVB1c2hDb21tYW5kEhIKBHRhZ3MYBiADKAlSBHRhZ3MSMAoEbmFtZRgHIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZSI+ChJVcGRhdGVQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2giVQoOR2V0UHVzaFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQiOwoPR2V0UHVzaFJlc3BvbnNlEigKBHB1c2gYASABKAsyFC5idWNrZXRlZXIucHVzaC5QdXNoUgRwdXNoMrcDCgtQdXNoU2VydmljZRJVCgpMaXN0UHVzaGVzEiEuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1JlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVzcG9uc2UiABJVCgpDcmVhdGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guQ3JlYXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5DcmVhdGVQdXNoUmVzcG9uc2UiABJVCgpEZWxldGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoUmVzcG9uc2UiABJVCgpVcGRhdGVQdXNoEiEuYnVja2V0ZWVyLnB1c2guVXBkYXRlUHVzaFJlcXVlc3QaIi5idWNrZXRlZXIucHVzaC5VcGRhdGVQdXNoUmVzcG9uc2UiABJMCgdHZXRQdXNoEh4uYnVja2V0ZWVyLnB1c2guR2V0UHVzaFJlcXVlc3QaHy5idWNrZXRlZXIucHVzaC5HZXRQdXNoUmVzcG9uc2UiAEIuWixnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vcHVzaGIGcHJvdG8z + notificationDescriptor: CvADCiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uIrcCCglSZWNpcGllbnQSOgoEdHlwZRgBIAEoDjImLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50LlR5cGVSBHR5cGUSZQoXc2xhY2tfY2hhbm5lbF9yZWNpcGllbnQYAiABKAsyLS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlNsYWNrQ2hhbm5lbFJlY2lwaWVudFIVc2xhY2tDaGFubmVsUmVjaXBpZW50EkYKCGxhbmd1YWdlGAMgASgOMiouYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnQuTGFuZ3VhZ2VSCGxhbmd1YWdlIhgKBFR5cGUSEAoMU2xhY2tDaGFubmVsEAAiJQoITGFuZ3VhZ2USCwoHRU5HTElTSBAAEgwKCEpBUEFORVNFEAEiOAoVU2xhY2tDaGFubmVsUmVjaXBpZW50Eh8KC3dlYmhvb2tfdXJsGAEgASgJUgp3ZWJob29rVXJsQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwr9BwolcHJvdG8vbm90aWZpY2F0aW9uL3N1YnNjcmlwdGlvbi5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoicHJvdG8vbm90aWZpY2F0aW9uL3JlY2lwaWVudC5wcm90byLXBgoMU3Vic2NyaXB0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpjcmVhdGVkX2F0GAIgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EhoKCGRpc2FibGVkGAQgASgIUghkaXNhYmxlZBJSCgxzb3VyY2VfdHlwZXMYBSADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYBiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYByABKAlSBG5hbWUiswQKClNvdXJjZVR5cGUSGAoURE9NQUlOX0VWRU5UX0ZFQVRVUkUQABIVChFET01BSU5fRVZFTlRfR09BTBABEhsKF0RPTUFJTl9FVkVOVF9FWFBFUklNRU5UEAISGAoURE9NQUlOX0VWRU5UX0FDQ09VTlQQAxIXChNET01BSU5fRVZFTlRfQVBJS0VZEAQSGAoURE9NQUlOX0VWRU5UX1NFR01FTlQQBRIcChhET01BSU5fRVZFTlRfRU5WSVJPTk1FTlQQBhIeChpET01BSU5fRVZFTlRfQURNSU5fQUNDT1VOVBAHEh0KGURPTUFJTl9FVkVOVF9BVVRPT1BTX1JVTEUQCBIVChFET01BSU5fRVZFTlRfUFVTSBAJEh0KGURPTUFJTl9FVkVOVF9TVUJTQ1JJUFRJT04QChIjCh9ET01BSU5fRVZFTlRfQURNSU5fU1VCU0NSSVBUSU9OEAsSGAoURE9NQUlOX0VWRU5UX1BST0pFQ1QQDBIYChRET01BSU5fRVZFTlRfV0VCSE9PSxANEiQKIERPTUFJTl9FVkVOVF9QUk9HUkVTU0lWRV9ST0xMT1VUEA4SHQoZRE9NQUlOX0VWRU5UX09SR0FOSVpBVElPThAPEh0KGURPTUFJTl9FVkVOVF9GTEFHX1RSSUdHRVIQEBIRCg1GRUFUVVJFX1NUQUxFEGQSFwoSRVhQRVJJTUVOVF9SVU5OSU5HEMgBEg4KCU1BVV9DT1VOVBCsAkI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vbm90aWZpY2F0aW9uYgZwcm90bzMK2goKIHByb3RvL25vdGlmaWNhdGlvbi9jb21tYW5kLnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uGiVwcm90by9ub3RpZmljYXRpb24vc3Vic2NyaXB0aW9uLnByb3RvGiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvIskBCh5DcmVhdGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMSPwoJcmVjaXBpZW50GAIgASgLMiEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnRSCXJlY2lwaWVudBISCgRuYW1lGAMgASgJUgRuYW1lInwKJkFkZEFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIn8KKURlbGV0ZUFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIiAKHkVuYWJsZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZCIhCh9EaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25Db21tYW5kIiAKHkRlbGV0ZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZCI0Ch5SZW5hbWVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSLEAQoZQ3JlYXRlU3Vic2NyaXB0aW9uQ29tbWFuZBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYAiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYAyABKAlSBG5hbWUiawoVQWRkU291cmNlVHlwZXNDb21tYW5kElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIm4KGERlbGV0ZVNvdXJjZVR5cGVzQ29tbWFuZBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcyIbChlFbmFibGVTdWJzY3JpcHRpb25Db21tYW5kIhwKGkRpc2FibGVTdWJzY3JpcHRpb25Db21tYW5kIhsKGURlbGV0ZVN1YnNjcmlwdGlvbkNvbW1hbmQiLwoZUmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCoA5CiBwcm90by9ub3RpZmljYXRpb24vc2VydmljZS5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGiVwcm90by9ub3RpZmljYXRpb24vc3Vic2NyaXB0aW9uLnByb3RvGiBwcm90by9ub3RpZmljYXRpb24vY29tbWFuZC5wcm90byItChtHZXRBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QSDgoCaWQYASABKAlSAmlkImgKHEdldEFkbWluU3Vic2NyaXB0aW9uUmVzcG9uc2USSAoMc3Vic2NyaXB0aW9uGAEgASgLMiQuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb25SDHN1YnNjcmlwdGlvbiK3BAodTGlzdEFkbWluU3Vic2NyaXB0aW9uc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJSCgxzb3VyY2VfdHlwZXMYAyADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxJYCghvcmRlcl9ieRgEIAEoDjI9LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdEFkbWluU3Vic2NyaXB0aW9uc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJtCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yRC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RBZG1pblN1YnNjcmlwdGlvbnNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBI2CghkaXNhYmxlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGRpc2FibGVkIkAKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQASKlAQoeTGlzdEFkbWluU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEkoKDXN1YnNjcmlwdGlvbnMYASADKAsyJC5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvblINc3Vic2NyaXB0aW9ucxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKvAQokTGlzdEVuYWJsZWRBZG1pblN1YnNjcmlwdGlvbnNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISUgoMc291cmNlX3R5cGVzGAMgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMiiwEKJUxpc3RFbmFibGVkQWRtaW5TdWJzY3JpcHRpb25zUmVzcG9uc2USSgoNc3Vic2NyaXB0aW9ucxgBIAMoCzIkLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uUg1zdWJzY3JpcHRpb25zEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yInIKHkNyZWF0ZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBJQCgdjb21tYW5kGAEgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofQ3JlYXRlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKCAQoeRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJQCgdjb21tYW5kGAIgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EZWxldGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKCAQoeRW5hYmxlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJQCgdjb21tYW5kGAIgASgLMjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVBZG1pblN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQiIQofRW5hYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKEAQofRGlzYWJsZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSUQoHY29tbWFuZBgCIAEoCzI3LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGlzYWJsZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZFIHY29tbWFuZCIiCiBEaXNhYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSKkAwoeVXBkYXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJ3ChhhZGRfc291cmNlX3R5cGVzX2NvbW1hbmQYAiABKAsyPi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkFkZEFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNDb21tYW5kUhVhZGRTb3VyY2VUeXBlc0NvbW1hbmQSgAEKG2RlbGV0ZV9zb3VyY2VfdHlwZXNfY29tbWFuZBgDIAEoCzJBLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlQWRtaW5TdWJzY3JpcHRpb25Tb3VyY2VUeXBlc0NvbW1hbmRSGGRlbGV0ZVNvdXJjZVR5cGVzQ29tbWFuZBJ2ChtyZW5hbWVfc3Vic2NyaXB0aW9uX2NvbW1hbmQYBCABKAsyNi5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlbmFtZUFkbWluU3Vic2NyaXB0aW9uQ29tbWFuZFIZcmVuYW1lU3Vic2NyaXB0aW9uQ29tbWFuZCIhCh9VcGRhdGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIlUKFkdldFN1YnNjcmlwdGlvblJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACImMKF0dldFN1YnNjcmlwdGlvblJlc3BvbnNlEkgKDHN1YnNjcmlwdGlvbhgBIAEoCzIkLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uUgxzdWJzY3JpcHRpb24i1QQKGExpc3RTdWJzY3JpcHRpb25zUmVxdWVzdBIbCglwYWdlX3NpemUYAiABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yElIKDHNvdXJjZV90eXBlcxgEIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzElMKCG9yZGVyX2J5GAUgASgOMjguYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0U3Vic2NyaXB0aW9uc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJoCg9vcmRlcl9kaXJlY3Rpb24YBiABKA4yPy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RTdWJzY3JpcHRpb25zUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYByABKAlSDXNlYXJjaEtleXdvcmQSNgoIZGlzYWJsZWQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghkaXNhYmxlZBIlCg5lbnZpcm9ubWVudF9pZBgJIAEoCVINZW52aXJvbm1lbnRJZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFKBAgBEAIioAEKGUxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2USSgoNc3Vic2NyaXB0aW9ucxgBIAMoCzIkLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uUg1zdWJzY3JpcHRpb25zEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50ItcBCh9MaXN0RW5hYmxlZFN1YnNjcmlwdGlvbnNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISUgoMc291cmNlX3R5cGVzGAQgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgBEAIihgEKIExpc3RFbmFibGVkU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEkoKDXN1YnNjcmlwdGlvbnMYASADKAsyJC5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvblINc3Vic2NyaXB0aW9ucxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciKVAQoZQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdBJLCgdjb21tYW5kGAIgASgLMjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVTdWJzY3JpcHRpb25Db21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhwKGkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlIqUBChlEZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBJLCgdjb21tYW5kGAMgASgLMjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EZWxldGVTdWJzY3JpcHRpb25Db21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhwKGkRlbGV0ZVN1YnNjcmlwdGlvblJlc3BvbnNlIqUBChlFbmFibGVTdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBJLCgdjb21tYW5kGAMgASgLMjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5FbmFibGVTdWJzY3JpcHRpb25Db21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhwKGkVuYWJsZVN1YnNjcmlwdGlvblJlc3BvbnNlIqcBChpEaXNhYmxlU3Vic2NyaXB0aW9uUmVxdWVzdBIOCgJpZBgCIAEoCVICaWQSTAoHY29tbWFuZBgDIAEoCzIyLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGlzYWJsZVN1YnNjcmlwdGlvbkNvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgBEAIiHQobRGlzYWJsZVN1YnNjcmlwdGlvblJlc3BvbnNlIqQDChlVcGRhdGVTdWJzY3JpcHRpb25SZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBJmChhhZGRfc291cmNlX3R5cGVzX2NvbW1hbmQYAyABKAsyLS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkFkZFNvdXJjZVR5cGVzQ29tbWFuZFIVYWRkU291cmNlVHlwZXNDb21tYW5kEm8KG2RlbGV0ZV9zb3VyY2VfdHlwZXNfY29tbWFuZBgEIAEoCzIwLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlU291cmNlVHlwZXNDb21tYW5kUhhkZWxldGVTb3VyY2VUeXBlc0NvbW1hbmQScQobcmVuYW1lX3N1YnNjcmlwdGlvbl9jb21tYW5kGAUgASgLMjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZW5hbWVTdWJzY3JpcHRpb25Db21tYW5kUhlyZW5hbWVTdWJzY3JpcHRpb25Db21tYW5kEiUKDmVudmlyb25tZW50X2lkGAYgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhwKGlVwZGF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlMpkRChNOb3RpZmljYXRpb25TZXJ2aWNlEoMBChRHZXRBZG1pblN1YnNjcmlwdGlvbhIzLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uR2V0QWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0GjQuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5HZXRBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIgASiQEKFkxpc3RBZG1pblN1YnNjcmlwdGlvbnMSNS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RBZG1pblN1YnNjcmlwdGlvbnNSZXF1ZXN0GjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5MaXN0QWRtaW5TdWJzY3JpcHRpb25zUmVzcG9uc2UiABKeAQodTGlzdEVuYWJsZWRBZG1pblN1YnNjcmlwdGlvbnMSPC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RFbmFibGVkQWRtaW5TdWJzY3JpcHRpb25zUmVxdWVzdBo9LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdEVuYWJsZWRBZG1pblN1YnNjcmlwdGlvbnNSZXNwb25zZSIAEowBChdDcmVhdGVBZG1pblN1YnNjcmlwdGlvbhI2LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uQ3JlYXRlQWRtaW5TdWJzY3JpcHRpb25SZXF1ZXN0GjcuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIgASjAEKF0RlbGV0ZUFkbWluU3Vic2NyaXB0aW9uEjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EZWxldGVBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QaNy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRlbGV0ZUFkbWluU3Vic2NyaXB0aW9uUmVzcG9uc2UiABKMAQoXRW5hYmxlQWRtaW5TdWJzY3JpcHRpb24SNi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkVuYWJsZUFkbWluU3Vic2NyaXB0aW9uUmVxdWVzdBo3LmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRW5hYmxlQWRtaW5TdWJzY3JpcHRpb25SZXNwb25zZSIAEo8BChhEaXNhYmxlQWRtaW5TdWJzY3JpcHRpb24SNy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRpc2FibGVBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QaOC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRpc2FibGVBZG1pblN1YnNjcmlwdGlvblJlc3BvbnNlIgASjAEKF1VwZGF0ZUFkbWluU3Vic2NyaXB0aW9uEjYuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5VcGRhdGVBZG1pblN1YnNjcmlwdGlvblJlcXVlc3QaNy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlVwZGF0ZUFkbWluU3Vic2NyaXB0aW9uUmVzcG9uc2UiABJ0Cg9HZXRTdWJzY3JpcHRpb24SLi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkdldFN1YnNjcmlwdGlvblJlcXVlc3QaLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkdldFN1YnNjcmlwdGlvblJlc3BvbnNlIgASegoRTGlzdFN1YnNjcmlwdGlvbnMSMC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RTdWJzY3JpcHRpb25zUmVxdWVzdBoxLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uTGlzdFN1YnNjcmlwdGlvbnNSZXNwb25zZSIAEo8BChhMaXN0RW5hYmxlZFN1YnNjcmlwdGlvbnMSNy5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RFbmFibGVkU3Vic2NyaXB0aW9uc1JlcXVlc3QaOC5idWNrZXRlZXIubm90aWZpY2F0aW9uLkxpc3RFbmFibGVkU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIgASfQoSQ3JlYXRlU3Vic2NyaXB0aW9uEjEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0GjIuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5DcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIAEn0KEkRlbGV0ZVN1YnNjcmlwdGlvbhIxLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlU3Vic2NyaXB0aW9uUmVxdWVzdBoyLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uRGVsZXRlU3Vic2NyaXB0aW9uUmVzcG9uc2UiABJ9ChJFbmFibGVTdWJzY3JpcHRpb24SMS5idWNrZXRlZXIubm90aWZpY2F0aW9uLkVuYWJsZVN1YnNjcmlwdGlvblJlcXVlc3QaMi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkVuYWJsZVN1YnNjcmlwdGlvblJlc3BvbnNlIgASgAEKE0Rpc2FibGVTdWJzY3JpcHRpb24SMi5idWNrZXRlZXIubm90aWZpY2F0aW9uLkRpc2FibGVTdWJzY3JpcHRpb25SZXF1ZXN0GjMuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5EaXNhYmxlU3Vic2NyaXB0aW9uUmVzcG9uc2UiABJ9ChJVcGRhdGVTdWJzY3JpcHRpb24SMS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlVwZGF0ZVN1YnNjcmlwdGlvblJlcXVlc3QaMi5idWNrZXRlZXIubm90aWZpY2F0aW9uLlVwZGF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlIgBCNlo0Z2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL25vdGlmaWNhdGlvbmIGcHJvdG8z + pushDescriptor: CuoCChhwcm90by9wdXNoL2NvbW1hbmQucHJvdG8SDmJ1Y2tldGVlci5wdXNoInEKEUNyZWF0ZVB1c2hDb21tYW5kEhIKBHRhZ3MYAiADKAlSBHRhZ3MSEgoEbmFtZRgDIAEoCVIEbmFtZRIuChNmY21fc2VydmljZV9hY2NvdW50GAQgASgMUhFmY21TZXJ2aWNlQWNjb3VudEoECAEQAiIoChJBZGRQdXNoVGFnc0NvbW1hbmQSEgoEdGFncxgBIAMoCVIEdGFncyIrChVEZWxldGVQdXNoVGFnc0NvbW1hbmQSEgoEdGFncxgBIAMoCVIEdGFncyITChFEZWxldGVQdXNoQ29tbWFuZCInChFSZW5hbWVQdXNoQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9wdXNoYgZwcm90bzMKrgIKFXByb3RvL3B1c2gvcHVzaC5wcm90bxIOYnVja2V0ZWVyLnB1c2gizAEKBFB1c2gSDgoCaWQYASABKAlSAmlkEhIKBHRhZ3MYAyADKAlSBHRhZ3MSGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBISCgRuYW1lGAUgASgJUgRuYW1lEh0KCmNyZWF0ZWRfYXQYBiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgIIAEoCVIRZmNtU2VydmljZUFjY291bnRKBAgCEANCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3B1c2hiBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCsgRChhwcm90by9wdXNoL3NlcnZpY2UucHJvdG8SDmJ1Y2tldGVlci5wdXNoGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aFXByb3RvL3B1c2gvcHVzaC5wcm90bxoYcHJvdG8vcHVzaC9jb21tYW5kLnByb3RvItkBChFDcmVhdGVQdXNoUmVxdWVzdBI/Cgdjb21tYW5kGAIgASgLMiEuYnVja2V0ZWVyLnB1c2guQ3JlYXRlUHVzaENvbW1hbmRCAhgBUgdjb21tYW5kEhIKBHRhZ3MYAyADKAlSBHRhZ3MSEgoEbmFtZRgEIAEoCVIEbmFtZRIuChNmY21fc2VydmljZV9hY2NvdW50GAUgASgMUhFmY21TZXJ2aWNlQWNjb3VudBIlCg5lbnZpcm9ubWVudF9pZBgGIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiI+ChJDcmVhdGVQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2gipAMKEUxpc3RQdXNoZXNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISRAoIb3JkZXJfYnkYBCABKA4yKS5idWNrZXRlZXIucHVzaC5MaXN0UHVzaGVzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5ElkKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjIwLmJ1Y2tldGVlci5wdXNoLkxpc3RQdXNoZXNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBIlCg5lbnZpcm9ubWVudF9pZBgHIAEoCVINZW52aXJvbm1lbnRJZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFKBAgBEAIiewoSTGlzdFB1c2hlc1Jlc3BvbnNlEiwKBnB1c2hlcxgBIAMoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBnB1c2hlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKNAQoRRGVsZXRlUHVzaFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEjsKB2NvbW1hbmQYAyABKAsyIS5idWNrZXRlZXIucHVzaC5EZWxldGVQdXNoQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiIUChJEZWxldGVQdXNoUmVzcG9uc2UirAMKEVVwZGF0ZVB1c2hSZXF1ZXN0Eg4KAmlkGAIgASgJUgJpZBJZChVhZGRfcHVzaF90YWdzX2NvbW1hbmQYAyABKAsyIi5idWNrZXRlZXIucHVzaC5BZGRQdXNoVGFnc0NvbW1hbmRCAhgBUhJhZGRQdXNoVGFnc0NvbW1hbmQSYgoYZGVsZXRlX3B1c2hfdGFnc19jb21tYW5kGAQgASgLMiUuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFRhZ3NDb21tYW5kQgIYAVIVZGVsZXRlUHVzaFRhZ3NDb21tYW5kElUKE3JlbmFtZV9wdXNoX2NvbW1hbmQYBSABKAsyIS5idWNrZXRlZXIucHVzaC5SZW5hbWVQdXNoQ29tbWFuZEICGAFSEXJlbmFtZVB1c2hDb21tYW5kEhIKBHRhZ3MYBiADKAlSBHRhZ3MSMAoEbmFtZRgHIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRIlCg5lbnZpcm9ubWVudF9pZBgIIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiI+ChJVcGRhdGVQdXNoUmVzcG9uc2USKAoEcHVzaBgBIAEoCzIULmJ1Y2tldGVlci5wdXNoLlB1c2hSBHB1c2giRwoOR2V0UHVzaFJlcXVlc3QSJQoOZW52aXJvbm1lbnRfaWQYASABKAlSDWVudmlyb25tZW50SWQSDgoCaWQYAiABKAlSAmlkIjsKD0dldFB1c2hSZXNwb25zZRIoCgRwdXNoGAEgASgLMhQuYnVja2V0ZWVyLnB1c2guUHVzaFIEcHVzaDK3AwoLUHVzaFNlcnZpY2USVQoKTGlzdFB1c2hlcxIhLmJ1Y2tldGVlci5wdXNoLkxpc3RQdXNoZXNSZXF1ZXN0GiIuYnVja2V0ZWVyLnB1c2guTGlzdFB1c2hlc1Jlc3BvbnNlIgASVQoKQ3JlYXRlUHVzaBIhLmJ1Y2tldGVlci5wdXNoLkNyZWF0ZVB1c2hSZXF1ZXN0GiIuYnVja2V0ZWVyLnB1c2guQ3JlYXRlUHVzaFJlc3BvbnNlIgASVQoKRGVsZXRlUHVzaBIhLmJ1Y2tldGVlci5wdXNoLkRlbGV0ZVB1c2hSZXF1ZXN0GiIuYnVja2V0ZWVyLnB1c2guRGVsZXRlUHVzaFJlc3BvbnNlIgASVQoKVXBkYXRlUHVzaBIhLmJ1Y2tldGVlci5wdXNoLlVwZGF0ZVB1c2hSZXF1ZXN0GiIuYnVja2V0ZWVyLnB1c2guVXBkYXRlUHVzaFJlc3BvbnNlIgASTAoHR2V0UHVzaBIeLmJ1Y2tldGVlci5wdXNoLkdldFB1c2hSZXF1ZXN0Gh8uYnVja2V0ZWVyLnB1c2guR2V0UHVzaFJlc3BvbnNlIgBCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3B1c2hiBnByb3RvMw== batchDescriptor: CuMFChlwcm90by9iYXRjaC9zZXJ2aWNlLnByb3RvEg9idWNrZXRlZXIuYmF0Y2giPgoPQmF0Y2hKb2JSZXF1ZXN0EisKA2pvYhgBIAEoDjIZLmJ1Y2tldGVlci5iYXRjaC5CYXRjaEpvYlIDam9iIhIKEEJhdGNoSm9iUmVzcG9uc2UqvQMKCEJhdGNoSm9iEhsKF0V4cGVyaW1lbnRTdGF0dXNVcGRhdGVyEAASHAoYRXhwZXJpbWVudFJ1bm5pbmdXYXRjaGVyEAESFwoTRmVhdHVyZVN0YWxlV2F0Y2hlchACEhMKD01hdUNvdW50V2F0Y2hlchADEhMKD0RhdGV0aW1lV2F0Y2hlchAEEhUKEUV2ZW50Q291bnRXYXRjaGVyEAUSFwoTRG9tYWluRXZlbnRJbmZvcm1lchAGEhcKE1JlZGlzQ291bnRlckRlbGV0ZXIQBxIdChlQcm9ncmVzc2l2ZVJvbGxvdXRXYXRjaGVyEAgSGAoURXhwZXJpbWVudENhbGN1bGF0b3IQCRIRCg1NYXVTdW1tYXJpemVyEAoSFwoTTWF1UGFydGl0aW9uRGVsZXRlchALEhcKE01hdVBhcnRpdGlvbkNyZWF0b3IQDBIVChFGZWF0dXJlRmxhZ0NhY2hlchANEhUKEVNlZ21lbnRVc2VyQ2FjaGVyEA4SEAoMQXBpS2V5Q2FjaGVyEA8SFgoSQXV0b09wc1J1bGVzQ2FjaGVyEBASFAoQRXhwZXJpbWVudENhY2hlchARMmgKDEJhdGNoU2VydmljZRJYCg9FeGVjdXRlQmF0Y2hKb2ISIC5idWNrZXRlZXIuYmF0Y2guQmF0Y2hKb2JSZXF1ZXN0GiEuYnVja2V0ZWVyLmJhdGNoLkJhdGNoSm9iUmVzcG9uc2UiAEIvWi1naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYmF0Y2hiBnByb3RvMw== environmentDescriptor: CtUMCh9wcm90by9lbnZpcm9ubWVudC9jb21tYW5kLnByb3RvEhVidWNrZXRlZXIuZW52aXJvbm1lbnQitQEKGkNyZWF0ZUVudmlyb25tZW50VjJDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUSGQoIdXJsX2NvZGUYAiABKAlSB3VybENvZGUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEh0KCnByb2plY3RfaWQYBCABKAlSCXByb2plY3RJZBInCg9yZXF1aXJlX2NvbW1lbnQYBSABKAhSDnJlcXVpcmVDb21tZW50IjAKGlJlbmFtZUVudmlyb25tZW50VjJDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiSQolQ2hhbmdlRGVzY3JpcHRpb25FbnZpcm9ubWVudFYyQ29tbWFuZBIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24iHQobQXJjaGl2ZUVudmlyb25tZW50VjJDb21tYW5kIh8KHVVuYXJjaGl2ZUVudmlyb25tZW50VjJDb21tYW5kIpABChRDcmVhdGVQcm9qZWN0Q29tbWFuZBInCg9vcmdhbml6YXRpb25faWQYASABKAlSDm9yZ2FuaXphdGlvbklkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEhkKCHVybF9jb2RlGAQgASgJUgd1cmxDb2RlIpUBChlDcmVhdGVUcmlhbFByb2plY3RDb21tYW5kEhIKAmlkGAEgASgJQgIYAVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWUSGQoIdXJsX2NvZGUYBCABKAlSB3VybENvZGUSHwoLb3duZXJfZW1haWwYBSABKAlSCm93bmVyRW1haWwiKgoUUmVuYW1lUHJvamVjdENvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSJDCh9DaGFuZ2VEZXNjcmlwdGlvblByb2plY3RDb21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiIWChRFbmFibGVQcm9qZWN0Q29tbWFuZCIXChVEaXNhYmxlUHJvamVjdENvbW1hbmQiHAoaQ29udmVydFRyaWFsUHJvamVjdENvbW1hbmQi0AEKGUNyZWF0ZU9yZ2FuaXphdGlvbkNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZRIZCgh1cmxfY29kZRgCIAEoCVIHdXJsQ29kZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGQoIaXNfdHJpYWwYBCABKAhSB2lzVHJpYWwSJgoPaXNfc3lzdGVtX2FkbWluGAUgASgIUg1pc1N5c3RlbUFkbWluEh8KC293bmVyX2VtYWlsGAYgASgJUgpvd25lckVtYWlsIjMKHUNoYW5nZU5hbWVPcmdhbml6YXRpb25Db21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiSAokQ2hhbmdlRGVzY3JpcHRpb25Pcmdhbml6YXRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiJGCiNDaGFuZ2VPd25lckVtYWlsT3JnYW5pemF0aW9uQ29tbWFuZBIfCgtvd25lcl9lbWFpbBgBIAEoCVIKb3duZXJFbWFpbCJGChtDaGFuZ2VSZXF1aXJlQ29tbWVudENvbW1hbmQSJwoPcmVxdWlyZV9jb21tZW50GAEgASgIUg5yZXF1aXJlQ29tbWVudCIbChlFbmFibGVPcmdhbml6YXRpb25Db21tYW5kIhwKGkRpc2FibGVPcmdhbml6YXRpb25Db21tYW5kIhwKGkFyY2hpdmVPcmdhbml6YXRpb25Db21tYW5kIh4KHFVuYXJjaGl2ZU9yZ2FuaXphdGlvbkNvbW1hbmQiIQofQ29udmVydFRyaWFsT3JnYW5pemF0aW9uQ29tbWFuZEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwrnAwojcHJvdG8vZW52aXJvbm1lbnQvZW52aXJvbm1lbnQucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudCLpAgoNRW52aXJvbm1lbnRWMhIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIZCgh1cmxfY29kZRgDIAEoCVIHdXJsQ29kZRIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb24SHQoKcHJvamVjdF9pZBgFIAEoCVIJcHJvamVjdElkEhoKCGFyY2hpdmVkGAYgASgIUghhcmNoaXZlZBIdCgpjcmVhdGVkX2F0GAcgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgIIAEoA1IJdXBkYXRlZEF0EicKD29yZ2FuaXphdGlvbl9pZBgJIAEoCVIOb3JnYW5pemF0aW9uSWQSJwoPcmVxdWlyZV9jb21tZW50GAogASgIUg5yZXF1aXJlQ29tbWVudBIsChJmZWF0dXJlX2ZsYWdfY291bnQYCyABKAVSEGZlYXR1cmVGbGFnQ291bnRCNVozZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2Vudmlyb25tZW50YgZwcm90bzMKrwQKJHByb3RvL2Vudmlyb25tZW50L29yZ2FuaXphdGlvbi5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IrADCgxPcmdhbml6YXRpb24SDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSGQoIdXJsX2NvZGUYAyABKAlSB3VybENvZGUSIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uEhoKCGRpc2FibGVkGAUgASgIUghkaXNhYmxlZBIaCghhcmNoaXZlZBgGIAEoCFIIYXJjaGl2ZWQSFAoFdHJpYWwYByABKAhSBXRyaWFsEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSIQoMc3lzdGVtX2FkbWluGAogASgIUgtzeXN0ZW1BZG1pbhIjCg1wcm9qZWN0X2NvdW50GAsgASgFUgxwcm9qZWN0Q291bnQSKwoRZW52aXJvbm1lbnRfY291bnQYDCABKAVSEGVudmlyb25tZW50Q291bnQSHQoKdXNlcl9jb3VudBgNIAEoBVIJdXNlckNvdW50Eh8KC293bmVyX2VtYWlsGA4gASgJUgpvd25lckVtYWlsQjVaM2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9lbnZpcm9ubWVudGIGcHJvdG8zCv0DCh9wcm90by9lbnZpcm9ubWVudC9wcm9qZWN0LnByb3RvEhVidWNrZXRlZXIuZW52aXJvbm1lbnQigwMKB1Byb2plY3QSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgDIAEoCFIIZGlzYWJsZWQSFAoFdHJpYWwYBCABKAhSBXRyaWFsEiMKDWNyZWF0b3JfZW1haWwYBSABKAlSDGNyZWF0b3JFbWFpbBIdCgpjcmVhdGVkX2F0GAYgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgHIAEoA1IJdXBkYXRlZEF0EhIKBG5hbWUYCCABKAlSBG5hbWUSGQoIdXJsX2NvZGUYCSABKAlSB3VybENvZGUSJwoPb3JnYW5pemF0aW9uX2lkGAogASgJUg5vcmdhbml6YXRpb25JZBIrChFlbnZpcm9ubWVudF9jb3VudBgLIAEoBVIQZW52aXJvbm1lbnRDb3VudBIsChJmZWF0dXJlX2ZsYWdfY291bnQYDCABKAVSEGZlYXR1cmVGbGFnQ291bnRCNVozZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2Vudmlyb25tZW50YgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqHBQoVZ29vZ2xlL2FwaS9odHRwLnByb3RvEgpnb29nbGUuYXBpInkKBEh0dHASKgoFcnVsZXMYASADKAsyFC5nb29nbGUuYXBpLkh0dHBSdWxlUgVydWxlcxJFCh9mdWxseV9kZWNvZGVfcmVzZXJ2ZWRfZXhwYW5zaW9uGAIgASgIUhxmdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uIrUCCghIdHRwUnVsZRIaCghzZWxlY3RvchgBIAEoCVIIc2VsZWN0b3ISEgoDZ2V0GAIgASgJSABSA2dldBISCgNwdXQYAyABKAlIAFIDcHV0EhQKBHBvc3QYBCABKAlIAFIEcG9zdBIYCgZkZWxldGUYBSABKAlIAFIGZGVsZXRlEhYKBXBhdGNoGAYgASgJSABSBXBhdGNoEjcKBmN1c3RvbRgIIAEoCzIdLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm5IAFIGY3VzdG9tEhIKBGJvZHkYByABKAlSBGJvZHkSRQoTYWRkaXRpb25hbF9iaW5kaW5ncxgLIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSEmFkZGl0aW9uYWxCaW5kaW5nc0IJCgdwYXR0ZXJuIjsKEUN1c3RvbUh0dHBQYXR0ZXJuEhIKBGtpbmQYASABKAlSBGtpbmQSEgoEcGF0aBgCIAEoCVIEcGF0aEJqCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25z+AEBogIER0FQSWIGcHJvdG8zCuFGCiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIk0KEUZpbGVEZXNjcmlwdG9yU2V0EjgKBGZpbGUYASADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b1IEZmlsZSL+BAoTRmlsZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhgKB3BhY2thZ2UYAiABKAlSB3BhY2thZ2USHgoKZGVwZW5kZW5jeRgDIAMoCVIKZGVwZW5kZW5jeRIrChFwdWJsaWNfZGVwZW5kZW5jeRgKIAMoBVIQcHVibGljRGVwZW5kZW5jeRInCg93ZWFrX2RlcGVuZGVuY3kYCyADKAVSDndlYWtEZXBlbmRlbmN5EkMKDG1lc3NhZ2VfdHlwZRgEIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SC21lc3NhZ2VUeXBlEkEKCWVudW1fdHlwZRgFIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJBCgdzZXJ2aWNlGAYgAygLMicuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9SB3NlcnZpY2USQwoJZXh0ZW5zaW9uGAcgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SNgoHb3B0aW9ucxgIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1IHb3B0aW9ucxJJChBzb3VyY2VfY29kZV9pbmZvGAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvUg5zb3VyY2VDb2RlSW5mbxIWCgZzeW50YXgYDCABKAlSBnN5bnRheBIYCgdlZGl0aW9uGA0gASgJUgdlZGl0aW9uIrkGCg9EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI7CgVmaWVsZBgCIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IFZmllbGQSQwoJZXh0ZW5zaW9uGAYgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SQQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvUgpuZXN0ZWRUeXBlEkEKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJYCg9leHRlbnNpb25fcmFuZ2UYBSADKAsyLy5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlUg5leHRlbnNpb25SYW5nZRJECgpvbmVvZl9kZWNsGAggAygLMiUuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvUglvbmVvZkRlY2wSOQoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc1IHb3B0aW9ucxJVCg5yZXNlcnZlZF9yYW5nZRgJIAMoCzIuLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAogAygJUgxyZXNlcnZlZE5hbWUaegoORXh0ZW5zaW9uUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kEkAKB29wdGlvbnMYAyABKAsyJi5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zUgdvcHRpb25zGjcKDVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIq0EChVFeHRlbnNpb25SYW5nZU9wdGlvbnMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24SWQoLZGVjbGFyYXRpb24YAiADKAsyMi5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uQgOIAQJSC2RlY2xhcmF0aW9uEmgKDHZlcmlmaWNhdGlvbhgDIAEoDjI4Lmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuVmVyaWZpY2F0aW9uU3RhdGU6ClVOVkVSSUZJRURSDHZlcmlmaWNhdGlvbhqzAQoLRGVjbGFyYXRpb24SFgoGbnVtYmVyGAEgASgFUgZudW1iZXISGwoJZnVsbF9uYW1lGAIgASgJUghmdWxsTmFtZRISCgR0eXBlGAMgASgJUgR0eXBlEiMKC2lzX3JlcGVhdGVkGAQgASgIQgIYAVIKaXNSZXBlYXRlZBIaCghyZXNlcnZlZBgFIAEoCFIIcmVzZXJ2ZWQSGgoIcmVwZWF0ZWQYBiABKAhSCHJlcGVhdGVkIjQKEVZlcmlmaWNhdGlvblN0YXRlEg8KC0RFQ0xBUkFUSU9OEAASDgoKVU5WRVJJRklFRBABKgkI6AcQgICAgAIiwQYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucxInCg9wcm90bzNfb3B0aW9uYWwYESABKAhSDnByb3RvM09wdGlvbmFsIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUVVJUkVEEAISEgoOTEFCRUxfUkVQRUFURUQQAyJjChRPbmVvZkRlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjcKB29wdGlvbnMYAiABKAsyHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zUgdvcHRpb25zIuMCChNFbnVtRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPwoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvUgV2YWx1ZRI2CgdvcHRpb25zGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zUgdvcHRpb25zEl0KDnJlc2VydmVkX3JhbmdlGAQgAygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgFIAMoCVIMcmVzZXJ2ZWROYW1lGjsKEUVudW1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCKDAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAIgASgFUgZudW1iZXISOwoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zUgdvcHRpb25zIqcBChZTZXJ2aWNlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1IGbWV0aG9kEjkKB29wdGlvbnMYAyABKAsyHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNSB29wdGlvbnMiiQIKFU1ldGhvZERlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEh0KCmlucHV0X3R5cGUYAiABKAlSCWlucHV0VHlwZRIfCgtvdXRwdXRfdHlwZRgDIAEoCVIKb3V0cHV0VHlwZRI4CgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNSB29wdGlvbnMSMAoQY2xpZW50X3N0cmVhbWluZxgFIAEoCDoFZmFsc2VSD2NsaWVudFN0cmVhbWluZxIwChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZVIPc2VydmVyU3RyZWFtaW5nIpEJCgtGaWxlT3B0aW9ucxIhCgxqYXZhX3BhY2thZ2UYASABKAlSC2phdmFQYWNrYWdlEjAKFGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJUhJqYXZhT3V0ZXJDbGFzc25hbWUSNQoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEoCDoFZmFsc2VSEWphdmFNdWx0aXBsZUZpbGVzEkQKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoGBQgASgIQgIYAVIZamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaBI6ChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsgASgIOgVmYWxzZVITamF2YVN0cmluZ0NoZWNrVXRmOBJTCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRFILb3B0aW1pemVGb3ISHQoKZ29fcGFja2FnZRgLIAEoCVIJZ29QYWNrYWdlEjUKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlUhFjY0dlbmVyaWNTZXJ2aWNlcxI5ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlUhNqYXZhR2VuZXJpY1NlcnZpY2VzEjUKE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlUhFweUdlbmVyaWNTZXJ2aWNlcxI3ChRwaHBfZ2VuZXJpY19zZXJ2aWNlcxgqIAEoCDoFZmFsc2VSEnBocEdlbmVyaWNTZXJ2aWNlcxIlCgpkZXByZWNhdGVkGBcgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIuChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlUg5jY0VuYWJsZUFyZW5hcxIqChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCVIPb2JqY0NsYXNzUHJlZml4EikKEGNzaGFycF9uYW1lc3BhY2UYJSABKAlSD2NzaGFycE5hbWVzcGFjZRIhCgxzd2lmdF9wcmVmaXgYJyABKAlSC3N3aWZ0UHJlZml4EigKEHBocF9jbGFzc19wcmVmaXgYKCABKAlSDnBocENsYXNzUHJlZml4EiMKDXBocF9uYW1lc3BhY2UYKSABKAlSDHBocE5hbWVzcGFjZRI0ChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIhCgxydWJ5X3BhY2thZ2UYLSABKAlSC3J1YnlQYWNrYWdlElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgmECciuwMKDk1lc3NhZ2VPcHRpb25zEjwKF21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0GAEgASgIOgVmYWxzZVIUbWVzc2FnZVNldFdpcmVGb3JtYXQSTAofbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2VSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGwoJbWFwX2VudHJ5GAcgASgIUghtYXBFbnRyeRJWCiZkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cxgLIAEoCEICGAFSImRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAQQBUoECAUQBkoECAYQB0oECAgQCUoECAkQCiKFCQoMRmllbGRPcHRpb25zEkEKBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSSU5HUgVjdHlwZRIWCgZwYWNrZWQYAiABKAhSBnBhY2tlZBJHCgZqc3R5cGUYBiABKA4yJC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZToJSlNfTk9STUFMUgZqc3R5cGUSGQoEbGF6eRgFIAEoCDoFZmFsc2VSBGxhenkSLgoPdW52ZXJpZmllZF9sYXp5GA8gASgIOgVmYWxzZVIOdW52ZXJpZmllZExhenkSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGQoEd2VhaxgKIAEoCDoFZmFsc2VSBHdlYWsSKAoMZGVidWdfcmVkYWN0GBAgASgIOgVmYWxzZVILZGVidWdSZWRhY3QSSwoJcmV0ZW50aW9uGBEgASgOMi0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25SZXRlbnRpb25SCXJldGVudGlvbhJKCgZ0YXJnZXQYEiABKA4yLi5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblRhcmdldFR5cGVCAhgBUgZ0YXJnZXQSSAoHdGFyZ2V0cxgTIAMoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZVIHdGFyZ2V0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACIlUKD09wdGlvblJldGVudGlvbhIVChFSRVRFTlRJT05fVU5LTk9XThAAEhUKEVJFVEVOVElPTl9SVU5USU1FEAESFAoQUkVURU5USU9OX1NPVVJDRRACIowCChBPcHRpb25UYXJnZXRUeXBlEhcKE1RBUkdFVF9UWVBFX1VOS05PV04QABIUChBUQVJHRVRfVFlQRV9GSUxFEAESHwobVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFEAISFwoTVEFSR0VUX1RZUEVfTUVTU0FHRRADEhUKEVRBUkdFVF9UWVBFX0ZJRUxEEAQSFQoRVEFSR0VUX1RZUEVfT05FT0YQBRIUChBUQVJHRVRfVFlQRV9FTlVNEAYSGgoWVEFSR0VUX1RZUEVfRU5VTV9FTlRSWRAHEhcKE1RBUkdFVF9UWVBFX1NFUlZJQ0UQCBIWChJUQVJHRVRfVFlQRV9NRVRIT0QQCSoJCOgHEICAgIACSgQIBBAFInMKDE9uZW9mT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIpgCCgtFbnVtT3B0aW9ucxIfCgthbGxvd19hbGlhcxgCIAEoCFIKYWxsb3dBbGlhcxIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJWCiZkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cxgGIAEoCEICGAFSImRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAUQBiKeAQoQRW51bVZhbHVlT3B0aW9ucxIlCgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIpwBCg5TZXJ2aWNlT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIuACCg1NZXRob2RPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkEnEKEWlkZW1wb3RlbmN5X2xldmVsGCIgASgOMi8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbDoTSURFTVBPVEVOQ1lfVU5LTk9XTlIQaWRlbXBvdGVuY3lMZXZlbBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiJQChBJZGVtcG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19TSURFX0VGRkVDVFMQARIOCgpJREVNUE9URU5UEAIqCQjoBxCAgICAAiKaAwoTVW5pbnRlcnByZXRlZE9wdGlvbhJBCgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRSBG5hbWUSKQoQaWRlbnRpZmllcl92YWx1ZRgDIAEoCVIPaWRlbnRpZmllclZhbHVlEiwKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBFIQcG9zaXRpdmVJbnRWYWx1ZRIsChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKANSEG5lZ2F0aXZlSW50VmFsdWUSIQoMZG91YmxlX3ZhbHVlGAYgASgBUgtkb3VibGVWYWx1ZRIhCgxzdHJpbmdfdmFsdWUYByABKAxSC3N0cmluZ1ZhbHVlEicKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCVIOYWdncmVnYXRlVmFsdWUaSgoITmFtZVBhcnQSGwoJbmFtZV9wYXJ0GAEgAigJUghuYW1lUGFydBIhCgxpc19leHRlbnNpb24YAiACKAhSC2lzRXh0ZW5zaW9uIqcCCg5Tb3VyY2VDb2RlSW5mbxJECghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblIIbG9jYXRpb24azgEKCExvY2F0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEhYKBHNwYW4YAiADKAVCAhABUgRzcGFuEikKEGxlYWRpbmdfY29tbWVudHMYAyABKAlSD2xlYWRpbmdDb21tZW50cxIrChF0cmFpbGluZ19jb21tZW50cxgEIAEoCVIQdHJhaWxpbmdDb21tZW50cxI6ChlsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJUhdsZWFkaW5nRGV0YWNoZWRDb21tZW50cyLQAgoRR2VuZXJhdGVkQ29kZUluZm8STQoKYW5ub3RhdGlvbhgBIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uUgphbm5vdGF0aW9uGusBCgpBbm5vdGF0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEh8KC3NvdXJjZV9maWxlGAIgASgJUgpzb3VyY2VGaWxlEhQKBWJlZ2luGAMgASgFUgViZWdpbhIQCgNlbmQYBCABKAVSA2VuZBJSCghzZW1hbnRpYxgFIAEoDjI2Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLlNlbWFudGljUghzZW1hbnRpYyIoCghTZW1hbnRpYxIICgROT05FEAASBwoDU0VUEAESCQoFQUxJQVMQAkJ+ChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaLWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2Rlc2NyaXB0b3JwYvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCqgCChxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpGhVnb29nbGUvYXBpL2h0dHAucHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzMK4gUKHGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiKYAQoGU3RydWN0EjsKBmZpZWxkcxgBIAMoCzIjLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QuRmllbGRzRW50cnlSBmZpZWxkcxpRCgtGaWVsZHNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIrICCgVWYWx1ZRI7CgpudWxsX3ZhbHVlGAEgASgOMhouZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZUgAUgludWxsVmFsdWUSIwoMbnVtYmVyX3ZhbHVlGAIgASgBSABSC251bWJlclZhbHVlEiMKDHN0cmluZ192YWx1ZRgDIAEoCUgAUgtzdHJpbmdWYWx1ZRIfCgpib29sX3ZhbHVlGAQgASgISABSCWJvb2xWYWx1ZRI8CgxzdHJ1Y3RfdmFsdWUYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SABSC3N0cnVjdFZhbHVlEjsKCmxpc3RfdmFsdWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlSABSCWxpc3RWYWx1ZUIGCgRraW5kIjsKCUxpc3RWYWx1ZRIuCgZ2YWx1ZXMYASADKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBnZhbHVlcyobCglOdWxsVmFsdWUSDgoKTlVMTF9WQUxVRRAAQn8KE2NvbS5nb29nbGUucHJvdG9idWZCC1N0cnVjdFByb3RvUAFaL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3N0cnVjdHBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKpj4KLHByb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnMvb3BlbmFwaXYyLnByb3RvEilncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucxocZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byKzCAoHU3dhZ2dlchIYCgdzd2FnZ2VyGAEgASgJUgdzd2FnZ2VyEkMKBGluZm8YAiABKAsyLy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5JbmZvUgRpbmZvEhIKBGhvc3QYAyABKAlSBGhvc3QSGwoJYmFzZV9wYXRoGAQgASgJUghiYXNlUGF0aBJLCgdzY2hlbWVzGAUgAygOMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1lUgdzY2hlbWVzEhoKCGNvbnN1bWVzGAYgAygJUghjb25zdW1lcxIaCghwcm9kdWNlcxgHIAMoCVIIcHJvZHVjZXMSXwoJcmVzcG9uc2VzGAogAygLMkEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU3dhZ2dlci5SZXNwb25zZXNFbnRyeVIJcmVzcG9uc2VzEnEKFHNlY3VyaXR5X2RlZmluaXRpb25zGAsgASgLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlEZWZpbml0aW9uc1ITc2VjdXJpdHlEZWZpbml0aW9ucxJaCghzZWN1cml0eRgMIAMoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnRSCHNlY3VyaXR5EkIKBHRhZ3MYDSADKAsyLi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5UYWdSBHRhZ3MSZQoNZXh0ZXJuYWxfZG9jcxgOIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEmIKCmV4dGVuc2lvbnMYDyADKAsyQi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpxCg5SZXNwb25zZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRJJCgV2YWx1ZRgCIAEoCzIzLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAFKBAgIEAlKBAgJEAoi1gcKCU9wZXJhdGlvbhISCgR0YWdzGAEgAygJUgR0YWdzEhgKB3N1bW1hcnkYAiABKAlSB3N1bW1hcnkSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEmUKDWV4dGVybmFsX2RvY3MYBCABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxIhCgxvcGVyYXRpb25faWQYBSABKAlSC29wZXJhdGlvbklkEhoKCGNvbnN1bWVzGAYgAygJUghjb25zdW1lcxIaCghwcm9kdWNlcxgHIAMoCVIIcHJvZHVjZXMSYQoJcmVzcG9uc2VzGAkgAygLMkMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uLlJlc3BvbnNlc0VudHJ5UglyZXNwb25zZXMSSwoHc2NoZW1lcxgKIAMoDjIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtZVIHc2NoZW1lcxIeCgpkZXByZWNhdGVkGAsgASgIUgpkZXByZWNhdGVkEloKCHNlY3VyaXR5GAwgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudFIIc2VjdXJpdHkSZAoKZXh0ZW5zaW9ucxgNIAMoCzJELmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLk9wZXJhdGlvbi5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMSVQoKcGFyYW1ldGVycxgOIAEoCzI1LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlBhcmFtZXRlcnNSCnBhcmFtZXRlcnMacQoOUmVzcG9uc2VzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSSQoFdmFsdWUYAiABKAsyMy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBSgQICBAJImIKClBhcmFtZXRlcnMSVAoHaGVhZGVycxgBIAMoCzI6LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkhlYWRlclBhcmFtZXRlclIHaGVhZGVycyKjAgoPSGVhZGVyUGFyYW1ldGVyEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uElMKBHR5cGUYAyABKA4yPy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5IZWFkZXJQYXJhbWV0ZXIuVHlwZVIEdHlwZRIWCgZmb3JtYXQYBCABKAlSBmZvcm1hdBIaCghyZXF1aXJlZBgFIAEoCFIIcmVxdWlyZWQiRQoEVHlwZRILCgdVTktOT1dOEAASCgoGU1RSSU5HEAESCgoGTlVNQkVSEAISCwoHSU5URUdFUhADEgsKB0JPT0xFQU4QBEoECAYQB0oECAcQCCLYAQoGSGVhZGVyEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhISCgR0eXBlGAIgASgJUgR0eXBlEhYKBmZvcm1hdBgDIAEoCVIGZm9ybWF0EhgKB2RlZmF1bHQYBiABKAlSB2RlZmF1bHQSGAoHcGF0dGVybhgNIAEoCVIHcGF0dGVybkoECAQQBUoECAUQBkoECAcQCEoECAgQCUoECAkQCkoECAoQC0oECAsQDEoECAwQDUoECA4QD0oECA8QEEoECBAQEUoECBEQEkoECBIQEyKaBQoIUmVzcG9uc2USIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEkkKBnNjaGVtYRgCIAEoCzIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjaGVtYVIGc2NoZW1hEloKB2hlYWRlcnMYAyADKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZS5IZWFkZXJzRW50cnlSB2hlYWRlcnMSXQoIZXhhbXBsZXMYBCADKAsyQS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZS5FeGFtcGxlc0VudHJ5UghleGFtcGxlcxJjCgpleHRlbnNpb25zGAUgAygLMkMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2UuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGm0KDEhlYWRlcnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRJHCgV2YWx1ZRgCIAEoCzIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkhlYWRlclIFdmFsdWU6AjgBGjsKDUV4YW1wbGVzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASLWAwoESW5mbxIUCgV0aXRsZRgBIAEoCVIFdGl0bGUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEigKEHRlcm1zX29mX3NlcnZpY2UYAyABKAlSDnRlcm1zT2ZTZXJ2aWNlEkwKB2NvbnRhY3QYBCABKAsyMi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Db250YWN0Ugdjb250YWN0EkwKB2xpY2Vuc2UYBSABKAsyMi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5MaWNlbnNlUgdsaWNlbnNlEhgKB3ZlcnNpb24YBiABKAlSB3ZlcnNpb24SXwoKZXh0ZW5zaW9ucxgHIAMoCzI/LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkluZm8uRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIkUKB0NvbnRhY3QSEgoEbmFtZRgBIAEoCVIEbmFtZRIQCgN1cmwYAiABKAlSA3VybBIUCgVlbWFpbBgDIAEoCVIFZW1haWwiLwoHTGljZW5zZRISCgRuYW1lGAEgASgJUgRuYW1lEhAKA3VybBgCIAEoCVIDdXJsIksKFUV4dGVybmFsRG9jdW1lbnRhdGlvbhIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SEAoDdXJsGAIgASgJUgN1cmwiqgIKBlNjaGVtYRJWCgtqc29uX3NjaGVtYRgBIAEoCzI1LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWFSCmpzb25TY2hlbWESJAoNZGlzY3JpbWluYXRvchgCIAEoCVINZGlzY3JpbWluYXRvchIbCglyZWFkX29ubHkYAyABKAhSCHJlYWRPbmx5EmUKDWV4dGVybmFsX2RvY3MYBSABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxIYCgdleGFtcGxlGAYgASgJUgdleGFtcGxlSgQIBBAFItcKCgpKU09OU2NoZW1hEhAKA3JlZhgDIAEoCVIDcmVmEhQKBXRpdGxlGAUgASgJUgV0aXRsZRIgCgtkZXNjcmlwdGlvbhgGIAEoCVILZGVzY3JpcHRpb24SGAoHZGVmYXVsdBgHIAEoCVIHZGVmYXVsdBIbCglyZWFkX29ubHkYCCABKAhSCHJlYWRPbmx5EhgKB2V4YW1wbGUYCSABKAlSB2V4YW1wbGUSHwoLbXVsdGlwbGVfb2YYCiABKAFSCm11bHRpcGxlT2YSGAoHbWF4aW11bRgLIAEoAVIHbWF4aW11bRIrChFleGNsdXNpdmVfbWF4aW11bRgMIAEoCFIQZXhjbHVzaXZlTWF4aW11bRIYCgdtaW5pbXVtGA0gASgBUgdtaW5pbXVtEisKEWV4Y2x1c2l2ZV9taW5pbXVtGA4gASgIUhBleGNsdXNpdmVNaW5pbXVtEh0KCm1heF9sZW5ndGgYDyABKARSCW1heExlbmd0aBIdCgptaW5fbGVuZ3RoGBAgASgEUgltaW5MZW5ndGgSGAoHcGF0dGVybhgRIAEoCVIHcGF0dGVybhIbCgltYXhfaXRlbXMYFCABKARSCG1heEl0ZW1zEhsKCW1pbl9pdGVtcxgVIAEoBFIIbWluSXRlbXMSIQoMdW5pcXVlX2l0ZW1zGBYgASgIUgt1bmlxdWVJdGVtcxIlCg5tYXhfcHJvcGVydGllcxgYIAEoBFINbWF4UHJvcGVydGllcxIlCg5taW5fcHJvcGVydGllcxgZIAEoBFINbWluUHJvcGVydGllcxIaCghyZXF1aXJlZBgaIAMoCVIIcmVxdWlyZWQSFAoFYXJyYXkYIiADKAlSBWFycmF5El8KBHR5cGUYIyADKA4ySy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkpTT05TY2hlbWFTaW1wbGVUeXBlc1IEdHlwZRIWCgZmb3JtYXQYJCABKAlSBmZvcm1hdBISCgRlbnVtGC4gAygJUgRlbnVtEnoKE2ZpZWxkX2NvbmZpZ3VyYXRpb24Y6QcgASgLMkguZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYS5GaWVsZENvbmZpZ3VyYXRpb25SEmZpZWxkQ29uZmlndXJhdGlvbhJlCgpleHRlbnNpb25zGDAgAygLMkUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYS5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaPAoSRmllbGRDb25maWd1cmF0aW9uEiYKD3BhdGhfcGFyYW1fbmFtZRgvIAEoCVINcGF0aFBhcmFtTmFtZRpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJ3ChVKU09OU2NoZW1hU2ltcGxlVHlwZXMSCwoHVU5LTk9XThAAEgkKBUFSUkFZEAESCwoHQk9PTEVBThACEgsKB0lOVEVHRVIQAxIICgROVUxMEAQSCgoGTlVNQkVSEAUSCgoGT0JKRUNUEAYSCgoGU1RSSU5HEAdKBAgBEAJKBAgCEANKBAgEEAVKBAgSEBNKBAgTEBRKBAgXEBhKBAgbEBxKBAgcEB1KBAgdEB5KBAgeECJKBAglECpKBAgqECtKBAgrEC4i2QIKA1RhZxISCgRuYW1lGAEgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhJlCg1leHRlcm5hbF9kb2NzGAMgASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSXgoKZXh0ZW5zaW9ucxgEIAMoCzI+LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZy5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEi9wEKE1NlY3VyaXR5RGVmaW5pdGlvbnMSaAoIc2VjdXJpdHkYASADKAsyTC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eURlZmluaXRpb25zLlNlY3VyaXR5RW50cnlSCHNlY3VyaXR5GnYKDVNlY3VyaXR5RW50cnkSEAoDa2V5GAEgASgJUgNrZXkSTwoFdmFsdWUYAiABKAsyOS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZVIFdmFsdWU6AjgBIv8GCg5TZWN1cml0eVNjaGVtZRJSCgR0eXBlGAEgASgOMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuVHlwZVIEdHlwZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SEgoEbmFtZRgDIAEoCVIEbmFtZRJMCgJpbhgEIAEoDjI8LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkluUgJpbhJSCgRmbG93GAUgASgOMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuRmxvd1IEZmxvdxIrChFhdXRob3JpemF0aW9uX3VybBgGIAEoCVIQYXV0aG9yaXphdGlvblVybBIbCgl0b2tlbl91cmwYByABKAlSCHRva2VuVXJsEkkKBnNjb3BlcxgIIAEoCzIxLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjb3Blc1IGc2NvcGVzEmkKCmV4dGVuc2lvbnMYCSADKAsySS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEiSwoEVHlwZRIQCgxUWVBFX0lOVkFMSUQQABIOCgpUWVBFX0JBU0lDEAESEAoMVFlQRV9BUElfS0VZEAISDwoLVFlQRV9PQVVUSDIQAyIxCgJJbhIOCgpJTl9JTlZBTElEEAASDAoISU5fUVVFUlkQARINCglJTl9IRUFERVIQAiJqCgRGbG93EhAKDEZMT1dfSU5WQUxJRBAAEhEKDUZMT1dfSU1QTElDSVQQARIRCg1GTE9XX1BBU1NXT1JEEAISFAoQRkxPV19BUFBMSUNBVElPThADEhQKEEZMT1dfQUNDRVNTX0NPREUQBCL2AgoTU2VjdXJpdHlSZXF1aXJlbWVudBKKAQoUc2VjdXJpdHlfcmVxdWlyZW1lbnQYASADKAsyVy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50LlNlY3VyaXR5UmVxdWlyZW1lbnRFbnRyeVITc2VjdXJpdHlSZXF1aXJlbWVudBowChhTZWN1cml0eVJlcXVpcmVtZW50VmFsdWUSFAoFc2NvcGUYASADKAlSBXNjb3BlGp8BChhTZWN1cml0eVJlcXVpcmVtZW50RW50cnkSEAoDa2V5GAEgASgJUgNrZXkSbQoFdmFsdWUYAiABKAsyVy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50LlNlY3VyaXR5UmVxdWlyZW1lbnRWYWx1ZVIFdmFsdWU6AjgBIpYBCgZTY29wZXMSUgoFc2NvcGUYASADKAsyPC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY29wZXMuU2NvcGVFbnRyeVIFc2NvcGUaOAoKU2NvcGVFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBKjsKBlNjaGVtZRILCgdVTktOT1dOEAASCAoESFRUUBABEgkKBUhUVFBTEAISBgoCV1MQAxIHCgNXU1MQBEJIWkZnaXRodWIuY29tL2dycGMtZWNvc3lzdGVtL2dycGMtZ2F0ZXdheS92Mi9wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zYgZwcm90bzMK/QYKLnByb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnMvYW5ub3RhdGlvbnMucHJvdG8SKWdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zGiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxoscHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9vcGVuYXBpdjIucHJvdG86fgoRb3BlbmFwaXYyX3N3YWdnZXISHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYkgggASgLMjIuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU3dhZ2dlclIQb3BlbmFwaXYyU3dhZ2dlcjqGAQoTb3BlbmFwaXYyX29wZXJhdGlvbhIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGJIIIAEoCzI0LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLk9wZXJhdGlvblISb3BlbmFwaXYyT3BlcmF0aW9uOn4KEG9wZW5hcGl2Ml9zY2hlbWESHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYkgggASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1hUg9vcGVuYXBpdjJTY2hlbWE6dQoNb3BlbmFwaXYyX3RhZxIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiSCCABKAsyLi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5UYWdSDG9wZW5hcGl2MlRhZzp+Cg9vcGVuYXBpdjJfZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJIIIAEoCzI1LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWFSDm9wZW5hcGl2MkZpZWxkQkhaRmdpdGh1Yi5jb20vZ3JwYy1lY29zeXN0ZW0vZ3JwYy1nYXRld2F5L3YyL3Byb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnNiBnByb3RvMwqT1wEKH3Byb3RvL2Vudmlyb25tZW50L3NlcnZpY2UucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvGi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvGiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90bxofcHJvdG8vZW52aXJvbm1lbnQvcHJvamVjdC5wcm90bxokcHJvdG8vZW52aXJvbm1lbnQvb3JnYW5pemF0aW9uLnByb3RvGh9wcm90by9lbnZpcm9ubWVudC9jb21tYW5kLnByb3RvIikKF0dldEVudmlyb25tZW50VjJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCJiChhHZXRFbnZpcm9ubWVudFYyUmVzcG9uc2USRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQixgQKGUxpc3RFbnZpcm9ubWVudHNWMlJlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJTCghvcmRlcl9ieRgDIAEoDjI4LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0RW52aXJvbm1lbnRzVjJSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSaAoPb3JkZXJfZGlyZWN0aW9uGAQgASgOMj8uYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RFbnZpcm9ubWVudHNWMlJlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEh0KCnByb2plY3RfaWQYBSABKAlSCXByb2plY3RJZBI2CghhcmNoaXZlZBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGFyY2hpdmVkEiUKDnNlYXJjaF9rZXl3b3JkGAcgASgJUg1zZWFyY2hLZXl3b3JkEicKD29yZ2FuaXphdGlvbl9pZBgIIAEoCVIOb3JnYW5pemF0aW9uSWQiaQoHT3JkZXJCeRILCgdERUZBVUxUEAASBgoCSUQQARIICgROQU1FEAISDAoIVVJMX0NPREUQAxIOCgpDUkVBVEVEX0FUEAQSDgoKVVBEQVRFRF9BVBAFEhEKDUZFQVRVUkVfQ09VTlQQBiIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEinwEKGkxpc3RFbnZpcm9ubWVudHNWMlJlc3BvbnNlEkgKDGVudmlyb25tZW50cxgBIAMoCzIkLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFYyUgxlbnZpcm9ubWVudHMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiaQoaQ3JlYXRlRW52aXJvbm1lbnRWMlJlcXVlc3QSSwoHY29tbWFuZBgBIAEoCzIxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DcmVhdGVFbnZpcm9ubWVudFYyQ29tbWFuZFIHY29tbWFuZCJlChtDcmVhdGVFbnZpcm9ubWVudFYyUmVzcG9uc2USRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQi+wIKGlVwZGF0ZUVudmlyb25tZW50VjJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJYCg5yZW5hbWVfY29tbWFuZBgCIAEoCzIxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5SZW5hbWVFbnZpcm9ubWVudFYyQ29tbWFuZFINcmVuYW1lQ29tbWFuZBJ6ChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzI8LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DaGFuZ2VEZXNjcmlwdGlvbkVudmlyb25tZW50VjJDb21tYW5kUhhjaGFuZ2VEZXNjcmlwdGlvbkNvbW1hbmQSdwoeY2hhbmdlX3JlcXVpcmVfY29tbWVudF9jb21tYW5kGAQgASgLMjIuYnVja2V0ZWVyLmVudmlyb25tZW50LkNoYW5nZVJlcXVpcmVDb21tZW50Q29tbWFuZFIbY2hhbmdlUmVxdWlyZUNvbW1lbnRDb21tYW5kIh0KG1VwZGF0ZUVudmlyb25tZW50VjJSZXNwb25zZSJ7ChtBcmNoaXZlRW52aXJvbm1lbnRWMlJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkwKB2NvbW1hbmQYAiABKAsyMi5idWNrZXRlZXIuZW52aXJvbm1lbnQuQXJjaGl2ZUVudmlyb25tZW50VjJDb21tYW5kUgdjb21tYW5kIh4KHEFyY2hpdmVFbnZpcm9ubWVudFYyUmVzcG9uc2UifwodVW5hcmNoaXZlRW52aXJvbm1lbnRWMlJlcXVlc3QSDgoCaWQYASABKAlSAmlkEk4KB2NvbW1hbmQYAiABKAsyNC5idWNrZXRlZXIuZW52aXJvbm1lbnQuVW5hcmNoaXZlRW52aXJvbm1lbnRWMkNvbW1hbmRSB2NvbW1hbmQiIAoeVW5hcmNoaXZlRW52aXJvbm1lbnRWMlJlc3BvbnNlIiMKEUdldFByb2plY3RSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCJOChJHZXRQcm9qZWN0UmVzcG9uc2USOAoHcHJvamVjdBgBIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0Iq8EChNMaXN0UHJvamVjdHNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISTQoIb3JkZXJfYnkYAyABKA4yMi5idWNrZXRlZXIuZW52aXJvbm1lbnQuTGlzdFByb2plY3RzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmIKD29yZGVyX2RpcmVjdGlvbhgEIAEoDjI5LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0UHJvamVjdHNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgFIAEoCVINc2VhcmNoS2V5d29yZBI2CghkaXNhYmxlZBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGRpc2FibGVkEikKEG9yZ2FuaXphdGlvbl9pZHMYByADKAlSD29yZ2FuaXphdGlvbklkcyKAAQoHT3JkZXJCeRILCgdERUZBVUxUEAASBgoCSUQQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADEggKBE5BTUUQBBIMCghVUkxfQ09ERRAFEhUKEUVOVklST05NRU5UX0NPVU5UEAYSEQoNRkVBVFVSRV9DT1VOVBAHIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQASKLAQoUTGlzdFByb2plY3RzUmVzcG9uc2USOgoIcHJvamVjdHMYASADKAsyHi5idWNrZXRlZXIuZW52aXJvbm1lbnQuUHJvamVjdFIIcHJvamVjdHMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiXQoUQ3JlYXRlUHJvamVjdFJlcXVlc3QSRQoHY29tbWFuZBgBIAEoCzIrLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DcmVhdGVQcm9qZWN0Q29tbWFuZFIHY29tbWFuZCJRChVDcmVhdGVQcm9qZWN0UmVzcG9uc2USOAoHcHJvamVjdBgBIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0ImcKGUNyZWF0ZVRyaWFsUHJvamVjdFJlcXVlc3QSSgoHY29tbWFuZBgBIAEoCzIwLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DcmVhdGVUcmlhbFByb2plY3RDb21tYW5kUgdjb21tYW5kIhwKGkNyZWF0ZVRyaWFsUHJvamVjdFJlc3BvbnNlIvABChRVcGRhdGVQcm9qZWN0UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSdAoaY2hhbmdlX2Rlc2NyaXB0aW9uX2NvbW1hbmQYAiABKAsyNi5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ2hhbmdlRGVzY3JpcHRpb25Qcm9qZWN0Q29tbWFuZFIYY2hhbmdlRGVzY3JpcHRpb25Db21tYW5kElIKDnJlbmFtZV9jb21tYW5kGAMgASgLMisuYnVja2V0ZWVyLmVudmlyb25tZW50LlJlbmFtZVByb2plY3RDb21tYW5kUg1yZW5hbWVDb21tYW5kIhcKFVVwZGF0ZVByb2plY3RSZXNwb25zZSJtChRFbmFibGVQcm9qZWN0UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSRQoHY29tbWFuZBgCIAEoCzIrLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5FbmFibGVQcm9qZWN0Q29tbWFuZFIHY29tbWFuZCIXChVFbmFibGVQcm9qZWN0UmVzcG9uc2UibwoVRGlzYWJsZVByb2plY3RSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJGCgdjb21tYW5kGAIgASgLMiwuYnVja2V0ZWVyLmVudmlyb25tZW50LkRpc2FibGVQcm9qZWN0Q29tbWFuZFIHY29tbWFuZCIYChZEaXNhYmxlUHJvamVjdFJlc3BvbnNlInkKGkNvbnZlcnRUcmlhbFByb2plY3RSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJLCgdjb21tYW5kGAIgASgLMjEuYnVja2V0ZWVyLmVudmlyb25tZW50LkNvbnZlcnRUcmlhbFByb2plY3RDb21tYW5kUgdjb21tYW5kIh0KG0NvbnZlcnRUcmlhbFByb2plY3RSZXNwb25zZSIoChZHZXRPcmdhbml6YXRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCJiChdHZXRPcmdhbml6YXRpb25SZXNwb25zZRJHCgxvcmdhbml6YXRpb24YASABKAsyIy5idWNrZXRlZXIuZW52aXJvbm1lbnQuT3JnYW5pemF0aW9uUgxvcmdhbml6YXRpb24i2wQKGExpc3RPcmdhbml6YXRpb25zUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yElIKCG9yZGVyX2J5GAMgASgOMjcuYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmcKD29yZGVyX2RpcmVjdGlvbhgEIAEoDjI+LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0T3JnYW5pemF0aW9uc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAUgASgJUg1zZWFyY2hLZXl3b3JkEjYKCGRpc2FibGVkGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIZGlzYWJsZWQSNgoIYXJjaGl2ZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghhcmNoaXZlZCKQAQoHT3JkZXJCeRILCgdERUZBVUxUEAASBgoCSUQQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADEggKBE5BTUUQBBIMCghVUkxfQ09ERRAFEhEKDVBST0pFQ1RfQ09VTlQQBhIVChFFTlZJUk9OTUVOVF9DT1VOVBAHEg4KClVTRVJfQ09VTlQQCCIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEinwEKGUxpc3RPcmdhbml6YXRpb25zUmVzcG9uc2USSQoNT3JnYW5pemF0aW9ucxgBIAMoCzIjLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Pcmdhbml6YXRpb25SDU9yZ2FuaXphdGlvbnMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQioAIKGUNyZWF0ZU9yZ2FuaXphdGlvblJlcXVlc3QSTgoHY29tbWFuZBgBIAEoCzIwLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DcmVhdGVPcmdhbml6YXRpb25Db21tYW5kQgIYAVIHY29tbWFuZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIZCghpc190cmlhbBgFIAEoCFIHaXNUcmlhbBImCg9pc19zeXN0ZW1fYWRtaW4YBiABKAhSDWlzU3lzdGVtQWRtaW4SHwoLb3duZXJfZW1haWwYByABKAlSCm93bmVyRW1haWwiZQoaQ3JlYXRlT3JnYW5pemF0aW9uUmVzcG9uc2USRwoMT3JnYW5pemF0aW9uGAEgASgLMiMuYnVja2V0ZWVyLmVudmlyb25tZW50Lk9yZ2FuaXphdGlvblIMT3JnYW5pemF0aW9uIvwCChlVcGRhdGVPcmdhbml6YXRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJbCg5yZW5hbWVfY29tbWFuZBgCIAEoCzI0LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DaGFuZ2VOYW1lT3JnYW5pemF0aW9uQ29tbWFuZFINcmVuYW1lQ29tbWFuZBJ5ChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzI7LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DaGFuZ2VEZXNjcmlwdGlvbk9yZ2FuaXphdGlvbkNvbW1hbmRSGGNoYW5nZURlc2NyaXB0aW9uQ29tbWFuZBJ3ChpjaGFuZ2Vfb3duZXJfZW1haWxfY29tbWFuZBgEIAEoCzI6LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DaGFuZ2VPd25lckVtYWlsT3JnYW5pemF0aW9uQ29tbWFuZFIXY2hhbmdlT3duZXJFbWFpbENvbW1hbmQiHAoaVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2UidwoZRW5hYmxlT3JnYW5pemF0aW9uUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSSgoHY29tbWFuZBgCIAEoCzIwLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5FbmFibGVPcmdhbml6YXRpb25Db21tYW5kUgdjb21tYW5kIhwKGkVuYWJsZU9yZ2FuaXphdGlvblJlc3BvbnNlInkKGkRpc2FibGVPcmdhbml6YXRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJLCgdjb21tYW5kGAIgASgLMjEuYnVja2V0ZWVyLmVudmlyb25tZW50LkRpc2FibGVPcmdhbml6YXRpb25Db21tYW5kUgdjb21tYW5kIh0KG0Rpc2FibGVPcmdhbml6YXRpb25SZXNwb25zZSJ5ChpBcmNoaXZlT3JnYW5pemF0aW9uUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSSwoHY29tbWFuZBgCIAEoCzIxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5BcmNoaXZlT3JnYW5pemF0aW9uQ29tbWFuZFIHY29tbWFuZCIdChtBcmNoaXZlT3JnYW5pemF0aW9uUmVzcG9uc2UifQocVW5hcmNoaXZlT3JnYW5pemF0aW9uUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSTQoHY29tbWFuZBgCIAEoCzIzLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VbmFyY2hpdmVPcmdhbml6YXRpb25Db21tYW5kUgdjb21tYW5kIh8KHVVuYXJjaGl2ZU9yZ2FuaXphdGlvblJlc3BvbnNlIoMBCh9Db252ZXJ0VHJpYWxPcmdhbml6YXRpb25SZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJQCgdjb21tYW5kGAIgASgLMjYuYnVja2V0ZWVyLmVudmlyb25tZW50LkNvbnZlcnRUcmlhbE9yZ2FuaXphdGlvbkNvbW1hbmRSB2NvbW1hbmQiIgogQ29udmVydFRyaWFsT3JnYW5pemF0aW9uUmVzcG9uc2UitQQKFUxpc3RQcm9qZWN0c1YyUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEk8KCG9yZGVyX2J5GAMgASgOMjQuYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RQcm9qZWN0c1YyUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmQKD29yZGVyX2RpcmVjdGlvbhgEIAEoDjI7LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0UHJvamVjdHNWMlJlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAUgASgJUg1zZWFyY2hLZXl3b3JkEjYKCGRpc2FibGVkGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIZGlzYWJsZWQSKQoQb3JnYW5pemF0aW9uX2lkcxgHIAMoCVIPb3JnYW5pemF0aW9uSWRzIoABCgdPcmRlckJ5EgsKB0RFRkFVTFQQABIGCgJJRBABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMSCAoETkFNRRAEEgwKCFVSTF9DT0RFEAUSFQoRRU5WSVJPTk1FTlRfQ09VTlQQBhIRCg1GRUFUVVJFX0NPVU5UEAciIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIo0BChZMaXN0UHJvamVjdHNWMlJlc3BvbnNlEjoKCHByb2plY3RzGAEgAygLMh4uYnVja2V0ZWVyLmVudmlyb25tZW50LlByb2plY3RSCHByb2plY3RzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50MrueAQoSRW52aXJvbm1lbnRTZXJ2aWNlEroGChBHZXRFbnZpcm9ubWVudFYyEi4uYnVja2V0ZWVyLmVudmlyb25tZW50LkdldEVudmlyb25tZW50VjJSZXF1ZXN0Gi8uYnVja2V0ZWVyLmVudmlyb25tZW50LkdldEVudmlyb25tZW50VjJSZXNwb25zZSLEBZJBlgUKC0Vudmlyb25tZW50EgNHZXQaRkdldCBhbiBlbnZpcm9ubWVudC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qIndlYi52MS5lbnZpcm9ubWVudC5nZXRfZW52aXJvbm1lbnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJCIfL3YxL2Vudmlyb25tZW50L2dldF9lbnZpcm9ubWVudDoBKhLEBgoSTGlzdEVudmlyb25tZW50c1YyEjAuYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RFbnZpcm9ubWVudHNWMlJlcXVlc3QaMS5idWNrZXRlZXIuZW52aXJvbm1lbnQuTGlzdEVudmlyb25tZW50c1YyUmVzcG9uc2UiyAWSQZgFCgtFbnZpcm9ubWVudBIETGlzdBpFTGlzdCBlbnZpcm9ubWVudHMuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKiR3ZWIudjEuZW52aXJvbm1lbnQubGlzdF9lbnZpcm9ubWVudHNKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJiIhL3YxL2Vudmlyb25tZW50L2xpc3RfZW52aXJvbm1lbnRzOgEqEs8GChNDcmVhdGVFbnZpcm9ubWVudFYyEjEuYnVja2V0ZWVyLmVudmlyb25tZW50LkNyZWF0ZUVudmlyb25tZW50VjJSZXF1ZXN0GjIuYnVja2V0ZWVyLmVudmlyb25tZW50LkNyZWF0ZUVudmlyb25tZW50VjJSZXNwb25zZSLQBZJBnwUKC0Vudmlyb25tZW50EgZDcmVhdGUaSUNyZWF0ZSBhbiBlbnZpcm9ubWVudC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qJXdlYi52MS5lbnZpcm9ubWVudC5jcmVhdGVfZW52aXJvbm1lbnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJyIiL3YxL2Vudmlyb25tZW50L2NyZWF0ZV9lbnZpcm9ubWVudDoBKhLPBgoTVXBkYXRlRW52aXJvbm1lbnRWMhIxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VcGRhdGVFbnZpcm9ubWVudFYyUmVxdWVzdBoyLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VcGRhdGVFbnZpcm9ubWVudFYyUmVzcG9uc2Ui0AWSQZ8FCgtFbnZpcm9ubWVudBIGVXBkYXRlGklVcGRhdGUgYW4gZW52aXJvbm1lbnQuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKiV3ZWIudjEuZW52aXJvbm1lbnQudXBkYXRlX2Vudmlyb25tZW50SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiciIi92MS9lbnZpcm9ubWVudC91cGRhdGVfZW52aXJvbm1lbnQ6ASoS1gYKFEFyY2hpdmVFbnZpcm9ubWVudFYyEjIuYnVja2V0ZWVyLmVudmlyb25tZW50LkFyY2hpdmVFbnZpcm9ubWVudFYyUmVxdWVzdBozLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5BcmNoaXZlRW52aXJvbm1lbnRWMlJlc3BvbnNlItQFkkGiBQoLRW52aXJvbm1lbnQSB0FyY2hpdmUaSkFyY2hpdmUgYW4gZW52aXJvbm1lbnQuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKiZ3ZWIudjEuZW52aXJvbm1lbnQuYXJjaGl2ZV9lbnZpcm9ubWVudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIoIiMvdjEvZW52aXJvbm1lbnQvYXJjaGl2ZV9lbnZpcm9ubWVudDoBKhLkBgoWVW5hcmNoaXZlRW52aXJvbm1lbnRWMhI0LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VbmFyY2hpdmVFbnZpcm9ubWVudFYyUmVxdWVzdBo1LmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VbmFyY2hpdmVFbnZpcm9ubWVudFYyUmVzcG9uc2Ui3AWSQagFCgtFbnZpcm9ubWVudBIJVW5hcmNoaXZlGkxVbmFyY2hpdmUgYW4gZW52aXJvbm1lbnQuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKih3ZWIudjEuZW52aXJvbm1lbnQudW5hcmNoaXZlX2Vudmlyb25tZW50SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAioiJS92MS9lbnZpcm9ubWVudC91bmFyY2hpdmVfZW52aXJvbm1lbnQ6ASoSlwYKCkdldFByb2plY3QSKC5idWNrZXRlZXIuZW52aXJvbm1lbnQuR2V0UHJvamVjdFJlcXVlc3QaKS5idWNrZXRlZXIuZW52aXJvbm1lbnQuR2V0UHJvamVjdFJlc3BvbnNlIrMFkkGJBQoHUHJvamVjdBIDR2V0GkFHZXQgYSBwcm9qZWN0LiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLioed2ViLnYxLmVudmlyb25tZW50LmdldF9wcm9qZWN0SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiAiGy92MS9lbnZpcm9ubWVudC9nZXRfcHJvamVjdDoBKhKiBgoMTGlzdFByb2plY3RzEiouYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RQcm9qZWN0c1JlcXVlc3QaKy5idWNrZXRlZXIuZW52aXJvbm1lbnQuTGlzdFByb2plY3RzUmVzcG9uc2UiuAWSQYwFCgdQcm9qZWN0EgRMaXN0GkFMaXN0IHByb2plY3RzLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiogd2ViLnYxLmVudmlyb25tZW50Lmxpc3RfcHJvamVjdHNKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCIiIdL3YxL2Vudmlyb25tZW50L2xpc3RfcHJvamVjdHM6ASoSrAYKDUNyZWF0ZVByb2plY3QSKy5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ3JlYXRlUHJvamVjdFJlcXVlc3QaLC5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ3JlYXRlUHJvamVjdFJlc3BvbnNlIr8FkkGSBQoHUHJvamVjdBIGQ3JlYXRlGkRDcmVhdGUgYSBwcm9qZWN0LiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiohd2ViLnYxLmVudmlyb25tZW50LmNyZWF0ZV9wcm9qZWN0SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiMiHi92MS9lbnZpcm9ubWVudC9jcmVhdGVfcHJvamVjdDoBKhLTBgoSQ3JlYXRlVHJpYWxQcm9qZWN0EjAuYnVja2V0ZWVyLmVudmlyb25tZW50LkNyZWF0ZVRyaWFsUHJvamVjdFJlcXVlc3QaMS5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ3JlYXRlVHJpYWxQcm9qZWN0UmVzcG9uc2Ui1wWSQaQFCgdQcm9qZWN0EgxDcmVhdGUgVHJpYWwaSkNyZWF0ZSBhIHRyaWFsIHByb2plY3QuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKid3ZWIudjEuZW52aXJvbm1lbnQuY3JlYXRlX3RyaWFsX3Byb2plY3RKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKSIkL3YxL2Vudmlyb25tZW50L2NyZWF0ZV90cmlhbF9wcm9qZWN0OgEqEqwGCg1VcGRhdGVQcm9qZWN0EisuYnVja2V0ZWVyLmVudmlyb25tZW50LlVwZGF0ZVByb2plY3RSZXF1ZXN0GiwuYnVja2V0ZWVyLmVudmlyb25tZW50LlVwZGF0ZVByb2plY3RSZXNwb25zZSK/BZJBkgUKB1Byb2plY3QSBlVwZGF0ZRpEVXBkYXRlIGEgcHJvamVjdC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qIXdlYi52MS5lbnZpcm9ubWVudC51cGRhdGVfcHJvamVjdEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIjIh4vdjEvZW52aXJvbm1lbnQvdXBkYXRlX3Byb2plY3Q6ASoSrAYKDUVuYWJsZVByb2plY3QSKy5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW5hYmxlUHJvamVjdFJlcXVlc3QaLC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW5hYmxlUHJvamVjdFJlc3BvbnNlIr8FkkGSBQoHUHJvamVjdBIGRW5hYmxlGkRFbmFibGUgYSBwcm9qZWN0LiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiohd2ViLnYxLmVudmlyb25tZW50LmVuYWJsZV9wcm9qZWN0SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiMiHi92MS9lbnZpcm9ubWVudC9lbmFibGVfcHJvamVjdDoBKhKzBgoORGlzYWJsZVByb2plY3QSLC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRGlzYWJsZVByb2plY3RSZXF1ZXN0Gi0uYnVja2V0ZWVyLmVudmlyb25tZW50LkRpc2FibGVQcm9qZWN0UmVzcG9uc2UiwwWSQZUFCgdQcm9qZWN0EgdEaXNhYmxlGkVEaXNhYmxlIGEgcHJvamVjdC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qIndlYi52MS5lbnZpcm9ubWVudC5kaXNhYmxlX3Byb2plY3RKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJCIfL3YxL2Vudmlyb25tZW50L2Rpc2FibGVfcHJvamVjdDoBKhLaBgoTQ29udmVydFRyaWFsUHJvamVjdBIxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Db252ZXJ0VHJpYWxQcm9qZWN0UmVxdWVzdBoyLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Db252ZXJ0VHJpYWxQcm9qZWN0UmVzcG9uc2Ui2wWSQacFCgdQcm9qZWN0Eg1Db252ZXJ0IFRyaWFsGktDb252ZXJ0IGEgdHJpYWwgcHJvamVjdC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qKHdlYi52MS5lbnZpcm9ubWVudC5jb252ZXJ0X3RyaWFsX3Byb2plY3RKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKiIlL3YxL2Vudmlyb25tZW50L2NvbnZlcnRfdHJpYWxfcHJvamVjdDoBKhK7BgoPR2V0T3JnYW5pemF0aW9uEi0uYnVja2V0ZWVyLmVudmlyb25tZW50LkdldE9yZ2FuaXphdGlvblJlcXVlc3QaLi5idWNrZXRlZXIuZW52aXJvbm1lbnQuR2V0T3JnYW5pemF0aW9uUmVzcG9uc2UiyAWSQZkFCgxPcmdhbml6YXRpb24SA0dldBpHR2V0IGFuIG9yZ2FuaXphdGlvbi4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYXQgbGVhc3QgYSBNRU1CRVIgcm9sZS4qI3dlYi52MS5lbnZpcm9ubWVudC5nZXRfb3JnYW5pemF0aW9uSrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiUiIC92MS9lbnZpcm9ubWVudC9nZXRfb3JnYW5pemF0aW9uOgEqEsUGChFMaXN0T3JnYW5pemF0aW9ucxIvLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0T3JnYW5pemF0aW9uc1JlcXVlc3QaMC5idWNrZXRlZXIuZW52aXJvbm1lbnQuTGlzdE9yZ2FuaXphdGlvbnNSZXNwb25zZSLMBZJBmwUKDE9yZ2FuaXphdGlvbhIETGlzdBpGTGlzdCBvcmdhbml6YXRpb25zLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiold2ViLnYxLmVudmlyb25tZW50Lmxpc3Rfb3JnYW5pemF0aW9uc0q0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwInIiIvdjEvZW52aXJvbm1lbnQvbGlzdF9vcmdhbml6YXRpb25zOgEqEtAGChJDcmVhdGVPcmdhbml6YXRpb24SMC5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdBoxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5DcmVhdGVPcmdhbml6YXRpb25SZXNwb25zZSLUBZJBogUKDE9yZ2FuaXphdGlvbhIGQ3JlYXRlGkpDcmVhdGUgYW4gb3JnYW5pemF0aW9uLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiomd2ViLnYxLmVudmlyb25tZW50LmNyZWF0ZV9vcmdhbml6YXRpb25KtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKCIjL3YxL2Vudmlyb25tZW50L2NyZWF0ZV9vcmdhbml6YXRpb246ASoSyQYKElVwZGF0ZU9yZ2FuaXphdGlvbhIwLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VcGRhdGVPcmdhbml6YXRpb25SZXF1ZXN0GjEuYnVja2V0ZWVyLmVudmlyb25tZW50LlVwZGF0ZU9yZ2FuaXphdGlvblJlc3BvbnNlIs0FkkGbBQoMT3JnYW5pemF0aW9uEgZVcGRhdGUaQ1VwZGF0ZSBhbiBvcmdhbml6YXRpb24uIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qJndlYi52MS5lbnZpcm9ubWVudC51cGRhdGVfb3JnYW5pemF0aW9uSrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAigiIy92MS9lbnZpcm9ubWVudC91cGRhdGVfb3JnYW5pemF0aW9uOgEqEtAGChJFbmFibGVPcmdhbml6YXRpb24SMC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW5hYmxlT3JnYW5pemF0aW9uUmVxdWVzdBoxLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5FbmFibGVPcmdhbml6YXRpb25SZXNwb25zZSLUBZJBogUKDE9yZ2FuaXphdGlvbhIGRW5hYmxlGkpFbmFibGUgYW4gb3JnYW5pemF0aW9uLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgU1lTVEVNX0FETUlOYCByb2xlLiomd2ViLnYxLmVudmlyb25tZW50LmVuYWJsZV9vcmdhbml6YXRpb25KtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKCIjL3YxL2Vudmlyb25tZW50L2VuYWJsZV9vcmdhbml6YXRpb246ASoS1wYKE0Rpc2FibGVPcmdhbml6YXRpb24SMS5idWNrZXRlZXIuZW52aXJvbm1lbnQuRGlzYWJsZU9yZ2FuaXphdGlvblJlcXVlc3QaMi5idWNrZXRlZXIuZW52aXJvbm1lbnQuRGlzYWJsZU9yZ2FuaXphdGlvblJlc3BvbnNlItgFkkGlBQoMT3JnYW5pemF0aW9uEgdEaXNhYmxlGktEaXNhYmxlIGFuIG9yZ2FuaXphdGlvbi4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qJ3dlYi52MS5lbnZpcm9ubWVudC5kaXNhYmxlX29yZ2FuaXphdGlvbkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIpIiQvdjEvZW52aXJvbm1lbnQvZGlzYWJsZV9vcmdhbml6YXRpb246ASoS1wYKE0FyY2hpdmVPcmdhbml6YXRpb24SMS5idWNrZXRlZXIuZW52aXJvbm1lbnQuQXJjaGl2ZU9yZ2FuaXphdGlvblJlcXVlc3QaMi5idWNrZXRlZXIuZW52aXJvbm1lbnQuQXJjaGl2ZU9yZ2FuaXphdGlvblJlc3BvbnNlItgFkkGlBQoMT3JnYW5pemF0aW9uEgdBcmNoaXZlGktBcmNoaXZlIGFuIG9yZ2FuaXphdGlvbi4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qJ3dlYi52MS5lbnZpcm9ubWVudC5hcmNoaXZlX29yZ2FuaXphdGlvbkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIpIiQvdjEvZW52aXJvbm1lbnQvYXJjaGl2ZV9vcmdhbml6YXRpb246ASoS5QYKFVVuYXJjaGl2ZU9yZ2FuaXphdGlvbhIzLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5VbmFyY2hpdmVPcmdhbml6YXRpb25SZXF1ZXN0GjQuYnVja2V0ZWVyLmVudmlyb25tZW50LlVuYXJjaGl2ZU9yZ2FuaXphdGlvblJlc3BvbnNlIuAFkkGrBQoMT3JnYW5pemF0aW9uEglVbmFyY2hpdmUaTVVuYXJjaGl2ZSBhbiBvcmdhbml6YXRpb24uIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBTWVNURU1fQURNSU5gIHJvbGUuKil3ZWIudjEuZW52aXJvbm1lbnQudW5hcmNoaXZlX29yZ2FuaXphdGlvbkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIrIiYvdjEvZW52aXJvbm1lbnQvdW5hcmNoaXZlX29yZ2FuaXphdGlvbjoBKhKLBwoYQ29udmVydFRyaWFsT3JnYW5pemF0aW9uEjYuYnVja2V0ZWVyLmVudmlyb25tZW50LkNvbnZlcnRUcmlhbE9yZ2FuaXphdGlvblJlcXVlc3QaNy5idWNrZXRlZXIuZW52aXJvbm1lbnQuQ29udmVydFRyaWFsT3JnYW5pemF0aW9uUmVzcG9uc2Ui/QWSQcQFCgxPcmdhbml6YXRpb24SDUNvbnZlcnQgVHJpYWwaXkNvbnZlcnQgYSB0cmlhbCBvcmdhbml6YXRpb24gdG8gYSBwYWlkIG9uZS4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYFNZU1RFTV9BRE1JTmAgcm9sZS4qLXdlYi52MS5lbnZpcm9ubWVudC5jb252ZXJ0X3RyaWFsX29yZ2FuaXphdGlvbkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIvIiovdjEvZW52aXJvbm1lbnQvY29udmVydF90cmlhbF9vcmdhbml6YXRpb246ASoS5QYKDkxpc3RQcm9qZWN0c1YyEiwuYnVja2V0ZWVyLmVudmlyb25tZW50Lkxpc3RQcm9qZWN0c1YyUmVxdWVzdBotLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5MaXN0UHJvamVjdHNWMlJlc3BvbnNlIvUFkkHGBQoHUHJvamVjdBIQTGlzdCBQcm9qZWN0cyBWMhpsTGlzdCBwcm9qZWN0cyB3aXRoIFYyIEFQSS4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYXQgbGVhc3QgYSBNRU1CRVIgcm9sZSBpbiB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbnMuKiN3ZWIudjEuZW52aXJvbm1lbnQubGlzdF9wcm9qZWN0c192Mkq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIlIiAvdjEvZW52aXJvbm1lbnQvbGlzdF9wcm9qZWN0c192MjoBKkI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMw== - experimentDescriptor: CqwHCh5wcm90by9leHBlcmltZW50L2NvbW1hbmQucHJvdG8SFGJ1Y2tldGVlci5leHBlcmltZW50IlkKEUNyZWF0ZUdvYWxDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbiInChFSZW5hbWVHb2FsQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIkAKHENoYW5nZURlc2NyaXB0aW9uR29hbENvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIhQKEkFyY2hpdmVHb2FsQ29tbWFuZCITChFEZWxldGVHb2FsQ29tbWFuZCLvAQoXQ3JlYXRlRXhwZXJpbWVudENvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhkKCHN0YXJ0X2F0GAMgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYBCABKANSBnN0b3BBdBIZCghnb2FsX2lkcxgFIAMoCVIHZ29hbElkcxISCgRuYW1lGAYgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAcgASgJUgtkZXNjcmlwdGlvbhIqChFiYXNlX3ZhcmlhdGlvbl9pZBgIIAEoCVIPYmFzZVZhcmlhdGlvbklkSgQIAhADIlMKHUNoYW5nZUV4cGVyaW1lbnRQZXJpb2RDb21tYW5kEhkKCHN0YXJ0X2F0GAEgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYAiABKANSBnN0b3BBdCIxChtDaGFuZ2VFeHBlcmltZW50TmFtZUNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSJGCiJDaGFuZ2VFeHBlcmltZW50RGVzY3JpcHRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiIXChVTdG9wRXhwZXJpbWVudENvbW1hbmQiGgoYQXJjaGl2ZUV4cGVyaW1lbnRDb21tYW5kIhkKF0RlbGV0ZUV4cGVyaW1lbnRDb21tYW5kIhgKFlN0YXJ0RXhwZXJpbWVudENvbW1hbmQiGQoXRmluaXNoRXhwZXJpbWVudENvbW1hbmRCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMwrWAQodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlImcKCVZhcmlhdGlvbhIOCgJpZBgBIAEoCVICaWQSFAoFdmFsdWUYAiABKAlSBXZhbHVlEhIKBG5hbWUYAyABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKvAcKIXByb3RvL2V4cGVyaW1lbnQvZXhwZXJpbWVudC5wcm90bxIUYnVja2V0ZWVyLmV4cGVyaW1lbnQaHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvItAFCgpFeHBlcmltZW50Eg4KAmlkGAEgASgJUgJpZBIbCgdnb2FsX2lkGAIgASgJQgIYAVIGZ29hbElkEh0KCmZlYXR1cmVfaWQYAyABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YBCABKAVSDmZlYXR1cmVWZXJzaW9uEjwKCnZhcmlhdGlvbnMYBSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSGQoIc3RhcnRfYXQYBiABKANSB3N0YXJ0QXQSFwoHc3RvcF9hdBgHIAEoA1IGc3RvcEF0EhwKB3N0b3BwZWQYCCABKAhCAhgBUgdzdG9wcGVkEiEKCnN0b3BwZWRfYXQYCSABKANCAjABUglzdG9wcGVkQXQSHQoKY3JlYXRlZF9hdBgKIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCyABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAwgASgIUgdkZWxldGVkEhkKCGdvYWxfaWRzGA0gAygJUgdnb2FsSWRzEhIKBG5hbWUYDiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YDyABKAlSC2Rlc2NyaXB0aW9uEioKEWJhc2VfdmFyaWF0aW9uX2lkGBAgASgJUg9iYXNlVmFyaWF0aW9uSWQSPwoGc3RhdHVzGBIgASgOMicuYnVja2V0ZWVyLmV4cGVyaW1lbnQuRXhwZXJpbWVudC5TdGF0dXNSBnN0YXR1cxIeCgptYWludGFpbmVyGBMgASgJUgptYWludGFpbmVyEhoKCGFyY2hpdmVkGBQgASgIUghhcmNoaXZlZCJCCgZTdGF0dXMSCwoHV0FJVElORxAAEgsKB1JVTk5JTkcQARILCgdTVE9QUEVEEAISEQoNRk9SQ0VfU1RPUFBFRBADSgQIERASIlEKC0V4cGVyaW1lbnRzEkIKC2V4cGVyaW1lbnRzGAEgAygLMiAuYnVja2V0ZWVyLmV4cGVyaW1lbnQuRXhwZXJpbWVudFILZXhwZXJpbWVudHNCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMwrdAgobcHJvdG8vZXhwZXJpbWVudC9nb2FsLnByb3RvEhRidWNrZXRlZXIuZXhwZXJpbWVudCLpAQoER29hbBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EicKEGlzX2luX3VzZV9zdGF0dXMYByABKAhSDWlzSW5Vc2VTdGF0dXMSGgoIYXJjaGl2ZWQYCCABKAhSCGFyY2hpdmVkQjRaMmdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9leHBlcmltZW50YgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqXMgoecHJvdG8vZXhwZXJpbWVudC9zZXJ2aWNlLnByb3RvEhRidWNrZXRlZXIuZXhwZXJpbWVudBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGh5wcm90by9leHBlcmltZW50L2NvbW1hbmQucHJvdG8aG3Byb3RvL2V4cGVyaW1lbnQvZ29hbC5wcm90bxohcHJvdG8vZXhwZXJpbWVudC9leHBlcmltZW50LnByb3RvIlUKDkdldEdvYWxSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIkEKD0dldEdvYWxSZXNwb25zZRIuCgRnb2FsGAEgASgLMhouYnVja2V0ZWVyLmV4cGVyaW1lbnQuR29hbFIEZ29hbCKyBAoQTGlzdEdvYWxzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USSQoIb3JkZXJfYnkYBCABKA4yLi5idWNrZXRlZXIuZXhwZXJpbWVudC5MaXN0R29hbHNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSXgoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjUuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEdvYWxzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSQwoQaXNfaW5fdXNlX3N0YXR1cxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSDWlzSW5Vc2VTdGF0dXMSNgoIYXJjaGl2ZWQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghhcmNoaXZlZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEifgoRTGlzdEdvYWxzUmVzcG9uc2USMAoFZ29hbHMYASADKAsyGi5idWNrZXRlZXIuZXhwZXJpbWVudC5Hb2FsUgVnb2FscxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKLAQoRQ3JlYXRlR29hbFJlcXVlc3QSQQoHY29tbWFuZBgBIAEoCzInLmJ1Y2tldGVlci5leHBlcmltZW50LkNyZWF0ZUdvYWxDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiFAoSQ3JlYXRlR29hbFJlc3BvbnNlIp0BChJBcmNoaXZlR29hbFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkIKB2NvbW1hbmQYAiABKAsyKC5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbENvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIVChNBcmNoaXZlR29hbFJlc3BvbnNlIpsBChFEZWxldGVHb2FsUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQQoHY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUdvYWxDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiFAoSRGVsZXRlR29hbFJlc3BvbnNlIpoCChFVcGRhdGVHb2FsUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSTgoOcmVuYW1lX2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZXhwZXJpbWVudC5SZW5hbWVHb2FsQ29tbWFuZFINcmVuYW1lQ29tbWFuZBJwChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzIyLmJ1Y2tldGVlci5leHBlcmltZW50LkNoYW5nZURlc2NyaXB0aW9uR29hbENvbW1hbmRSGGNoYW5nZURlc2NyaXB0aW9uQ29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBCABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhQKElVwZGF0ZUdvYWxSZXNwb25zZSJbChRHZXRFeHBlcmltZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJZChVHZXRFeHBlcmltZW50UmVzcG9uc2USQAoKZXhwZXJpbWVudBgBIAEoCzIgLmJ1Y2tldGVlci5leHBlcmltZW50LkV4cGVyaW1lbnRSCmV4cGVyaW1lbnQiogYKFkxpc3RFeHBlcmltZW50c1JlcXVlc3QSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEkQKD2ZlYXR1cmVfdmVyc2lvbhgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUg5mZWF0dXJlVmVyc2lvbhISCgRmcm9tGAMgASgDUgRmcm9tEg4KAnRvGAQgASgDUgJ0bxIbCglwYWdlX3NpemUYBSABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgGIAEoCVIGY3Vyc29yEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgHIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USMwoGc3RhdHVzGAggASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSBnN0YXR1cxIeCgptYWludGFpbmVyGAkgASgJUgptYWludGFpbmVyEk8KCG9yZGVyX2J5GAogASgOMjQuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEV4cGVyaW1lbnRzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmQKD29yZGVyX2RpcmVjdGlvbhgLIAEoDjI7LmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RFeHBlcmltZW50c1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAwgASgJUg1zZWFyY2hLZXl3b3JkEjYKCGFyY2hpdmVkGA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSQwoIc3RhdHVzZXMYDiADKA4yJy5idWNrZXRlZXIuZXhwZXJpbWVudC5FeHBlcmltZW50LlN0YXR1c1IIc3RhdHVzZXMiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIpYBChdMaXN0RXhwZXJpbWVudHNSZXNwb25zZRJCCgtleHBlcmltZW50cxgBIAMoCzIgLmJ1Y2tldGVlci5leHBlcmltZW50LkV4cGVyaW1lbnRSC2V4cGVyaW1lbnRzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IpcBChdDcmVhdGVFeHBlcmltZW50UmVxdWVzdBJHCgdjb21tYW5kGAEgASgLMi0uYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlRXhwZXJpbWVudENvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJcChhDcmVhdGVFeHBlcmltZW50UmVzcG9uc2USQAoKZXhwZXJpbWVudBgBIAEoCzIgLmJ1Y2tldGVlci5leHBlcmltZW50LkV4cGVyaW1lbnRSCmV4cGVyaW1lbnQiwwMKF1VwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBCABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEnwKIGNoYW5nZV9leHBlcmltZW50X3BlcmlvZF9jb21tYW5kGAUgASgLMjMuYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ2hhbmdlRXhwZXJpbWVudFBlcmlvZENvbW1hbmRSHWNoYW5nZUV4cGVyaW1lbnRQZXJpb2RDb21tYW5kEmEKE2NoYW5nZV9uYW1lX2NvbW1hbmQYBiABKAsyMS5idWNrZXRlZXIuZXhwZXJpbWVudC5DaGFuZ2VFeHBlcmltZW50TmFtZUNvbW1hbmRSEWNoYW5nZU5hbWVDb21tYW5kEnYKGmNoYW5nZV9kZXNjcmlwdGlvbl9jb21tYW5kGAcgASgLMjguYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ2hhbmdlRXhwZXJpbWVudERlc2NyaXB0aW9uQ29tbWFuZFIYY2hhbmdlRGVzY3JpcHRpb25Db21tYW5kSgQIAhADSgQIAxAEIhoKGFVwZGF0ZUV4cGVyaW1lbnRSZXNwb25zZSKlAQoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEg4KAmlkGAIgASgJUgJpZBJGCgdjb21tYW5kGAMgASgLMiwuYnVja2V0ZWVyLmV4cGVyaW1lbnQuU3RhcnRFeHBlcmltZW50Q29tbWFuZFIHY29tbWFuZCIZChdTdGFydEV4cGVyaW1lbnRSZXNwb25zZSKnAQoXRmluaXNoRXhwZXJpbWVudFJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIOCgJpZBgCIAEoCVICaWQSRwoHY29tbWFuZBgDIAEoCzItLmJ1Y2tldGVlci5leHBlcmltZW50LkZpbmlzaEV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kIhoKGEZpbmlzaEV4cGVyaW1lbnRSZXNwb25zZSKjAQoVU3RvcEV4cGVyaW1lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJFCgdjb21tYW5kGAIgASgLMisuYnVja2V0ZWVyLmV4cGVyaW1lbnQuU3RvcEV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiGAoWU3RvcEV4cGVyaW1lbnRSZXNwb25zZSKpAQoYQXJjaGl2ZUV4cGVyaW1lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJICgdjb21tYW5kGAIgASgLMi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuQXJjaGl2ZUV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiGwoZQXJjaGl2ZUV4cGVyaW1lbnRSZXNwb25zZSKnAQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkcKB2NvbW1hbmQYAiABKAsyLS5idWNrZXRlZXIuZXhwZXJpbWVudC5EZWxldGVFeHBlcmltZW50Q29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhoKGERlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZTLnDAoRRXhwZXJpbWVudFNlcnZpY2USWAoHR2V0R29hbBIkLmJ1Y2tldGVlci5leHBlcmltZW50LkdldEdvYWxSZXF1ZXN0GiUuYnVja2V0ZWVyLmV4cGVyaW1lbnQuR2V0R29hbFJlc3BvbnNlIgASXgoJTGlzdEdvYWxzEiYuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEdvYWxzUmVxdWVzdBonLmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RHb2Fsc1Jlc3BvbnNlIgASYQoKQ3JlYXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LkNyZWF0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlR29hbFJlc3BvbnNlIgASYQoKVXBkYXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LlVwZGF0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuVXBkYXRlR29hbFJlc3BvbnNlIgASZAoLQXJjaGl2ZUdvYWwSKC5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbFJlcXVlc3QaKS5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbFJlc3BvbnNlIgASYQoKRGVsZXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuRGVsZXRlR29hbFJlc3BvbnNlIgASagoNR2V0RXhwZXJpbWVudBIqLmJ1Y2tldGVlci5leHBlcmltZW50LkdldEV4cGVyaW1lbnRSZXF1ZXN0GisuYnVja2V0ZWVyLmV4cGVyaW1lbnQuR2V0RXhwZXJpbWVudFJlc3BvbnNlIgAScAoPTGlzdEV4cGVyaW1lbnRzEiwuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEV4cGVyaW1lbnRzUmVxdWVzdBotLmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RFeHBlcmltZW50c1Jlc3BvbnNlIgAScwoQQ3JlYXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkNyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlIgAScwoQVXBkYXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LlVwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlIgAScAoPU3RhcnRFeHBlcmltZW50EiwuYnVja2V0ZWVyLmV4cGVyaW1lbnQuU3RhcnRFeHBlcmltZW50UmVxdWVzdBotLmJ1Y2tldGVlci5leHBlcmltZW50LlN0YXJ0RXhwZXJpbWVudFJlc3BvbnNlIgAScwoQRmluaXNoRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkZpbmlzaEV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuRmluaXNoRXhwZXJpbWVudFJlc3BvbnNlIgASbQoOU3RvcEV4cGVyaW1lbnQSKy5idWNrZXRlZXIuZXhwZXJpbWVudC5TdG9wRXhwZXJpbWVudFJlcXVlc3QaLC5idWNrZXRlZXIuZXhwZXJpbWVudC5TdG9wRXhwZXJpbWVudFJlc3BvbnNlIgASdgoRQXJjaGl2ZUV4cGVyaW1lbnQSLi5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlRXhwZXJpbWVudFJlcXVlc3QaLy5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlRXhwZXJpbWVudFJlc3BvbnNlIgAScwoQRGVsZXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlIgBCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMw== - featureDescriptor: CscDChpwcm90by9mZWF0dXJlL2NsYXVzZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUi2gIKBkNsYXVzZRIOCgJpZBgBIAEoCVICaWQSHAoJYXR0cmlidXRlGAIgASgJUglhdHRyaWJ1dGUSPgoIb3BlcmF0b3IYAyABKA4yIi5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2UuT3BlcmF0b3JSCG9wZXJhdG9yEhYKBnZhbHVlcxgEIAMoCVIGdmFsdWVzIskBCghPcGVyYXRvchIKCgZFUVVBTFMQABIGCgJJThABEg0KCUVORFNfV0lUSBACEg8KC1NUQVJUU19XSVRIEAMSCwoHU0VHTUVOVBAEEgsKB0dSRUFURVIQBRIUChBHUkVBVEVSX09SX0VRVUFMEAYSCAoETEVTUxAHEhEKDUxFU1NfT1JfRVFVQUwQCBIKCgZCRUZPUkUQCRIJCgVBRlRFUhAKEhAKDEZFQVRVUkVfRkxBRxALEhMKD1BBUlRJQUxMWV9NQVRDSBAMQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK5AEKGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI2CgNBbnkSGQoIdHlwZV91cmwYASABKAlSB3R5cGVVcmwSFAoFdmFsdWUYAiABKAxSBXZhbHVlQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwq7BAoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiLQoNRml4ZWRTdHJhdGVneRIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbiKiAQoPUm9sbG91dFN0cmF0ZWd5EkwKCnZhcmlhdGlvbnMYASADKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3kuVmFyaWF0aW9uUgp2YXJpYXRpb25zGkEKCVZhcmlhdGlvbhIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIWCgZ3ZWlnaHQYAiABKAVSBndlaWdodCL4AQoIU3RyYXRlZ3kSNAoEdHlwZRgBIAEoDjIgLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5LlR5cGVSBHR5cGUSRwoOZml4ZWRfc3RyYXRlZ3kYAiABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5Ug1maXhlZFN0cmF0ZWd5Ek0KEHJvbGxvdXRfc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSD3JvbGxvdXRTdHJhdGVneSIeCgRUeXBlEgkKBUZJWEVEEAASCwoHUk9MTE9VVBABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqQIKGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvIoQBCgRSdWxlEg4KAmlkGAEgASgJUgJpZBI3CghzdHJhdGVneRgCIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneRIzCgdjbGF1c2VzGAMgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlUgdjbGF1c2VzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqAEKGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSI8CgZUYXJnZXQSHAoJdmFyaWF0aW9uGAEgASgJUgl2YXJpYXRpb24SFAoFdXNlcnMYAiADKAlSBXVzZXJzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCvQCCipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIvcBChNGZWF0dXJlTGFzdFVzZWRJbmZvEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIYCgd2ZXJzaW9uGAIgASgFUgd2ZXJzaW9uEiAKDGxhc3RfdXNlZF9hdBgDIAEoA1IKbGFzdFVzZWRBdBIdCgpjcmVhdGVkX2F0GAQgASgDUgljcmVhdGVkQXQSMgoVY2xpZW50X29sZGVzdF92ZXJzaW9uGAUgASgJUhNjbGllbnRPbGRlc3RWZXJzaW9uEjIKFWNsaWVudF9sYXRlc3RfdmVyc2lvbhgGIAEoCVITY2xpZW50TGF0ZXN0VmVyc2lvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsIBCiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiUAoMUHJlcmVxdWlzaXRlEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqgsKG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvItIHCgdGZWF0dXJlEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhIYCgdlbmFibGVkGAQgASgIUgdlbmFibGVkEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQSOQoWZXZhbHVhdGlvbl91bmRlbGF5YWJsZRgGIAEoCEICGAFSFWV2YWx1YXRpb25VbmRlbGF5YWJsZRIQCgN0dGwYByABKAVSA3R0bBIYCgd2ZXJzaW9uGAggASgFUgd2ZXJzaW9uEh0KCmNyZWF0ZWRfYXQYCSABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAogASgDUgl1cGRhdGVkQXQSPAoKdmFyaWF0aW9ucxgLIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIzCgd0YXJnZXRzGAwgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGA0gAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgOIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSIwoNb2ZmX3ZhcmlhdGlvbhgPIAEoCVIMb2ZmVmFyaWF0aW9uEhIKBHRhZ3MYECADKAlSBHRhZ3MSTAoObGFzdF91c2VkX2luZm8YESABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlTGFzdFVzZWRJbmZvUgxsYXN0VXNlZEluZm8SHgoKbWFpbnRhaW5lchgSIAEoCVIKbWFpbnRhaW5lchJPCg52YXJpYXRpb25fdHlwZRgTIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRIaCghhcmNoaXZlZBgUIAEoCFIIYXJjaGl2ZWQSRQoNcHJlcmVxdWlzaXRlcxgVIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIjCg1zYW1wbGluZ19zZWVkGBYgASgJUgxzYW1wbGluZ1NlZWQiPgoNVmFyaWF0aW9uVHlwZRIKCgZTVFJJTkcQABILCgdCT09MRUFOEAESCgoGTlVNQkVSEAISCAoESlNPThADIlIKCEZlYXR1cmVzEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSDgoCaWQYAiABKAlSAmlkIlMKA1RhZxIOCgJpZBgBIAEoCVICaWQSHQoKY3JlYXRlZF9hdBgCIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrUIChtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90byK0BAoHU2VnbWVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SLQoFcnVsZXMYBCADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EhwKB3ZlcnNpb24YByABKANCAhgBUgd2ZXJzaW9uEhgKB2RlbGV0ZWQYCCABKAhSB2RlbGV0ZWQSLgoTaW5jbHVkZWRfdXNlcl9jb3VudBgJIAEoA1IRaW5jbHVkZWRVc2VyQ291bnQSMgoTZXhjbHVkZWRfdXNlcl9jb3VudBgKIAEoA0ICGAFSEWV4Y2x1ZGVkVXNlckNvdW50EjkKBnN0YXR1cxgLIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSJwoQaXNfaW5fdXNlX3N0YXR1cxgMIAEoCFINaXNJblVzZVN0YXR1cxI2CghmZWF0dXJlcxgNIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIj4KBlN0YXR1cxILCgdJTklUSUFMEAASDQoJVVBMT0FESU5HEAESDAoIU1VDRUVERUQQAhIKCgZGQUlMRUQQAyLUAQoLU2VnbWVudFVzZXISDgoCaWQYASABKAlSAmlkEh0KCnNlZ21lbnRfaWQYAiABKAlSCXNlZ21lbnRJZBIXCgd1c2VyX2lkGAMgASgJUgZ1c2VySWQSOgoFc3RhdGUYBCABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSGAoHZGVsZXRlZBgFIAEoCFIHZGVsZXRlZCInCgVTdGF0ZRIMCghJTkNMVURFRBAAEhAKCEVYQ0xVREVEEAEaAggBIoIBCgxTZWdtZW50VXNlcnMSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjQKBXVzZXJzGAIgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCqgFCiBwcm90by9mZWF0dXJlL2ZsYWdfdHJpZ2dlci5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUitQQKC0ZsYWdUcmlnZ2VyEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRI3CgR0eXBlGAQgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YBSABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgGIAEoCVILZGVzY3JpcHRpb24SIwoNdHJpZ2dlcl9jb3VudBgHIAEoBVIMdHJpZ2dlckNvdW50EioKEWxhc3RfdHJpZ2dlcmVkX2F0GAggASgDUg9sYXN0VHJpZ2dlcmVkQXQSFAoFdG9rZW4YCSABKAlSBXRva2VuEhoKCGRpc2FibGVkGAogASgIUghkaXNhYmxlZBIdCgpjcmVhdGVkX2F0GAsgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgMIAEoA1IJdXBkYXRlZEF0IioKBFR5cGUSEAoMVHlwZV9VTktOT1dOEAASEAoMVHlwZV9XRUJIT09LEAEiOwoGQWN0aW9uEhIKDkFjdGlvbl9VTktOT1dOEAASDQoJQWN0aW9uX09OEAESDgoKQWN0aW9uX09GRhACQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKyCMKG3Byb3RvL2ZlYXR1cmUvY29tbWFuZC5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8iOQoHQ29tbWFuZBIuCgdjb21tYW5kGAEgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIHY29tbWFuZCK1AwoUQ3JlYXRlRmVhdHVyZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEjwKCnZhcmlhdGlvbnMYBCADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSEgoEdGFncxgFIAMoCVIEdGFncxJYChpkZWZhdWx0X29uX3ZhcmlhdGlvbl9pbmRleBgGIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUhdkZWZhdWx0T25WYXJpYXRpb25JbmRleBJaChtkZWZhdWx0X29mZl92YXJpYXRpb25faW5kZXgYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIYZGVmYXVsdE9mZlZhcmlhdGlvbkluZGV4Ek8KDnZhcmlhdGlvbl90eXBlGAggASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZS5WYXJpYXRpb25UeXBlUg12YXJpYXRpb25UeXBlIhcKFUFyY2hpdmVGZWF0dXJlQ29tbWFuZCIZChdVbmFyY2hpdmVGZWF0dXJlQ29tbWFuZCIWChREZWxldGVGZWF0dXJlQ29tbWFuZCIqChRSZW5hbWVGZWF0dXJlQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIjwKGENoYW5nZURlc2NyaXB0aW9uQ29tbWFuZBIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24iuAEKKUNoYW5nZUJ1bGtVcGxvYWRTZWdtZW50VXNlcnNTdGF0dXNDb21tYW5kEjkKBnN0YXR1cxgBIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSOgoFc3RhdGUYAiABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSFAoFY291bnQYAyABKANSBWNvdW50IiEKDUFkZFRhZ0NvbW1hbmQSEAoDdGFnGAEgASgJUgN0YWciJAoQUmVtb3ZlVGFnQ29tbWFuZBIQCgN0YWcYASABKAlSA3RhZyIWChRFbmFibGVGZWF0dXJlQ29tbWFuZCIXChVEaXNhYmxlRmVhdHVyZUNvbW1hbmQiYQoTQWRkVmFyaWF0aW9uQ29tbWFuZBIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24iKAoWUmVtb3ZlVmFyaWF0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQiQwobQ2hhbmdlVmFyaWF0aW9uVmFsdWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIUCgV2YWx1ZRgCIAEoCVIFdmFsdWUiQAoaQ2hhbmdlVmFyaWF0aW9uTmFtZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiVQohQ2hhbmdlVmFyaWF0aW9uRGVzY3JpcHRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iKwoZQ2hhbmdlT2ZmVmFyaWF0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQiPwoZQWRkVXNlclRvVmFyaWF0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEdXNlchgCIAEoCVIEdXNlciJECh5SZW1vdmVVc2VyRnJvbVZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhIKBHVzZXIYAiABKAlSBHVzZXIiVwocQ2hhbmdlRGVmYXVsdFN0cmF0ZWd5Q29tbWFuZBI3CghzdHJhdGVneRgBIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneSI9Cg5BZGRSdWxlQ29tbWFuZBIrCgRydWxlGAEgASgLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIEcnVsZSJ9ChlDaGFuZ2VSdWxlU3RyYXRlZ3lDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSNwoIc3RyYXRlZ3kYAyABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIIc3RyYXRlZ3kiNAoXQ2hhbmdlUnVsZXNPcmRlckNvbW1hbmQSGQoIcnVsZV9pZHMYAiADKAlSB3J1bGVJZHMiIwoRRGVsZXRlUnVsZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkIl4KEEFkZENsYXVzZUNvbW1hbmQSFwoHcnVsZV9pZBgBIAEoCVIGcnVsZUlkEjEKBmNsYXVzZRgCIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZVIGY2xhdXNlIj4KE0RlbGV0ZUNsYXVzZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZCJlChxDaGFuZ2VDbGF1c2VBdHRyaWJ1dGVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSHAoJYXR0cmlidXRlGAMgASgJUglhdHRyaWJ1dGUihgEKG0NoYW5nZUNsYXVzZU9wZXJhdG9yQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEj4KCG9wZXJhdG9yGAMgASgOMiIuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvciJWChVBZGRDbGF1c2VWYWx1ZUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIUCgV2YWx1ZRgDIAEoCVIFdmFsdWUiWQoYUmVtb3ZlQ2xhdXNlVmFsdWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSFAoFdmFsdWUYAyABKAlSBXZhbHVlIoMBChpDaGFuZ2VGaXhlZFN0cmF0ZWd5Q29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEjwKCHN0cmF0ZWd5GAMgASgLMiAuYnVja2V0ZWVyLmZlYXR1cmUuRml4ZWRTdHJhdGVneVIIc3RyYXRlZ3kihwEKHENoYW5nZVJvbGxvdXRTdHJhdGVneUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI+CghzdHJhdGVneRgDIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlJvbGxvdXRTdHJhdGVneVIIc3RyYXRlZ3kiTAoUQ3JlYXRlU2VnbWVudENvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iFgoURGVsZXRlU2VnbWVudENvbW1hbmQiLgoYQ2hhbmdlU2VnbWVudE5hbWVDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiQwofQ2hhbmdlU2VnbWVudERlc2NyaXB0aW9uQ29tbWFuZBIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24ibgoVQWRkU2VnbWVudFVzZXJDb21tYW5kEhkKCHVzZXJfaWRzGAEgAygJUgd1c2VySWRzEjoKBXN0YXRlGAIgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlInEKGERlbGV0ZVNlZ21lbnRVc2VyQ29tbWFuZBIZCgh1c2VyX2lkcxgBIAMoCVIHdXNlcklkcxI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSJvCh1CdWxrVXBsb2FkU2VnbWVudFVzZXJzQ29tbWFuZBISCgRkYXRhGAEgASgMUgRkYXRhEjoKBXN0YXRlGAIgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlIiAKHkluY3JlbWVudEZlYXR1cmVWZXJzaW9uQ29tbWFuZCJKChNDbG9uZUZlYXR1cmVDb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiGgoYUmVzZXRTYW1wbGluZ1NlZWRDb21tYW5kIl0KFkFkZFByZXJlcXVpc2l0ZUNvbW1hbmQSQwoMcHJlcmVxdWlzaXRlGAEgASgLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUgxwcmVyZXF1aXNpdGUiOgoZUmVtb3ZlUHJlcmVxdWlzaXRlQ29tbWFuZBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQiaQoiQ2hhbmdlUHJlcmVxdWlzaXRlVmFyaWF0aW9uQ29tbWFuZBJDCgxwcmVyZXF1aXNpdGUYASABKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDHByZXJlcXVpc2l0ZSLTAQoYQ3JlYXRlRmxhZ1RyaWdnZXJDb21tYW5kEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBI3CgR0eXBlGAIgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YAyABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb24iGQoXUmVzZXRGbGFnVHJpZ2dlckNvbW1hbmQiRwojQ2hhbmdlRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIhoKGEVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZCIbChlEaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kIhoKGERlbGV0ZUZsYWdUcmlnZ2VyQ29tbWFuZCIfCh1VcGRhdGVGbGFnVHJpZ2dlclVzYWdlQ29tbWFuZEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCp4CChpwcm90by9mZWF0dXJlL3JlYXNvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUisQEKBlJlYXNvbhIyCgR0eXBlGAEgASgOMh4uYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uLlR5cGVSBHR5cGUSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIloKBFR5cGUSCgoGVEFSR0VUEAASCAoEUlVMRRABEgsKB0RFRkFVTFQQAxIKCgZDTElFTlQQBBIRCg1PRkZfVkFSSUFUSU9OEAUSEAoMUFJFUkVRVUlTSVRFEAZCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqYBgoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvIuMCCgpFdmFsdWF0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhIXCgd1c2VyX2lkGAQgASgJUgZ1c2VySWQSIQoMdmFyaWF0aW9uX2lkGAUgASgJUgt2YXJpYXRpb25JZBI+Cgl2YXJpYXRpb24YBiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25CAhgBUgl2YXJpYXRpb24SMQoGcmVhc29uGAcgASgLMhkuYnVja2V0ZWVyLmZlYXR1cmUuUmVhc29uUgZyZWFzb24SJwoPdmFyaWF0aW9uX3ZhbHVlGAggASgJUg52YXJpYXRpb25WYWx1ZRIlCg52YXJpYXRpb25fbmFtZRgJIAEoCVINdmFyaWF0aW9uTmFtZSKGAgoPVXNlckV2YWx1YXRpb25zEhIKAmlkGAEgASgJQgIYAVICaWQSPwoLZXZhbHVhdGlvbnMYAiADKAsyHS5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0aW9uUgtldmFsdWF0aW9ucxIdCgpjcmVhdGVkX2F0GAMgASgDUgljcmVhdGVkQXQSMAoUYXJjaGl2ZWRfZmVhdHVyZV9pZHMYBCADKAlSEmFyY2hpdmVkRmVhdHVyZUlkcxIhCgxmb3JjZV91cGRhdGUYBSABKAhSC2ZvcmNlVXBkYXRlIioKBVN0YXRlEgoKBlFVRVVFRBAAEgsKB1BBUlRJQUwQARIICgRGVUxMEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwqHBQoVZ29vZ2xlL2FwaS9odHRwLnByb3RvEgpnb29nbGUuYXBpInkKBEh0dHASKgoFcnVsZXMYASADKAsyFC5nb29nbGUuYXBpLkh0dHBSdWxlUgVydWxlcxJFCh9mdWxseV9kZWNvZGVfcmVzZXJ2ZWRfZXhwYW5zaW9uGAIgASgIUhxmdWxseURlY29kZVJlc2VydmVkRXhwYW5zaW9uIrUCCghIdHRwUnVsZRIaCghzZWxlY3RvchgBIAEoCVIIc2VsZWN0b3ISEgoDZ2V0GAIgASgJSABSA2dldBISCgNwdXQYAyABKAlIAFIDcHV0EhQKBHBvc3QYBCABKAlIAFIEcG9zdBIYCgZkZWxldGUYBSABKAlIAFIGZGVsZXRlEhYKBXBhdGNoGAYgASgJSABSBXBhdGNoEjcKBmN1c3RvbRgIIAEoCzIdLmdvb2dsZS5hcGkuQ3VzdG9tSHR0cFBhdHRlcm5IAFIGY3VzdG9tEhIKBGJvZHkYByABKAlSBGJvZHkSRQoTYWRkaXRpb25hbF9iaW5kaW5ncxgLIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSEmFkZGl0aW9uYWxCaW5kaW5nc0IJCgdwYXR0ZXJuIjsKEUN1c3RvbUh0dHBQYXR0ZXJuEhIKBGtpbmQYASABKAlSBGtpbmQSEgoEcGF0aBgCIAEoCVIEcGF0aEJqCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25z+AEBogIER0FQSWIGcHJvdG8zCuFGCiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIk0KEUZpbGVEZXNjcmlwdG9yU2V0EjgKBGZpbGUYASADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b1IEZmlsZSL+BAoTRmlsZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhgKB3BhY2thZ2UYAiABKAlSB3BhY2thZ2USHgoKZGVwZW5kZW5jeRgDIAMoCVIKZGVwZW5kZW5jeRIrChFwdWJsaWNfZGVwZW5kZW5jeRgKIAMoBVIQcHVibGljRGVwZW5kZW5jeRInCg93ZWFrX2RlcGVuZGVuY3kYCyADKAVSDndlYWtEZXBlbmRlbmN5EkMKDG1lc3NhZ2VfdHlwZRgEIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SC21lc3NhZ2VUeXBlEkEKCWVudW1fdHlwZRgFIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJBCgdzZXJ2aWNlGAYgAygLMicuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9SB3NlcnZpY2USQwoJZXh0ZW5zaW9uGAcgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SNgoHb3B0aW9ucxgIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1IHb3B0aW9ucxJJChBzb3VyY2VfY29kZV9pbmZvGAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvUg5zb3VyY2VDb2RlSW5mbxIWCgZzeW50YXgYDCABKAlSBnN5bnRheBIYCgdlZGl0aW9uGA0gASgJUgdlZGl0aW9uIrkGCg9EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI7CgVmaWVsZBgCIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IFZmllbGQSQwoJZXh0ZW5zaW9uGAYgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SQQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvUgpuZXN0ZWRUeXBlEkEKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJYCg9leHRlbnNpb25fcmFuZ2UYBSADKAsyLy5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlUg5leHRlbnNpb25SYW5nZRJECgpvbmVvZl9kZWNsGAggAygLMiUuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvUglvbmVvZkRlY2wSOQoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc1IHb3B0aW9ucxJVCg5yZXNlcnZlZF9yYW5nZRgJIAMoCzIuLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAogAygJUgxyZXNlcnZlZE5hbWUaegoORXh0ZW5zaW9uUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kEkAKB29wdGlvbnMYAyABKAsyJi5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zUgdvcHRpb25zGjcKDVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIq0EChVFeHRlbnNpb25SYW5nZU9wdGlvbnMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24SWQoLZGVjbGFyYXRpb24YAiADKAsyMi5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLkRlY2xhcmF0aW9uQgOIAQJSC2RlY2xhcmF0aW9uEmgKDHZlcmlmaWNhdGlvbhgDIAEoDjI4Lmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuVmVyaWZpY2F0aW9uU3RhdGU6ClVOVkVSSUZJRURSDHZlcmlmaWNhdGlvbhqzAQoLRGVjbGFyYXRpb24SFgoGbnVtYmVyGAEgASgFUgZudW1iZXISGwoJZnVsbF9uYW1lGAIgASgJUghmdWxsTmFtZRISCgR0eXBlGAMgASgJUgR0eXBlEiMKC2lzX3JlcGVhdGVkGAQgASgIQgIYAVIKaXNSZXBlYXRlZBIaCghyZXNlcnZlZBgFIAEoCFIIcmVzZXJ2ZWQSGgoIcmVwZWF0ZWQYBiABKAhSCHJlcGVhdGVkIjQKEVZlcmlmaWNhdGlvblN0YXRlEg8KC0RFQ0xBUkFUSU9OEAASDgoKVU5WRVJJRklFRBABKgkI6AcQgICAgAIiwQYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucxInCg9wcm90bzNfb3B0aW9uYWwYESABKAhSDnByb3RvM09wdGlvbmFsIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUVVJUkVEEAISEgoOTEFCRUxfUkVQRUFURUQQAyJjChRPbmVvZkRlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjcKB29wdGlvbnMYAiABKAsyHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zUgdvcHRpb25zIuMCChNFbnVtRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPwoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvUgV2YWx1ZRI2CgdvcHRpb25zGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zUgdvcHRpb25zEl0KDnJlc2VydmVkX3JhbmdlGAQgAygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgFIAMoCVIMcmVzZXJ2ZWROYW1lGjsKEUVudW1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCKDAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAIgASgFUgZudW1iZXISOwoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zUgdvcHRpb25zIqcBChZTZXJ2aWNlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1IGbWV0aG9kEjkKB29wdGlvbnMYAyABKAsyHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNSB29wdGlvbnMiiQIKFU1ldGhvZERlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEh0KCmlucHV0X3R5cGUYAiABKAlSCWlucHV0VHlwZRIfCgtvdXRwdXRfdHlwZRgDIAEoCVIKb3V0cHV0VHlwZRI4CgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNSB29wdGlvbnMSMAoQY2xpZW50X3N0cmVhbWluZxgFIAEoCDoFZmFsc2VSD2NsaWVudFN0cmVhbWluZxIwChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZVIPc2VydmVyU3RyZWFtaW5nIpEJCgtGaWxlT3B0aW9ucxIhCgxqYXZhX3BhY2thZ2UYASABKAlSC2phdmFQYWNrYWdlEjAKFGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJUhJqYXZhT3V0ZXJDbGFzc25hbWUSNQoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEoCDoFZmFsc2VSEWphdmFNdWx0aXBsZUZpbGVzEkQKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoGBQgASgIQgIYAVIZamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaBI6ChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsgASgIOgVmYWxzZVITamF2YVN0cmluZ0NoZWNrVXRmOBJTCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRFILb3B0aW1pemVGb3ISHQoKZ29fcGFja2FnZRgLIAEoCVIJZ29QYWNrYWdlEjUKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlUhFjY0dlbmVyaWNTZXJ2aWNlcxI5ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlUhNqYXZhR2VuZXJpY1NlcnZpY2VzEjUKE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlUhFweUdlbmVyaWNTZXJ2aWNlcxI3ChRwaHBfZ2VuZXJpY19zZXJ2aWNlcxgqIAEoCDoFZmFsc2VSEnBocEdlbmVyaWNTZXJ2aWNlcxIlCgpkZXByZWNhdGVkGBcgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIuChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgR0cnVlUg5jY0VuYWJsZUFyZW5hcxIqChFvYmpjX2NsYXNzX3ByZWZpeBgkIAEoCVIPb2JqY0NsYXNzUHJlZml4EikKEGNzaGFycF9uYW1lc3BhY2UYJSABKAlSD2NzaGFycE5hbWVzcGFjZRIhCgxzd2lmdF9wcmVmaXgYJyABKAlSC3N3aWZ0UHJlZml4EigKEHBocF9jbGFzc19wcmVmaXgYKCABKAlSDnBocENsYXNzUHJlZml4EiMKDXBocF9uYW1lc3BhY2UYKSABKAlSDHBocE5hbWVzcGFjZRI0ChZwaHBfbWV0YWRhdGFfbmFtZXNwYWNlGCwgASgJUhRwaHBNZXRhZGF0YU5hbWVzcGFjZRIhCgxydWJ5X3BhY2thZ2UYLSABKAlSC3J1YnlQYWNrYWdlElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgmECciuwMKDk1lc3NhZ2VPcHRpb25zEjwKF21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0GAEgASgIOgVmYWxzZVIUbWVzc2FnZVNldFdpcmVGb3JtYXQSTAofbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2VSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGwoJbWFwX2VudHJ5GAcgASgIUghtYXBFbnRyeRJWCiZkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cxgLIAEoCEICGAFSImRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAQQBUoECAUQBkoECAYQB0oECAgQCUoECAkQCiKFCQoMRmllbGRPcHRpb25zEkEKBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSSU5HUgVjdHlwZRIWCgZwYWNrZWQYAiABKAhSBnBhY2tlZBJHCgZqc3R5cGUYBiABKA4yJC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZToJSlNfTk9STUFMUgZqc3R5cGUSGQoEbGF6eRgFIAEoCDoFZmFsc2VSBGxhenkSLgoPdW52ZXJpZmllZF9sYXp5GA8gASgIOgVmYWxzZVIOdW52ZXJpZmllZExhenkSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGQoEd2VhaxgKIAEoCDoFZmFsc2VSBHdlYWsSKAoMZGVidWdfcmVkYWN0GBAgASgIOgVmYWxzZVILZGVidWdSZWRhY3QSSwoJcmV0ZW50aW9uGBEgASgOMi0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25SZXRlbnRpb25SCXJldGVudGlvbhJKCgZ0YXJnZXQYEiABKA4yLi5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblRhcmdldFR5cGVCAhgBUgZ0YXJnZXQSSAoHdGFyZ2V0cxgTIAMoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZVIHdGFyZ2V0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACIlUKD09wdGlvblJldGVudGlvbhIVChFSRVRFTlRJT05fVU5LTk9XThAAEhUKEVJFVEVOVElPTl9SVU5USU1FEAESFAoQUkVURU5USU9OX1NPVVJDRRACIowCChBPcHRpb25UYXJnZXRUeXBlEhcKE1RBUkdFVF9UWVBFX1VOS05PV04QABIUChBUQVJHRVRfVFlQRV9GSUxFEAESHwobVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFEAISFwoTVEFSR0VUX1RZUEVfTUVTU0FHRRADEhUKEVRBUkdFVF9UWVBFX0ZJRUxEEAQSFQoRVEFSR0VUX1RZUEVfT05FT0YQBRIUChBUQVJHRVRfVFlQRV9FTlVNEAYSGgoWVEFSR0VUX1RZUEVfRU5VTV9FTlRSWRAHEhcKE1RBUkdFVF9UWVBFX1NFUlZJQ0UQCBIWChJUQVJHRVRfVFlQRV9NRVRIT0QQCSoJCOgHEICAgIACSgQIBBAFInMKDE9uZW9mT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIpgCCgtFbnVtT3B0aW9ucxIfCgthbGxvd19hbGlhcxgCIAEoCFIKYWxsb3dBbGlhcxIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJWCiZkZXByZWNhdGVkX2xlZ2FjeV9qc29uX2ZpZWxkX2NvbmZsaWN0cxgGIAEoCEICGAFSImRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAUQBiKeAQoQRW51bVZhbHVlT3B0aW9ucxIlCgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIpwBCg5TZXJ2aWNlT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIuACCg1NZXRob2RPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkEnEKEWlkZW1wb3RlbmN5X2xldmVsGCIgASgOMi8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbDoTSURFTVBPVEVOQ1lfVU5LTk9XTlIQaWRlbXBvdGVuY3lMZXZlbBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiJQChBJZGVtcG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19TSURFX0VGRkVDVFMQARIOCgpJREVNUE9URU5UEAIqCQjoBxCAgICAAiKaAwoTVW5pbnRlcnByZXRlZE9wdGlvbhJBCgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRSBG5hbWUSKQoQaWRlbnRpZmllcl92YWx1ZRgDIAEoCVIPaWRlbnRpZmllclZhbHVlEiwKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBFIQcG9zaXRpdmVJbnRWYWx1ZRIsChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKANSEG5lZ2F0aXZlSW50VmFsdWUSIQoMZG91YmxlX3ZhbHVlGAYgASgBUgtkb3VibGVWYWx1ZRIhCgxzdHJpbmdfdmFsdWUYByABKAxSC3N0cmluZ1ZhbHVlEicKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCVIOYWdncmVnYXRlVmFsdWUaSgoITmFtZVBhcnQSGwoJbmFtZV9wYXJ0GAEgAigJUghuYW1lUGFydBIhCgxpc19leHRlbnNpb24YAiACKAhSC2lzRXh0ZW5zaW9uIqcCCg5Tb3VyY2VDb2RlSW5mbxJECghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblIIbG9jYXRpb24azgEKCExvY2F0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEhYKBHNwYW4YAiADKAVCAhABUgRzcGFuEikKEGxlYWRpbmdfY29tbWVudHMYAyABKAlSD2xlYWRpbmdDb21tZW50cxIrChF0cmFpbGluZ19jb21tZW50cxgEIAEoCVIQdHJhaWxpbmdDb21tZW50cxI6ChlsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJUhdsZWFkaW5nRGV0YWNoZWRDb21tZW50cyLQAgoRR2VuZXJhdGVkQ29kZUluZm8STQoKYW5ub3RhdGlvbhgBIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uUgphbm5vdGF0aW9uGusBCgpBbm5vdGF0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEh8KC3NvdXJjZV9maWxlGAIgASgJUgpzb3VyY2VGaWxlEhQKBWJlZ2luGAMgASgFUgViZWdpbhIQCgNlbmQYBCABKAVSA2VuZBJSCghzZW1hbnRpYxgFIAEoDjI2Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLlNlbWFudGljUghzZW1hbnRpYyIoCghTZW1hbnRpYxIICgROT05FEAASBwoDU0VUEAESCQoFQUxJQVMQAkJ+ChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaLWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2Rlc2NyaXB0b3JwYvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCqgCChxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpGhVnb29nbGUvYXBpL2h0dHAucHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzMKwAQKFXByb3RvL3VzZXIvdXNlci5wcm90bxIOYnVja2V0ZWVyLnVzZXIi3gMKBFVzZXISDgoCaWQYASABKAlSAmlkEjIKBGRhdGEYAiADKAsyHi5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGFFbnRyeVIEZGF0YRJFCgt0YWdnZWRfZGF0YRgDIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuVGFnZ2VkRGF0YUVudHJ5Ugp0YWdnZWREYXRhEhsKCWxhc3Rfc2VlbhgEIAEoA1IIbGFzdFNlZW4SHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0GnwKBERhdGESOgoFdmFsdWUYASADKAsyJC5idWNrZXRlZXIudXNlci5Vc2VyLkRhdGEuVmFsdWVFbnRyeVIFdmFsdWUaOAoKVmFsdWVFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGjcKCURhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlgKD1RhZ2dlZERhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YVIFdmFsdWU6AjgBQi5aLGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by91c2VyYgZwcm90bzMK3nsKG3Byb3RvL2ZlYXR1cmUvc2VydmljZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxobcHJvdG8vZmVhdHVyZS9jb21tYW5kLnByb3RvGhtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8aHnByb3RvL2ZlYXR1cmUvZXZhbHVhdGlvbi5wcm90bxoVcHJvdG8vdXNlci91c2VyLnByb3RvGhtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8aIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8aGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8iWAoRR2V0RmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiSgoSR2V0RmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIlsKEkdldEZlYXR1cmVzUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhAKA2lkcxgCIAMoCVIDaWRzIk0KE0dldEZlYXR1cmVzUmVzcG9uc2USNgoIZmVhdHVyZXMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcyL9BQoTTGlzdEZlYXR1cmVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEhIKBHRhZ3MYAyADKAlSBHRhZ3MSSQoIb3JkZXJfYnkYBCABKA4yLi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSXgoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjUuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAYgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIeCgptYWludGFpbmVyGAcgASgJUgptYWludGFpbmVyEjQKB2VuYWJsZWQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUgdlbmFibGVkEkEKDmhhc19leHBlcmltZW50GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVINaGFzRXhwZXJpbWVudBIlCg5zZWFyY2hfa2V5d29yZBgKIAEoCVINc2VhcmNoS2V5d29yZBI2CghhcmNoaXZlZBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGFyY2hpdmVkEkcKEWhhc19wcmVyZXF1aXNpdGVzGAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIQaGFzUHJlcmVxdWlzaXRlcyJXCgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAxIICgRUQUdTEAQSCwoHRU5BQkxFRBAFIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQASKHAQoUTGlzdEZlYXR1cmVzUmVzcG9uc2USNgoIZmVhdHVyZXMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUghmZWF0dXJlcxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKaAQoaTGlzdEVuYWJsZWRGZWF0dXJlc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchISCgR0YWdzGAMgAygJUgR0YWdzEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgEIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UibQobTGlzdEVuYWJsZWRGZWF0dXJlc1Jlc3BvbnNlEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3IijgEKFENyZWF0ZUZlYXR1cmVSZXF1ZXN0EkEKB2NvbW1hbmQYASABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIk0KFUNyZWF0ZUZlYXR1cmVSZXNwb25zZRI0CgdmZWF0dXJlGAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIHZmVhdHVyZSLPBQoUVXBkYXRlRmVhdHVyZVJlcXVlc3QSGAoHY29tbWVudBgBIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgCIAEoCVINZW52aXJvbm1lbnRJZBIOCgJpZBgDIAEoCVICaWQSMAoEbmFtZRgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRI+CgtkZXNjcmlwdGlvbhgFIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVILZGVzY3JpcHRpb24SEgoEdGFncxgGIAMoCVIEdGFncxI0CgdlbmFibGVkGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIHZW5hYmxlZBI2CghhcmNoaXZlZBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGFyY2hpdmVkEjwKCnZhcmlhdGlvbnMYCSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSRQoNcHJlcmVxdWlzaXRlcxgKIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIzCgd0YXJnZXRzGAsgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGAwgAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgNIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSQQoNb2ZmX3ZhcmlhdGlvbhgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIMb2ZmVmFyaWF0aW9uIk0KFVVwZGF0ZUZlYXR1cmVSZXNwb25zZRI0CgdmZWF0dXJlGAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIHZmVhdHVyZSK4AQoURW5hYmxlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQiFwoVRW5hYmxlRmVhdHVyZVJlc3BvbnNlIroBChVEaXNhYmxlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkIKB2NvbW1hbmQYAiABKAsyKC5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIYCgdjb21tZW50GAQgASgJUgdjb21tZW50IhgKFkRpc2FibGVGZWF0dXJlUmVzcG9uc2UiugEKFUFyY2hpdmVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQgoHY29tbWFuZBgCIAEoCzIoLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQiGAoWQXJjaGl2ZUZlYXR1cmVSZXNwb25zZSK+AQoXVW5hcmNoaXZlRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkQKB2NvbW1hbmQYAiABKAsyKi5idWNrZXRlZXIuZmVhdHVyZS5VbmFyY2hpdmVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQiGgoYVW5hcmNoaXZlRmVhdHVyZVJlc3BvbnNlIrgBChREZWxldGVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQQoHY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USGAoHY29tbWVudBgEIAEoCVIHY29tbWVudCIXChVEZWxldGVGZWF0dXJlUmVzcG9uc2Ui5wMKG1VwZGF0ZUZlYXR1cmVEZXRhaWxzUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSXQoWcmVuYW1lX2ZlYXR1cmVfY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLlJlbmFtZUZlYXR1cmVDb21tYW5kUhRyZW5hbWVGZWF0dXJlQ29tbWFuZBJpChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkNoYW5nZURlc2NyaXB0aW9uQ29tbWFuZFIYY2hhbmdlRGVzY3JpcHRpb25Db21tYW5kEkoKEGFkZF90YWdfY29tbWFuZHMYBCADKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5BZGRUYWdDb21tYW5kUg5hZGRUYWdDb21tYW5kcxJTChNyZW1vdmVfdGFnX2NvbW1hbmRzGAUgAygLMiMuYnVja2V0ZWVyLmZlYXR1cmUuUmVtb3ZlVGFnQ29tbWFuZFIRcmVtb3ZlVGFnQ29tbWFuZHMSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAYgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIYCgdjb21tZW50GAcgASgJUgdjb21tZW50Ih4KHFVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVzcG9uc2UitwEKHlVwZGF0ZUZlYXR1cmVWYXJpYXRpb25zUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSNgoIY29tbWFuZHMYAiADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5Db21tYW5kUghjb21tYW5kcxIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhgKB2NvbW1lbnQYBCABKAlSB2NvbW1lbnQiIQofVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnNSZXNwb25zZSKpAgodVXBkYXRlRmVhdHVyZVRhcmdldGluZ1JlcXVlc3QSDgoCaWQYASABKAlSAmlkEjYKCGNvbW1hbmRzGAIgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuQ29tbWFuZFIIY29tbWFuZHMSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EkkKBGZyb20YBSABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVxdWVzdC5Gcm9tUgRmcm9tIiYKBEZyb20SCwoHVU5LTk9XThAAEggKBFVTRVIQARIHCgNPUFMQAiIgCh5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVzcG9uc2UinAEKE0Nsb25lRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkAKB2NvbW1hbmQYAiABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5DbG9uZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiFgoUQ2xvbmVGZWF0dXJlUmVzcG9uc2UijgEKFENyZWF0ZVNlZ21lbnRSZXF1ZXN0EkEKB2NvbW1hbmQYASABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVTZWdtZW50Q29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIk0KFUNyZWF0ZVNlZ21lbnRSZXNwb25zZRI0CgdzZWdtZW50GAEgASgLMhouYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFIHc2VnbWVudCJYChFHZXRTZWdtZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJKChJHZXRTZWdtZW50UmVzcG9uc2USNAoHc2VnbWVudBgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRSB3NlZ21lbnQisgQKE0xpc3RTZWdtZW50c1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEkkKCG9yZGVyX2J5GAQgASgOMi4uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5El4KD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI1LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAYgASgJUg1zZWFyY2hLZXl3b3JkEjMKBnN0YXR1cxgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUgZzdGF0dXMSQwoQaXNfaW5fdXNlX3N0YXR1cxgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSDWlzSW5Vc2VTdGF0dXMiQAoHT3JkZXJCeRILCgdERUZBVUxUEAASCAoETkFNRRABEg4KCkNSRUFURURfQVQQAhIOCgpVUERBVEVEX0FUEAMiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIocBChRMaXN0U2VnbWVudHNSZXNwb25zZRI2CghzZWdtZW50cxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRSCHNlZ21lbnRzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50Ip4BChREZWxldGVTZWdtZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQQoHY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiFwoVRGVsZXRlU2VnbWVudFJlc3BvbnNlIpMBChRVcGRhdGVTZWdtZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSNgoIY29tbWFuZHMYAiADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5Db21tYW5kUghjb21tYW5kcxIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhcKFVVwZGF0ZVNlZ21lbnRSZXNwb25zZSKgAQoVQWRkU2VnbWVudFVzZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJCCgdjb21tYW5kGAIgASgLMiguYnVja2V0ZWVyLmZlYXR1cmUuQWRkU2VnbWVudFVzZXJDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiGAoWQWRkU2VnbWVudFVzZXJSZXNwb25zZSKmAQoYRGVsZXRlU2VnbWVudFVzZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJFCgdjb21tYW5kGAIgASgLMisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFVzZXJDb21tYW5kUgdjb21tYW5kEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiGwoZRGVsZXRlU2VnbWVudFVzZXJSZXNwb25zZSLAAQoVR2V0U2VnbWVudFVzZXJSZXF1ZXN0Eh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBIXCgd1c2VyX2lkGAIgASgJUgZ1c2VySWQSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAQgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJMChZHZXRTZWdtZW50VXNlclJlc3BvbnNlEjIKBHVzZXIYASABKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlclIEdXNlciLuAQoXTGlzdFNlZ21lbnRVc2Vyc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIdCgpzZWdtZW50X2lkGAMgASgJUglzZWdtZW50SWQSMQoFc3RhdGUYBCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIFc3RhdGUSFwoHdXNlcl9pZBgFIAEoCVIGdXNlcklkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgGIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UiaAoYTGlzdFNlZ21lbnRVc2Vyc1Jlc3BvbnNlEjQKBXVzZXJzGAEgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yIr8BCh1CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEh0KCnNlZ21lbnRfaWQYAiABKAlSCXNlZ21lbnRJZBJKCgdjb21tYW5kGAMgASgLMjAuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc0NvbW1hbmRSB2NvbW1hbmQiIAoeQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIrEBCh9CdWxrRG93bmxvYWRTZWdtZW50VXNlcnNSZXF1ZXN0EjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgBIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USHQoKc2VnbWVudF9pZBgCIAEoCVIJc2VnbWVudElkEjoKBXN0YXRlGAMgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlIjYKIEJ1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlEhIKBGRhdGEYASABKAxSBGRhdGEiqQEKF0V2YWx1YXRlRmVhdHVyZXNSZXF1ZXN0EigKBHVzZXIYASABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USEAoDdGFnGAMgASgJUgN0YWcSHQoKZmVhdHVyZV9pZBgEIAEoCVIJZmVhdHVyZUlkImkKGEV2YWx1YXRlRmVhdHVyZXNSZXNwb25zZRJNChB1c2VyX2V2YWx1YXRpb25zGAEgASgLMiIuYnVja2V0ZWVyLmZlYXR1cmUuVXNlckV2YWx1YXRpb25zUg91c2VyRXZhbHVhdGlvbnMiqgMKD0xpc3RUYWdzUmVxdWVzdBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYASABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISRQoIb3JkZXJfYnkYBCABKA4yKi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0VGFnc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJaCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yMS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0VGFnc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAYgASgJUg1zZWFyY2hLZXl3b3JkIj4KB09yZGVyQnkSCwoHREVGQVVMVBAAEgYKAklEEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEidwoQTGlzdFRhZ3NSZXNwb25zZRIqCgR0YWdzGAEgAygLMhYuYnVja2V0ZWVyLmZlYXR1cmUuVGFnUgR0YWdzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IrsBChhDcmVhdGVGbGFnVHJpZ2dlclJlcXVlc3QSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRJqChtjcmVhdGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAiABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGbGFnVHJpZ2dlckNvbW1hbmRSGGNyZWF0ZUZsYWdUcmlnZ2VyQ29tbWFuZCJwChlDcmVhdGVGbGFnVHJpZ2dlclJlc3BvbnNlEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCLLAQoYRGVsZXRlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEmoKG2RlbGV0ZV9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZsYWdUcmlnZ2VyQ29tbWFuZFIYZGVsZXRlRmxhZ1RyaWdnZXJDb21tYW5kIhsKGURlbGV0ZUZsYWdUcmlnZ2VyUmVzcG9uc2Ui7gEKGFVwZGF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRKMAQonY2hhbmdlX2ZsYWdfdHJpZ2dlcl9kZXNjcmlwdGlvbl9jb21tYW5kGAMgASgLMjYuYnVja2V0ZWVyLmZlYXR1cmUuQ2hhbmdlRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNvbW1hbmRSI2NoYW5nZUZsYWdUcmlnZ2VyRGVzY3JpcHRpb25Db21tYW5kIhsKGVVwZGF0ZUZsYWdUcmlnZ2VyUmVzcG9uc2UiywEKGEVuYWJsZUZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRJqChtlbmFibGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGbGFnVHJpZ2dlckNvbW1hbmRSGGVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZCIbChlFbmFibGVGbGFnVHJpZ2dlclJlc3BvbnNlIs8BChlEaXNhYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEm0KHGRpc2FibGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kUhlkaXNhYmxlRmxhZ1RyaWdnZXJDb21tYW5kIhwKGkRpc2FibGVGbGFnVHJpZ2dlclJlc3BvbnNlIscBChdSZXNldEZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRJnChpyZXNldF9mbGFnX3RyaWdnZXJfY29tbWFuZBgDIAEoCzIqLmJ1Y2tldGVlci5mZWF0dXJlLlJlc2V0RmxhZ1RyaWdnZXJDb21tYW5kUhdyZXNldEZsYWdUcmlnZ2VyQ29tbWFuZCJvChhSZXNldEZsYWdUcmlnZ2VyUmVzcG9uc2USQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIlwKFUdldEZsYWdUcmlnZ2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAIgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJtChZHZXRGbGFnVHJpZ2dlclJlc3BvbnNlEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCKyAwoXTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgCIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISGwoJcGFnZV9zaXplGAQgASgFUghwYWdlU2l6ZRJNCghvcmRlcl9ieRgFIAEoDjIyLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSYgoPb3JkZXJfZGlyZWN0aW9uGAYgASgOMjkuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uIjYKB09yZGVyQnkSCwoHREVGQVVMVBAAEg4KCkNSRUFURURfQVQQARIOCgpVUERBVEVEX0FUEAIiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIqMCChhMaXN0RmxhZ1RyaWdnZXJzUmVzcG9uc2USYwoNZmxhZ190cmlnZ2VycxgBIAMoCzI+LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXNwb25zZS5GbGFnVHJpZ2dlcldpdGhVcmxSDGZsYWdUcmlnZ2VycxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudBppChJGbGFnVHJpZ2dlcldpdGhVcmwSQQoMZmxhZ190cmlnZ2VyGAEgASgLMh4uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJSC2ZsYWdUcmlnZ2VyEhAKA3VybBgCIAEoCVIDdXJsIjEKGUZsYWdUcmlnZ2VyV2ViaG9va1JlcXVlc3QSFAoFdG9rZW4YASABKAlSBXRva2VuIhwKGkZsYWdUcmlnZ2VyV2ViaG9va1Jlc3BvbnNlMoMgCg5GZWF0dXJlU2VydmljZRJbCgpHZXRGZWF0dXJlEiQuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmVhdHVyZVJlcXVlc3QaJS5idWNrZXRlZXIuZmVhdHVyZS5HZXRGZWF0dXJlUmVzcG9uc2UiABJeCgtHZXRGZWF0dXJlcxIlLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVzUmVxdWVzdBomLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVzUmVzcG9uc2UiABJhCgxMaXN0RmVhdHVyZXMSJi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmVhdHVyZXNSZXF1ZXN0GicuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVzcG9uc2UiABJ2ChNMaXN0RW5hYmxlZEZlYXR1cmVzEi0uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEVuYWJsZWRGZWF0dXJlc1JlcXVlc3QaLi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RW5hYmxlZEZlYXR1cmVzUmVzcG9uc2UiABJkCg1DcmVhdGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGZWF0dXJlUmVzcG9uc2UiABJkCg1VcGRhdGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlUmVzcG9uc2UiABJnCg1FbmFibGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGZWF0dXJlUmVzcG9uc2UiA4gCARJqCg5EaXNhYmxlRmVhdHVyZRIoLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlUmVzcG9uc2UiA4gCARJnCg5BcmNoaXZlRmVhdHVyZRIoLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlUmVzcG9uc2UiABJtChBVbmFyY2hpdmVGZWF0dXJlEiouYnVja2V0ZWVyLmZlYXR1cmUuVW5hcmNoaXZlRmVhdHVyZVJlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5VbmFyY2hpdmVGZWF0dXJlUmVzcG9uc2UiABJkCg1EZWxldGVGZWF0dXJlEicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmVhdHVyZVJlcXVlc3QaKC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGZWF0dXJlUmVzcG9uc2UiABJ5ChRVcGRhdGVGZWF0dXJlRGV0YWlscxIuLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVxdWVzdBovLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVEZXRhaWxzUmVzcG9uc2UiABKCAQoXVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnMSMS5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1JlcXVlc3QaMi5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1Jlc3BvbnNlIgASfwoWVXBkYXRlRmVhdHVyZVRhcmdldGluZxIwLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXF1ZXN0GjEuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVRhcmdldGluZ1Jlc3BvbnNlIgASYQoMQ2xvbmVGZWF0dXJlEiYuYnVja2V0ZWVyLmZlYXR1cmUuQ2xvbmVGZWF0dXJlUmVxdWVzdBonLmJ1Y2tldGVlci5mZWF0dXJlLkNsb25lRmVhdHVyZVJlc3BvbnNlIgASZAoNQ3JlYXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlU2VnbWVudFJlc3BvbnNlIgASWwoKR2V0U2VnbWVudBIkLmJ1Y2tldGVlci5mZWF0dXJlLkdldFNlZ21lbnRSZXF1ZXN0GiUuYnVja2V0ZWVyLmZlYXR1cmUuR2V0U2VnbWVudFJlc3BvbnNlIgASYQoMTGlzdFNlZ21lbnRzEiYuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRzUmVxdWVzdBonLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1Jlc3BvbnNlIgASZAoNRGVsZXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFJlc3BvbnNlIgASZAoNVXBkYXRlU2VnbWVudBInLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZVNlZ21lbnRSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlU2VnbWVudFJlc3BvbnNlIgASagoOQWRkU2VnbWVudFVzZXISKC5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlclJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5BZGRTZWdtZW50VXNlclJlc3BvbnNlIgOIAgEScwoRRGVsZXRlU2VnbWVudFVzZXISKy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50VXNlclJlcXVlc3QaLC5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50VXNlclJlc3BvbnNlIgOIAgESagoOR2V0U2VnbWVudFVzZXISKC5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50VXNlclJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50VXNlclJlc3BvbnNlIgOIAgESbQoQTGlzdFNlZ21lbnRVc2VycxIqLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50VXNlcnNSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIgASfwoWQnVsa1VwbG9hZFNlZ21lbnRVc2VycxIwLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtVcGxvYWRTZWdtZW50VXNlcnNSZXF1ZXN0GjEuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlIgAShQEKGEJ1bGtEb3dubG9hZFNlZ21lbnRVc2VycxIyLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QaMy5idWNrZXRlZXIuZmVhdHVyZS5CdWxrRG93bmxvYWRTZWdtZW50VXNlcnNSZXNwb25zZSIAEm0KEEV2YWx1YXRlRmVhdHVyZXMSKi5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0ZUZlYXR1cmVzUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRlRmVhdHVyZXNSZXNwb25zZSIAElUKCExpc3RUYWdzEiIuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXF1ZXN0GiMuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdFRhZ3NSZXNwb25zZSIAEnAKEUNyZWF0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEVVwZGF0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEUVuYWJsZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEnMKEkRpc2FibGVGbGFnVHJpZ2dlchIsLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGbGFnVHJpZ2dlclJlcXVlc3QaLS5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEm0KEFJlc2V0RmxhZ1RyaWdnZXISKi5idWNrZXRlZXIuZmVhdHVyZS5SZXNldEZsYWdUcmlnZ2VyUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLlJlc2V0RmxhZ1RyaWdnZXJSZXNwb25zZSIAEnAKEURlbGV0ZUZsYWdUcmlnZ2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmxhZ1RyaWdnZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmxhZ1RyaWdnZXJSZXNwb25zZSIAEmcKDkdldEZsYWdUcmlnZ2VyEiguYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmxhZ1RyaWdnZXJSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmxhZ1RyaWdnZXJSZXNwb25zZSIAEm0KEExpc3RGbGFnVHJpZ2dlcnMSKi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXNwb25zZSIAEpQBChJGbGFnVHJpZ2dlcldlYmhvb2sSLC5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlcldlYmhvb2tSZXF1ZXN0Gi0uYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJXZWJob29rUmVzcG9uc2UiIYLT5JMCGyIZL3dlYmhvb2svdHJpZ2dlcnMve3Rva2VufUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8z - accountDescriptor: CucDCiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IukCCg1FbnZpcm9ubWVudFYyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIdCgpwcm9qZWN0X2lkGAUgASgJUglwcm9qZWN0SWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEh0KCmNyZWF0ZWRfYXQYByABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAggASgDUgl1cGRhdGVkQXQSJwoPb3JnYW5pemF0aW9uX2lkGAkgASgJUg5vcmdhbml6YXRpb25JZBInCg9yZXF1aXJlX2NvbW1lbnQYCiABKAhSDnJlcXVpcmVDb21tZW50EiwKEmZlYXR1cmVfZmxhZ19jb3VudBgLIAEoBVIQZmVhdHVyZUZsYWdDb3VudEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwr9AwofcHJvdG8vZW52aXJvbm1lbnQvcHJvamVjdC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IoMDCgdQcm9qZWN0Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlEicKD29yZ2FuaXphdGlvbl9pZBgKIAEoCVIOb3JnYW5pemF0aW9uSWQSKwoRZW52aXJvbm1lbnRfY291bnQYCyABKAVSEGVudmlyb25tZW50Q291bnQSLAoSZmVhdHVyZV9mbGFnX2NvdW50GAwgASgFUhBmZWF0dXJlRmxhZ0NvdW50QjVaM2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9lbnZpcm9ubWVudGIGcHJvdG8zCq8ECiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudCKwAwoMT3JnYW5pemF0aW9uEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEhQKBXRyaWFsGAcgASgIUgV0cmlhbBIdCgpjcmVhdGVkX2F0GAggASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgJIAEoA1IJdXBkYXRlZEF0EiEKDHN5c3RlbV9hZG1pbhgKIAEoCFILc3lzdGVtQWRtaW4SIwoNcHJvamVjdF9jb3VudBgLIAEoBVIMcHJvamVjdENvdW50EisKEWVudmlyb25tZW50X2NvdW50GAwgASgFUhBlbnZpcm9ubWVudENvdW50Eh0KCnVzZXJfY291bnQYDSABKAVSCXVzZXJDb3VudBIfCgtvd25lcl9lbWFpbBgOIAEoCVIKb3duZXJFbWFpbEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwqQAwohcHJvdG8vYWNjb3VudC9zZWFyY2hfZmlsdGVyLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudCLpAQoMU2VhcmNoRmlsdGVyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhQKBXF1ZXJ5GAMgASgJUgVxdWVyeRJRChJmaWx0ZXJfdGFyZ2V0X3R5cGUYBCABKA4yIy5idWNrZXRlZXIuYWNjb3VudC5GaWx0ZXJUYXJnZXRUeXBlUhBmaWx0ZXJUYXJnZXRUeXBlEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkEiUKDmRlZmF1bHRfZmlsdGVyGAYgASgIUg1kZWZhdWx0RmlsdGVyKjEKEEZpbHRlclRhcmdldFR5cGUSCwoHVU5LTk9XThAAEhAKDEZFQVRVUkVfRkxBRxABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hY2NvdW50YgZwcm90bzMKoxMKG3Byb3RvL2FjY291bnQvYWNjb3VudC5wcm90bxIRYnVja2V0ZWVyLmFjY291bnQaI3Byb3RvL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnByb3RvGh9wcm90by9lbnZpcm9ubWVudC9wcm9qZWN0LnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byKrAgoHQWNjb3VudBIOCgJpZBgBIAEoCVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWUSMwoEcm9sZRgEIAEoDjIfLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnQuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkIjkKBFJvbGUSCgoGVklFV0VSEAASCgoGRURJVE9SEAESCQoFT1dORVIQAhIOCgpVTkFTU0lHTkVEEGM6AhgBIqgICglBY2NvdW50VjISFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgDIAEoCVIOYXZhdGFySW1hZ2VVcmwSJwoPb3JnYW5pemF0aW9uX2lkGAQgASgJUg5vcmdhbml6YXRpb25JZBJbChFvcmdhbml6YXRpb25fcm9sZRgFIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgGIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSGgoIZGlzYWJsZWQYByABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSRgoOc2VhcmNoX2ZpbHRlcnMYCiADKAsyHy5idWNrZXRlZXIuYWNjb3VudC5TZWFyY2hGaWx0ZXJSDXNlYXJjaEZpbHRlcnMSHQoKZmlyc3RfbmFtZRgLIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgMIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYDSABKAlSCGxhbmd1YWdlEhsKCWxhc3Rfc2VlbhgOIAEoA1IIbGFzdFNlZW4SKAoQYXZhdGFyX2ZpbGVfdHlwZRgPIAEoCVIOYXZhdGFyRmlsZVR5cGUSIQoMYXZhdGFyX2ltYWdlGBAgASgMUgthdmF0YXJJbWFnZRIrChFlbnZpcm9ubWVudF9jb3VudBgRIAEoBVIQZW52aXJvbm1lbnRDb3VudBrXAQoEUm9sZSJZCgtFbnZpcm9ubWVudBIaChZFbnZpcm9ubWVudF9VTkFTU0lHTkVEEAASFgoSRW52aXJvbm1lbnRfVklFV0VSEAESFgoSRW52aXJvbm1lbnRfRURJVE9SEAIidAoMT3JnYW5pemF0aW9uEhsKF09yZ2FuaXphdGlvbl9VTkFTU0lHTkVEEAASFwoTT3JnYW5pemF0aW9uX01FTUJFUhABEhYKEk9yZ2FuaXphdGlvbl9BRE1JThACEhYKEk9yZ2FuaXphdGlvbl9PV05FUhADGnsKD0Vudmlyb25tZW50Um9sZRIlCg5lbnZpcm9ubWVudF9pZBgBIAEoCVINZW52aXJvbm1lbnRJZBJBCgRyb2xlGAIgASgOMi0uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuRW52aXJvbm1lbnRSBHJvbGUizQYKDkNvbnNvbGVBY2NvdW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVybBImCg9pc19zeXN0ZW1fYWRtaW4YBCABKAhSDWlzU3lzdGVtQWRtaW4SRwoMb3JnYW5pemF0aW9uGAUgASgLMiMuYnVja2V0ZWVyLmVudmlyb25tZW50Lk9yZ2FuaXphdGlvblIMb3JnYW5pemF0aW9uElsKEW9yZ2FuaXphdGlvbl9yb2xlGAYgASgOMi4uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuT3JnYW5pemF0aW9uUhBvcmdhbml6YXRpb25Sb2xlEl4KEWVudmlyb25tZW50X3JvbGVzGAcgAygLMjEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnQuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEkYKDnNlYXJjaF9maWx0ZXJzGAggAygLMh8uYnVja2V0ZWVyLmFjY291bnQuU2VhcmNoRmlsdGVyUg1zZWFyY2hGaWx0ZXJzEh0KCmZpcnN0X25hbWUYCSABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCiABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAsgASgJUghsYW5ndWFnZRIoChBhdmF0YXJfZmlsZV90eXBlGAwgASgJUg5hdmF0YXJGaWxlVHlwZRIhCgxhdmF0YXJfaW1hZ2UYDSABKAxSC2F2YXRhckltYWdlGtYBCg9FbnZpcm9ubWVudFJvbGUSRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSOAoHcHJvamVjdBgCIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0EkEKBHJvbGUYAyABKA4yLS5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5FbnZpcm9ubWVudFIEcm9sZUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYWNjb3VudGIGcHJvdG8zCpMGChtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8SEWJ1Y2tldGVlci5hY2NvdW50GiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90byK1AgoGQVBJS2V5Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEjIKBHJvbGUYAyABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgEIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCJ5CgRSb2xlEgsKB1VOS05PV04QABIOCgpTREtfQ0xJRU5UEAESDgoKU0RLX1NFUlZFUhACEhgKFFBVQkxJQ19BUElfUkVBRF9PTkxZEAMSFAoQUFVCTElDX0FQSV9XUklURRAEEhQKEFBVQkxJQ19BUElfQURNSU4QBSLIAgoRRW52aXJvbm1lbnRBUElLZXkSNwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJQgIYAVIUZW52aXJvbm1lbnROYW1lc3BhY2USMgoHYXBpX2tleRgCIAEoCzIZLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleVIGYXBpS2V5EjEKFGVudmlyb25tZW50X2Rpc2FibGVkGAMgASgIUhNlbnZpcm9ubWVudERpc2FibGVkEiEKCnByb2plY3RfaWQYBCABKAlCAhgBUglwcm9qZWN0SWQSRgoLZW52aXJvbm1lbnQYBSABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSKAoQcHJvamVjdF91cmxfY29kZRgGIAEoCVIOcHJvamVjdFVybENvZGVCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwrWEQobcHJvdG8vYWNjb3VudC9jb21tYW5kLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudBobcHJvdG8vYWNjb3VudC9hY2NvdW50LnByb3RvGhtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byL8AgoWQ3JlYXRlQWNjb3VudFYyQ29tbWFuZBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSEgoEbmFtZRgCIAEoCVIEbmFtZRIoChBhdmF0YXJfaW1hZ2VfdXJsGAMgASgJUg5hdmF0YXJJbWFnZVVybBJbChFvcmdhbml6YXRpb25fcm9sZRgEIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgFIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSHQoKZmlyc3RfbmFtZRgGIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgHIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYCCABKAlSCGxhbmd1YWdlIjAKGkNoYW5nZUFjY291bnRWMk5hbWVDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiQAofQ2hhbmdlQWNjb3VudFYyRmlyc3ROYW1lQ29tbWFuZBIdCgpmaXJzdF9uYW1lGAEgASgJUglmaXJzdE5hbWUiPQoeQ2hhbmdlQWNjb3VudFYyTGFzdE5hbWVDb21tYW5kEhsKCWxhc3RfbmFtZRgBIAEoCVIIbGFzdE5hbWUiPAoeQ2hhbmdlQWNjb3VudFYyTGFuZ3VhZ2VDb21tYW5kEhoKCGxhbmd1YWdlGAEgASgJUghsYW5ndWFnZSJQCiRDaGFuZ2VBY2NvdW50VjJBdmF0YXJJbWFnZVVybENvbW1hbmQSKAoQYXZhdGFyX2ltYWdlX3VybBgBIAEoCVIOYXZhdGFySW1hZ2VVcmwiawocQ2hhbmdlQWNjb3VudFYyQXZhdGFyQ29tbWFuZBIhCgxhdmF0YXJfaW1hZ2UYASABKAxSC2F2YXRhckltYWdlEigKEGF2YXRhcl9maWxlX3R5cGUYAiABKAlSDmF2YXRhckZpbGVUeXBlIj0KHkNoYW5nZUFjY291bnRWMkxhc3RTZWVuQ29tbWFuZBIbCglsYXN0X3NlZW4YASABKANSCGxhc3RTZWVuImwKJkNoYW5nZUFjY291bnRWMk9yZ2FuaXphdGlvblJvbGVDb21tYW5kEkIKBHJvbGUYASABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SBHJvbGUipQIKJkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kEkIKBXJvbGVzGAEgAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIFcm9sZXMSYgoKd3JpdGVfdHlwZRgCIAEoDjJDLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kLldyaXRlVHlwZVIJd3JpdGVUeXBlIlMKCVdyaXRlVHlwZRIZChVXcml0ZVR5cGVfVU5TUEVDSUZJRUQQABIWChJXcml0ZVR5cGVfT1ZFUlJJREUQARITCg9Xcml0ZVR5cGVfUEFUQ0gQAiIYChZFbmFibGVBY2NvdW50VjJDb21tYW5kIhkKF0Rpc2FibGVBY2NvdW50VjJDb21tYW5kIhgKFkRlbGV0ZUFjY291bnRWMkNvbW1hbmQiXQoTQ3JlYXRlQVBJS2V5Q29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lEjIKBHJvbGUYAiABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZSItChdDaGFuZ2VBUElLZXlOYW1lQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIhUKE0VuYWJsZUFQSUtleUNvbW1hbmQiFgoURGlzYWJsZUFQSUtleUNvbW1hbmQi5gEKGUNyZWF0ZVNlYXJjaEZpbHRlckNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZRIUCgVxdWVyeRgCIAEoCVIFcXVlcnkSUQoSZmlsdGVyX3RhcmdldF90eXBlGAMgASgOMiMuYnVja2V0ZWVyLmFjY291bnQuRmlsdGVyVGFyZ2V0VHlwZVIQZmlsdGVyVGFyZ2V0VHlwZRIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZBIlCg5kZWZhdWx0X2ZpbHRlchgFIAEoCFINZGVmYXVsdEZpbHRlciJDCh1DaGFuZ2VTZWFyY2hGaWx0ZXJOYW1lQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJGCh5DaGFuZ2VTZWFyY2hGaWx0ZXJRdWVyeUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhQKBXF1ZXJ5GAIgASgJUgVxdWVyeSJZCiBDaGFuZ2VEZWZhdWx0U2VhcmNoRmlsdGVyQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSJQoOZGVmYXVsdF9maWx0ZXIYAiABKAhSDWRlZmF1bHRGaWx0ZXIiKwoZRGVsZXRlU2VhcmNoRmlsdGVyQ29tbWFuZBIOCgJpZBgBIAEoCVICaWRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwriBQocZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIpgBCgZTdHJ1Y3QSOwoGZmllbGRzGAEgAygLMiMuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5GaWVsZHNFbnRyeVIGZmllbGRzGlEKC0ZpZWxkc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEisgIKBVZhbHVlEjsKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSABSCW51bGxWYWx1ZRIjCgxudW1iZXJfdmFsdWUYAiABKAFIAFILbnVtYmVyVmFsdWUSIwoMc3RyaW5nX3ZhbHVlGAMgASgJSABSC3N0cmluZ1ZhbHVlEh8KCmJvb2xfdmFsdWUYBCABKAhIAFIJYm9vbFZhbHVlEjwKDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAFILc3RydWN0VmFsdWUSOwoKbGlzdF92YWx1ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVIAFIJbGlzdFZhbHVlQgYKBGtpbmQiOwoJTGlzdFZhbHVlEi4KBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIGdmFsdWVzKhsKCU51bGxWYWx1ZRIOCgpOVUxMX1ZBTFVFEABCfwoTY29tLmdvb2dsZS5wcm90b2J1ZkILU3RydWN0UHJvdG9QAVovZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vc3RydWN0cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqmPgoscHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9vcGVuYXBpdjIucHJvdG8SKWdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zGhxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvIrMICgdTd2FnZ2VyEhgKB3N3YWdnZXIYASABKAlSB3N3YWdnZXISQwoEaW5mbxgCIAEoCzIvLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkluZm9SBGluZm8SEgoEaG9zdBgDIAEoCVIEaG9zdBIbCgliYXNlX3BhdGgYBCABKAlSCGJhc2VQYXRoEksKB3NjaGVtZXMYBSADKA4yMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWVSB3NjaGVtZXMSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJfCglyZXNwb25zZXMYCiADKAsyQS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyLlJlc3BvbnNlc0VudHJ5UglyZXNwb25zZXMScQoUc2VjdXJpdHlfZGVmaW5pdGlvbnMYCyABKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eURlZmluaXRpb25zUhNzZWN1cml0eURlZmluaXRpb25zEloKCHNlY3VyaXR5GAwgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudFIIc2VjdXJpdHkSQgoEdGFncxgNIAMoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IEdGFncxJlCg1leHRlcm5hbF9kb2NzGA4gASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSYgoKZXh0ZW5zaW9ucxgPIAMoCzJCLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXIuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGnEKDlJlc3BvbnNlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkkKBXZhbHVlGAIgASgLMjMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2VSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4AUoECAgQCUoECAkQCiLWBwoJT3BlcmF0aW9uEhIKBHRhZ3MYASADKAlSBHRhZ3MSGAoHc3VtbWFyeRgCIAEoCVIHc3VtbWFyeRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SZQoNZXh0ZXJuYWxfZG9jcxgEIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEiEKDG9wZXJhdGlvbl9pZBgFIAEoCVILb3BlcmF0aW9uSWQSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJhCglyZXNwb25zZXMYCSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb24uUmVzcG9uc2VzRW50cnlSCXJlc3BvbnNlcxJLCgdzY2hlbWVzGAogAygOMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1lUgdzY2hlbWVzEh4KCmRlcHJlY2F0ZWQYCyABKAhSCmRlcHJlY2F0ZWQSWgoIc2VjdXJpdHkYDCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50UghzZWN1cml0eRJkCgpleHRlbnNpb25zGA0gAygLMkQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxJVCgpwYXJhbWV0ZXJzGA4gASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUGFyYW1ldGVyc1IKcGFyYW1ldGVycxpxCg5SZXNwb25zZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRJJCgV2YWx1ZRgCIAEoCzIzLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAFKBAgIEAkiYgoKUGFyYW1ldGVycxJUCgdoZWFkZXJzGAEgAygLMjouZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUGFyYW1ldGVyUgdoZWFkZXJzIqMCCg9IZWFkZXJQYXJhbWV0ZXISEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SUwoEdHlwZRgDIAEoDjI/LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkhlYWRlclBhcmFtZXRlci5UeXBlUgR0eXBlEhYKBmZvcm1hdBgEIAEoCVIGZm9ybWF0EhoKCHJlcXVpcmVkGAUgASgIUghyZXF1aXJlZCJFCgRUeXBlEgsKB1VOS05PV04QABIKCgZTVFJJTkcQARIKCgZOVU1CRVIQAhILCgdJTlRFR0VSEAMSCwoHQk9PTEVBThAESgQIBhAHSgQIBxAIItgBCgZIZWFkZXISIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEhIKBHR5cGUYAiABKAlSBHR5cGUSFgoGZm9ybWF0GAMgASgJUgZmb3JtYXQSGAoHZGVmYXVsdBgGIAEoCVIHZGVmYXVsdBIYCgdwYXR0ZXJuGA0gASgJUgdwYXR0ZXJuSgQIBBAFSgQIBRAGSgQIBxAISgQICBAJSgQICRAKSgQIChALSgQICxAMSgQIDBANSgQIDhAPSgQIDxAQSgQIEBARSgQIERASSgQIEhATIpoFCghSZXNwb25zZRIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SSQoGc2NoZW1hGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1hUgZzY2hlbWESWgoHaGVhZGVycxgDIAMoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkhlYWRlcnNFbnRyeVIHaGVhZGVycxJdCghleGFtcGxlcxgEIAMoCzJBLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkV4YW1wbGVzRW50cnlSCGV4YW1wbGVzEmMKCmV4dGVuc2lvbnMYBSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZS5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMabQoMSGVhZGVyc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkcKBXZhbHVlGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUgV2YWx1ZToCOAEaOwoNRXhhbXBsZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBItYDCgRJbmZvEhQKBXRpdGxlGAEgASgJUgV0aXRsZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SKAoQdGVybXNfb2Zfc2VydmljZRgDIAEoCVIOdGVybXNPZlNlcnZpY2USTAoHY29udGFjdBgEIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkNvbnRhY3RSB2NvbnRhY3QSTAoHbGljZW5zZRgFIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkxpY2Vuc2VSB2xpY2Vuc2USGAoHdmVyc2lvbhgGIAEoCVIHdmVyc2lvbhJfCgpleHRlbnNpb25zGAcgAygLMj8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSW5mby5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEiRQoHQ29udGFjdBISCgRuYW1lGAEgASgJUgRuYW1lEhAKA3VybBgCIAEoCVIDdXJsEhQKBWVtYWlsGAMgASgJUgVlbWFpbCIvCgdMaWNlbnNlEhIKBG5hbWUYASABKAlSBG5hbWUSEAoDdXJsGAIgASgJUgN1cmwiSwoVRXh0ZXJuYWxEb2N1bWVudGF0aW9uEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhIQCgN1cmwYAiABKAlSA3VybCKqAgoGU2NoZW1hElYKC2pzb25fc2NoZW1hGAEgASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIKanNvblNjaGVtYRIkCg1kaXNjcmltaW5hdG9yGAIgASgJUg1kaXNjcmltaW5hdG9yEhsKCXJlYWRfb25seRgDIAEoCFIIcmVhZE9ubHkSZQoNZXh0ZXJuYWxfZG9jcxgFIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEhgKB2V4YW1wbGUYBiABKAlSB2V4YW1wbGVKBAgEEAUi1woKCkpTT05TY2hlbWESEAoDcmVmGAMgASgJUgNyZWYSFAoFdGl0bGUYBSABKAlSBXRpdGxlEiAKC2Rlc2NyaXB0aW9uGAYgASgJUgtkZXNjcmlwdGlvbhIYCgdkZWZhdWx0GAcgASgJUgdkZWZhdWx0EhsKCXJlYWRfb25seRgIIAEoCFIIcmVhZE9ubHkSGAoHZXhhbXBsZRgJIAEoCVIHZXhhbXBsZRIfCgttdWx0aXBsZV9vZhgKIAEoAVIKbXVsdGlwbGVPZhIYCgdtYXhpbXVtGAsgASgBUgdtYXhpbXVtEisKEWV4Y2x1c2l2ZV9tYXhpbXVtGAwgASgIUhBleGNsdXNpdmVNYXhpbXVtEhgKB21pbmltdW0YDSABKAFSB21pbmltdW0SKwoRZXhjbHVzaXZlX21pbmltdW0YDiABKAhSEGV4Y2x1c2l2ZU1pbmltdW0SHQoKbWF4X2xlbmd0aBgPIAEoBFIJbWF4TGVuZ3RoEh0KCm1pbl9sZW5ndGgYECABKARSCW1pbkxlbmd0aBIYCgdwYXR0ZXJuGBEgASgJUgdwYXR0ZXJuEhsKCW1heF9pdGVtcxgUIAEoBFIIbWF4SXRlbXMSGwoJbWluX2l0ZW1zGBUgASgEUghtaW5JdGVtcxIhCgx1bmlxdWVfaXRlbXMYFiABKAhSC3VuaXF1ZUl0ZW1zEiUKDm1heF9wcm9wZXJ0aWVzGBggASgEUg1tYXhQcm9wZXJ0aWVzEiUKDm1pbl9wcm9wZXJ0aWVzGBkgASgEUg1taW5Qcm9wZXJ0aWVzEhoKCHJlcXVpcmVkGBogAygJUghyZXF1aXJlZBIUCgVhcnJheRgiIAMoCVIFYXJyYXkSXwoEdHlwZRgjIAMoDjJLLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuSlNPTlNjaGVtYVNpbXBsZVR5cGVzUgR0eXBlEhYKBmZvcm1hdBgkIAEoCVIGZm9ybWF0EhIKBGVudW0YLiADKAlSBGVudW0SegoTZmllbGRfY29uZmlndXJhdGlvbhjpByABKAsySC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkZpZWxkQ29uZmlndXJhdGlvblISZmllbGRDb25maWd1cmF0aW9uEmUKCmV4dGVuc2lvbnMYMCADKAsyRS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxo8ChJGaWVsZENvbmZpZ3VyYXRpb24SJgoPcGF0aF9wYXJhbV9uYW1lGC8gASgJUg1wYXRoUGFyYW1OYW1lGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIncKFUpTT05TY2hlbWFTaW1wbGVUeXBlcxILCgdVTktOT1dOEAASCQoFQVJSQVkQARILCgdCT09MRUFOEAISCwoHSU5URUdFUhADEggKBE5VTEwQBBIKCgZOVU1CRVIQBRIKCgZPQkpFQ1QQBhIKCgZTVFJJTkcQB0oECAEQAkoECAIQA0oECAQQBUoECBIQE0oECBMQFEoECBcQGEoECBsQHEoECBwQHUoECB0QHkoECB4QIkoECCUQKkoECCoQK0oECCsQLiLZAgoDVGFnEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEmUKDWV4dGVybmFsX2RvY3MYAyABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxJeCgpleHRlbnNpb25zGAQgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASL3AQoTU2VjdXJpdHlEZWZpbml0aW9ucxJoCghzZWN1cml0eRgBIAMoCzJMLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5RGVmaW5pdGlvbnMuU2VjdXJpdHlFbnRyeVIIc2VjdXJpdHkadgoNU2VjdXJpdHlFbnRyeRIQCgNrZXkYASABKAlSA2tleRJPCgV2YWx1ZRgCIAEoCzI5LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lUgV2YWx1ZToCOAEi/wYKDlNlY3VyaXR5U2NoZW1lElIKBHR5cGUYASABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5UeXBlUgR0eXBlEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhISCgRuYW1lGAMgASgJUgRuYW1lEkwKAmluGAQgASgOMjwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuSW5SAmluElIKBGZsb3cYBSABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5GbG93UgRmbG93EisKEWF1dGhvcml6YXRpb25fdXJsGAYgASgJUhBhdXRob3JpemF0aW9uVXJsEhsKCXRva2VuX3VybBgHIAEoCVIIdG9rZW5VcmwSSQoGc2NvcGVzGAggASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NvcGVzUgZzY29wZXMSaQoKZXh0ZW5zaW9ucxgJIAMoCzJJLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJLCgRUeXBlEhAKDFRZUEVfSU5WQUxJRBAAEg4KClRZUEVfQkFTSUMQARIQCgxUWVBFX0FQSV9LRVkQAhIPCgtUWVBFX09BVVRIMhADIjEKAkluEg4KCklOX0lOVkFMSUQQABIMCghJTl9RVUVSWRABEg0KCUlOX0hFQURFUhACImoKBEZsb3cSEAoMRkxPV19JTlZBTElEEAASEQoNRkxPV19JTVBMSUNJVBABEhEKDUZMT1dfUEFTU1dPUkQQAhIUChBGTE9XX0FQUExJQ0FUSU9OEAMSFAoQRkxPV19BQ0NFU1NfQ09ERRAEIvYCChNTZWN1cml0eVJlcXVpcmVtZW50EooBChRzZWN1cml0eV9yZXF1aXJlbWVudBgBIAMoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudEVudHJ5UhNzZWN1cml0eVJlcXVpcmVtZW50GjAKGFNlY3VyaXR5UmVxdWlyZW1lbnRWYWx1ZRIUCgVzY29wZRgBIAMoCVIFc2NvcGUanwEKGFNlY3VyaXR5UmVxdWlyZW1lbnRFbnRyeRIQCgNrZXkYASABKAlSA2tleRJtCgV2YWx1ZRgCIAEoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudFZhbHVlUgV2YWx1ZToCOAEilgEKBlNjb3BlcxJSCgVzY29wZRgBIAMoCzI8LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjb3Blcy5TY29wZUVudHJ5UgVzY29wZRo4CgpTY29wZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEqOwoGU2NoZW1lEgsKB1VOS05PV04QABIICgRIVFRQEAESCQoFSFRUUFMQAhIGCgJXUxADEgcKA1dTUxAEQkhaRmdpdGh1Yi5jb20vZ3JwYy1lY29zeXN0ZW0vZ3JwYy1nYXRld2F5L3YyL3Byb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnNiBnByb3RvMwr9BgoucHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9hbm5vdGF0aW9ucy5wcm90bxIpZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMaIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvGixwcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL29wZW5hcGl2Mi5wcm90bzp+ChFvcGVuYXBpdjJfc3dhZ2dlchIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiSCCABKAsyMi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyUhBvcGVuYXBpdjJTd2FnZ2VyOoYBChNvcGVuYXBpdjJfb3BlcmF0aW9uEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYkgggASgLMjQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uUhJvcGVuYXBpdjJPcGVyYXRpb246fgoQb3BlbmFwaXYyX3NjaGVtYRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiSCCABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWFSD29wZW5hcGl2MlNjaGVtYTp1Cg1vcGVuYXBpdjJfdGFnEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJIIIAEoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IMb3BlbmFwaXYyVGFnOn4KD29wZW5hcGl2Ml9maWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYkgggASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIOb3BlbmFwaXYyRmllbGRCSFpGZ2l0aHViLmNvbS9ncnBjLWVjb3N5c3RlbS9ncnBjLWdhdGV3YXkvdjIvcHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9uc2IGcHJvdG8zCpezAQobcHJvdG8vYWNjb3VudC9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvGi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvGhtwcm90by9hY2NvdW50L2FjY291bnQucHJvdG8aG3Byb3RvL2FjY291bnQvYXBpX2tleS5wcm90bxobcHJvdG8vYWNjb3VudC9jb21tYW5kLnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8iNwoMR2V0TWVSZXF1ZXN0EicKD29yZ2FuaXphdGlvbl9pZBgBIAEoCVIOb3JnYW5pemF0aW9uSWQiTAoNR2V0TWVSZXNwb25zZRI7CgdhY2NvdW50GAEgASgLMiEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnRSB2FjY291bnQiGwoZR2V0TXlPcmdhbml6YXRpb25zUmVxdWVzdCI4CiBHZXRNeU9yZ2FuaXphdGlvbnNCeUVtYWlsUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwiZwoaR2V0TXlPcmdhbml6YXRpb25zUmVzcG9uc2USSQoNb3JnYW5pemF0aW9ucxgBIAMoCzIjLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Pcmdhbml6YXRpb25SDW9yZ2FuaXphdGlvbnMi7gMKFkNyZWF0ZUFjY291bnRWMlJlcXVlc3QSJwoPb3JnYW5pemF0aW9uX2lkGAEgASgJUg5vcmdhbml6YXRpb25JZBJHCgdjb21tYW5kGAIgASgLMikuYnVja2V0ZWVyLmFjY291bnQuQ3JlYXRlQWNjb3VudFYyQ29tbWFuZEICGAFSB2NvbW1hbmQSFAoFZW1haWwYAyABKAlSBWVtYWlsEhIKBG5hbWUYBCABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgFIAEoCVIOYXZhdGFySW1hZ2VVcmwSWwoRb3JnYW5pemF0aW9uX3JvbGUYBiABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SEG9yZ2FuaXphdGlvblJvbGUSWQoRZW52aXJvbm1lbnRfcm9sZXMYByADKAsyLC5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEh0KCmZpcnN0X25hbWUYCCABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCSABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAogASgJUghsYW5ndWFnZSJRChdDcmVhdGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqABChZFbmFibGVBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEkcKB2NvbW1hbmQYAyABKAsyKS5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBY2NvdW50VjJDb21tYW5kQgIYAVIHY29tbWFuZCJRChdFbmFibGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqIBChdEaXNhYmxlQWNjb3VudFYyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBJICgdjb21tYW5kGAMgASgLMiouYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFjY291bnRWMkNvbW1hbmRCAhgBUgdjb21tYW5kIlIKGERpc2FibGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqABChZEZWxldGVBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEkcKB2NvbW1hbmQYAyABKAsyKS5idWNrZXRlZXIuYWNjb3VudC5EZWxldGVBY2NvdW50VjJDb21tYW5kQgIYAVIHY29tbWFuZCIZChdEZWxldGVBY2NvdW50VjJSZXNwb25zZSKuDwoWVXBkYXRlQWNjb3VudFYyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBJhChNjaGFuZ2VfbmFtZV9jb21tYW5kGAMgASgLMi0uYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyTmFtZUNvbW1hbmRCAhgBUhFjaGFuZ2VOYW1lQ29tbWFuZBJ2ChljaGFuZ2VfYXZhdGFyX3VybF9jb21tYW5kGAQgASgLMjcuYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyQXZhdGFySW1hZ2VVcmxDb21tYW5kQgIYAVIWY2hhbmdlQXZhdGFyVXJsQ29tbWFuZBKGAQogY2hhbmdlX29yZ2FuaXphdGlvbl9yb2xlX2NvbW1hbmQYBSABKAsyOS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBY2NvdW50VjJPcmdhbml6YXRpb25Sb2xlQ29tbWFuZEICGAFSHWNoYW5nZU9yZ2FuaXphdGlvblJvbGVDb21tYW5kEoYBCiBjaGFuZ2VfZW52aXJvbm1lbnRfcm9sZXNfY29tbWFuZBgGIAEoCzI5LmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kQgIYAVIdY2hhbmdlRW52aXJvbm1lbnRSb2xlc0NvbW1hbmQScQoZY2hhbmdlX2ZpcnN0X25hbWVfY29tbWFuZBgHIAEoCzIyLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkZpcnN0TmFtZUNvbW1hbmRCAhgBUhZjaGFuZ2VGaXJzdE5hbWVDb21tYW5kEm4KGGNoYW5nZV9sYXN0X25hbWVfY29tbWFuZBgIIAEoCzIxLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkxhc3ROYW1lQ29tbWFuZEICGAFSFWNoYW5nZUxhc3ROYW1lQ29tbWFuZBJtChdjaGFuZ2VfbGFuZ3VhZ2VfY29tbWFuZBgJIAEoCzIxLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkxhbmd1YWdlQ29tbWFuZEICGAFSFWNoYW5nZUxhbmd1YWdlQ29tbWFuZBJuChhjaGFuZ2VfbGFzdF9zZWVuX2NvbW1hbmQYCiABKAsyMS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBY2NvdW50VjJMYXN0U2VlbkNvbW1hbmRCAhgBUhVjaGFuZ2VMYXN0U2VlbkNvbW1hbmQSZwoVY2hhbmdlX2F2YXRhcl9jb21tYW5kGAsgASgLMi8uYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyQXZhdGFyQ29tbWFuZEICGAFSE2NoYW5nZUF2YXRhckNvbW1hbmQSMAoEbmFtZRgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRJGChBhdmF0YXJfaW1hZ2VfdXJsGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUg5hdmF0YXJJbWFnZVVybBJsChFvcmdhbml6YXRpb25fcm9sZRgOIAEoCzI/LmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZUFjY291bnRWMlJlcXVlc3QuT3JnYW5pemF0aW9uUm9sZVZhbHVlUhBvcmdhbml6YXRpb25Sb2xlElkKEWVudmlyb25tZW50X3JvbGVzGA8gAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIQZW52aXJvbm1lbnRSb2xlcxI7CgpmaXJzdF9uYW1lGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUglmaXJzdE5hbWUSOQoJbGFzdF9uYW1lGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUghsYXN0TmFtZRI4CghsYW5ndWFnZRgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIIbGFuZ3VhZ2USOAoJbGFzdF9zZWVuGBMgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVSCGxhc3RTZWVuElEKBmF2YXRhchgUIAEoCzI5LmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZUFjY291bnRWMlJlcXVlc3QuQWNjb3VudFYyQXZhdGFyUgZhdmF0YXIaXgoPQWNjb3VudFYyQXZhdGFyEiEKDGF2YXRhcl9pbWFnZRgBIAEoDFILYXZhdGFySW1hZ2USKAoQYXZhdGFyX2ZpbGVfdHlwZRgCIAEoCVIOYXZhdGFyRmlsZVR5cGUaWwoVT3JnYW5pemF0aW9uUm9sZVZhbHVlEkIKBHJvbGUYASABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SBHJvbGUiUQoXVXBkYXRlQWNjb3VudFYyUmVzcG9uc2USNgoHYWNjb3VudBgBIAEoCzIcLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMlIHYWNjb3VudCJUChNHZXRBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkIk4KFEdldEFjY291bnRWMlJlc3BvbnNlEjYKB2FjY291bnQYASABKAsyHC5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjJSB2FjY291bnQiYQoiR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJQoOZW52aXJvbm1lbnRfaWQYAiABKAlSDWVudmlyb25tZW50SWQiXQojR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVzcG9uc2USNgoHYWNjb3VudBgBIAEoCzIcLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMlIHYWNjb3VudCLwBQoVTGlzdEFjY291bnRzVjJSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISJwoPb3JnYW5pemF0aW9uX2lkGAMgASgJUg5vcmdhbml6YXRpb25JZBJLCghvcmRlcl9ieRgEIAEoDjIwLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmAKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI3LmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSNgoIZGlzYWJsZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghkaXNhYmxlZBJIChFvcmdhbml6YXRpb25fcm9sZRgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUhBvcmdhbml6YXRpb25Sb2xlEkMKDmVudmlyb25tZW50X2lkGAkgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUg1lbnZpcm9ubWVudElkEkYKEGVudmlyb25tZW50X3JvbGUYCiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIPZW52aXJvbm1lbnRSb2xlIm8KB09yZGVyQnkSCwoHREVGQVVMVBAAEgkKBUVNQUlMEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAxIVChFPUkdBTklaQVRJT05fUk9MRRAEEhUKEUVOVklST05NRU5UX0NPVU5UEAUiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIosBChZMaXN0QWNjb3VudHNWMlJlc3BvbnNlEjgKCGFjY291bnRzGAEgAygLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUghhY2NvdW50cxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKMAQoTQ3JlYXRlQVBJS2V5UmVxdWVzdBJACgdjb21tYW5kGAEgASgLMiYuYnVja2V0ZWVyLmFjY291bnQuQ3JlYXRlQVBJS2V5Q29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIkoKFENyZWF0ZUFQSUtleVJlc3BvbnNlEjIKB2FwaV9rZXkYASABKAsyGS5idWNrZXRlZXIuYWNjb3VudC5BUElLZXlSBmFwaUtleSKkAQoXQ2hhbmdlQVBJS2V5TmFtZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkQKB2NvbW1hbmQYAiABKAsyKi5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBUElLZXlOYW1lQ29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhoKGENoYW5nZUFQSUtleU5hbWVSZXNwb25zZSKcAQoTRW5hYmxlQVBJS2V5UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQAoHY29tbWFuZBgCIAEoCzImLmJ1Y2tldGVlci5hY2NvdW50LkVuYWJsZUFQSUtleUNvbW1hbmRSB2NvbW1hbmQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSIWChRFbmFibGVBUElLZXlSZXNwb25zZSKeAQoURGlzYWJsZUFQSUtleVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQVBJS2V5Q29tbWFuZFIHY29tbWFuZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIhcKFURpc2FibGVBUElLZXlSZXNwb25zZSJXChBHZXRBUElLZXlSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAiABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlIkcKEUdldEFQSUtleVJlc3BvbnNlEjIKB2FwaV9rZXkYASABKAsyGS5idWNrZXRlZXIuYWNjb3VudC5BUElLZXlSBmFwaUtleSLtAwoSTGlzdEFQSUtleXNSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRJICghvcmRlcl9ieRgEIAEoDjItLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5El0KD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI0LmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSNgoIZGlzYWJsZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghkaXNhYmxlZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAEihAEKE0xpc3RBUElLZXlzUmVzcG9uc2USNAoIYXBpX2tleXMYASADKAsyGS5idWNrZXRlZXIuYWNjb3VudC5BUElLZXlSB2FwaUtleXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiPAoqR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCKDAQorR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXNwb25zZRJUChNlbnZpcm9ubWVudF9hcGlfa2V5GAEgASgLMiQuYnVja2V0ZWVyLmFjY291bnQuRW52aXJvbm1lbnRBUElLZXlSEWVudmlyb25tZW50QXBpS2V5IskBChlDcmVhdGVTZWFyY2hGaWx0ZXJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkEkYKB2NvbW1hbmQYBCABKAsyLC5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVTZWFyY2hGaWx0ZXJDb21tYW5kUgdjb21tYW5kIhwKGkNyZWF0ZVNlYXJjaEZpbHRlclJlc3BvbnNlIsADChlVcGRhdGVTZWFyY2hGaWx0ZXJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkEmAKE2NoYW5nZV9uYW1lX2NvbW1hbmQYBCABKAsyMC5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VTZWFyY2hGaWx0ZXJOYW1lQ29tbWFuZFIRY2hhbmdlTmFtZUNvbW1hbmQSYwoUY2hhbmdlX3F1ZXJ5X2NvbW1hbmQYBSABKAsyMS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VTZWFyY2hGaWx0ZXJRdWVyeUNvbW1hbmRSEmNoYW5nZVF1ZXJ5Q29tbWFuZBJ2Ch1jaGFuZ2VfZGVmYXVsdF9maWx0ZXJfY29tbWFuZBgGIAEoCzIzLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZURlZmF1bHRTZWFyY2hGaWx0ZXJDb21tYW5kUhpjaGFuZ2VEZWZhdWx0RmlsdGVyQ29tbWFuZCIcChpVcGRhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLJAQoZRGVsZXRlU2VhcmNoRmlsdGVyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZBJGCgdjb21tYW5kGAQgASgLMiwuYnVja2V0ZWVyLmFjY291bnQuRGVsZXRlU2VhcmNoRmlsdGVyQ29tbWFuZFIHY29tbWFuZCIcChpEZWxldGVTZWFyY2hGaWx0ZXJSZXNwb25zZTL4dAoOQWNjb3VudFNlcnZpY2USoQQKBUdldE1lEh8uYnVja2V0ZWVyLmFjY291bnQuR2V0TWVSZXF1ZXN0GiAuYnVja2V0ZWVyLmFjY291bnQuR2V0TWVSZXNwb25zZSLUA5JBswMKB0FjY291bnQSBkdldCBNZRodR2V0IHRoZSB1c2VyIGNvbnNvbGUgYWNjb3VudC4qFXdlYi52MS5hY2NvdW50LmdldF9tZUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhciEi92MS9hY2NvdW50L2dldF9tZToBKhL7BAoSR2V0TXlPcmdhbml6YXRpb25zEiwuYnVja2V0ZWVyLmFjY291bnQuR2V0TXlPcmdhbml6YXRpb25zUmVxdWVzdBotLmJ1Y2tldGVlci5hY2NvdW50LkdldE15T3JnYW5pemF0aW9uc1Jlc3BvbnNlIocEkkHcAwoHQWNjb3VudBIUR2V0IE15IE9yZ2FuaXphdGlvbnMaLkdldCBhbGwgdGhlIG9yZ2FuaXphdGlvbnMgZm9yIGEgc3BlY2lmaWMgdXNlci4qH3dlYi52MS5hY2NvdW50Lm15X29yZ2FuaXphdGlvbnNKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIhIhwvdjEvYWNjb3VudC9teV9vcmdhbml6YXRpb25zOgEqEpkFChlHZXRNeU9yZ2FuaXphdGlvbnNCeUVtYWlsEjMuYnVja2V0ZWVyLmFjY291bnQuR2V0TXlPcmdhbml6YXRpb25zQnlFbWFpbFJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5HZXRNeU9yZ2FuaXphdGlvbnNSZXNwb25zZSKXBJJB4wMKB0FjY291bnQSHUdldCBNeSBPcmdhbml6YXRpb25zIEJ5IEVtYWlsGiNHZXQgYWxsIHRoZSBvcmdhbml6YXRpb25zIGJ5IGVtYWlsLiood2ViLnYxLmFjY291bnQubXlfb3JnYW5pemF0aW9uc19ieV9lbWFpbEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAioiJS92MS9hY2NvdW50L215X29yZ2FuaXphdGlvbnNfYnlfZW1haWw6ASoSugYKD0NyZWF0ZUFjY291bnRWMhIpLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZUFjY291bnRWMlJlcXVlc3QaKi5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVBY2NvdW50VjJSZXNwb25zZSLPBZJBpgUKB0FjY291bnQSBkNyZWF0ZRpcQ3JlYXRlIGFuIGFjY291bnQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHXdlYi52MS5hY2NvdW50LmNyZWF0ZV9hY2NvdW50SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2NyZWF0ZV9hY2NvdW50OgEqEs4DCg9FbmFibGVBY2NvdW50VjISKS5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBY2NvdW50VjJSZXF1ZXN0GiouYnVja2V0ZWVyLmFjY291bnQuRW5hYmxlQWNjb3VudFYyUmVzcG9uc2Ui4wKSQboCCgdBY2NvdW50EgZFbmFibGUaXEVuYWJsZSBhbiBhY2NvdW50IHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh13ZWIudjEuYWNjb3VudC5lbmFibGVfYWNjb3VudEqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2VuYWJsZV9hY2NvdW50OgEqEsIGChBEaXNhYmxlQWNjb3VudFYyEiouYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFjY291bnRWMlJlcXVlc3QaKy5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQWNjb3VudFYyUmVzcG9uc2Ui1AWSQaoFCgdBY2NvdW50EgdEaXNhYmxlGl5EaXNhYmxlIGFuIGFjY291bnQgdG8gYmxvY2sgYWNjZXNzIHRvIHRoZSBjb25zb2xlLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh53ZWIudjEuYWNjb3VudC5kaXNhYmxlX2FjY291bnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCICIbL3YxL2FjY291bnQvZGlzYWJsZV9hY2NvdW50OgEqEpwGCg9VcGRhdGVBY2NvdW50VjISKS5idWNrZXRlZXIuYWNjb3VudC5VcGRhdGVBY2NvdW50VjJSZXF1ZXN0GiouYnVja2V0ZWVyLmFjY291bnQuVXBkYXRlQWNjb3VudFYyUmVzcG9uc2UisQWSQYgFCgdBY2NvdW50EgZVcGRhdGUaPlVwZGF0ZSBhbiBhY2NvdW50LiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh13ZWIudjEuYWNjb3VudC51cGRhdGVfYWNjb3VudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIfIhovdjEvYWNjb3VudC91cGRhdGVfYWNjb3VudDoBKhKcBgoPRGVsZXRlQWNjb3VudFYyEikuYnVja2V0ZWVyLmFjY291bnQuRGVsZXRlQWNjb3VudFYyUmVxdWVzdBoqLmJ1Y2tldGVlci5hY2NvdW50LkRlbGV0ZUFjY291bnRWMlJlc3BvbnNlIrEFkkGIBQoHQWNjb3VudBIGRGVsZXRlGj5EZWxldGUgYW4gYWNjb3VudC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYEFETUlOYCByb2xlLiodd2ViLnYxLmFjY291bnQuZGVsZXRlX2FjY291bnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCHyIaL3YxL2FjY291bnQvZGVsZXRlX2FjY291bnQ6ASoSrwQKDEdldEFjY291bnRWMhImLmJ1Y2tldGVlci5hY2NvdW50LkdldEFjY291bnRWMlJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5HZXRBY2NvdW50VjJSZXNwb25zZSLNA5JBpwMKB0FjY291bnQSA0dldBoPR2V0IGFuIGFjY291bnQuKhp3ZWIudjEuYWNjb3VudC5nZXRfYWNjb3VudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhwiFy92MS9hY2NvdW50L2dldF9hY2NvdW50OgEqEqAFChtHZXRBY2NvdW50VjJCeUVudmlyb25tZW50SUQSNS5idWNrZXRlZXIuYWNjb3VudC5HZXRBY2NvdW50VjJCeUVudmlyb25tZW50SURSZXF1ZXN0GjYuYnVja2V0ZWVyLmFjY291bnQuR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVzcG9uc2UikQSSQdwDCgdBY2NvdW50EhpHZXQgQWNjb3VudCBCeSBFbnZpcm9ubWVudBoeR2V0IGFuIGFjY291bnQgYnkgZW52aXJvbm1lbnQuKil3ZWIudjEuYWNjb3VudC5nZXRfYWNjb3VudF9ieV9lbnZpcm9ubWVudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAisiJi92MS9hY2NvdW50L2dldF9hY2NvdW50X2J5X2Vudmlyb25tZW50OgEqErkECg5MaXN0QWNjb3VudHNWMhIoLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdBopLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVzcG9uc2Ui0QOSQakDCgdBY2NvdW50EgRMaXN0Gg5MaXN0IGFjY291bnRzLiocd2ViLnYxLmFjY291bnQubGlzdF9hY2NvdW50c0q0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh4iGS92MS9hY2NvdW50L2xpc3RfYWNjb3VudHM6ASoSsAYKDENyZWF0ZUFQSUtleRImLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZUFQSUtleVJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVBUElLZXlSZXNwb25zZSLOBZJBpQUKB0FQSSBLZXkSBkNyZWF0ZRpbQ3JlYXRlIGFuIEFQSSBrZXkgdG8gYmUgdXNlZCBvbiB0aGUgY2xpZW50IFNESy4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYEFETUlOYCByb2xlLiodd2ViLnYxLmFjY291bnQuY3JlYXRlX2FwaV9rZXlKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCHyIaL3YxL2FjY291bnQvY3JlYXRlX2FwaV9rZXk6ASoSvAYKEENoYW5nZUFQSUtleU5hbWUSKi5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBUElLZXlOYW1lUmVxdWVzdBorLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFQSUtleU5hbWVSZXNwb25zZSLOBZJBoAUKB0FQSSBLZXkSE0NoYW5nZSBBUEkgS2V5IE5hbWUaRENoYW5nZSB0aGUgQVBJIEtleSBOYW1lLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKiJ3ZWIudjEuYWNjb3VudC5jaGFuZ2VfYXBpX2tleV9uYW1lSrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiQiHy92MS9hY2NvdW50L2NoYW5nZV9hcGlfa2V5X25hbWU6ASoSkwYKDEVuYWJsZUFQSUtleRImLmJ1Y2tldGVlci5hY2NvdW50LkVuYWJsZUFQSUtleVJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBUElLZXlSZXNwb25zZSKxBZJBiAUKB0FQSSBLZXkSBkVuYWJsZRo+RW5hYmxlIGFuIEFQSSBLZXkuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHXdlYi52MS5hY2NvdW50LmVuYWJsZV9hcGlfa2V5SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2VuYWJsZV9hcGlfa2V5OgEqEpoGCg1EaXNhYmxlQVBJS2V5EicuYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFQSUtleVJlcXVlc3QaKC5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQVBJS2V5UmVzcG9uc2UitQWSQYsFCgdBUEkgS2V5EgdEaXNhYmxlGj9EaXNhYmxlIGFuIEFQSSBLZXkuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHndlYi52MS5hY2NvdW50LmRpc2FibGVfYXBpX2tleUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIgIhsvdjEvYWNjb3VudC9kaXNhYmxlX2FwaV9rZXk6ASoSpgQKCUdldEFQSUtleRIjLmJ1Y2tldGVlci5hY2NvdW50LkdldEFQSUtleVJlcXVlc3QaJC5idWNrZXRlZXIuYWNjb3VudC5HZXRBUElLZXlSZXNwb25zZSLNA5JBpwMKB0FQSSBLZXkSA0dldBoPR2V0IGFuIEFQSSBLZXkuKhp3ZWIudjEuYWNjb3VudC5nZXRfYXBpX2tleUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhwiFy92MS9hY2NvdW50L2dldF9hcGlfa2V5OgEqErAECgtMaXN0QVBJS2V5cxIlLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdBomLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVzcG9uc2Ui0QOSQakDCgdBUEkgS2V5EgRMaXN0Gg5MaXN0IEFQSSBLZXlzLiocd2ViLnYxLmFjY291bnQubGlzdF9hcGlfa2V5c0q0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh4iGS92MS9hY2NvdW50L2xpc3RfYXBpX2tleXM6ASoSrAUKI0dldEFQSUtleUJ5U2VhcmNoaW5nQWxsRW52aXJvbm1lbnRzEj0uYnVja2V0ZWVyLmFjY291bnQuR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXF1ZXN0Gj4uYnVja2V0ZWVyLmFjY291bnQuR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXNwb25zZSKFBJJB0wMKB0FQSSBLZXkSF0dldCBFbnZpcm9ubWVudCBBUEkgS2V5GhtHZXQgYW4gZW52aXJvbm1lbnQgQVBJIEtleS4qJndlYi52MS5hY2NvdW50LmdldF9lbnZpcm9ubWVudF9hcGlfa2V5SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKCIjL3YxL2FjY291bnQvZ2V0X2Vudmlyb25tZW50X2FwaV9rZXk6ASoSxQYKEkNyZWF0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFENyZWF0ZSBTZWFyY2ggRmlsdGVyGkRDcmVhdGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQuY3JlYXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvY3JlYXRlX3NlYXJjaF9maWx0ZXI6ASoSxQYKElVwZGF0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5VcGRhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFFVwZGF0ZSBTZWFyY2ggRmlsdGVyGkRVcGRhdGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQudXBkYXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvdXBkYXRlX3NlYXJjaF9maWx0ZXI6ASoSxQYKEkRlbGV0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LkRlbGV0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5EZWxldGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFERlbGV0ZSBTZWFyY2ggRmlsdGVyGkREZWxldGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQuZGVsZXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvZGVsZXRlX3NlYXJjaF9maWx0ZXI6ASpCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMw== + experimentDescriptor: CqwHCh5wcm90by9leHBlcmltZW50L2NvbW1hbmQucHJvdG8SFGJ1Y2tldGVlci5leHBlcmltZW50IlkKEUNyZWF0ZUdvYWxDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbiInChFSZW5hbWVHb2FsQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIkAKHENoYW5nZURlc2NyaXB0aW9uR29hbENvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIhQKEkFyY2hpdmVHb2FsQ29tbWFuZCITChFEZWxldGVHb2FsQ29tbWFuZCLvAQoXQ3JlYXRlRXhwZXJpbWVudENvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhkKCHN0YXJ0X2F0GAMgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYBCABKANSBnN0b3BBdBIZCghnb2FsX2lkcxgFIAMoCVIHZ29hbElkcxISCgRuYW1lGAYgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAcgASgJUgtkZXNjcmlwdGlvbhIqChFiYXNlX3ZhcmlhdGlvbl9pZBgIIAEoCVIPYmFzZVZhcmlhdGlvbklkSgQIAhADIlMKHUNoYW5nZUV4cGVyaW1lbnRQZXJpb2RDb21tYW5kEhkKCHN0YXJ0X2F0GAEgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYAiABKANSBnN0b3BBdCIxChtDaGFuZ2VFeHBlcmltZW50TmFtZUNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSJGCiJDaGFuZ2VFeHBlcmltZW50RGVzY3JpcHRpb25Db21tYW5kEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbiIXChVTdG9wRXhwZXJpbWVudENvbW1hbmQiGgoYQXJjaGl2ZUV4cGVyaW1lbnRDb21tYW5kIhkKF0RlbGV0ZUV4cGVyaW1lbnRDb21tYW5kIhgKFlN0YXJ0RXhwZXJpbWVudENvbW1hbmQiGQoXRmluaXNoRXhwZXJpbWVudENvbW1hbmRCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMwrWAQodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlImcKCVZhcmlhdGlvbhIOCgJpZBgBIAEoCVICaWQSFAoFdmFsdWUYAiABKAlSBXZhbHVlEhIKBG5hbWUYAyABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKvAcKIXByb3RvL2V4cGVyaW1lbnQvZXhwZXJpbWVudC5wcm90bxIUYnVja2V0ZWVyLmV4cGVyaW1lbnQaHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvItAFCgpFeHBlcmltZW50Eg4KAmlkGAEgASgJUgJpZBIbCgdnb2FsX2lkGAIgASgJQgIYAVIGZ29hbElkEh0KCmZlYXR1cmVfaWQYAyABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YBCABKAVSDmZlYXR1cmVWZXJzaW9uEjwKCnZhcmlhdGlvbnMYBSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSGQoIc3RhcnRfYXQYBiABKANSB3N0YXJ0QXQSFwoHc3RvcF9hdBgHIAEoA1IGc3RvcEF0EhwKB3N0b3BwZWQYCCABKAhCAhgBUgdzdG9wcGVkEiEKCnN0b3BwZWRfYXQYCSABKANCAjABUglzdG9wcGVkQXQSHQoKY3JlYXRlZF9hdBgKIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCyABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAwgASgIUgdkZWxldGVkEhkKCGdvYWxfaWRzGA0gAygJUgdnb2FsSWRzEhIKBG5hbWUYDiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YDyABKAlSC2Rlc2NyaXB0aW9uEioKEWJhc2VfdmFyaWF0aW9uX2lkGBAgASgJUg9iYXNlVmFyaWF0aW9uSWQSPwoGc3RhdHVzGBIgASgOMicuYnVja2V0ZWVyLmV4cGVyaW1lbnQuRXhwZXJpbWVudC5TdGF0dXNSBnN0YXR1cxIeCgptYWludGFpbmVyGBMgASgJUgptYWludGFpbmVyEhoKCGFyY2hpdmVkGBQgASgIUghhcmNoaXZlZCJCCgZTdGF0dXMSCwoHV0FJVElORxAAEgsKB1JVTk5JTkcQARILCgdTVE9QUEVEEAISEQoNRk9SQ0VfU1RPUFBFRBADSgQIERASIlEKC0V4cGVyaW1lbnRzEkIKC2V4cGVyaW1lbnRzGAEgAygLMiAuYnVja2V0ZWVyLmV4cGVyaW1lbnQuRXhwZXJpbWVudFILZXhwZXJpbWVudHNCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMwrdAgobcHJvdG8vZXhwZXJpbWVudC9nb2FsLnByb3RvEhRidWNrZXRlZXIuZXhwZXJpbWVudCLpAQoER29hbBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EicKEGlzX2luX3VzZV9zdGF0dXMYByABKAhSDWlzSW5Vc2VTdGF0dXMSGgoIYXJjaGl2ZWQYCCABKAhSCGFyY2hpdmVkQjRaMmdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9leHBlcmltZW50YgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqfMQoecHJvdG8vZXhwZXJpbWVudC9zZXJ2aWNlLnByb3RvEhRidWNrZXRlZXIuZXhwZXJpbWVudBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGh5wcm90by9leHBlcmltZW50L2NvbW1hbmQucHJvdG8aG3Byb3RvL2V4cGVyaW1lbnQvZ29hbC5wcm90bxohcHJvdG8vZXhwZXJpbWVudC9leHBlcmltZW50LnByb3RvIk0KDkdldEdvYWxSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJBCg9HZXRHb2FsUmVzcG9uc2USLgoEZ29hbBgBIAEoCzIaLmJ1Y2tldGVlci5leHBlcmltZW50LkdvYWxSBGdvYWwiqgQKEExpc3RHb2Fsc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJJCghvcmRlcl9ieRgEIAEoDjIuLmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RHb2Fsc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJeCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yNS5idWNrZXRlZXIuZXhwZXJpbWVudC5MaXN0R29hbHNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBJDChBpc19pbl91c2Vfc3RhdHVzGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVINaXNJblVzZVN0YXR1cxI2CghhcmNoaXZlZBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSCGFyY2hpdmVkEiUKDmVudmlyb25tZW50X2lkGAkgASgJUg1lbnZpcm9ubWVudElkIkAKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQAUoECAMQBCJ+ChFMaXN0R29hbHNSZXNwb25zZRIwCgVnb2FscxgBIAMoCzIaLmJ1Y2tldGVlci5leHBlcmltZW50LkdvYWxSBWdvYWxzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IoMBChFDcmVhdGVHb2FsUmVxdWVzdBJBCgdjb21tYW5kGAEgASgLMicuYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlR29hbENvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYAyABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiFAoSQ3JlYXRlR29hbFJlc3BvbnNlIpUBChJBcmNoaXZlR29hbFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkIKB2NvbW1hbmQYAiABKAsyKC5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbENvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiFQoTQXJjaGl2ZUdvYWxSZXNwb25zZSKTAQoRRGVsZXRlR29hbFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZXhwZXJpbWVudC5EZWxldGVHb2FsQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIUChJEZWxldGVHb2FsUmVzcG9uc2UikgIKEVVwZGF0ZUdvYWxSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJOCg5yZW5hbWVfY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5leHBlcmltZW50LlJlbmFtZUdvYWxDb21tYW5kUg1yZW5hbWVDb21tYW5kEnAKGmNoYW5nZV9kZXNjcmlwdGlvbl9jb21tYW5kGAMgASgLMjIuYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ2hhbmdlRGVzY3JpcHRpb25Hb2FsQ29tbWFuZFIYY2hhbmdlRGVzY3JpcHRpb25Db21tYW5kEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIBBAFIhQKElVwZGF0ZUdvYWxSZXNwb25zZSJTChRHZXRFeHBlcmltZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSJQoOZW52aXJvbm1lbnRfaWQYAyABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiWQoVR2V0RXhwZXJpbWVudFJlc3BvbnNlEkAKCmV4cGVyaW1lbnQYASABKAsyIC5idWNrZXRlZXIuZXhwZXJpbWVudC5FeHBlcmltZW50UgpleHBlcmltZW50IpoGChZMaXN0RXhwZXJpbWVudHNSZXF1ZXN0Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBJECg9mZWF0dXJlX3ZlcnNpb24YAiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIOZmVhdHVyZVZlcnNpb24SEgoEZnJvbRgDIAEoA1IEZnJvbRIOCgJ0bxgEIAEoA1ICdG8SGwoJcGFnZV9zaXplGAUgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYBiABKAlSBmN1cnNvchIzCgZzdGF0dXMYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIGc3RhdHVzEh4KCm1haW50YWluZXIYCSABKAlSCm1haW50YWluZXISTwoIb3JkZXJfYnkYCiABKA4yNC5idWNrZXRlZXIuZXhwZXJpbWVudC5MaXN0RXhwZXJpbWVudHNSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSZAoPb3JkZXJfZGlyZWN0aW9uGAsgASgOMjsuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEV4cGVyaW1lbnRzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYDCABKAlSDXNlYXJjaEtleXdvcmQSNgoIYXJjaGl2ZWQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghhcmNoaXZlZBJDCghzdGF0dXNlcxgOIAMoDjInLmJ1Y2tldGVlci5leHBlcmltZW50LkV4cGVyaW1lbnQuU3RhdHVzUghzdGF0dXNlcxIlCg5lbnZpcm9ubWVudF9pZBgPIAEoCVINZW52aXJvbm1lbnRJZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFKBAgHEAgilgEKF0xpc3RFeHBlcmltZW50c1Jlc3BvbnNlEkIKC2V4cGVyaW1lbnRzGAEgAygLMiAuYnVja2V0ZWVyLmV4cGVyaW1lbnQuRXhwZXJpbWVudFILZXhwZXJpbWVudHMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQijwEKF0NyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0EkcKB2NvbW1hbmQYASABKAsyLS5idWNrZXRlZXIuZXhwZXJpbWVudC5DcmVhdGVFeHBlcmltZW50Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJcChhDcmVhdGVFeHBlcmltZW50UmVzcG9uc2USQAoKZXhwZXJpbWVudBgBIAEoCzIgLmJ1Y2tldGVlci5leHBlcmltZW50LkV4cGVyaW1lbnRSCmV4cGVyaW1lbnQiuwMKF1VwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJ8CiBjaGFuZ2VfZXhwZXJpbWVudF9wZXJpb2RfY29tbWFuZBgFIAEoCzIzLmJ1Y2tldGVlci5leHBlcmltZW50LkNoYW5nZUV4cGVyaW1lbnRQZXJpb2RDb21tYW5kUh1jaGFuZ2VFeHBlcmltZW50UGVyaW9kQ29tbWFuZBJhChNjaGFuZ2VfbmFtZV9jb21tYW5kGAYgASgLMjEuYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ2hhbmdlRXhwZXJpbWVudE5hbWVDb21tYW5kUhFjaGFuZ2VOYW1lQ29tbWFuZBJ2ChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgHIAEoCzI4LmJ1Y2tldGVlci5leHBlcmltZW50LkNoYW5nZUV4cGVyaW1lbnREZXNjcmlwdGlvbkNvbW1hbmRSGGNoYW5nZURlc2NyaXB0aW9uQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgIIAEoCVINZW52aXJvbm1lbnRJZEoECAIQA0oECAMQBEoECAQQBSIaChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2UinQEKFlN0YXJ0RXhwZXJpbWVudFJlcXVlc3QSDgoCaWQYAiABKAlSAmlkEkYKB2NvbW1hbmQYAyABKAsyLC5idWNrZXRlZXIuZXhwZXJpbWVudC5TdGFydEV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlIp8BChdGaW5pc2hFeHBlcmltZW50UmVxdWVzdBIOCgJpZBgCIAEoCVICaWQSRwoHY29tbWFuZBgDIAEoCzItLmJ1Y2tldGVlci5leHBlcmltZW50LkZpbmlzaEV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIhoKGEZpbmlzaEV4cGVyaW1lbnRSZXNwb25zZSKbAQoVU3RvcEV4cGVyaW1lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJFCgdjb21tYW5kGAIgASgLMisuYnVja2V0ZWVyLmV4cGVyaW1lbnQuU3RvcEV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhgKFlN0b3BFeHBlcmltZW50UmVzcG9uc2UioQEKGEFyY2hpdmVFeHBlcmltZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSSAoHY29tbWFuZBgCIAEoCzIuLmJ1Y2tldGVlci5leHBlcmltZW50LkFyY2hpdmVFeHBlcmltZW50Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIbChlBcmNoaXZlRXhwZXJpbWVudFJlc3BvbnNlIp8BChdEZWxldGVFeHBlcmltZW50UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSRwoHY29tbWFuZBgCIAEoCzItLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUV4cGVyaW1lbnRDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhoKGERlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZTLnDAoRRXhwZXJpbWVudFNlcnZpY2USWAoHR2V0R29hbBIkLmJ1Y2tldGVlci5leHBlcmltZW50LkdldEdvYWxSZXF1ZXN0GiUuYnVja2V0ZWVyLmV4cGVyaW1lbnQuR2V0R29hbFJlc3BvbnNlIgASXgoJTGlzdEdvYWxzEiYuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEdvYWxzUmVxdWVzdBonLmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RHb2Fsc1Jlc3BvbnNlIgASYQoKQ3JlYXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LkNyZWF0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlR29hbFJlc3BvbnNlIgASYQoKVXBkYXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LlVwZGF0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuVXBkYXRlR29hbFJlc3BvbnNlIgASZAoLQXJjaGl2ZUdvYWwSKC5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbFJlcXVlc3QaKS5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlR29hbFJlc3BvbnNlIgASYQoKRGVsZXRlR29hbBInLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUdvYWxSZXF1ZXN0GiguYnVja2V0ZWVyLmV4cGVyaW1lbnQuRGVsZXRlR29hbFJlc3BvbnNlIgASagoNR2V0RXhwZXJpbWVudBIqLmJ1Y2tldGVlci5leHBlcmltZW50LkdldEV4cGVyaW1lbnRSZXF1ZXN0GisuYnVja2V0ZWVyLmV4cGVyaW1lbnQuR2V0RXhwZXJpbWVudFJlc3BvbnNlIgAScAoPTGlzdEV4cGVyaW1lbnRzEiwuYnVja2V0ZWVyLmV4cGVyaW1lbnQuTGlzdEV4cGVyaW1lbnRzUmVxdWVzdBotLmJ1Y2tldGVlci5leHBlcmltZW50Lkxpc3RFeHBlcmltZW50c1Jlc3BvbnNlIgAScwoQQ3JlYXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkNyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlIgAScwoQVXBkYXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LlVwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlIgAScAoPU3RhcnRFeHBlcmltZW50EiwuYnVja2V0ZWVyLmV4cGVyaW1lbnQuU3RhcnRFeHBlcmltZW50UmVxdWVzdBotLmJ1Y2tldGVlci5leHBlcmltZW50LlN0YXJ0RXhwZXJpbWVudFJlc3BvbnNlIgAScwoQRmluaXNoRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkZpbmlzaEV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuRmluaXNoRXhwZXJpbWVudFJlc3BvbnNlIgASbQoOU3RvcEV4cGVyaW1lbnQSKy5idWNrZXRlZXIuZXhwZXJpbWVudC5TdG9wRXhwZXJpbWVudFJlcXVlc3QaLC5idWNrZXRlZXIuZXhwZXJpbWVudC5TdG9wRXhwZXJpbWVudFJlc3BvbnNlIgASdgoRQXJjaGl2ZUV4cGVyaW1lbnQSLi5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlRXhwZXJpbWVudFJlcXVlc3QaLy5idWNrZXRlZXIuZXhwZXJpbWVudC5BcmNoaXZlRXhwZXJpbWVudFJlc3BvbnNlIgAScwoQRGVsZXRlRXhwZXJpbWVudBItLmJ1Y2tldGVlci5leHBlcmltZW50LkRlbGV0ZUV4cGVyaW1lbnRSZXF1ZXN0Gi4uYnVja2V0ZWVyLmV4cGVyaW1lbnQuRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlIgBCNFoyZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2V4cGVyaW1lbnRiBnByb3RvMw== + featureDescriptor: CscDChpwcm90by9mZWF0dXJlL2NsYXVzZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUi2gIKBkNsYXVzZRIOCgJpZBgBIAEoCVICaWQSHAoJYXR0cmlidXRlGAIgASgJUglhdHRyaWJ1dGUSPgoIb3BlcmF0b3IYAyABKA4yIi5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2UuT3BlcmF0b3JSCG9wZXJhdG9yEhYKBnZhbHVlcxgEIAMoCVIGdmFsdWVzIskBCghPcGVyYXRvchIKCgZFUVVBTFMQABIGCgJJThABEg0KCUVORFNfV0lUSBACEg8KC1NUQVJUU19XSVRIEAMSCwoHU0VHTUVOVBAEEgsKB0dSRUFURVIQBRIUChBHUkVBVEVSX09SX0VRVUFMEAYSCAoETEVTUxAHEhEKDUxFU1NfT1JfRVFVQUwQCBIKCgZCRUZPUkUQCRIJCgVBRlRFUhAKEhAKDEZFQVRVUkVfRkxBRxALEhMKD1BBUlRJQUxMWV9NQVRDSBAMQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK5AEKGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI2CgNBbnkSGQoIdHlwZV91cmwYASABKAlSB3R5cGVVcmwSFAoFdmFsdWUYAiABKAxSBXZhbHVlQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKhgQKHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIiMKC0RvdWJsZVZhbHVlEhQKBXZhbHVlGAEgASgBUgV2YWx1ZSIiCgpGbG9hdFZhbHVlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZSIiCgpJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgDUgV2YWx1ZSIjCgtVSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoBFIFdmFsdWUiIgoKSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoBVIFdmFsdWUiIwoLVUludDMyVmFsdWUSFAoFdmFsdWUYASABKA1SBXZhbHVlIiEKCUJvb2xWYWx1ZRIUCgV2YWx1ZRgBIAEoCFIFdmFsdWUiIwoLU3RyaW5nVmFsdWUSFAoFdmFsdWUYASABKAlSBXZhbHVlIiIKCkJ5dGVzVmFsdWUSFAoFdmFsdWUYASABKAxSBXZhbHVlQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3dyYXBwZXJzcGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwq7BAoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiLQoNRml4ZWRTdHJhdGVneRIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbiKiAQoPUm9sbG91dFN0cmF0ZWd5EkwKCnZhcmlhdGlvbnMYASADKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3kuVmFyaWF0aW9uUgp2YXJpYXRpb25zGkEKCVZhcmlhdGlvbhIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIWCgZ3ZWlnaHQYAiABKAVSBndlaWdodCL4AQoIU3RyYXRlZ3kSNAoEdHlwZRgBIAEoDjIgLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5LlR5cGVSBHR5cGUSRwoOZml4ZWRfc3RyYXRlZ3kYAiABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5Ug1maXhlZFN0cmF0ZWd5Ek0KEHJvbGxvdXRfc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSD3JvbGxvdXRTdHJhdGVneSIeCgRUeXBlEgkKBUZJWEVEEAASCwoHUk9MTE9VVBABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqQIKGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvIoQBCgRSdWxlEg4KAmlkGAEgASgJUgJpZBI3CghzdHJhdGVneRgCIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneRIzCgdjbGF1c2VzGAMgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlUgdjbGF1c2VzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqAEKGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSI8CgZUYXJnZXQSHAoJdmFyaWF0aW9uGAEgASgJUgl2YXJpYXRpb24SFAoFdXNlcnMYAiADKAlSBXVzZXJzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCvQCCipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIvcBChNGZWF0dXJlTGFzdFVzZWRJbmZvEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIYCgd2ZXJzaW9uGAIgASgFUgd2ZXJzaW9uEiAKDGxhc3RfdXNlZF9hdBgDIAEoA1IKbGFzdFVzZWRBdBIdCgpjcmVhdGVkX2F0GAQgASgDUgljcmVhdGVkQXQSMgoVY2xpZW50X29sZGVzdF92ZXJzaW9uGAUgASgJUhNjbGllbnRPbGRlc3RWZXJzaW9uEjIKFWNsaWVudF9sYXRlc3RfdmVyc2lvbhgGIAEoCVITY2xpZW50TGF0ZXN0VmVyc2lvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsIBCiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiUAoMUHJlcmVxdWlzaXRlEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqgsKG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvItIHCgdGZWF0dXJlEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhIYCgdlbmFibGVkGAQgASgIUgdlbmFibGVkEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQSOQoWZXZhbHVhdGlvbl91bmRlbGF5YWJsZRgGIAEoCEICGAFSFWV2YWx1YXRpb25VbmRlbGF5YWJsZRIQCgN0dGwYByABKAVSA3R0bBIYCgd2ZXJzaW9uGAggASgFUgd2ZXJzaW9uEh0KCmNyZWF0ZWRfYXQYCSABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAogASgDUgl1cGRhdGVkQXQSPAoKdmFyaWF0aW9ucxgLIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIzCgd0YXJnZXRzGAwgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGA0gAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgOIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSIwoNb2ZmX3ZhcmlhdGlvbhgPIAEoCVIMb2ZmVmFyaWF0aW9uEhIKBHRhZ3MYECADKAlSBHRhZ3MSTAoObGFzdF91c2VkX2luZm8YESABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlTGFzdFVzZWRJbmZvUgxsYXN0VXNlZEluZm8SHgoKbWFpbnRhaW5lchgSIAEoCVIKbWFpbnRhaW5lchJPCg52YXJpYXRpb25fdHlwZRgTIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRIaCghhcmNoaXZlZBgUIAEoCFIIYXJjaGl2ZWQSRQoNcHJlcmVxdWlzaXRlcxgVIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIjCg1zYW1wbGluZ19zZWVkGBYgASgJUgxzYW1wbGluZ1NlZWQiPgoNVmFyaWF0aW9uVHlwZRIKCgZTVFJJTkcQABILCgdCT09MRUFOEAESCgoGTlVNQkVSEAISCAoESlNPThADIlIKCEZlYXR1cmVzEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSDgoCaWQYAiABKAlSAmlkIlMKA1RhZxIOCgJpZBgBIAEoCVICaWQSHQoKY3JlYXRlZF9hdBgCIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrUIChtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90byK0BAoHU2VnbWVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SLQoFcnVsZXMYBCADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EhwKB3ZlcnNpb24YByABKANCAhgBUgd2ZXJzaW9uEhgKB2RlbGV0ZWQYCCABKAhSB2RlbGV0ZWQSLgoTaW5jbHVkZWRfdXNlcl9jb3VudBgJIAEoA1IRaW5jbHVkZWRVc2VyQ291bnQSMgoTZXhjbHVkZWRfdXNlcl9jb3VudBgKIAEoA0ICGAFSEWV4Y2x1ZGVkVXNlckNvdW50EjkKBnN0YXR1cxgLIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSJwoQaXNfaW5fdXNlX3N0YXR1cxgMIAEoCFINaXNJblVzZVN0YXR1cxI2CghmZWF0dXJlcxgNIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIj4KBlN0YXR1cxILCgdJTklUSUFMEAASDQoJVVBMT0FESU5HEAESDAoIU1VDRUVERUQQAhIKCgZGQUlMRUQQAyLUAQoLU2VnbWVudFVzZXISDgoCaWQYASABKAlSAmlkEh0KCnNlZ21lbnRfaWQYAiABKAlSCXNlZ21lbnRJZBIXCgd1c2VyX2lkGAMgASgJUgZ1c2VySWQSOgoFc3RhdGUYBCABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSGAoHZGVsZXRlZBgFIAEoCFIHZGVsZXRlZCInCgVTdGF0ZRIMCghJTkNMVURFRBAAEhAKCEVYQ0xVREVEEAEaAggBIoIBCgxTZWdtZW50VXNlcnMSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjQKBXVzZXJzGAIgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCqAFCiBwcm90by9mZWF0dXJlL2ZsYWdfdHJpZ2dlci5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUirQQKC0ZsYWdUcmlnZ2VyEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSNwoEdHlwZRgEIAEoDjIjLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLlR5cGVSBHR5cGUSPQoGYWN0aW9uGAUgASgOMiUuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuQWN0aW9uUgZhY3Rpb24SIAoLZGVzY3JpcHRpb24YBiABKAlSC2Rlc2NyaXB0aW9uEiMKDXRyaWdnZXJfY291bnQYByABKAVSDHRyaWdnZXJDb3VudBIqChFsYXN0X3RyaWdnZXJlZF9hdBgIIAEoA1IPbGFzdFRyaWdnZXJlZEF0EhQKBXRva2VuGAkgASgJUgV0b2tlbhIaCghkaXNhYmxlZBgKIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgLIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYDCABKANSCXVwZGF0ZWRBdBIlCg5lbnZpcm9ubWVudF9pZBgNIAEoCVINZW52aXJvbm1lbnRJZCIqCgRUeXBlEhAKDFR5cGVfVU5LTk9XThAAEhAKDFR5cGVfV0VCSE9PSxABIjsKBkFjdGlvbhISCg5BY3Rpb25fVU5LTk9XThAAEg0KCUFjdGlvbl9PThABEg4KCkFjdGlvbl9PRkYQAkoECAMQBEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsAjChtwcm90by9mZWF0dXJlL2NvbW1hbmQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8aGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhtwcm90by9mZWF0dXJlL2ZlYXR1cmUucHJvdG8aGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8aHHByb3RvL2ZlYXR1cmUvc3RyYXRlZ3kucHJvdG8aG3Byb3RvL2ZlYXR1cmUvc2VnbWVudC5wcm90bxogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8aIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvIjkKB0NvbW1hbmQSLgoHY29tbWFuZBgBIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSB2NvbW1hbmQitQMKFENyZWF0ZUZlYXR1cmVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhI8Cgp2YXJpYXRpb25zGAQgAygLMhwuYnVja2V0ZWVyLmZlYXR1cmUuVmFyaWF0aW9uUgp2YXJpYXRpb25zEhIKBHRhZ3MYBSADKAlSBHRhZ3MSWAoaZGVmYXVsdF9vbl92YXJpYXRpb25faW5kZXgYBiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIXZGVmYXVsdE9uVmFyaWF0aW9uSW5kZXgSWgobZGVmYXVsdF9vZmZfdmFyaWF0aW9uX2luZGV4GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSGGRlZmF1bHRPZmZWYXJpYXRpb25JbmRleBJPCg52YXJpYXRpb25fdHlwZRgIIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZSIXChVBcmNoaXZlRmVhdHVyZUNvbW1hbmQiGQoXVW5hcmNoaXZlRmVhdHVyZUNvbW1hbmQiFgoURGVsZXRlRmVhdHVyZUNvbW1hbmQiKgoUUmVuYW1lRmVhdHVyZUNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZSI8ChhDaGFuZ2VEZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIrgBCilDaGFuZ2VCdWxrVXBsb2FkU2VnbWVudFVzZXJzU3RhdHVzQ29tbWFuZBI5CgZzdGF0dXMYASABKA4yIS5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50LlN0YXR1c1IGc3RhdHVzEjoKBXN0YXRlGAIgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEhQKBWNvdW50GAMgASgDUgVjb3VudCIhCg1BZGRUYWdDb21tYW5kEhAKA3RhZxgBIAEoCVIDdGFnIiQKEFJlbW92ZVRhZ0NvbW1hbmQSEAoDdGFnGAEgASgJUgN0YWciFgoURW5hYmxlRmVhdHVyZUNvbW1hbmQiFwoVRGlzYWJsZUZlYXR1cmVDb21tYW5kImEKE0FkZFZhcmlhdGlvbkNvbW1hbmQSFAoFdmFsdWUYASABKAlSBXZhbHVlEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uIigKFlJlbW92ZVZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkIkMKG0NoYW5nZVZhcmlhdGlvblZhbHVlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFAoFdmFsdWUYAiABKAlSBXZhbHVlIkAKGkNoYW5nZVZhcmlhdGlvbk5hbWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIlUKIUNoYW5nZVZhcmlhdGlvbkRlc2NyaXB0aW9uQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIisKGUNoYW5nZU9mZlZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkIj8KGUFkZFVzZXJUb1ZhcmlhdGlvbkNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhIKBHVzZXIYAiABKAlSBHVzZXIiRAoeUmVtb3ZlVXNlckZyb21WYXJpYXRpb25Db21tYW5kEg4KAmlkGAEgASgJUgJpZBISCgR1c2VyGAIgASgJUgR1c2VyIlcKHENoYW5nZURlZmF1bHRTdHJhdGVneUNvbW1hbmQSNwoIc3RyYXRlZ3kYASABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIIc3RyYXRlZ3kiPQoOQWRkUnVsZUNvbW1hbmQSKwoEcnVsZRgBIAEoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBHJ1bGUifQoZQ2hhbmdlUnVsZVN0cmF0ZWd5Q29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEjcKCHN0cmF0ZWd5GAMgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5IjQKF0NoYW5nZVJ1bGVzT3JkZXJDb21tYW5kEhkKCHJ1bGVfaWRzGAIgAygJUgdydWxlSWRzIiMKEURlbGV0ZVJ1bGVDb21tYW5kEg4KAmlkGAEgASgJUgJpZCJeChBBZGRDbGF1c2VDb21tYW5kEhcKB3J1bGVfaWQYASABKAlSBnJ1bGVJZBIxCgZjbGF1c2UYAiABKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSBmNsYXVzZSI+ChNEZWxldGVDbGF1c2VDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQiZQocQ2hhbmdlQ2xhdXNlQXR0cmlidXRlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhwKCWF0dHJpYnV0ZRgDIAEoCVIJYXR0cmlidXRlIoYBChtDaGFuZ2VDbGF1c2VPcGVyYXRvckNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI+CghvcGVyYXRvchgDIAEoDjIiLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3IiVgoVQWRkQ2xhdXNlVmFsdWVDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSFAoFdmFsdWUYAyABKAlSBXZhbHVlIlkKGFJlbW92ZUNsYXVzZVZhbHVlQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhQKBXZhbHVlGAMgASgJUgV2YWx1ZSKDAQoaQ2hhbmdlRml4ZWRTdHJhdGVneUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI8CghzdHJhdGVneRgDIAEoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkZpeGVkU3RyYXRlZ3lSCHN0cmF0ZWd5IocBChxDaGFuZ2VSb2xsb3V0U3RyYXRlZ3lDb21tYW5kEg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPgoIc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSCHN0cmF0ZWd5IkwKFENyZWF0ZVNlZ21lbnRDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIhYKFERlbGV0ZVNlZ21lbnRDb21tYW5kIi4KGENoYW5nZVNlZ21lbnROYW1lQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIkMKH0NoYW5nZVNlZ21lbnREZXNjcmlwdGlvbkNvbW1hbmQSIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uIm4KFUFkZFNlZ21lbnRVc2VyQ29tbWFuZBIZCgh1c2VyX2lkcxgBIAMoCVIHdXNlcklkcxI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSJxChhEZWxldGVTZWdtZW50VXNlckNvbW1hbmQSGQoIdXNlcl9pZHMYASADKAlSB3VzZXJJZHMSOgoFc3RhdGUYAiABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUibwodQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc0NvbW1hbmQSEgoEZGF0YRgBIAEoDFIEZGF0YRI6CgVzdGF0ZRgCIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSIgCh5JbmNyZW1lbnRGZWF0dXJlVmVyc2lvbkNvbW1hbmQiQgoTQ2xvbmVGZWF0dXJlQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgCIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiIaChhSZXNldFNhbXBsaW5nU2VlZENvbW1hbmQiXQoWQWRkUHJlcmVxdWlzaXRlQ29tbWFuZBJDCgxwcmVyZXF1aXNpdGUYASABKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDHByZXJlcXVpc2l0ZSI6ChlSZW1vdmVQcmVyZXF1aXNpdGVDb21tYW5kEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZCJpCiJDaGFuZ2VQcmVyZXF1aXNpdGVWYXJpYXRpb25Db21tYW5kEkMKDHByZXJlcXVpc2l0ZRgBIAEoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVIMcHJlcmVxdWlzaXRlItMBChhDcmVhdGVGbGFnVHJpZ2dlckNvbW1hbmQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEjcKBHR5cGUYAiABKA4yIy5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5UeXBlUgR0eXBlEj0KBmFjdGlvbhgDIAEoDjIlLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLkFjdGlvblIGYWN0aW9uEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbiIZChdSZXNldEZsYWdUcmlnZ2VyQ29tbWFuZCJHCiNDaGFuZ2VGbGFnVHJpZ2dlckRlc2NyaXB0aW9uQ29tbWFuZBIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24iGgoYRW5hYmxlRmxhZ1RyaWdnZXJDb21tYW5kIhsKGURpc2FibGVGbGFnVHJpZ2dlckNvbW1hbmQiGgoYRGVsZXRlRmxhZ1RyaWdnZXJDb21tYW5kIh8KHVVwZGF0ZUZsYWdUcmlnZ2VyVXNhZ2VDb21tYW5kQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKngIKGnByb3RvL2ZlYXR1cmUvcmVhc29uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSKxAQoGUmVhc29uEjIKBHR5cGUYASABKA4yHi5idWNrZXRlZXIuZmVhdHVyZS5SZWFzb24uVHlwZVIEdHlwZRIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQiWgoEVHlwZRIKCgZUQVJHRVQQABIICgRSVUxFEAESCwoHREVGQVVMVBADEgoKBkNMSUVOVBAEEhEKDU9GRl9WQVJJQVRJT04QBRIQCgxQUkVSRVFVSVNJVEUQBkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCpgGCh5wcm90by9mZWF0dXJlL2V2YWx1YXRpb24ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxoacHJvdG8vZmVhdHVyZS9yZWFzb24ucHJvdG8i4wIKCkV2YWx1YXRpb24SDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBInCg9mZWF0dXJlX3ZlcnNpb24YAyABKAVSDmZlYXR1cmVWZXJzaW9uEhcKB3VzZXJfaWQYBCABKAlSBnVzZXJJZBIhCgx2YXJpYXRpb25faWQYBSABKAlSC3ZhcmlhdGlvbklkEj4KCXZhcmlhdGlvbhgGIAEoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvbkICGAFSCXZhcmlhdGlvbhIxCgZyZWFzb24YByABKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5SZWFzb25SBnJlYXNvbhInCg92YXJpYXRpb25fdmFsdWUYCCABKAlSDnZhcmlhdGlvblZhbHVlEiUKDnZhcmlhdGlvbl9uYW1lGAkgASgJUg12YXJpYXRpb25OYW1lIoYCCg9Vc2VyRXZhbHVhdGlvbnMSEgoCaWQYASABKAlCAhgBUgJpZBI/CgtldmFsdWF0aW9ucxgCIAMoCzIdLmJ1Y2tldGVlci5mZWF0dXJlLkV2YWx1YXRpb25SC2V2YWx1YXRpb25zEh0KCmNyZWF0ZWRfYXQYAyABKANSCWNyZWF0ZWRBdBIwChRhcmNoaXZlZF9mZWF0dXJlX2lkcxgEIAMoCVISYXJjaGl2ZWRGZWF0dXJlSWRzEiEKDGZvcmNlX3VwZGF0ZRgFIAEoCFILZm9yY2VVcGRhdGUiKgoFU3RhdGUSCgoGUVVFVUVEEAASCwoHUEFSVElBTBABEggKBEZVTEwQAkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwrABAoVcHJvdG8vdXNlci91c2VyLnByb3RvEg5idWNrZXRlZXIudXNlciLeAwoEVXNlchIOCgJpZBgBIAEoCVICaWQSMgoEZGF0YRgCIAMoCzIeLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YUVudHJ5UgRkYXRhEkUKC3RhZ2dlZF9kYXRhGAMgAygLMiQuYnVja2V0ZWVyLnVzZXIuVXNlci5UYWdnZWREYXRhRW50cnlSCnRhZ2dlZERhdGESGwoJbGFzdF9zZWVuGAQgASgDUghsYXN0U2VlbhIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQafAoERGF0YRI6CgV2YWx1ZRgBIAMoCzIkLmJ1Y2tldGVlci51c2VyLlVzZXIuRGF0YS5WYWx1ZUVudHJ5UgV2YWx1ZRo4CgpWYWx1ZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaNwoJRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaWAoPVGFnZ2VkRGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5Ei8KBXZhbHVlGAIgASgLMhkuYnVja2V0ZWVyLnVzZXIuVXNlci5EYXRhUgV2YWx1ZToCOAFCLlosZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL3VzZXJiBnByb3RvMwrGeQobcHJvdG8vZmVhdHVyZS9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZRocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhtwcm90by9mZWF0dXJlL2NvbW1hbmQucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxoecHJvdG8vZmVhdHVyZS9ldmFsdWF0aW9uLnByb3RvGhVwcm90by91c2VyL3VzZXIucHJvdG8aG3Byb3RvL2ZlYXR1cmUvc2VnbWVudC5wcm90bxogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhpwcm90by9mZWF0dXJlL3RhcmdldC5wcm90byJQChFHZXRGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSJQoOZW52aXJvbm1lbnRfaWQYAyABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiSgoSR2V0RmVhdHVyZVJlc3BvbnNlEjQKB2ZlYXR1cmUYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlUgdmZWF0dXJlIlMKEkdldEZlYXR1cmVzUmVxdWVzdBIQCgNpZHMYAiADKAlSA2lkcxIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiJNChNHZXRGZWF0dXJlc1Jlc3BvbnNlEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMi9QUKE0xpc3RGZWF0dXJlc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchISCgR0YWdzGAMgAygJUgR0YWdzEkkKCG9yZGVyX2J5GAQgASgOMi4uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5El4KD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI1LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEh4KCm1haW50YWluZXIYByABKAlSCm1haW50YWluZXISNAoHZW5hYmxlZBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSB2VuYWJsZWQSQQoOaGFzX2V4cGVyaW1lbnQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUg1oYXNFeHBlcmltZW50EiUKDnNlYXJjaF9rZXl3b3JkGAogASgJUg1zZWFyY2hLZXl3b3JkEjYKCGFyY2hpdmVkGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIIYXJjaGl2ZWQSRwoRaGFzX3ByZXJlcXVpc2l0ZXMYDCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUhBoYXNQcmVyZXF1aXNpdGVzEiUKDmVudmlyb25tZW50X2lkGA0gASgJUg1lbnZpcm9ubWVudElkIlcKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADEggKBFRBR1MQBBILCgdFTkFCTEVEEAUiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABSgQIBhAHIocBChRMaXN0RmVhdHVyZXNSZXNwb25zZRI2CghmZWF0dXJlcxgBIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEh8KC3RvdGFsX2NvdW50GAMgASgDUgp0b3RhbENvdW50IpIBChpMaXN0RW5hYmxlZEZlYXR1cmVzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yEhIKBHRhZ3MYAyADKAlSBHRhZ3MSJQoOZW52aXJvbm1lbnRfaWQYBSABKAlSDWVudmlyb25tZW50SWRKBAgEEAUibQobTGlzdEVuYWJsZWRGZWF0dXJlc1Jlc3BvbnNlEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3IihgEKFENyZWF0ZUZlYXR1cmVSZXF1ZXN0EkEKB2NvbW1hbmQYASABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJNChVDcmVhdGVGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUizwUKFFVwZGF0ZUZlYXR1cmVSZXF1ZXN0EhgKB2NvbW1lbnQYASABKAlSB2NvbW1lbnQSJQoOZW52aXJvbm1lbnRfaWQYAiABKAlSDWVudmlyb25tZW50SWQSDgoCaWQYAyABKAlSAmlkEjAKBG5hbWUYBCABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSBG5hbWUSPgoLZGVzY3JpcHRpb24YBSABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSC2Rlc2NyaXB0aW9uEhIKBHRhZ3MYBiADKAlSBHRhZ3MSNAoHZW5hYmxlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSB2VuYWJsZWQSNgoIYXJjaGl2ZWQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghhcmNoaXZlZBI8Cgp2YXJpYXRpb25zGAkgAygLMhwuYnVja2V0ZWVyLmZlYXR1cmUuVmFyaWF0aW9uUgp2YXJpYXRpb25zEkUKDXByZXJlcXVpc2l0ZXMYCiADKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDXByZXJlcXVpc2l0ZXMSMwoHdGFyZ2V0cxgLIAMoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlRhcmdldFIHdGFyZ2V0cxItCgVydWxlcxgMIAMoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBXJ1bGVzEkYKEGRlZmF1bHRfc3RyYXRlZ3kYDSABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIPZGVmYXVsdFN0cmF0ZWd5EkEKDW9mZl92YXJpYXRpb24YDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSDG9mZlZhcmlhdGlvbiJNChVVcGRhdGVGZWF0dXJlUmVzcG9uc2USNAoHZmVhdHVyZRgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSB2ZlYXR1cmUisAEKFEVuYWJsZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJBCgdjb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSGAoHY29tbWVudBgEIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIXChVFbmFibGVGZWF0dXJlUmVzcG9uc2UisgEKFURpc2FibGVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQgoHY29tbWFuZBgCIAEoCzIoLmJ1Y2tldGVlci5mZWF0dXJlLkRpc2FibGVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhgKFkRpc2FibGVGZWF0dXJlUmVzcG9uc2UisgEKFUFyY2hpdmVGZWF0dXJlUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSQgoHY29tbWFuZBgCIAEoCzIoLmJ1Y2tldGVlci5mZWF0dXJlLkFyY2hpdmVGZWF0dXJlQ29tbWFuZFIHY29tbWFuZBIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhgKFkFyY2hpdmVGZWF0dXJlUmVzcG9uc2UitgEKF1VuYXJjaGl2ZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJECgdjb21tYW5kGAIgASgLMiouYnVja2V0ZWVyLmZlYXR1cmUuVW5hcmNoaXZlRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSGAoHY29tbWVudBgEIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIaChhVbmFyY2hpdmVGZWF0dXJlUmVzcG9uc2UisAEKFERlbGV0ZUZlYXR1cmVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJBCgdjb21tYW5kGAIgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmVhdHVyZUNvbW1hbmRSB2NvbW1hbmQSGAoHY29tbWVudBgEIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIXChVEZWxldGVGZWF0dXJlUmVzcG9uc2Ui3wMKG1VwZGF0ZUZlYXR1cmVEZXRhaWxzUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSXQoWcmVuYW1lX2ZlYXR1cmVfY29tbWFuZBgCIAEoCzInLmJ1Y2tldGVlci5mZWF0dXJlLlJlbmFtZUZlYXR1cmVDb21tYW5kUhRyZW5hbWVGZWF0dXJlQ29tbWFuZBJpChpjaGFuZ2VfZGVzY3JpcHRpb25fY29tbWFuZBgDIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkNoYW5nZURlc2NyaXB0aW9uQ29tbWFuZFIYY2hhbmdlRGVzY3JpcHRpb25Db21tYW5kEkoKEGFkZF90YWdfY29tbWFuZHMYBCADKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5BZGRUYWdDb21tYW5kUg5hZGRUYWdDb21tYW5kcxJTChNyZW1vdmVfdGFnX2NvbW1hbmRzGAUgAygLMiMuYnVja2V0ZWVyLmZlYXR1cmUuUmVtb3ZlVGFnQ29tbWFuZFIRcmVtb3ZlVGFnQ29tbWFuZHMSGAoHY29tbWVudBgHIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgIIAEoCVINZW52aXJvbm1lbnRJZEoECAYQByIeChxVcGRhdGVGZWF0dXJlRGV0YWlsc1Jlc3BvbnNlIq8BCh5VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1JlcXVlc3QSDgoCaWQYASABKAlSAmlkEjYKCGNvbW1hbmRzGAIgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuQ29tbWFuZFIIY29tbWFuZHMSGAoHY29tbWVudBgEIAEoCVIHY29tbWVudBIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIhCh9VcGRhdGVGZWF0dXJlVmFyaWF0aW9uc1Jlc3BvbnNlIqECCh1VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSNgoIY29tbWFuZHMYAiADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5Db21tYW5kUghjb21tYW5kcxIYCgdjb21tZW50GAQgASgJUgdjb21tZW50EkkKBGZyb20YBSABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVxdWVzdC5Gcm9tUgRmcm9tEiUKDmVudmlyb25tZW50X2lkGAYgASgJUg1lbnZpcm9ubWVudElkIiYKBEZyb20SCwoHVU5LTk9XThAAEggKBFVTRVIQARIHCgNPUFMQAkoECAMQBCIgCh5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVzcG9uc2UilAEKE0Nsb25lRmVhdHVyZVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkAKB2NvbW1hbmQYAiABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5DbG9uZUZlYXR1cmVDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhYKFENsb25lRmVhdHVyZVJlc3BvbnNlIoYBChRDcmVhdGVTZWdtZW50UmVxdWVzdBJBCgdjb21tYW5kGAEgASgLMicuYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlU2VnbWVudENvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiTQoVQ3JlYXRlU2VnbWVudFJlc3BvbnNlEjQKB3NlZ21lbnQYASABKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50UgdzZWdtZW50IlAKEUdldFNlZ21lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJKChJHZXRTZWdtZW50UmVzcG9uc2USNAoHc2VnbWVudBgBIAEoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRSB3NlZ21lbnQiqgQKE0xpc3RTZWdtZW50c1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJJCghvcmRlcl9ieRgEIAEoDjIuLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJeCg9vcmRlcl9kaXJlY3Rpb24YBSABKA4yNS5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudHNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBIzCgZzdGF0dXMYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIGc3RhdHVzEkMKEGlzX2luX3VzZV9zdGF0dXMYCCABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUg1pc0luVXNlU3RhdHVzEiUKDmVudmlyb25tZW50X2lkGAkgASgJUg1lbnZpcm9ubWVudElkIkAKB09yZGVyQnkSCwoHREVGQVVMVBAAEggKBE5BTUUQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQAUoECAMQBCKHAQoUTGlzdFNlZ21lbnRzUmVzcG9uc2USNgoIc2VnbWVudHMYASADKAsyGi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50UghzZWdtZW50cxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKWAQoURGVsZXRlU2VnbWVudFJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIXChVEZWxldGVTZWdtZW50UmVzcG9uc2UiiwEKFFVwZGF0ZVNlZ21lbnRSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBI2Cghjb21tYW5kcxgCIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkNvbW1hbmRSCGNvbW1hbmRzEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhcKFVVwZGF0ZVNlZ21lbnRSZXNwb25zZSKYAQoVQWRkU2VnbWVudFVzZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJCCgdjb21tYW5kGAIgASgLMiguYnVja2V0ZWVyLmZlYXR1cmUuQWRkU2VnbWVudFVzZXJDb21tYW5kUgdjb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEIhgKFkFkZFNlZ21lbnRVc2VyUmVzcG9uc2UingEKGERlbGV0ZVNlZ21lbnRVc2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSRQoHY29tbWFuZBgCIAEoCzIrLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRVc2VyQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIbChlEZWxldGVTZWdtZW50VXNlclJlc3BvbnNlIrgBChVHZXRTZWdtZW50VXNlclJlcXVlc3QSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3VzZXJfaWQYAiABKAlSBnVzZXJJZBI6CgVzdGF0ZRgDIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZRIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAQQBSJMChZHZXRTZWdtZW50VXNlclJlc3BvbnNlEjIKBHVzZXIYASABKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlclIEdXNlciLmAQoXTGlzdFNlZ21lbnRVc2Vyc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIdCgpzZWdtZW50X2lkGAMgASgJUglzZWdtZW50SWQSMQoFc3RhdGUYBCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIFc3RhdGUSFwoHdXNlcl9pZBgFIAEoCVIGdXNlcklkEiUKDmVudmlyb25tZW50X2lkGAcgASgJUg1lbnZpcm9ubWVudElkSgQIBhAHImgKGExpc3RTZWdtZW50VXNlcnNSZXNwb25zZRI0CgV1c2VycxgBIAMoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyUgV1c2VycxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvciK3AQodQnVsa1VwbG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QSHQoKc2VnbWVudF9pZBgCIAEoCVIJc2VnbWVudElkEkoKB2NvbW1hbmQYAyABKAsyMC5idWNrZXRlZXIuZmVhdHVyZS5CdWxrVXBsb2FkU2VnbWVudFVzZXJzQ29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiIgCh5CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVzcG9uc2UiqQEKH0J1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1JlcXVlc3QSHQoKc2VnbWVudF9pZBgCIAEoCVIJc2VnbWVudElkEjoKBXN0YXRlGAMgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIARACIjYKIEJ1bGtEb3dubG9hZFNlZ21lbnRVc2Vyc1Jlc3BvbnNlEhIKBGRhdGEYASABKAxSBGRhdGEioQEKF0V2YWx1YXRlRmVhdHVyZXNSZXF1ZXN0EigKBHVzZXIYASABKAsyFC5idWNrZXRlZXIudXNlci5Vc2VyUgR1c2VyEhAKA3RhZxgDIAEoCVIDdGFnEh0KCmZlYXR1cmVfaWQYBCABKAlSCWZlYXR1cmVJZBIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJpChhFdmFsdWF0ZUZlYXR1cmVzUmVzcG9uc2USTQoQdXNlcl9ldmFsdWF0aW9ucxgBIAEoCzIiLmJ1Y2tldGVlci5mZWF0dXJlLlVzZXJFdmFsdWF0aW9uc1IPdXNlckV2YWx1YXRpb25zIqIDCg9MaXN0VGFnc1JlcXVlc3QSGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchJFCghvcmRlcl9ieRgEIAEoDjIqLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EloKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjIxLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSJQoOZW52aXJvbm1lbnRfaWQYByABKAlSDWVudmlyb25tZW50SWQiPgoHT3JkZXJCeRILCgdERUZBVUxUEAASBgoCSUQQARIOCgpDUkVBVEVEX0FUEAISDgoKVVBEQVRFRF9BVBADIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQAUoECAEQAiJ3ChBMaXN0VGFnc1Jlc3BvbnNlEioKBHRhZ3MYASADKAsyFi5idWNrZXRlZXIuZmVhdHVyZS5UYWdSBHRhZ3MSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiswEKGENyZWF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBJqChtjcmVhdGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAiABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVGbGFnVHJpZ2dlckNvbW1hbmRSGGNyZWF0ZUZsYWdUcmlnZ2VyQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAEQAiJwChlDcmVhdGVGbGFnVHJpZ2dlclJlc3BvbnNlEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCLDAQoYRGVsZXRlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJqChtkZWxldGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVGbGFnVHJpZ2dlckNvbW1hbmRSGGRlbGV0ZUZsYWdUcmlnZ2VyQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyIbChlEZWxldGVGbGFnVHJpZ2dlclJlc3BvbnNlIuYBChhVcGRhdGVGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEowBCidjaGFuZ2VfZmxhZ190cmlnZ2VyX2Rlc2NyaXB0aW9uX2NvbW1hbmQYAyABKAsyNi5idWNrZXRlZXIuZmVhdHVyZS5DaGFuZ2VGbGFnVHJpZ2dlckRlc2NyaXB0aW9uQ29tbWFuZFIjY2hhbmdlRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiGwoZVXBkYXRlRmxhZ1RyaWdnZXJSZXNwb25zZSLDAQoYRW5hYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJqChtlbmFibGVfZmxhZ190cmlnZ2VyX2NvbW1hbmQYAyABKAsyKy5idWNrZXRlZXIuZmVhdHVyZS5FbmFibGVGbGFnVHJpZ2dlckNvbW1hbmRSGGVuYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyIbChlFbmFibGVGbGFnVHJpZ2dlclJlc3BvbnNlIscBChlEaXNhYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJtChxkaXNhYmxlX2ZsYWdfdHJpZ2dlcl9jb21tYW5kGAMgASgLMiwuYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZFIZZGlzYWJsZUZsYWdUcmlnZ2VyQ29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyIcChpEaXNhYmxlRmxhZ1RyaWdnZXJSZXNwb25zZSK/AQoXUmVzZXRGbGFnVHJpZ2dlclJlcXVlc3QSDgoCaWQYASABKAlSAmlkEmcKGnJlc2V0X2ZsYWdfdHJpZ2dlcl9jb21tYW5kGAMgASgLMiouYnVja2V0ZWVyLmZlYXR1cmUuUmVzZXRGbGFnVHJpZ2dlckNvbW1hbmRSF3Jlc2V0RmxhZ1RyaWdnZXJDb21tYW5kEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAhADIm8KGFJlc2V0RmxhZ1RyaWdnZXJSZXNwb25zZRJBCgxmbGFnX3RyaWdnZXIYASABKAsyHi5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlclILZmxhZ1RyaWdnZXISEAoDdXJsGAIgASgJUgN1cmwiVAoVR2V0RmxhZ1RyaWdnZXJSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJtChZHZXRGbGFnVHJpZ2dlclJlc3BvbnNlEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCKqAwoXTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhYKBmN1cnNvchgDIAEoCVIGY3Vyc29yEhsKCXBhZ2Vfc2l6ZRgEIAEoBVIIcGFnZVNpemUSTQoIb3JkZXJfYnkYBSABKA4yMi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmIKD29yZGVyX2RpcmVjdGlvbhgGIAEoDjI5LmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGbGFnVHJpZ2dlcnNSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5lbnZpcm9ubWVudF9pZBgHIAEoCVINZW52aXJvbm1lbnRJZCI2CgdPcmRlckJ5EgsKB0RFRkFVTFQQABIOCgpDUkVBVEVEX0FUEAESDgoKVVBEQVRFRF9BVBACIiMKDk9yZGVyRGlyZWN0aW9uEgcKA0FTQxAAEggKBERFU0MQAUoECAIQAyKjAgoYTGlzdEZsYWdUcmlnZ2Vyc1Jlc3BvbnNlEmMKDWZsYWdfdHJpZ2dlcnMYASADKAsyPi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVzcG9uc2UuRmxhZ1RyaWdnZXJXaXRoVXJsUgxmbGFnVHJpZ2dlcnMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQaaQoSRmxhZ1RyaWdnZXJXaXRoVXJsEkEKDGZsYWdfdHJpZ2dlchgBIAEoCzIeLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyUgtmbGFnVHJpZ2dlchIQCgN1cmwYAiABKAlSA3VybCIxChlGbGFnVHJpZ2dlcldlYmhvb2tSZXF1ZXN0EhQKBXRva2VuGAEgASgJUgV0b2tlbiIcChpGbGFnVHJpZ2dlcldlYmhvb2tSZXNwb25zZTKDIAoORmVhdHVyZVNlcnZpY2USWwoKR2V0RmVhdHVyZRIkLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZlYXR1cmVSZXF1ZXN0GiUuYnVja2V0ZWVyLmZlYXR1cmUuR2V0RmVhdHVyZVJlc3BvbnNlIgASXgoLR2V0RmVhdHVyZXMSJS5idWNrZXRlZXIuZmVhdHVyZS5HZXRGZWF0dXJlc1JlcXVlc3QaJi5idWNrZXRlZXIuZmVhdHVyZS5HZXRGZWF0dXJlc1Jlc3BvbnNlIgASYQoMTGlzdEZlYXR1cmVzEiYuYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZlYXR1cmVzUmVxdWVzdBonLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RGZWF0dXJlc1Jlc3BvbnNlIgASdgoTTGlzdEVuYWJsZWRGZWF0dXJlcxItLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RFbmFibGVkRmVhdHVyZXNSZXF1ZXN0Gi4uYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEVuYWJsZWRGZWF0dXJlc1Jlc3BvbnNlIgASZAoNQ3JlYXRlRmVhdHVyZRInLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuQ3JlYXRlRmVhdHVyZVJlc3BvbnNlIgASZAoNVXBkYXRlRmVhdHVyZRInLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVJlc3BvbnNlIgASZwoNRW5hYmxlRmVhdHVyZRInLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuRW5hYmxlRmVhdHVyZVJlc3BvbnNlIgOIAgESagoORGlzYWJsZUZlYXR1cmUSKC5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmVhdHVyZVJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmVhdHVyZVJlc3BvbnNlIgOIAgESZwoOQXJjaGl2ZUZlYXR1cmUSKC5idWNrZXRlZXIuZmVhdHVyZS5BcmNoaXZlRmVhdHVyZVJlcXVlc3QaKS5idWNrZXRlZXIuZmVhdHVyZS5BcmNoaXZlRmVhdHVyZVJlc3BvbnNlIgASbQoQVW5hcmNoaXZlRmVhdHVyZRIqLmJ1Y2tldGVlci5mZWF0dXJlLlVuYXJjaGl2ZUZlYXR1cmVSZXF1ZXN0GisuYnVja2V0ZWVyLmZlYXR1cmUuVW5hcmNoaXZlRmVhdHVyZVJlc3BvbnNlIgASZAoNRGVsZXRlRmVhdHVyZRInLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZlYXR1cmVSZXF1ZXN0GiguYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlRmVhdHVyZVJlc3BvbnNlIgASeQoUVXBkYXRlRmVhdHVyZURldGFpbHMSLi5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlRGV0YWlsc1JlcXVlc3QaLy5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlRGV0YWlsc1Jlc3BvbnNlIgASggEKF1VwZGF0ZUZlYXR1cmVWYXJpYXRpb25zEjEuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnNSZXF1ZXN0GjIuYnVja2V0ZWVyLmZlYXR1cmUuVXBkYXRlRmVhdHVyZVZhcmlhdGlvbnNSZXNwb25zZSIAEn8KFlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmcSMC5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVGZWF0dXJlVGFyZ2V0aW5nUmVxdWVzdBoxLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZlYXR1cmVUYXJnZXRpbmdSZXNwb25zZSIAEmEKDENsb25lRmVhdHVyZRImLmJ1Y2tldGVlci5mZWF0dXJlLkNsb25lRmVhdHVyZVJlcXVlc3QaJy5idWNrZXRlZXIuZmVhdHVyZS5DbG9uZUZlYXR1cmVSZXNwb25zZSIAEmQKDUNyZWF0ZVNlZ21lbnQSJy5idWNrZXRlZXIuZmVhdHVyZS5DcmVhdGVTZWdtZW50UmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZVNlZ21lbnRSZXNwb25zZSIAElsKCkdldFNlZ21lbnQSJC5idWNrZXRlZXIuZmVhdHVyZS5HZXRTZWdtZW50UmVxdWVzdBolLmJ1Y2tldGVlci5mZWF0dXJlLkdldFNlZ21lbnRSZXNwb25zZSIAEmEKDExpc3RTZWdtZW50cxImLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50c1JlcXVlc3QaJy5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudHNSZXNwb25zZSIAEmQKDURlbGV0ZVNlZ21lbnQSJy5idWNrZXRlZXIuZmVhdHVyZS5EZWxldGVTZWdtZW50UmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZVNlZ21lbnRSZXNwb25zZSIAEmQKDVVwZGF0ZVNlZ21lbnQSJy5idWNrZXRlZXIuZmVhdHVyZS5VcGRhdGVTZWdtZW50UmVxdWVzdBooLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZVNlZ21lbnRSZXNwb25zZSIAEmoKDkFkZFNlZ21lbnRVc2VyEiguYnVja2V0ZWVyLmZlYXR1cmUuQWRkU2VnbWVudFVzZXJSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuQWRkU2VnbWVudFVzZXJSZXNwb25zZSIDiAIBEnMKEURlbGV0ZVNlZ21lbnRVc2VyEisuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFVzZXJSZXF1ZXN0GiwuYnVja2V0ZWVyLmZlYXR1cmUuRGVsZXRlU2VnbWVudFVzZXJSZXNwb25zZSIDiAIBEmoKDkdldFNlZ21lbnRVc2VyEiguYnVja2V0ZWVyLmZlYXR1cmUuR2V0U2VnbWVudFVzZXJSZXF1ZXN0GikuYnVja2V0ZWVyLmZlYXR1cmUuR2V0U2VnbWVudFVzZXJSZXNwb25zZSIDiAIBEm0KEExpc3RTZWdtZW50VXNlcnMSKi5idWNrZXRlZXIuZmVhdHVyZS5MaXN0U2VnbWVudFVzZXJzUmVxdWVzdBorLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RTZWdtZW50VXNlcnNSZXNwb25zZSIAEn8KFkJ1bGtVcGxvYWRTZWdtZW50VXNlcnMSMC5idWNrZXRlZXIuZmVhdHVyZS5CdWxrVXBsb2FkU2VnbWVudFVzZXJzUmVxdWVzdBoxLmJ1Y2tldGVlci5mZWF0dXJlLkJ1bGtVcGxvYWRTZWdtZW50VXNlcnNSZXNwb25zZSIAEoUBChhCdWxrRG93bmxvYWRTZWdtZW50VXNlcnMSMi5idWNrZXRlZXIuZmVhdHVyZS5CdWxrRG93bmxvYWRTZWdtZW50VXNlcnNSZXF1ZXN0GjMuYnVja2V0ZWVyLmZlYXR1cmUuQnVsa0Rvd25sb2FkU2VnbWVudFVzZXJzUmVzcG9uc2UiABJtChBFdmFsdWF0ZUZlYXR1cmVzEiouYnVja2V0ZWVyLmZlYXR1cmUuRXZhbHVhdGVGZWF0dXJlc1JlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5FdmFsdWF0ZUZlYXR1cmVzUmVzcG9uc2UiABJVCghMaXN0VGFncxIiLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVxdWVzdBojLmJ1Y2tldGVlci5mZWF0dXJlLkxpc3RUYWdzUmVzcG9uc2UiABJwChFDcmVhdGVGbGFnVHJpZ2dlchIrLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBosLmJ1Y2tldGVlci5mZWF0dXJlLkNyZWF0ZUZsYWdUcmlnZ2VyUmVzcG9uc2UiABJwChFVcGRhdGVGbGFnVHJpZ2dlchIrLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZsYWdUcmlnZ2VyUmVxdWVzdBosLmJ1Y2tldGVlci5mZWF0dXJlLlVwZGF0ZUZsYWdUcmlnZ2VyUmVzcG9uc2UiABJwChFFbmFibGVGbGFnVHJpZ2dlchIrLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZsYWdUcmlnZ2VyUmVxdWVzdBosLmJ1Y2tldGVlci5mZWF0dXJlLkVuYWJsZUZsYWdUcmlnZ2VyUmVzcG9uc2UiABJzChJEaXNhYmxlRmxhZ1RyaWdnZXISLC5idWNrZXRlZXIuZmVhdHVyZS5EaXNhYmxlRmxhZ1RyaWdnZXJSZXF1ZXN0Gi0uYnVja2V0ZWVyLmZlYXR1cmUuRGlzYWJsZUZsYWdUcmlnZ2VyUmVzcG9uc2UiABJtChBSZXNldEZsYWdUcmlnZ2VyEiouYnVja2V0ZWVyLmZlYXR1cmUuUmVzZXRGbGFnVHJpZ2dlclJlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5SZXNldEZsYWdUcmlnZ2VyUmVzcG9uc2UiABJwChFEZWxldGVGbGFnVHJpZ2dlchIrLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZsYWdUcmlnZ2VyUmVxdWVzdBosLmJ1Y2tldGVlci5mZWF0dXJlLkRlbGV0ZUZsYWdUcmlnZ2VyUmVzcG9uc2UiABJnCg5HZXRGbGFnVHJpZ2dlchIoLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZsYWdUcmlnZ2VyUmVxdWVzdBopLmJ1Y2tldGVlci5mZWF0dXJlLkdldEZsYWdUcmlnZ2VyUmVzcG9uc2UiABJtChBMaXN0RmxhZ1RyaWdnZXJzEiouYnVja2V0ZWVyLmZlYXR1cmUuTGlzdEZsYWdUcmlnZ2Vyc1JlcXVlc3QaKy5idWNrZXRlZXIuZmVhdHVyZS5MaXN0RmxhZ1RyaWdnZXJzUmVzcG9uc2UiABKUAQoSRmxhZ1RyaWdnZXJXZWJob29rEiwuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXJXZWJob29rUmVxdWVzdBotLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyV2ViaG9va1Jlc3BvbnNlIiGC0+STAhsiGS93ZWJob29rL3RyaWdnZXJzL3t0b2tlbn1CMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMw== + accountDescriptor: CucDCiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IukCCg1FbnZpcm9ubWVudFYyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIdCgpwcm9qZWN0X2lkGAUgASgJUglwcm9qZWN0SWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEh0KCmNyZWF0ZWRfYXQYByABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAggASgDUgl1cGRhdGVkQXQSJwoPb3JnYW5pemF0aW9uX2lkGAkgASgJUg5vcmdhbml6YXRpb25JZBInCg9yZXF1aXJlX2NvbW1lbnQYCiABKAhSDnJlcXVpcmVDb21tZW50EiwKEmZlYXR1cmVfZmxhZ19jb3VudBgLIAEoBVIQZmVhdHVyZUZsYWdDb3VudEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwr9AwofcHJvdG8vZW52aXJvbm1lbnQvcHJvamVjdC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IoMDCgdQcm9qZWN0Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlEicKD29yZ2FuaXphdGlvbl9pZBgKIAEoCVIOb3JnYW5pemF0aW9uSWQSKwoRZW52aXJvbm1lbnRfY291bnQYCyABKAVSEGVudmlyb25tZW50Q291bnQSLAoSZmVhdHVyZV9mbGFnX2NvdW50GAwgASgFUhBmZWF0dXJlRmxhZ0NvdW50QjVaM2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9lbnZpcm9ubWVudGIGcHJvdG8zCq8ECiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudCKwAwoMT3JnYW5pemF0aW9uEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEhQKBXRyaWFsGAcgASgIUgV0cmlhbBIdCgpjcmVhdGVkX2F0GAggASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgJIAEoA1IJdXBkYXRlZEF0EiEKDHN5c3RlbV9hZG1pbhgKIAEoCFILc3lzdGVtQWRtaW4SIwoNcHJvamVjdF9jb3VudBgLIAEoBVIMcHJvamVjdENvdW50EisKEWVudmlyb25tZW50X2NvdW50GAwgASgFUhBlbnZpcm9ubWVudENvdW50Eh0KCnVzZXJfY291bnQYDSABKAVSCXVzZXJDb3VudBIfCgtvd25lcl9lbWFpbBgOIAEoCVIKb3duZXJFbWFpbEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwqQAwohcHJvdG8vYWNjb3VudC9zZWFyY2hfZmlsdGVyLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudCLpAQoMU2VhcmNoRmlsdGVyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhQKBXF1ZXJ5GAMgASgJUgVxdWVyeRJRChJmaWx0ZXJfdGFyZ2V0X3R5cGUYBCABKA4yIy5idWNrZXRlZXIuYWNjb3VudC5GaWx0ZXJUYXJnZXRUeXBlUhBmaWx0ZXJUYXJnZXRUeXBlEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkEiUKDmRlZmF1bHRfZmlsdGVyGAYgASgIUg1kZWZhdWx0RmlsdGVyKjEKEEZpbHRlclRhcmdldFR5cGUSCwoHVU5LTk9XThAAEhAKDEZFQVRVUkVfRkxBRxABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hY2NvdW50YgZwcm90bzMKoxMKG3Byb3RvL2FjY291bnQvYWNjb3VudC5wcm90bxIRYnVja2V0ZWVyLmFjY291bnQaI3Byb3RvL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnByb3RvGh9wcm90by9lbnZpcm9ubWVudC9wcm9qZWN0LnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byKrAgoHQWNjb3VudBIOCgJpZBgBIAEoCVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWUSMwoEcm9sZRgEIAEoDjIfLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnQuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkIjkKBFJvbGUSCgoGVklFV0VSEAASCgoGRURJVE9SEAESCQoFT1dORVIQAhIOCgpVTkFTU0lHTkVEEGM6AhgBIqgICglBY2NvdW50VjISFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgDIAEoCVIOYXZhdGFySW1hZ2VVcmwSJwoPb3JnYW5pemF0aW9uX2lkGAQgASgJUg5vcmdhbml6YXRpb25JZBJbChFvcmdhbml6YXRpb25fcm9sZRgFIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgGIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSGgoIZGlzYWJsZWQYByABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSRgoOc2VhcmNoX2ZpbHRlcnMYCiADKAsyHy5idWNrZXRlZXIuYWNjb3VudC5TZWFyY2hGaWx0ZXJSDXNlYXJjaEZpbHRlcnMSHQoKZmlyc3RfbmFtZRgLIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgMIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYDSABKAlSCGxhbmd1YWdlEhsKCWxhc3Rfc2VlbhgOIAEoA1IIbGFzdFNlZW4SKAoQYXZhdGFyX2ZpbGVfdHlwZRgPIAEoCVIOYXZhdGFyRmlsZVR5cGUSIQoMYXZhdGFyX2ltYWdlGBAgASgMUgthdmF0YXJJbWFnZRIrChFlbnZpcm9ubWVudF9jb3VudBgRIAEoBVIQZW52aXJvbm1lbnRDb3VudBrXAQoEUm9sZSJZCgtFbnZpcm9ubWVudBIaChZFbnZpcm9ubWVudF9VTkFTU0lHTkVEEAASFgoSRW52aXJvbm1lbnRfVklFV0VSEAESFgoSRW52aXJvbm1lbnRfRURJVE9SEAIidAoMT3JnYW5pemF0aW9uEhsKF09yZ2FuaXphdGlvbl9VTkFTU0lHTkVEEAASFwoTT3JnYW5pemF0aW9uX01FTUJFUhABEhYKEk9yZ2FuaXphdGlvbl9BRE1JThACEhYKEk9yZ2FuaXphdGlvbl9PV05FUhADGnsKD0Vudmlyb25tZW50Um9sZRIlCg5lbnZpcm9ubWVudF9pZBgBIAEoCVINZW52aXJvbm1lbnRJZBJBCgRyb2xlGAIgASgOMi0uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuRW52aXJvbm1lbnRSBHJvbGUizQYKDkNvbnNvbGVBY2NvdW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVybBImCg9pc19zeXN0ZW1fYWRtaW4YBCABKAhSDWlzU3lzdGVtQWRtaW4SRwoMb3JnYW5pemF0aW9uGAUgASgLMiMuYnVja2V0ZWVyLmVudmlyb25tZW50Lk9yZ2FuaXphdGlvblIMb3JnYW5pemF0aW9uElsKEW9yZ2FuaXphdGlvbl9yb2xlGAYgASgOMi4uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuT3JnYW5pemF0aW9uUhBvcmdhbml6YXRpb25Sb2xlEl4KEWVudmlyb25tZW50X3JvbGVzGAcgAygLMjEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnQuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEkYKDnNlYXJjaF9maWx0ZXJzGAggAygLMh8uYnVja2V0ZWVyLmFjY291bnQuU2VhcmNoRmlsdGVyUg1zZWFyY2hGaWx0ZXJzEh0KCmZpcnN0X25hbWUYCSABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCiABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAsgASgJUghsYW5ndWFnZRIoChBhdmF0YXJfZmlsZV90eXBlGAwgASgJUg5hdmF0YXJGaWxlVHlwZRIhCgxhdmF0YXJfaW1hZ2UYDSABKAxSC2F2YXRhckltYWdlGtYBCg9FbnZpcm9ubWVudFJvbGUSRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSOAoHcHJvamVjdBgCIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0EkEKBHJvbGUYAyABKA4yLS5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5FbnZpcm9ubWVudFIEcm9sZUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYWNjb3VudGIGcHJvdG8zCuAFChtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8SEWJ1Y2tldGVlci5hY2NvdW50GiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90byK1AgoGQVBJS2V5Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEjIKBHJvbGUYAyABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgEIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCJ5CgRSb2xlEgsKB1VOS05PV04QABIOCgpTREtfQ0xJRU5UEAESDgoKU0RLX1NFUlZFUhACEhgKFFBVQkxJQ19BUElfUkVBRF9PTkxZEAMSFAoQUFVCTElDX0FQSV9XUklURRAEEhQKEFBVQkxJQ19BUElfQURNSU4QBSKVAgoRRW52aXJvbm1lbnRBUElLZXkSMgoHYXBpX2tleRgCIAEoCzIZLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleVIGYXBpS2V5EjEKFGVudmlyb25tZW50X2Rpc2FibGVkGAMgASgIUhNlbnZpcm9ubWVudERpc2FibGVkEiEKCnByb2plY3RfaWQYBCABKAlCAhgBUglwcm9qZWN0SWQSRgoLZW52aXJvbm1lbnQYBSABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSKAoQcHJvamVjdF91cmxfY29kZRgGIAEoCVIOcHJvamVjdFVybENvZGVKBAgBEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwrWEQobcHJvdG8vYWNjb3VudC9jb21tYW5kLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudBobcHJvdG8vYWNjb3VudC9hY2NvdW50LnByb3RvGhtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byL8AgoWQ3JlYXRlQWNjb3VudFYyQ29tbWFuZBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSEgoEbmFtZRgCIAEoCVIEbmFtZRIoChBhdmF0YXJfaW1hZ2VfdXJsGAMgASgJUg5hdmF0YXJJbWFnZVVybBJbChFvcmdhbml6YXRpb25fcm9sZRgEIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgFIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSHQoKZmlyc3RfbmFtZRgGIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgHIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYCCABKAlSCGxhbmd1YWdlIjAKGkNoYW5nZUFjY291bnRWMk5hbWVDb21tYW5kEhIKBG5hbWUYASABKAlSBG5hbWUiQAofQ2hhbmdlQWNjb3VudFYyRmlyc3ROYW1lQ29tbWFuZBIdCgpmaXJzdF9uYW1lGAEgASgJUglmaXJzdE5hbWUiPQoeQ2hhbmdlQWNjb3VudFYyTGFzdE5hbWVDb21tYW5kEhsKCWxhc3RfbmFtZRgBIAEoCVIIbGFzdE5hbWUiPAoeQ2hhbmdlQWNjb3VudFYyTGFuZ3VhZ2VDb21tYW5kEhoKCGxhbmd1YWdlGAEgASgJUghsYW5ndWFnZSJQCiRDaGFuZ2VBY2NvdW50VjJBdmF0YXJJbWFnZVVybENvbW1hbmQSKAoQYXZhdGFyX2ltYWdlX3VybBgBIAEoCVIOYXZhdGFySW1hZ2VVcmwiawocQ2hhbmdlQWNjb3VudFYyQXZhdGFyQ29tbWFuZBIhCgxhdmF0YXJfaW1hZ2UYASABKAxSC2F2YXRhckltYWdlEigKEGF2YXRhcl9maWxlX3R5cGUYAiABKAlSDmF2YXRhckZpbGVUeXBlIj0KHkNoYW5nZUFjY291bnRWMkxhc3RTZWVuQ29tbWFuZBIbCglsYXN0X3NlZW4YASABKANSCGxhc3RTZWVuImwKJkNoYW5nZUFjY291bnRWMk9yZ2FuaXphdGlvblJvbGVDb21tYW5kEkIKBHJvbGUYASABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SBHJvbGUipQIKJkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kEkIKBXJvbGVzGAEgAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIFcm9sZXMSYgoKd3JpdGVfdHlwZRgCIAEoDjJDLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kLldyaXRlVHlwZVIJd3JpdGVUeXBlIlMKCVdyaXRlVHlwZRIZChVXcml0ZVR5cGVfVU5TUEVDSUZJRUQQABIWChJXcml0ZVR5cGVfT1ZFUlJJREUQARITCg9Xcml0ZVR5cGVfUEFUQ0gQAiIYChZFbmFibGVBY2NvdW50VjJDb21tYW5kIhkKF0Rpc2FibGVBY2NvdW50VjJDb21tYW5kIhgKFkRlbGV0ZUFjY291bnRWMkNvbW1hbmQiXQoTQ3JlYXRlQVBJS2V5Q29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lEjIKBHJvbGUYAiABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZSItChdDaGFuZ2VBUElLZXlOYW1lQ29tbWFuZBISCgRuYW1lGAEgASgJUgRuYW1lIhUKE0VuYWJsZUFQSUtleUNvbW1hbmQiFgoURGlzYWJsZUFQSUtleUNvbW1hbmQi5gEKGUNyZWF0ZVNlYXJjaEZpbHRlckNvbW1hbmQSEgoEbmFtZRgBIAEoCVIEbmFtZRIUCgVxdWVyeRgCIAEoCVIFcXVlcnkSUQoSZmlsdGVyX3RhcmdldF90eXBlGAMgASgOMiMuYnVja2V0ZWVyLmFjY291bnQuRmlsdGVyVGFyZ2V0VHlwZVIQZmlsdGVyVGFyZ2V0VHlwZRIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZBIlCg5kZWZhdWx0X2ZpbHRlchgFIAEoCFINZGVmYXVsdEZpbHRlciJDCh1DaGFuZ2VTZWFyY2hGaWx0ZXJOYW1lQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJGCh5DaGFuZ2VTZWFyY2hGaWx0ZXJRdWVyeUNvbW1hbmQSDgoCaWQYASABKAlSAmlkEhQKBXF1ZXJ5GAIgASgJUgVxdWVyeSJZCiBDaGFuZ2VEZWZhdWx0U2VhcmNoRmlsdGVyQ29tbWFuZBIOCgJpZBgBIAEoCVICaWQSJQoOZGVmYXVsdF9maWx0ZXIYAiABKAhSDWRlZmF1bHRGaWx0ZXIiKwoZRGVsZXRlU2VhcmNoRmlsdGVyQ29tbWFuZBIOCgJpZBgBIAEoCVICaWRCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwqGBAoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvEg9nb29nbGUucHJvdG9idWYiIwoLRG91YmxlVmFsdWUSFAoFdmFsdWUYASABKAFSBXZhbHVlIiIKCkZsb2F0VmFsdWUSFAoFdmFsdWUYASABKAJSBXZhbHVlIiIKCkludDY0VmFsdWUSFAoFdmFsdWUYASABKANSBXZhbHVlIiMKC1VJbnQ2NFZhbHVlEhQKBXZhbHVlGAEgASgEUgV2YWx1ZSIiCgpJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgFUgV2YWx1ZSIjCgtVSW50MzJWYWx1ZRIUCgV2YWx1ZRgBIAEoDVIFdmFsdWUiIQoJQm9vbFZhbHVlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIjCgtTdHJpbmdWYWx1ZRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiIgoKQnl0ZXNWYWx1ZRIUCgV2YWx1ZRgBIAEoDFIFdmFsdWVCgwEKE2NvbS5nb29nbGUucHJvdG9idWZCDVdyYXBwZXJzUHJvdG9QAVoxZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vd3JhcHBlcnNwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCocFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24itQIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRJFChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVISYWRkaXRpb25hbEJpbmRpbmdzQgkKB3BhdHRlcm4iOwoRQ3VzdG9tSHR0cFBhdHRlcm4SEgoEa2luZBgBIAEoCVIEa2luZBISCgRwYXRoGAIgASgJUgRwYXRoQmoKDmNvbS5nb29nbGUuYXBpQglIdHRwUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnP4AQGiAgRHQVBJYgZwcm90bzMK4UYKIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvEg9nb29nbGUucHJvdG9idWYiTQoRRmlsZURlc2NyaXB0b3JTZXQSOAoEZmlsZRgBIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvUgRmaWxlIv4EChNGaWxlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSGAoHcGFja2FnZRgCIAEoCVIHcGFja2FnZRIeCgpkZXBlbmRlbmN5GAMgAygJUgpkZXBlbmRlbmN5EisKEXB1YmxpY19kZXBlbmRlbmN5GAogAygFUhBwdWJsaWNEZXBlbmRlbmN5EicKD3dlYWtfZGVwZW5kZW5jeRgLIAMoBVIOd2Vha0RlcGVuZGVuY3kSQwoMbWVzc2FnZV90eXBlGAQgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1ILbWVzc2FnZVR5cGUSQQoJZW51bV90eXBlGAUgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlEkEKB3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1IHc2VydmljZRJDCglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhI2CgdvcHRpb25zGAggASgLMhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zUgdvcHRpb25zEkkKEHNvdXJjZV9jb2RlX2luZm8YCSABKAsyHy5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9SDnNvdXJjZUNvZGVJbmZvEhYKBnN5bnRheBgMIAEoCVIGc3ludGF4EhgKB2VkaXRpb24YDSABKAlSB2VkaXRpb24iuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQirQQKFUV4dGVuc2lvblJhbmdlT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbhJZCgtkZWNsYXJhdGlvbhgCIAMoCzIyLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnMuRGVjbGFyYXRpb25CA4gBAlILZGVjbGFyYXRpb24SaAoMdmVyaWZpY2F0aW9uGAMgASgOMjguZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9ucy5WZXJpZmljYXRpb25TdGF0ZToKVU5WRVJJRklFRFIMdmVyaWZpY2F0aW9uGrMBCgtEZWNsYXJhdGlvbhIWCgZudW1iZXIYASABKAVSBm51bWJlchIbCglmdWxsX25hbWUYAiABKAlSCGZ1bGxOYW1lEhIKBHR5cGUYAyABKAlSBHR5cGUSIwoLaXNfcmVwZWF0ZWQYBCABKAhCAhgBUgppc1JlcGVhdGVkEhoKCHJlc2VydmVkGAUgASgIUghyZXNlcnZlZBIaCghyZXBlYXRlZBgGIAEoCFIIcmVwZWF0ZWQiNAoRVmVyaWZpY2F0aW9uU3RhdGUSDwoLREVDTEFSQVRJT04QABIOCgpVTlZFUklGSUVEEAEqCQjoBxCAgICAAiLBBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zEicKD3Byb3RvM19vcHRpb25hbBgRIAEoCFIOcHJvdG8zT3B0aW9uYWwitgIKBFR5cGUSDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASIkMKBUxhYmVsEhIKDkxBQkVMX09QVElPTkFMEAESEgoOTEFCRUxfUkVRVUlSRUQQAhISCg5MQUJFTF9SRVBFQVRFRBADImMKFE9uZW9mRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSNwoHb3B0aW9ucxgCIAEoCzIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnNSB29wdGlvbnMi4wIKE0VudW1EZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI/CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9SBXZhbHVlEjYKB29wdGlvbnMYAyABKAsyHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNSB29wdGlvbnMSXQoOcmVzZXJ2ZWRfcmFuZ2UYBCADKAsyNi5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5FbnVtUmVzZXJ2ZWRSYW5nZVINcmVzZXJ2ZWRSYW5nZRIjCg1yZXNlcnZlZF9uYW1lGAUgAygJUgxyZXNlcnZlZE5hbWUaOwoRRW51bVJlc2VydmVkUmFuZ2USFAoFc3RhcnQYASABKAVSBXN0YXJ0EhAKA2VuZBgCIAEoBVIDZW5kIoMBChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchI7CgdvcHRpb25zGAMgASgLMiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnNSB29wdGlvbnMipwEKFlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI+CgZtZXRob2QYAiADKAsyJi5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvUgZtZXRob2QSOQoHb3B0aW9ucxgDIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9uc1IHb3B0aW9ucyKJAgoVTWV0aG9kRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSHQoKaW5wdXRfdHlwZRgCIAEoCVIJaW5wdXRUeXBlEh8KC291dHB1dF90eXBlGAMgASgJUgpvdXRwdXRUeXBlEjgKB29wdGlvbnMYBCABKAsyHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9uc1IHb3B0aW9ucxIwChBjbGllbnRfc3RyZWFtaW5nGAUgASgIOgVmYWxzZVIPY2xpZW50U3RyZWFtaW5nEjAKEHNlcnZlcl9zdHJlYW1pbmcYBiABKAg6BWZhbHNlUg9zZXJ2ZXJTdHJlYW1pbmcikQkKC0ZpbGVPcHRpb25zEiEKDGphdmFfcGFja2FnZRgBIAEoCVILamF2YVBhY2thZ2USMAoUamF2YV9vdXRlcl9jbGFzc25hbWUYCCABKAlSEmphdmFPdXRlckNsYXNzbmFtZRI1ChNqYXZhX211bHRpcGxlX2ZpbGVzGAogASgIOgVmYWxzZVIRamF2YU11bHRpcGxlRmlsZXMSRAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCABKAhCAhgBUhlqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoEjoKFmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgYGyABKAg6BWZhbHNlUhNqYXZhU3RyaW5nQ2hlY2tVdGY4ElMKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEUgtvcHRpbWl6ZUZvchIdCgpnb19wYWNrYWdlGAsgASgJUglnb1BhY2thZ2USNQoTY2NfZ2VuZXJpY19zZXJ2aWNlcxgQIAEoCDoFZmFsc2VSEWNjR2VuZXJpY1NlcnZpY2VzEjkKFWphdmFfZ2VuZXJpY19zZXJ2aWNlcxgRIAEoCDoFZmFsc2VSE2phdmFHZW5lcmljU2VydmljZXMSNQoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgSIAEoCDoFZmFsc2VSEXB5R2VuZXJpY1NlcnZpY2VzEjcKFHBocF9nZW5lcmljX3NlcnZpY2VzGCogASgIOgVmYWxzZVIScGhwR2VuZXJpY1NlcnZpY2VzEiUKCmRlcHJlY2F0ZWQYFyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEi4KEGNjX2VuYWJsZV9hcmVuYXMYHyABKAg6BHRydWVSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyK7AwoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAsgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBBAFSgQIBRAGSgQIBhAHSgQICBAJSgQICRAKIoUJCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIuCg91bnZlcmlmaWVkX2xhenkYDyABKAg6BWZhbHNlUg51bnZlcmlmaWVkTGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxIoCgxkZWJ1Z19yZWRhY3QYECABKAg6BWZhbHNlUgtkZWJ1Z1JlZGFjdBJLCglyZXRlbnRpb24YESABKA4yLS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLk9wdGlvblJldGVudGlvblIJcmV0ZW50aW9uEkoKBnRhcmdldBgSIAEoDjIuLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuT3B0aW9uVGFyZ2V0VHlwZUICGAFSBnRhcmdldBJICgd0YXJnZXRzGBMgAygOMi4uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5PcHRpb25UYXJnZXRUeXBlUgd0YXJnZXRzElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIiVQoPT3B0aW9uUmV0ZW50aW9uEhUKEVJFVEVOVElPTl9VTktOT1dOEAASFQoRUkVURU5USU9OX1JVTlRJTUUQARIUChBSRVRFTlRJT05fU09VUkNFEAIijAIKEE9wdGlvblRhcmdldFR5cGUSFwoTVEFSR0VUX1RZUEVfVU5LTk9XThAAEhQKEFRBUkdFVF9UWVBFX0ZJTEUQARIfChtUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UQAhIXChNUQVJHRVRfVFlQRV9NRVNTQUdFEAMSFQoRVEFSR0VUX1RZUEVfRklFTEQQBBIVChFUQVJHRVRfVFlQRV9PTkVPRhAFEhQKEFRBUkdFVF9UWVBFX0VOVU0QBhIaChZUQVJHRVRfVFlQRV9FTlVNX0VOVFJZEAcSFwoTVEFSR0VUX1RZUEVfU0VSVklDRRAIEhYKElRBUkdFVF9UWVBFX01FVEhPRBAJKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAIKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElYKJmRlcHJlY2F0ZWRfbGVnYWN5X2pzb25fZmllbGRfY29uZmxpY3RzGAYgASgIQgIYAVIiZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItACChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24a6wEKCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kElIKCHNlbWFudGljGAUgASgOMjYuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uU2VtYW50aWNSCHNlbWFudGljIigKCFNlbWFudGljEggKBE5PTkUQABIHCgNTRVQQARIJCgVBTElBUxACQn4KE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVotZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMvZGVzY3JpcHRvcnBi+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KqAIKHGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8SCmdvb2dsZS5hcGkaFWdvb2dsZS9hcGkvaHR0cC5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SwoEaHR0cBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLDKvCIgASgLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZVIEaHR0cEJuCg5jb20uZ29vZ2xlLmFwaUIQQW5ub3RhdGlvbnNQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwriBQocZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIpgBCgZTdHJ1Y3QSOwoGZmllbGRzGAEgAygLMiMuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5GaWVsZHNFbnRyeVIGZmllbGRzGlEKC0ZpZWxkc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEisgIKBVZhbHVlEjsKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSABSCW51bGxWYWx1ZRIjCgxudW1iZXJfdmFsdWUYAiABKAFIAFILbnVtYmVyVmFsdWUSIwoMc3RyaW5nX3ZhbHVlGAMgASgJSABSC3N0cmluZ1ZhbHVlEh8KCmJvb2xfdmFsdWUYBCABKAhIAFIJYm9vbFZhbHVlEjwKDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAFILc3RydWN0VmFsdWUSOwoKbGlzdF92YWx1ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVIAFIJbGlzdFZhbHVlQgYKBGtpbmQiOwoJTGlzdFZhbHVlEi4KBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIGdmFsdWVzKhsKCU51bGxWYWx1ZRIOCgpOVUxMX1ZBTFVFEABCfwoTY29tLmdvb2dsZS5wcm90b2J1ZkILU3RydWN0UHJvdG9QAVovZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMva25vd24vc3RydWN0cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwqmPgoscHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9vcGVuYXBpdjIucHJvdG8SKWdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zGhxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvIrMICgdTd2FnZ2VyEhgKB3N3YWdnZXIYASABKAlSB3N3YWdnZXISQwoEaW5mbxgCIAEoCzIvLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkluZm9SBGluZm8SEgoEaG9zdBgDIAEoCVIEaG9zdBIbCgliYXNlX3BhdGgYBCABKAlSCGJhc2VQYXRoEksKB3NjaGVtZXMYBSADKA4yMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWVSB3NjaGVtZXMSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJfCglyZXNwb25zZXMYCiADKAsyQS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyLlJlc3BvbnNlc0VudHJ5UglyZXNwb25zZXMScQoUc2VjdXJpdHlfZGVmaW5pdGlvbnMYCyABKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eURlZmluaXRpb25zUhNzZWN1cml0eURlZmluaXRpb25zEloKCHNlY3VyaXR5GAwgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlSZXF1aXJlbWVudFIIc2VjdXJpdHkSQgoEdGFncxgNIAMoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IEdGFncxJlCg1leHRlcm5hbF9kb2NzGA4gASgLMkAuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuRXh0ZXJuYWxEb2N1bWVudGF0aW9uUgxleHRlcm5hbERvY3MSYgoKZXh0ZW5zaW9ucxgPIAMoCzJCLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlN3YWdnZXIuRXh0ZW5zaW9uc0VudHJ5UgpleHRlbnNpb25zGnEKDlJlc3BvbnNlc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkkKBXZhbHVlGAIgASgLMjMuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUmVzcG9uc2VSBXZhbHVlOgI4ARpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4AUoECAgQCUoECAkQCiLWBwoJT3BlcmF0aW9uEhIKBHRhZ3MYASADKAlSBHRhZ3MSGAoHc3VtbWFyeRgCIAEoCVIHc3VtbWFyeRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SZQoNZXh0ZXJuYWxfZG9jcxgEIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEiEKDG9wZXJhdGlvbl9pZBgFIAEoCVILb3BlcmF0aW9uSWQSGgoIY29uc3VtZXMYBiADKAlSCGNvbnN1bWVzEhoKCHByb2R1Y2VzGAcgAygJUghwcm9kdWNlcxJhCglyZXNwb25zZXMYCSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5PcGVyYXRpb24uUmVzcG9uc2VzRW50cnlSCXJlc3BvbnNlcxJLCgdzY2hlbWVzGAogAygOMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1lUgdzY2hlbWVzEh4KCmRlcHJlY2F0ZWQYCyABKAhSCmRlcHJlY2F0ZWQSWgoIc2VjdXJpdHkYDCADKAsyPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVJlcXVpcmVtZW50UghzZWN1cml0eRJkCgpleHRlbnNpb25zGA0gAygLMkQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxJVCgpwYXJhbWV0ZXJzGA4gASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuUGFyYW1ldGVyc1IKcGFyYW1ldGVycxpxCg5SZXNwb25zZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRJJCgV2YWx1ZRgCIAEoCzIzLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlUgV2YWx1ZToCOAEaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAFKBAgIEAkiYgoKUGFyYW1ldGVycxJUCgdoZWFkZXJzGAEgAygLMjouZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUGFyYW1ldGVyUgdoZWFkZXJzIqMCCg9IZWFkZXJQYXJhbWV0ZXISEgoEbmFtZRgBIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SUwoEdHlwZRgDIAEoDjI/LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkhlYWRlclBhcmFtZXRlci5UeXBlUgR0eXBlEhYKBmZvcm1hdBgEIAEoCVIGZm9ybWF0EhoKCHJlcXVpcmVkGAUgASgIUghyZXF1aXJlZCJFCgRUeXBlEgsKB1VOS05PV04QABIKCgZTVFJJTkcQARIKCgZOVU1CRVIQAhILCgdJTlRFR0VSEAMSCwoHQk9PTEVBThAESgQIBhAHSgQIBxAIItgBCgZIZWFkZXISIAoLZGVzY3JpcHRpb24YASABKAlSC2Rlc2NyaXB0aW9uEhIKBHR5cGUYAiABKAlSBHR5cGUSFgoGZm9ybWF0GAMgASgJUgZmb3JtYXQSGAoHZGVmYXVsdBgGIAEoCVIHZGVmYXVsdBIYCgdwYXR0ZXJuGA0gASgJUgdwYXR0ZXJuSgQIBBAFSgQIBRAGSgQIBxAISgQICBAJSgQICRAKSgQIChALSgQICxAMSgQIDBANSgQIDhAPSgQIDxAQSgQIEBARSgQIERASSgQIEhATIpoFCghSZXNwb25zZRIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SSQoGc2NoZW1hGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NoZW1hUgZzY2hlbWESWgoHaGVhZGVycxgDIAMoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkhlYWRlcnNFbnRyeVIHaGVhZGVycxJdCghleGFtcGxlcxgEIAMoCzJBLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlJlc3BvbnNlLkV4YW1wbGVzRW50cnlSCGV4YW1wbGVzEmMKCmV4dGVuc2lvbnMYBSADKAsyQy5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5SZXNwb25zZS5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMabQoMSGVhZGVyc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EkcKBXZhbHVlGAIgASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSGVhZGVyUgV2YWx1ZToCOAEaOwoNRXhhbXBsZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgBGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBItYDCgRJbmZvEhQKBXRpdGxlGAEgASgJUgV0aXRsZRIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SKAoQdGVybXNfb2Zfc2VydmljZRgDIAEoCVIOdGVybXNPZlNlcnZpY2USTAoHY29udGFjdBgEIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkNvbnRhY3RSB2NvbnRhY3QSTAoHbGljZW5zZRgFIAEoCzIyLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkxpY2Vuc2VSB2xpY2Vuc2USGAoHdmVyc2lvbhgGIAEoCVIHdmVyc2lvbhJfCgpleHRlbnNpb25zGAcgAygLMj8uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSW5mby5FeHRlbnNpb25zRW50cnlSCmV4dGVuc2lvbnMaVQoPRXh0ZW5zaW9uc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEiRQoHQ29udGFjdBISCgRuYW1lGAEgASgJUgRuYW1lEhAKA3VybBgCIAEoCVIDdXJsEhQKBWVtYWlsGAMgASgJUgVlbWFpbCIvCgdMaWNlbnNlEhIKBG5hbWUYASABKAlSBG5hbWUSEAoDdXJsGAIgASgJUgN1cmwiSwoVRXh0ZXJuYWxEb2N1bWVudGF0aW9uEiAKC2Rlc2NyaXB0aW9uGAEgASgJUgtkZXNjcmlwdGlvbhIQCgN1cmwYAiABKAlSA3VybCKqAgoGU2NoZW1hElYKC2pzb25fc2NoZW1hGAEgASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIKanNvblNjaGVtYRIkCg1kaXNjcmltaW5hdG9yGAIgASgJUg1kaXNjcmltaW5hdG9yEhsKCXJlYWRfb25seRgDIAEoCFIIcmVhZE9ubHkSZQoNZXh0ZXJuYWxfZG9jcxgFIAEoCzJALmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkV4dGVybmFsRG9jdW1lbnRhdGlvblIMZXh0ZXJuYWxEb2NzEhgKB2V4YW1wbGUYBiABKAlSB2V4YW1wbGVKBAgEEAUi1woKCkpTT05TY2hlbWESEAoDcmVmGAMgASgJUgNyZWYSFAoFdGl0bGUYBSABKAlSBXRpdGxlEiAKC2Rlc2NyaXB0aW9uGAYgASgJUgtkZXNjcmlwdGlvbhIYCgdkZWZhdWx0GAcgASgJUgdkZWZhdWx0EhsKCXJlYWRfb25seRgIIAEoCFIIcmVhZE9ubHkSGAoHZXhhbXBsZRgJIAEoCVIHZXhhbXBsZRIfCgttdWx0aXBsZV9vZhgKIAEoAVIKbXVsdGlwbGVPZhIYCgdtYXhpbXVtGAsgASgBUgdtYXhpbXVtEisKEWV4Y2x1c2l2ZV9tYXhpbXVtGAwgASgIUhBleGNsdXNpdmVNYXhpbXVtEhgKB21pbmltdW0YDSABKAFSB21pbmltdW0SKwoRZXhjbHVzaXZlX21pbmltdW0YDiABKAhSEGV4Y2x1c2l2ZU1pbmltdW0SHQoKbWF4X2xlbmd0aBgPIAEoBFIJbWF4TGVuZ3RoEh0KCm1pbl9sZW5ndGgYECABKARSCW1pbkxlbmd0aBIYCgdwYXR0ZXJuGBEgASgJUgdwYXR0ZXJuEhsKCW1heF9pdGVtcxgUIAEoBFIIbWF4SXRlbXMSGwoJbWluX2l0ZW1zGBUgASgEUghtaW5JdGVtcxIhCgx1bmlxdWVfaXRlbXMYFiABKAhSC3VuaXF1ZUl0ZW1zEiUKDm1heF9wcm9wZXJ0aWVzGBggASgEUg1tYXhQcm9wZXJ0aWVzEiUKDm1pbl9wcm9wZXJ0aWVzGBkgASgEUg1taW5Qcm9wZXJ0aWVzEhoKCHJlcXVpcmVkGBogAygJUghyZXF1aXJlZBIUCgVhcnJheRgiIAMoCVIFYXJyYXkSXwoEdHlwZRgjIAMoDjJLLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLkpTT05TY2hlbWEuSlNPTlNjaGVtYVNpbXBsZVR5cGVzUgR0eXBlEhYKBmZvcm1hdBgkIAEoCVIGZm9ybWF0EhIKBGVudW0YLiADKAlSBGVudW0SegoTZmllbGRfY29uZmlndXJhdGlvbhjpByABKAsySC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkZpZWxkQ29uZmlndXJhdGlvblISZmllbGRDb25maWd1cmF0aW9uEmUKCmV4dGVuc2lvbnMYMCADKAsyRS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5KU09OU2NoZW1hLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxo8ChJGaWVsZENvbmZpZ3VyYXRpb24SJgoPcGF0aF9wYXJhbV9uYW1lGC8gASgJUg1wYXRoUGFyYW1OYW1lGlUKD0V4dGVuc2lvbnNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIFdmFsdWU6AjgBIncKFUpTT05TY2hlbWFTaW1wbGVUeXBlcxILCgdVTktOT1dOEAASCQoFQVJSQVkQARILCgdCT09MRUFOEAISCwoHSU5URUdFUhADEggKBE5VTEwQBBIKCgZOVU1CRVIQBRIKCgZPQkpFQ1QQBhIKCgZTVFJJTkcQB0oECAEQAkoECAIQA0oECAQQBUoECBIQE0oECBMQFEoECBcQGEoECBsQHEoECBwQHUoECB0QHkoECB4QIkoECCUQKkoECCoQK0oECCsQLiLZAgoDVGFnEhIKBG5hbWUYASABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEmUKDWV4dGVybmFsX2RvY3MYAyABKAsyQC5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5FeHRlcm5hbERvY3VtZW50YXRpb25SDGV4dGVybmFsRG9jcxJeCgpleHRlbnNpb25zGAQgAygLMj4uZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuVGFnLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASL3AQoTU2VjdXJpdHlEZWZpbml0aW9ucxJoCghzZWN1cml0eRgBIAMoCzJMLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5RGVmaW5pdGlvbnMuU2VjdXJpdHlFbnRyeVIIc2VjdXJpdHkadgoNU2VjdXJpdHlFbnRyeRIQCgNrZXkYASABKAlSA2tleRJPCgV2YWx1ZRgCIAEoCzI5LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lUgV2YWx1ZToCOAEi/wYKDlNlY3VyaXR5U2NoZW1lElIKBHR5cGUYASABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5UeXBlUgR0eXBlEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhISCgRuYW1lGAMgASgJUgRuYW1lEkwKAmluGAQgASgOMjwuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2VjdXJpdHlTY2hlbWUuSW5SAmluElIKBGZsb3cYBSABKA4yPi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TZWN1cml0eVNjaGVtZS5GbG93UgRmbG93EisKEWF1dGhvcml6YXRpb25fdXJsGAYgASgJUhBhdXRob3JpemF0aW9uVXJsEhsKCXRva2VuX3VybBgHIAEoCVIIdG9rZW5VcmwSSQoGc2NvcGVzGAggASgLMjEuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuU2NvcGVzUgZzY29wZXMSaQoKZXh0ZW5zaW9ucxgJIAMoCzJJLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5U2NoZW1lLkV4dGVuc2lvbnNFbnRyeVIKZXh0ZW5zaW9ucxpVCg9FeHRlbnNpb25zRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASJLCgRUeXBlEhAKDFRZUEVfSU5WQUxJRBAAEg4KClRZUEVfQkFTSUMQARIQCgxUWVBFX0FQSV9LRVkQAhIPCgtUWVBFX09BVVRIMhADIjEKAkluEg4KCklOX0lOVkFMSUQQABIMCghJTl9RVUVSWRABEg0KCUlOX0hFQURFUhACImoKBEZsb3cSEAoMRkxPV19JTlZBTElEEAASEQoNRkxPV19JTVBMSUNJVBABEhEKDUZMT1dfUEFTU1dPUkQQAhIUChBGTE9XX0FQUExJQ0FUSU9OEAMSFAoQRkxPV19BQ0NFU1NfQ09ERRAEIvYCChNTZWN1cml0eVJlcXVpcmVtZW50EooBChRzZWN1cml0eV9yZXF1aXJlbWVudBgBIAMoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudEVudHJ5UhNzZWN1cml0eVJlcXVpcmVtZW50GjAKGFNlY3VyaXR5UmVxdWlyZW1lbnRWYWx1ZRIUCgVzY29wZRgBIAMoCVIFc2NvcGUanwEKGFNlY3VyaXR5UmVxdWlyZW1lbnRFbnRyeRIQCgNrZXkYASABKAlSA2tleRJtCgV2YWx1ZRgCIAEoCzJXLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNlY3VyaXR5UmVxdWlyZW1lbnQuU2VjdXJpdHlSZXF1aXJlbWVudFZhbHVlUgV2YWx1ZToCOAEilgEKBlNjb3BlcxJSCgVzY29wZRgBIAMoCzI8LmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlNjb3Blcy5TY29wZUVudHJ5UgVzY29wZRo4CgpTY29wZUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEqOwoGU2NoZW1lEgsKB1VOS05PV04QABIICgRIVFRQEAESCQoFSFRUUFMQAhIGCgJXUxADEgcKA1dTUxAEQkhaRmdpdGh1Yi5jb20vZ3JwYy1lY29zeXN0ZW0vZ3JwYy1nYXRld2F5L3YyL3Byb3RvYy1nZW4tb3BlbmFwaXYyL29wdGlvbnNiBnByb3RvMwr9BgoucHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9ucy9hbm5vdGF0aW9ucy5wcm90bxIpZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMaIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvGixwcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL29wZW5hcGl2Mi5wcm90bzp+ChFvcGVuYXBpdjJfc3dhZ2dlchIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiSCCABKAsyMi5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5Td2FnZ2VyUhBvcGVuYXBpdjJTd2FnZ2VyOoYBChNvcGVuYXBpdjJfb3BlcmF0aW9uEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYkgggASgLMjQuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuT3BlcmF0aW9uUhJvcGVuYXBpdjJPcGVyYXRpb246fgoQb3BlbmFwaXYyX3NjaGVtYRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiSCCABKAsyMS5ncnBjLmdhdGV3YXkucHJvdG9jX2dlbl9vcGVuYXBpdjIub3B0aW9ucy5TY2hlbWFSD29wZW5hcGl2MlNjaGVtYTp1Cg1vcGVuYXBpdjJfdGFnEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJIIIAEoCzIuLmdycGMuZ2F0ZXdheS5wcm90b2NfZ2VuX29wZW5hcGl2Mi5vcHRpb25zLlRhZ1IMb3BlbmFwaXYyVGFnOn4KD29wZW5hcGl2Ml9maWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYkgggASgLMjUuZ3JwYy5nYXRld2F5LnByb3RvY19nZW5fb3BlbmFwaXYyLm9wdGlvbnMuSlNPTlNjaGVtYVIOb3BlbmFwaXYyRmllbGRCSFpGZ2l0aHViLmNvbS9ncnBjLWVjb3N5c3RlbS9ncnBjLWdhdGV3YXkvdjIvcHJvdG9jLWdlbi1vcGVuYXBpdjIvb3B0aW9uc2IGcHJvdG8zCueyAQobcHJvdG8vYWNjb3VudC9zZXJ2aWNlLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudBoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvGi5wcm90b2MtZ2VuLW9wZW5hcGl2Mi9vcHRpb25zL2Fubm90YXRpb25zLnByb3RvGhtwcm90by9hY2NvdW50L2FjY291bnQucHJvdG8aG3Byb3RvL2FjY291bnQvYXBpX2tleS5wcm90bxobcHJvdG8vYWNjb3VudC9jb21tYW5kLnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8iNwoMR2V0TWVSZXF1ZXN0EicKD29yZ2FuaXphdGlvbl9pZBgBIAEoCVIOb3JnYW5pemF0aW9uSWQiTAoNR2V0TWVSZXNwb25zZRI7CgdhY2NvdW50GAEgASgLMiEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnRSB2FjY291bnQiGwoZR2V0TXlPcmdhbml6YXRpb25zUmVxdWVzdCI4CiBHZXRNeU9yZ2FuaXphdGlvbnNCeUVtYWlsUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwiZwoaR2V0TXlPcmdhbml6YXRpb25zUmVzcG9uc2USSQoNb3JnYW5pemF0aW9ucxgBIAMoCzIjLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Pcmdhbml6YXRpb25SDW9yZ2FuaXphdGlvbnMi7gMKFkNyZWF0ZUFjY291bnRWMlJlcXVlc3QSJwoPb3JnYW5pemF0aW9uX2lkGAEgASgJUg5vcmdhbml6YXRpb25JZBJHCgdjb21tYW5kGAIgASgLMikuYnVja2V0ZWVyLmFjY291bnQuQ3JlYXRlQWNjb3VudFYyQ29tbWFuZEICGAFSB2NvbW1hbmQSFAoFZW1haWwYAyABKAlSBWVtYWlsEhIKBG5hbWUYBCABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgFIAEoCVIOYXZhdGFySW1hZ2VVcmwSWwoRb3JnYW5pemF0aW9uX3JvbGUYBiABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SEG9yZ2FuaXphdGlvblJvbGUSWQoRZW52aXJvbm1lbnRfcm9sZXMYByADKAsyLC5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEh0KCmZpcnN0X25hbWUYCCABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCSABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAogASgJUghsYW5ndWFnZSJRChdDcmVhdGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqABChZFbmFibGVBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEkcKB2NvbW1hbmQYAyABKAsyKS5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBY2NvdW50VjJDb21tYW5kQgIYAVIHY29tbWFuZCJRChdFbmFibGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqIBChdEaXNhYmxlQWNjb3VudFYyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBJICgdjb21tYW5kGAMgASgLMiouYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFjY291bnRWMkNvbW1hbmRCAhgBUgdjb21tYW5kIlIKGERpc2FibGVBY2NvdW50VjJSZXNwb25zZRI2CgdhY2NvdW50GAEgASgLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUgdhY2NvdW50IqABChZEZWxldGVBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEkcKB2NvbW1hbmQYAyABKAsyKS5idWNrZXRlZXIuYWNjb3VudC5EZWxldGVBY2NvdW50VjJDb21tYW5kQgIYAVIHY29tbWFuZCIZChdEZWxldGVBY2NvdW50VjJSZXNwb25zZSKuDwoWVXBkYXRlQWNjb3VudFYyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBJhChNjaGFuZ2VfbmFtZV9jb21tYW5kGAMgASgLMi0uYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyTmFtZUNvbW1hbmRCAhgBUhFjaGFuZ2VOYW1lQ29tbWFuZBJ2ChljaGFuZ2VfYXZhdGFyX3VybF9jb21tYW5kGAQgASgLMjcuYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyQXZhdGFySW1hZ2VVcmxDb21tYW5kQgIYAVIWY2hhbmdlQXZhdGFyVXJsQ29tbWFuZBKGAQogY2hhbmdlX29yZ2FuaXphdGlvbl9yb2xlX2NvbW1hbmQYBSABKAsyOS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBY2NvdW50VjJPcmdhbml6YXRpb25Sb2xlQ29tbWFuZEICGAFSHWNoYW5nZU9yZ2FuaXphdGlvblJvbGVDb21tYW5kEoYBCiBjaGFuZ2VfZW52aXJvbm1lbnRfcm9sZXNfY29tbWFuZBgGIAEoCzI5LmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDb21tYW5kQgIYAVIdY2hhbmdlRW52aXJvbm1lbnRSb2xlc0NvbW1hbmQScQoZY2hhbmdlX2ZpcnN0X25hbWVfY29tbWFuZBgHIAEoCzIyLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkZpcnN0TmFtZUNvbW1hbmRCAhgBUhZjaGFuZ2VGaXJzdE5hbWVDb21tYW5kEm4KGGNoYW5nZV9sYXN0X25hbWVfY29tbWFuZBgIIAEoCzIxLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkxhc3ROYW1lQ29tbWFuZEICGAFSFWNoYW5nZUxhc3ROYW1lQ29tbWFuZBJtChdjaGFuZ2VfbGFuZ3VhZ2VfY29tbWFuZBgJIAEoCzIxLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFjY291bnRWMkxhbmd1YWdlQ29tbWFuZEICGAFSFWNoYW5nZUxhbmd1YWdlQ29tbWFuZBJuChhjaGFuZ2VfbGFzdF9zZWVuX2NvbW1hbmQYCiABKAsyMS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBY2NvdW50VjJMYXN0U2VlbkNvbW1hbmRCAhgBUhVjaGFuZ2VMYXN0U2VlbkNvbW1hbmQSZwoVY2hhbmdlX2F2YXRhcl9jb21tYW5kGAsgASgLMi8uYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQWNjb3VudFYyQXZhdGFyQ29tbWFuZEICGAFSE2NoYW5nZUF2YXRhckNvbW1hbmQSMAoEbmFtZRgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRJGChBhdmF0YXJfaW1hZ2VfdXJsGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUg5hdmF0YXJJbWFnZVVybBJsChFvcmdhbml6YXRpb25fcm9sZRgOIAEoCzI/LmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZUFjY291bnRWMlJlcXVlc3QuT3JnYW5pemF0aW9uUm9sZVZhbHVlUhBvcmdhbml6YXRpb25Sb2xlElkKEWVudmlyb25tZW50X3JvbGVzGA8gAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIQZW52aXJvbm1lbnRSb2xlcxI7CgpmaXJzdF9uYW1lGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUglmaXJzdE5hbWUSOQoJbGFzdF9uYW1lGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUghsYXN0TmFtZRI4CghsYW5ndWFnZRgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIIbGFuZ3VhZ2USOAoJbGFzdF9zZWVuGBMgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVSCGxhc3RTZWVuElEKBmF2YXRhchgUIAEoCzI5LmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZUFjY291bnRWMlJlcXVlc3QuQWNjb3VudFYyQXZhdGFyUgZhdmF0YXIaXgoPQWNjb3VudFYyQXZhdGFyEiEKDGF2YXRhcl9pbWFnZRgBIAEoDFILYXZhdGFySW1hZ2USKAoQYXZhdGFyX2ZpbGVfdHlwZRgCIAEoCVIOYXZhdGFyRmlsZVR5cGUaWwoVT3JnYW5pemF0aW9uUm9sZVZhbHVlEkIKBHJvbGUYASABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SBHJvbGUiUQoXVXBkYXRlQWNjb3VudFYyUmVzcG9uc2USNgoHYWNjb3VudBgBIAEoCzIcLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMlIHYWNjb3VudCJUChNHZXRBY2NvdW50VjJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkIk4KFEdldEFjY291bnRWMlJlc3BvbnNlEjYKB2FjY291bnQYASABKAsyHC5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjJSB2FjY291bnQiYQoiR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJQoOZW52aXJvbm1lbnRfaWQYAiABKAlSDWVudmlyb25tZW50SWQiXQojR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVzcG9uc2USNgoHYWNjb3VudBgBIAEoCzIcLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMlIHYWNjb3VudCLwBQoVTGlzdEFjY291bnRzVjJSZXF1ZXN0EhsKCXBhZ2Vfc2l6ZRgBIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISJwoPb3JnYW5pemF0aW9uX2lkGAMgASgJUg5vcmdhbml6YXRpb25JZBJLCghvcmRlcl9ieRgEIAEoDjIwLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmAKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI3LmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSNgoIZGlzYWJsZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghkaXNhYmxlZBJIChFvcmdhbml6YXRpb25fcm9sZRgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUhBvcmdhbml6YXRpb25Sb2xlEkMKDmVudmlyb25tZW50X2lkGAkgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUg1lbnZpcm9ubWVudElkEkYKEGVudmlyb25tZW50X3JvbGUYCiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIPZW52aXJvbm1lbnRSb2xlIm8KB09yZGVyQnkSCwoHREVGQVVMVBAAEgkKBUVNQUlMEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAxIVChFPUkdBTklaQVRJT05fUk9MRRAEEhUKEUVOVklST05NRU5UX0NPVU5UEAUiIwoOT3JkZXJEaXJlY3Rpb24SBwoDQVNDEAASCAoEREVTQxABIosBChZMaXN0QWNjb3VudHNWMlJlc3BvbnNlEjgKCGFjY291bnRzGAEgAygLMhwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyUghhY2NvdW50cxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCKEAQoTQ3JlYXRlQVBJS2V5UmVxdWVzdBJACgdjb21tYW5kGAEgASgLMiYuYnVja2V0ZWVyLmFjY291bnQuQ3JlYXRlQVBJS2V5Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZEoECAIQAyJKChRDcmVhdGVBUElLZXlSZXNwb25zZRIyCgdhcGlfa2V5GAEgASgLMhkuYnVja2V0ZWVyLmFjY291bnQuQVBJS2V5UgZhcGlLZXkinAEKF0NoYW5nZUFQSUtleU5hbWVSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJECgdjb21tYW5kGAIgASgLMiouYnVja2V0ZWVyLmFjY291bnQuQ2hhbmdlQVBJS2V5TmFtZUNvbW1hbmRSB2NvbW1hbmQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiGgoYQ2hhbmdlQVBJS2V5TmFtZVJlc3BvbnNlIpQBChNFbmFibGVBUElLZXlSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZBJACgdjb21tYW5kGAIgASgLMiYuYnVja2V0ZWVyLmFjY291bnQuRW5hYmxlQVBJS2V5Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIWChRFbmFibGVBUElLZXlSZXNwb25zZSKWAQoURGlzYWJsZUFQSUtleVJlcXVlc3QSDgoCaWQYASABKAlSAmlkEkEKB2NvbW1hbmQYAiABKAsyJy5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQVBJS2V5Q29tbWFuZFIHY29tbWFuZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCIXChVEaXNhYmxlQVBJS2V5UmVzcG9uc2UiTwoQR2V0QVBJS2V5UmVxdWVzdBIOCgJpZBgBIAEoCVICaWQSJQoOZW52aXJvbm1lbnRfaWQYAyABKAlSDWVudmlyb25tZW50SWRKBAgCEAMiRwoRR2V0QVBJS2V5UmVzcG9uc2USMgoHYXBpX2tleRgBIAEoCzIZLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleVIGYXBpS2V5IuUDChJMaXN0QVBJS2V5c1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJICghvcmRlcl9ieRgEIAEoDjItLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5El0KD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI0LmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSNgoIZGlzYWJsZWQYByABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUghkaXNhYmxlZBIlCg5lbnZpcm9ubWVudF9pZBgIIAEoCVINZW52aXJvbm1lbnRJZCJACgdPcmRlckJ5EgsKB0RFRkFVTFQQABIICgROQU1FEAESDgoKQ1JFQVRFRF9BVBACEg4KClVQREFURURfQVQQAyIjCg5PcmRlckRpcmVjdGlvbhIHCgNBU0MQABIICgRERVNDEAFKBAgDEAQihAEKE0xpc3RBUElLZXlzUmVzcG9uc2USNAoIYXBpX2tleXMYASADKAsyGS5idWNrZXRlZXIuYWNjb3VudC5BUElLZXlSB2FwaUtleXMSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQiPAoqR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXF1ZXN0Eg4KAmlkGAEgASgJUgJpZCKDAQorR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXNwb25zZRJUChNlbnZpcm9ubWVudF9hcGlfa2V5GAEgASgLMiQuYnVja2V0ZWVyLmFjY291bnQuRW52aXJvbm1lbnRBUElLZXlSEWVudmlyb25tZW50QXBpS2V5IskBChlDcmVhdGVTZWFyY2hGaWx0ZXJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkEkYKB2NvbW1hbmQYBCABKAsyLC5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVTZWFyY2hGaWx0ZXJDb21tYW5kUgdjb21tYW5kIhwKGkNyZWF0ZVNlYXJjaEZpbHRlclJlc3BvbnNlIsADChlVcGRhdGVTZWFyY2hGaWx0ZXJSZXF1ZXN0EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkEiUKDmVudmlyb25tZW50X2lkGAMgASgJUg1lbnZpcm9ubWVudElkEmAKE2NoYW5nZV9uYW1lX2NvbW1hbmQYBCABKAsyMC5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VTZWFyY2hGaWx0ZXJOYW1lQ29tbWFuZFIRY2hhbmdlTmFtZUNvbW1hbmQSYwoUY2hhbmdlX3F1ZXJ5X2NvbW1hbmQYBSABKAsyMS5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VTZWFyY2hGaWx0ZXJRdWVyeUNvbW1hbmRSEmNoYW5nZVF1ZXJ5Q29tbWFuZBJ2Ch1jaGFuZ2VfZGVmYXVsdF9maWx0ZXJfY29tbWFuZBgGIAEoCzIzLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZURlZmF1bHRTZWFyY2hGaWx0ZXJDb21tYW5kUhpjaGFuZ2VEZWZhdWx0RmlsdGVyQ29tbWFuZCIcChpVcGRhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLJAQoZRGVsZXRlU2VhcmNoRmlsdGVyUmVxdWVzdBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZBIlCg5lbnZpcm9ubWVudF9pZBgDIAEoCVINZW52aXJvbm1lbnRJZBJGCgdjb21tYW5kGAQgASgLMiwuYnVja2V0ZWVyLmFjY291bnQuRGVsZXRlU2VhcmNoRmlsdGVyQ29tbWFuZFIHY29tbWFuZCIcChpEZWxldGVTZWFyY2hGaWx0ZXJSZXNwb25zZTL4dAoOQWNjb3VudFNlcnZpY2USoQQKBUdldE1lEh8uYnVja2V0ZWVyLmFjY291bnQuR2V0TWVSZXF1ZXN0GiAuYnVja2V0ZWVyLmFjY291bnQuR2V0TWVSZXNwb25zZSLUA5JBswMKB0FjY291bnQSBkdldCBNZRodR2V0IHRoZSB1c2VyIGNvbnNvbGUgYWNjb3VudC4qFXdlYi52MS5hY2NvdW50LmdldF9tZUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhciEi92MS9hY2NvdW50L2dldF9tZToBKhL7BAoSR2V0TXlPcmdhbml6YXRpb25zEiwuYnVja2V0ZWVyLmFjY291bnQuR2V0TXlPcmdhbml6YXRpb25zUmVxdWVzdBotLmJ1Y2tldGVlci5hY2NvdW50LkdldE15T3JnYW5pemF0aW9uc1Jlc3BvbnNlIocEkkHcAwoHQWNjb3VudBIUR2V0IE15IE9yZ2FuaXphdGlvbnMaLkdldCBhbGwgdGhlIG9yZ2FuaXphdGlvbnMgZm9yIGEgc3BlY2lmaWMgdXNlci4qH3dlYi52MS5hY2NvdW50Lm15X29yZ2FuaXphdGlvbnNKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIhIhwvdjEvYWNjb3VudC9teV9vcmdhbml6YXRpb25zOgEqEpkFChlHZXRNeU9yZ2FuaXphdGlvbnNCeUVtYWlsEjMuYnVja2V0ZWVyLmFjY291bnQuR2V0TXlPcmdhbml6YXRpb25zQnlFbWFpbFJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5HZXRNeU9yZ2FuaXphdGlvbnNSZXNwb25zZSKXBJJB4wMKB0FjY291bnQSHUdldCBNeSBPcmdhbml6YXRpb25zIEJ5IEVtYWlsGiNHZXQgYWxsIHRoZSBvcmdhbml6YXRpb25zIGJ5IGVtYWlsLiood2ViLnYxLmFjY291bnQubXlfb3JnYW5pemF0aW9uc19ieV9lbWFpbEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAioiJS92MS9hY2NvdW50L215X29yZ2FuaXphdGlvbnNfYnlfZW1haWw6ASoSugYKD0NyZWF0ZUFjY291bnRWMhIpLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZUFjY291bnRWMlJlcXVlc3QaKi5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVBY2NvdW50VjJSZXNwb25zZSLPBZJBpgUKB0FjY291bnQSBkNyZWF0ZRpcQ3JlYXRlIGFuIGFjY291bnQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHXdlYi52MS5hY2NvdW50LmNyZWF0ZV9hY2NvdW50SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2NyZWF0ZV9hY2NvdW50OgEqEs4DCg9FbmFibGVBY2NvdW50VjISKS5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBY2NvdW50VjJSZXF1ZXN0GiouYnVja2V0ZWVyLmFjY291bnQuRW5hYmxlQWNjb3VudFYyUmVzcG9uc2Ui4wKSQboCCgdBY2NvdW50EgZFbmFibGUaXEVuYWJsZSBhbiBhY2NvdW50IHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh13ZWIudjEuYWNjb3VudC5lbmFibGVfYWNjb3VudEqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2VuYWJsZV9hY2NvdW50OgEqEsIGChBEaXNhYmxlQWNjb3VudFYyEiouYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFjY291bnRWMlJlcXVlc3QaKy5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQWNjb3VudFYyUmVzcG9uc2Ui1AWSQaoFCgdBY2NvdW50EgdEaXNhYmxlGl5EaXNhYmxlIGFuIGFjY291bnQgdG8gYmxvY2sgYWNjZXNzIHRvIHRoZSBjb25zb2xlLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh53ZWIudjEuYWNjb3VudC5kaXNhYmxlX2FjY291bnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCICIbL3YxL2FjY291bnQvZGlzYWJsZV9hY2NvdW50OgEqEpwGCg9VcGRhdGVBY2NvdW50VjISKS5idWNrZXRlZXIuYWNjb3VudC5VcGRhdGVBY2NvdW50VjJSZXF1ZXN0GiouYnVja2V0ZWVyLmFjY291bnQuVXBkYXRlQWNjb3VudFYyUmVzcG9uc2UisQWSQYgFCgdBY2NvdW50EgZVcGRhdGUaPlVwZGF0ZSBhbiBhY2NvdW50LiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKh13ZWIudjEuYWNjb3VudC51cGRhdGVfYWNjb3VudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIfIhovdjEvYWNjb3VudC91cGRhdGVfYWNjb3VudDoBKhKcBgoPRGVsZXRlQWNjb3VudFYyEikuYnVja2V0ZWVyLmFjY291bnQuRGVsZXRlQWNjb3VudFYyUmVxdWVzdBoqLmJ1Y2tldGVlci5hY2NvdW50LkRlbGV0ZUFjY291bnRWMlJlc3BvbnNlIrEFkkGIBQoHQWNjb3VudBIGRGVsZXRlGj5EZWxldGUgYW4gYWNjb3VudC4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYEFETUlOYCByb2xlLiodd2ViLnYxLmFjY291bnQuZGVsZXRlX2FjY291bnRKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCHyIaL3YxL2FjY291bnQvZGVsZXRlX2FjY291bnQ6ASoSrwQKDEdldEFjY291bnRWMhImLmJ1Y2tldGVlci5hY2NvdW50LkdldEFjY291bnRWMlJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5HZXRBY2NvdW50VjJSZXNwb25zZSLNA5JBpwMKB0FjY291bnQSA0dldBoPR2V0IGFuIGFjY291bnQuKhp3ZWIudjEuYWNjb3VudC5nZXRfYWNjb3VudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhwiFy92MS9hY2NvdW50L2dldF9hY2NvdW50OgEqEqAFChtHZXRBY2NvdW50VjJCeUVudmlyb25tZW50SUQSNS5idWNrZXRlZXIuYWNjb3VudC5HZXRBY2NvdW50VjJCeUVudmlyb25tZW50SURSZXF1ZXN0GjYuYnVja2V0ZWVyLmFjY291bnQuR2V0QWNjb3VudFYyQnlFbnZpcm9ubWVudElEUmVzcG9uc2UikQSSQdwDCgdBY2NvdW50EhpHZXQgQWNjb3VudCBCeSBFbnZpcm9ubWVudBoeR2V0IGFuIGFjY291bnQgYnkgZW52aXJvbm1lbnQuKil3ZWIudjEuYWNjb3VudC5nZXRfYWNjb3VudF9ieV9lbnZpcm9ubWVudEq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAisiJi92MS9hY2NvdW50L2dldF9hY2NvdW50X2J5X2Vudmlyb25tZW50OgEqErkECg5MaXN0QWNjb3VudHNWMhIoLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVxdWVzdBopLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBY2NvdW50c1YyUmVzcG9uc2Ui0QOSQakDCgdBY2NvdW50EgRMaXN0Gg5MaXN0IGFjY291bnRzLiocd2ViLnYxLmFjY291bnQubGlzdF9hY2NvdW50c0q0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh4iGS92MS9hY2NvdW50L2xpc3RfYWNjb3VudHM6ASoSsAYKDENyZWF0ZUFQSUtleRImLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZUFQSUtleVJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVBUElLZXlSZXNwb25zZSLOBZJBpQUKB0FQSSBLZXkSBkNyZWF0ZRpbQ3JlYXRlIGFuIEFQSSBrZXkgdG8gYmUgdXNlZCBvbiB0aGUgY2xpZW50IFNESy4gVG8gY2FsbCB0aGlzIEFQSSwgeW91IG5lZWQgYW4gYEFETUlOYCByb2xlLiodd2ViLnYxLmFjY291bnQuY3JlYXRlX2FwaV9rZXlKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCHyIaL3YxL2FjY291bnQvY3JlYXRlX2FwaV9rZXk6ASoSvAYKEENoYW5nZUFQSUtleU5hbWUSKi5idWNrZXRlZXIuYWNjb3VudC5DaGFuZ2VBUElLZXlOYW1lUmVxdWVzdBorLmJ1Y2tldGVlci5hY2NvdW50LkNoYW5nZUFQSUtleU5hbWVSZXNwb25zZSLOBZJBoAUKB0FQSSBLZXkSE0NoYW5nZSBBUEkgS2V5IE5hbWUaRENoYW5nZSB0aGUgQVBJIEtleSBOYW1lLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgQURNSU5gIHJvbGUuKiJ3ZWIudjEuYWNjb3VudC5jaGFuZ2VfYXBpX2tleV9uYW1lSrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAiQiHy92MS9hY2NvdW50L2NoYW5nZV9hcGlfa2V5X25hbWU6ASoSkwYKDEVuYWJsZUFQSUtleRImLmJ1Y2tldGVlci5hY2NvdW50LkVuYWJsZUFQSUtleVJlcXVlc3QaJy5idWNrZXRlZXIuYWNjb3VudC5FbmFibGVBUElLZXlSZXNwb25zZSKxBZJBiAUKB0FQSSBLZXkSBkVuYWJsZRo+RW5hYmxlIGFuIEFQSSBLZXkuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHXdlYi52MS5hY2NvdW50LmVuYWJsZV9hcGlfa2V5SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfUqpAQoDNDAzEqEBCjhSZXF1ZXN0IGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHJlc291cmNlLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJNChBhcHBsaWNhdGlvbi9qc29uEjl7ICJjb2RlIjogNywgIm1lc3NhZ2UiOiAibm90IGF1dGhvcml6ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh8iGi92MS9hY2NvdW50L2VuYWJsZV9hcGlfa2V5OgEqEpoGCg1EaXNhYmxlQVBJS2V5EicuYnVja2V0ZWVyLmFjY291bnQuRGlzYWJsZUFQSUtleVJlcXVlc3QaKC5idWNrZXRlZXIuYWNjb3VudC5EaXNhYmxlQVBJS2V5UmVzcG9uc2UitQWSQYsFCgdBUEkgS2V5EgdEaXNhYmxlGj9EaXNhYmxlIGFuIEFQSSBLZXkuIFRvIGNhbGwgdGhpcyBBUEksIHlvdSBuZWVkIGFuIGBBRE1JTmAgcm9sZS4qHndlYi52MS5hY2NvdW50LmRpc2FibGVfYXBpX2tleUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH1KqQEKAzQwMxKhAQo4UmVxdWVzdCBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSByZXNvdXJjZS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiTQoQYXBwbGljYXRpb24vanNvbhI5eyAiY29kZSI6IDcsICJtZXNzYWdlIjogIm5vdCBhdXRob3JpemVkIiwgImRldGFpbHMiOiBbXSB9gtPkkwIgIhsvdjEvYWNjb3VudC9kaXNhYmxlX2FwaV9rZXk6ASoSpgQKCUdldEFQSUtleRIjLmJ1Y2tldGVlci5hY2NvdW50LkdldEFQSUtleVJlcXVlc3QaJC5idWNrZXRlZXIuYWNjb3VudC5HZXRBUElLZXlSZXNwb25zZSLNA5JBpwMKB0FQSSBLZXkSA0dldBoPR2V0IGFuIEFQSSBLZXkuKhp3ZWIudjEuYWNjb3VudC5nZXRfYXBpX2tleUq0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAhwiFy92MS9hY2NvdW50L2dldF9hcGlfa2V5OgEqErAECgtMaXN0QVBJS2V5cxIlLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVxdWVzdBomLmJ1Y2tldGVlci5hY2NvdW50Lkxpc3RBUElLZXlzUmVzcG9uc2Ui0QOSQakDCgdBUEkgS2V5EgRMaXN0Gg5MaXN0IEFQSSBLZXlzLiocd2ViLnYxLmFjY291bnQubGlzdF9hcGlfa2V5c0q0AQoDNDAwEqwBCjpSZXR1cm5lZCBmb3IgYmFkIHJlcXVlc3RzIHRoYXQgbWF5IGhhdmUgZmFpbGVkIHZhbGlkYXRpb24uEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlYKEGFwcGxpY2F0aW9uL2pzb24SQnsgImNvZGUiOiAzLCAibWVzc2FnZSI6ICJpbnZhbGlkIGFyZ3VtZW50cyBlcnJvciIsICJkZXRhaWxzIjogW10gfUqyAQoDNDAxEqoBCj1SZXF1ZXN0IGNvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkIChhdXRoZW50aWNhdGlvbiByZXF1aXJlZCkuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIlEKEGFwcGxpY2F0aW9uL2pzb24SPXsgImNvZGUiOiAxNiwgIm1lc3NhZ2UiOiAibm90IGF1dGhlbnRpY2F0ZWQiLCAiZGV0YWlscyI6IFtdIH2C0+STAh4iGS92MS9hY2NvdW50L2xpc3RfYXBpX2tleXM6ASoSrAUKI0dldEFQSUtleUJ5U2VhcmNoaW5nQWxsRW52aXJvbm1lbnRzEj0uYnVja2V0ZWVyLmFjY291bnQuR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXF1ZXN0Gj4uYnVja2V0ZWVyLmFjY291bnQuR2V0QVBJS2V5QnlTZWFyY2hpbmdBbGxFbnZpcm9ubWVudHNSZXNwb25zZSKFBJJB0wMKB0FQSSBLZXkSF0dldCBFbnZpcm9ubWVudCBBUEkgS2V5GhtHZXQgYW4gZW52aXJvbm1lbnQgQVBJIEtleS4qJndlYi52MS5hY2NvdW50LmdldF9lbnZpcm9ubWVudF9hcGlfa2V5SrQBCgM0MDASrAEKOlJldHVybmVkIGZvciBiYWQgcmVxdWVzdHMgdGhhdCBtYXkgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiVgoQYXBwbGljYXRpb24vanNvbhJCeyAiY29kZSI6IDMsICJtZXNzYWdlIjogImludmFsaWQgYXJndW1lbnRzIGVycm9yIiwgImRldGFpbHMiOiBbXSB9SrIBCgM0MDESqgEKPVJlcXVlc3QgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKS4SFgoUGhIuZ29vZ2xlLnJwYy5TdGF0dXMiUQoQYXBwbGljYXRpb24vanNvbhI9eyAiY29kZSI6IDE2LCAibWVzc2FnZSI6ICJub3QgYXV0aGVudGljYXRlZCIsICJkZXRhaWxzIjogW10gfYLT5JMCKCIjL3YxL2FjY291bnQvZ2V0X2Vudmlyb25tZW50X2FwaV9rZXk6ASoSxQYKEkNyZWF0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LkNyZWF0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5DcmVhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFENyZWF0ZSBTZWFyY2ggRmlsdGVyGkRDcmVhdGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQuY3JlYXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvY3JlYXRlX3NlYXJjaF9maWx0ZXI6ASoSxQYKElVwZGF0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LlVwZGF0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5VcGRhdGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFFVwZGF0ZSBTZWFyY2ggRmlsdGVyGkRVcGRhdGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQudXBkYXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvdXBkYXRlX3NlYXJjaF9maWx0ZXI6ASoSxQYKEkRlbGV0ZVNlYXJjaEZpbHRlchIsLmJ1Y2tldGVlci5hY2NvdW50LkRlbGV0ZVNlYXJjaEZpbHRlclJlcXVlc3QaLS5idWNrZXRlZXIuYWNjb3VudC5EZWxldGVTZWFyY2hGaWx0ZXJSZXNwb25zZSLRBZJBogUKB0FjY291bnQSFERlbGV0ZSBTZWFyY2ggRmlsdGVyGkREZWxldGUgYSBzZWFyY2ggZmlsdGVyLiBUbyBjYWxsIHRoaXMgQVBJLCB5b3UgbmVlZCBhbiBgVklFV0VSYCByb2xlLiojd2ViLnYxLmFjY291bnQuZGVsZXRlX3NlYXJjaF9maWx0ZXJKtAEKAzQwMBKsAQo6UmV0dXJuZWQgZm9yIGJhZCByZXF1ZXN0cyB0aGF0IG1heSBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJWChBhcHBsaWNhdGlvbi9qc29uEkJ7ICJjb2RlIjogMywgIm1lc3NhZ2UiOiAiaW52YWxpZCBhcmd1bWVudHMgZXJyb3IiLCAiZGV0YWlscyI6IFtdIH1KsgEKAzQwMRKqAQo9UmVxdWVzdCBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLhIWChQaEi5nb29nbGUucnBjLlN0YXR1cyJRChBhcHBsaWNhdGlvbi9qc29uEj17ICJjb2RlIjogMTYsICJtZXNzYWdlIjogIm5vdCBhdXRoZW50aWNhdGVkIiwgImRldGFpbHMiOiBbXSB9SqkBCgM0MDMSoQEKOFJlcXVlc3QgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UuEhYKFBoSLmdvb2dsZS5ycGMuU3RhdHVzIk0KEGFwcGxpY2F0aW9uL2pzb24SOXsgImNvZGUiOiA3LCAibWVzc2FnZSI6ICJub3QgYXV0aG9yaXplZCIsICJkZXRhaWxzIjogW10gfYLT5JMCJSIgL3YxL2FjY291bnQvZGVsZXRlX3NlYXJjaF9maWx0ZXI6ASpCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMw== experimentcalculatorDescriptor: CtYBCh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiZwoJVmFyaWF0aW9uEg4KAmlkGAEgASgJUgJpZBIUCgV2YWx1ZRgCIAEoCVIFdmFsdWUSEgoEbmFtZRgDIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb25CMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwq8BwohcHJvdG8vZXhwZXJpbWVudC9leHBlcmltZW50LnByb3RvEhRidWNrZXRlZXIuZXhwZXJpbWVudBodcHJvdG8vZmVhdHVyZS92YXJpYXRpb24ucHJvdG8i0AUKCkV4cGVyaW1lbnQSDgoCaWQYASABKAlSAmlkEhsKB2dvYWxfaWQYAiABKAlCAhgBUgZnb2FsSWQSHQoKZmVhdHVyZV9pZBgDIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgEIAEoBVIOZmVhdHVyZVZlcnNpb24SPAoKdmFyaWF0aW9ucxgFIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIZCghzdGFydF9hdBgGIAEoA1IHc3RhcnRBdBIXCgdzdG9wX2F0GAcgASgDUgZzdG9wQXQSHAoHc3RvcHBlZBgIIAEoCEICGAFSB3N0b3BwZWQSIQoKc3RvcHBlZF9hdBgJIAEoA0ICMAFSCXN0b3BwZWRBdBIdCgpjcmVhdGVkX2F0GAogASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgLIAEoA1IJdXBkYXRlZEF0EhgKB2RlbGV0ZWQYDCABKAhSB2RlbGV0ZWQSGQoIZ29hbF9pZHMYDSADKAlSB2dvYWxJZHMSEgoEbmFtZRgOIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgPIAEoCVILZGVzY3JpcHRpb24SKgoRYmFzZV92YXJpYXRpb25faWQYECABKAlSD2Jhc2VWYXJpYXRpb25JZBI/CgZzdGF0dXMYEiABKA4yJy5idWNrZXRlZXIuZXhwZXJpbWVudC5FeHBlcmltZW50LlN0YXR1c1IGc3RhdHVzEh4KCm1haW50YWluZXIYEyABKAlSCm1haW50YWluZXISGgoIYXJjaGl2ZWQYFCABKAhSCGFyY2hpdmVkIkIKBlN0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgsKB1NUT1BQRUQQAhIRCg1GT1JDRV9TVE9QUEVEEANKBAgREBIiUQoLRXhwZXJpbWVudHMSQgoLZXhwZXJpbWVudHMYASADKAsyIC5idWNrZXRlZXIuZXhwZXJpbWVudC5FeHBlcmltZW50UgtleHBlcmltZW50c0I0WjJnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXhwZXJpbWVudGIGcHJvdG8zCuADCihwcm90by9leHBlcmltZW50Y2FsY3VsYXRvci9zZXJ2aWNlLnByb3RvEh5idWNrZXRlZXIuZXhwZXJpbWVudGNhbGN1bGF0b3IaIXByb3RvL2V4cGVyaW1lbnQvZXhwZXJpbWVudC5wcm90byJ7ChBCYXRjaENhbGNSZXF1ZXN0EiUKDmVudmlyb25tZW50X2lkGAEgASgJUg1lbnZpcm9ubWVudElkEkAKCmV4cGVyaW1lbnQYAiABKAsyIC5idWNrZXRlZXIuZXhwZXJpbWVudC5FeHBlcmltZW50UgpleHBlcmltZW50IhMKEUJhdGNoQ2FsY1Jlc3BvbnNlMpYBChtFeHBlcmltZW50Q2FsY3VsYXRvclNlcnZpY2USdwoOQ2FsY0V4cGVyaW1lbnQSMC5idWNrZXRlZXIuZXhwZXJpbWVudGNhbGN1bGF0b3IuQmF0Y2hDYWxjUmVxdWVzdBoxLmJ1Y2tldGVlci5leHBlcmltZW50Y2FsY3VsYXRvci5CYXRjaENhbGNSZXNwb25zZSIAQj5aPGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9leHBlcmltZW50Y2FsY3VsYXRvcmIGcHJvdG8z - auditlogDescriptor: CuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCoYECh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIjCgtEb3VibGVWYWx1ZRIUCgV2YWx1ZRgBIAEoAVIFdmFsdWUiIgoKRmxvYXRWYWx1ZRIUCgV2YWx1ZRgBIAEoAlIFdmFsdWUiIgoKSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoA1IFdmFsdWUiIwoLVUludDY0VmFsdWUSFAoFdmFsdWUYASABKARSBXZhbHVlIiIKCkludDMyVmFsdWUSFAoFdmFsdWUYASABKAVSBXZhbHVlIiMKC1VJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgNUgV2YWx1ZSIhCglCb29sVmFsdWUSFAoFdmFsdWUYASABKAhSBXZhbHVlIiMKC1N0cmluZ1ZhbHVlEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIiCgpCeXRlc1ZhbHVlEhQKBXZhbHVlGAEgASgMUgV2YWx1ZUKDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINV3JhcHBlcnNQcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi93cmFwcGVyc3Bi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKxwMKGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSLaAgoGQ2xhdXNlEg4KAmlkGAEgASgJUgJpZBIcCglhdHRyaWJ1dGUYAiABKAlSCWF0dHJpYnV0ZRI+CghvcGVyYXRvchgDIAEoDjIiLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3ISFgoGdmFsdWVzGAQgAygJUgZ2YWx1ZXMiyQEKCE9wZXJhdG9yEgoKBkVRVUFMUxAAEgYKAklOEAESDQoJRU5EU19XSVRIEAISDwoLU1RBUlRTX1dJVEgQAxILCgdTRUdNRU5UEAQSCwoHR1JFQVRFUhAFEhQKEEdSRUFURVJfT1JfRVFVQUwQBhIICgRMRVNTEAcSEQoNTEVTU19PUl9FUVVBTBAIEgoKBkJFRk9SRRAJEgkKBUFGVEVSEAoSEAoMRkVBVFVSRV9GTEFHEAsSEwoPUEFSVElBTExZX01BVENIEAxCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwq7BAoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiLQoNRml4ZWRTdHJhdGVneRIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbiKiAQoPUm9sbG91dFN0cmF0ZWd5EkwKCnZhcmlhdGlvbnMYASADKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3kuVmFyaWF0aW9uUgp2YXJpYXRpb25zGkEKCVZhcmlhdGlvbhIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIWCgZ3ZWlnaHQYAiABKAVSBndlaWdodCL4AQoIU3RyYXRlZ3kSNAoEdHlwZRgBIAEoDjIgLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5LlR5cGVSBHR5cGUSRwoOZml4ZWRfc3RyYXRlZ3kYAiABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5Ug1maXhlZFN0cmF0ZWd5Ek0KEHJvbGxvdXRfc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSD3JvbGxvdXRTdHJhdGVneSIeCgRUeXBlEgkKBUZJWEVEEAASCwoHUk9MTE9VVBABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqQIKGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvIoQBCgRSdWxlEg4KAmlkGAEgASgJUgJpZBI3CghzdHJhdGVneRgCIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneRIzCgdjbGF1c2VzGAMgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlUgdjbGF1c2VzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqAEKGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSI8CgZUYXJnZXQSHAoJdmFyaWF0aW9uGAEgASgJUgl2YXJpYXRpb24SFAoFdXNlcnMYAiADKAlSBXVzZXJzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCvQCCipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIvcBChNGZWF0dXJlTGFzdFVzZWRJbmZvEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIYCgd2ZXJzaW9uGAIgASgFUgd2ZXJzaW9uEiAKDGxhc3RfdXNlZF9hdBgDIAEoA1IKbGFzdFVzZWRBdBIdCgpjcmVhdGVkX2F0GAQgASgDUgljcmVhdGVkQXQSMgoVY2xpZW50X29sZGVzdF92ZXJzaW9uGAUgASgJUhNjbGllbnRPbGRlc3RWZXJzaW9uEjIKFWNsaWVudF9sYXRlc3RfdmVyc2lvbhgGIAEoCVITY2xpZW50TGF0ZXN0VmVyc2lvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsIBCiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiUAoMUHJlcmVxdWlzaXRlEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqgsKG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvItIHCgdGZWF0dXJlEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhIYCgdlbmFibGVkGAQgASgIUgdlbmFibGVkEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQSOQoWZXZhbHVhdGlvbl91bmRlbGF5YWJsZRgGIAEoCEICGAFSFWV2YWx1YXRpb25VbmRlbGF5YWJsZRIQCgN0dGwYByABKAVSA3R0bBIYCgd2ZXJzaW9uGAggASgFUgd2ZXJzaW9uEh0KCmNyZWF0ZWRfYXQYCSABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAogASgDUgl1cGRhdGVkQXQSPAoKdmFyaWF0aW9ucxgLIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIzCgd0YXJnZXRzGAwgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGA0gAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgOIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSIwoNb2ZmX3ZhcmlhdGlvbhgPIAEoCVIMb2ZmVmFyaWF0aW9uEhIKBHRhZ3MYECADKAlSBHRhZ3MSTAoObGFzdF91c2VkX2luZm8YESABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlTGFzdFVzZWRJbmZvUgxsYXN0VXNlZEluZm8SHgoKbWFpbnRhaW5lchgSIAEoCVIKbWFpbnRhaW5lchJPCg52YXJpYXRpb25fdHlwZRgTIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRIaCghhcmNoaXZlZBgUIAEoCFIIYXJjaGl2ZWQSRQoNcHJlcmVxdWlzaXRlcxgVIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIjCg1zYW1wbGluZ19zZWVkGBYgASgJUgxzYW1wbGluZ1NlZWQiPgoNVmFyaWF0aW9uVHlwZRIKCgZTVFJJTkcQABILCgdCT09MRUFOEAESCgoGTlVNQkVSEAISCAoESlNPThADIlIKCEZlYXR1cmVzEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSDgoCaWQYAiABKAlSAmlkIlMKA1RhZxIOCgJpZBgBIAEoCVICaWQSHQoKY3JlYXRlZF9hdBgCIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrUIChtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90byK0BAoHU2VnbWVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SLQoFcnVsZXMYBCADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EhwKB3ZlcnNpb24YByABKANCAhgBUgd2ZXJzaW9uEhgKB2RlbGV0ZWQYCCABKAhSB2RlbGV0ZWQSLgoTaW5jbHVkZWRfdXNlcl9jb3VudBgJIAEoA1IRaW5jbHVkZWRVc2VyQ291bnQSMgoTZXhjbHVkZWRfdXNlcl9jb3VudBgKIAEoA0ICGAFSEWV4Y2x1ZGVkVXNlckNvdW50EjkKBnN0YXR1cxgLIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSJwoQaXNfaW5fdXNlX3N0YXR1cxgMIAEoCFINaXNJblVzZVN0YXR1cxI2CghmZWF0dXJlcxgNIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIj4KBlN0YXR1cxILCgdJTklUSUFMEAASDQoJVVBMT0FESU5HEAESDAoIU1VDRUVERUQQAhIKCgZGQUlMRUQQAyLUAQoLU2VnbWVudFVzZXISDgoCaWQYASABKAlSAmlkEh0KCnNlZ21lbnRfaWQYAiABKAlSCXNlZ21lbnRJZBIXCgd1c2VyX2lkGAMgASgJUgZ1c2VySWQSOgoFc3RhdGUYBCABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSGAoHZGVsZXRlZBgFIAEoCFIHZGVsZXRlZCInCgVTdGF0ZRIMCghJTkNMVURFRBAAEhAKCEVYQ0xVREVEEAEaAggBIoIBCgxTZWdtZW50VXNlcnMSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjQKBXVzZXJzGAIgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCucDCiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IukCCg1FbnZpcm9ubWVudFYyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIdCgpwcm9qZWN0X2lkGAUgASgJUglwcm9qZWN0SWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEh0KCmNyZWF0ZWRfYXQYByABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAggASgDUgl1cGRhdGVkQXQSJwoPb3JnYW5pemF0aW9uX2lkGAkgASgJUg5vcmdhbml6YXRpb25JZBInCg9yZXF1aXJlX2NvbW1lbnQYCiABKAhSDnJlcXVpcmVDb21tZW50EiwKEmZlYXR1cmVfZmxhZ19jb3VudBgLIAEoBVIQZmVhdHVyZUZsYWdDb3VudEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwr9AwofcHJvdG8vZW52aXJvbm1lbnQvcHJvamVjdC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IoMDCgdQcm9qZWN0Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlEicKD29yZ2FuaXphdGlvbl9pZBgKIAEoCVIOb3JnYW5pemF0aW9uSWQSKwoRZW52aXJvbm1lbnRfY291bnQYCyABKAVSEGVudmlyb25tZW50Q291bnQSLAoSZmVhdHVyZV9mbGFnX2NvdW50GAwgASgFUhBmZWF0dXJlRmxhZ0NvdW50QjVaM2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9lbnZpcm9ubWVudGIGcHJvdG8zCq8ECiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudCKwAwoMT3JnYW5pemF0aW9uEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEhQKBXRyaWFsGAcgASgIUgV0cmlhbBIdCgpjcmVhdGVkX2F0GAggASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgJIAEoA1IJdXBkYXRlZEF0EiEKDHN5c3RlbV9hZG1pbhgKIAEoCFILc3lzdGVtQWRtaW4SIwoNcHJvamVjdF9jb3VudBgLIAEoBVIMcHJvamVjdENvdW50EisKEWVudmlyb25tZW50X2NvdW50GAwgASgFUhBlbnZpcm9ubWVudENvdW50Eh0KCnVzZXJfY291bnQYDSABKAVSCXVzZXJDb3VudBIfCgtvd25lcl9lbWFpbBgOIAEoCVIKb3duZXJFbWFpbEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwqQAwohcHJvdG8vYWNjb3VudC9zZWFyY2hfZmlsdGVyLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudCLpAQoMU2VhcmNoRmlsdGVyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhQKBXF1ZXJ5GAMgASgJUgVxdWVyeRJRChJmaWx0ZXJfdGFyZ2V0X3R5cGUYBCABKA4yIy5idWNrZXRlZXIuYWNjb3VudC5GaWx0ZXJUYXJnZXRUeXBlUhBmaWx0ZXJUYXJnZXRUeXBlEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkEiUKDmRlZmF1bHRfZmlsdGVyGAYgASgIUg1kZWZhdWx0RmlsdGVyKjEKEEZpbHRlclRhcmdldFR5cGUSCwoHVU5LTk9XThAAEhAKDEZFQVRVUkVfRkxBRxABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hY2NvdW50YgZwcm90bzMKoxMKG3Byb3RvL2FjY291bnQvYWNjb3VudC5wcm90bxIRYnVja2V0ZWVyLmFjY291bnQaI3Byb3RvL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnByb3RvGh9wcm90by9lbnZpcm9ubWVudC9wcm9qZWN0LnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byKrAgoHQWNjb3VudBIOCgJpZBgBIAEoCVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWUSMwoEcm9sZRgEIAEoDjIfLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnQuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkIjkKBFJvbGUSCgoGVklFV0VSEAASCgoGRURJVE9SEAESCQoFT1dORVIQAhIOCgpVTkFTU0lHTkVEEGM6AhgBIqgICglBY2NvdW50VjISFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgDIAEoCVIOYXZhdGFySW1hZ2VVcmwSJwoPb3JnYW5pemF0aW9uX2lkGAQgASgJUg5vcmdhbml6YXRpb25JZBJbChFvcmdhbml6YXRpb25fcm9sZRgFIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgGIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSGgoIZGlzYWJsZWQYByABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSRgoOc2VhcmNoX2ZpbHRlcnMYCiADKAsyHy5idWNrZXRlZXIuYWNjb3VudC5TZWFyY2hGaWx0ZXJSDXNlYXJjaEZpbHRlcnMSHQoKZmlyc3RfbmFtZRgLIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgMIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYDSABKAlSCGxhbmd1YWdlEhsKCWxhc3Rfc2VlbhgOIAEoA1IIbGFzdFNlZW4SKAoQYXZhdGFyX2ZpbGVfdHlwZRgPIAEoCVIOYXZhdGFyRmlsZVR5cGUSIQoMYXZhdGFyX2ltYWdlGBAgASgMUgthdmF0YXJJbWFnZRIrChFlbnZpcm9ubWVudF9jb3VudBgRIAEoBVIQZW52aXJvbm1lbnRDb3VudBrXAQoEUm9sZSJZCgtFbnZpcm9ubWVudBIaChZFbnZpcm9ubWVudF9VTkFTU0lHTkVEEAASFgoSRW52aXJvbm1lbnRfVklFV0VSEAESFgoSRW52aXJvbm1lbnRfRURJVE9SEAIidAoMT3JnYW5pemF0aW9uEhsKF09yZ2FuaXphdGlvbl9VTkFTU0lHTkVEEAASFwoTT3JnYW5pemF0aW9uX01FTUJFUhABEhYKEk9yZ2FuaXphdGlvbl9BRE1JThACEhYKEk9yZ2FuaXphdGlvbl9PV05FUhADGnsKD0Vudmlyb25tZW50Um9sZRIlCg5lbnZpcm9ubWVudF9pZBgBIAEoCVINZW52aXJvbm1lbnRJZBJBCgRyb2xlGAIgASgOMi0uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuRW52aXJvbm1lbnRSBHJvbGUizQYKDkNvbnNvbGVBY2NvdW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVybBImCg9pc19zeXN0ZW1fYWRtaW4YBCABKAhSDWlzU3lzdGVtQWRtaW4SRwoMb3JnYW5pemF0aW9uGAUgASgLMiMuYnVja2V0ZWVyLmVudmlyb25tZW50Lk9yZ2FuaXphdGlvblIMb3JnYW5pemF0aW9uElsKEW9yZ2FuaXphdGlvbl9yb2xlGAYgASgOMi4uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuT3JnYW5pemF0aW9uUhBvcmdhbml6YXRpb25Sb2xlEl4KEWVudmlyb25tZW50X3JvbGVzGAcgAygLMjEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnQuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEkYKDnNlYXJjaF9maWx0ZXJzGAggAygLMh8uYnVja2V0ZWVyLmFjY291bnQuU2VhcmNoRmlsdGVyUg1zZWFyY2hGaWx0ZXJzEh0KCmZpcnN0X25hbWUYCSABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCiABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAsgASgJUghsYW5ndWFnZRIoChBhdmF0YXJfZmlsZV90eXBlGAwgASgJUg5hdmF0YXJGaWxlVHlwZRIhCgxhdmF0YXJfaW1hZ2UYDSABKAxSC2F2YXRhckltYWdlGtYBCg9FbnZpcm9ubWVudFJvbGUSRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSOAoHcHJvamVjdBgCIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0EkEKBHJvbGUYAyABKA4yLS5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5FbnZpcm9ubWVudFIEcm9sZUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYWNjb3VudGIGcHJvdG8zCpMGChtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8SEWJ1Y2tldGVlci5hY2NvdW50GiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90byK1AgoGQVBJS2V5Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEjIKBHJvbGUYAyABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgEIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCJ5CgRSb2xlEgsKB1VOS05PV04QABIOCgpTREtfQ0xJRU5UEAESDgoKU0RLX1NFUlZFUhACEhgKFFBVQkxJQ19BUElfUkVBRF9PTkxZEAMSFAoQUFVCTElDX0FQSV9XUklURRAEEhQKEFBVQkxJQ19BUElfQURNSU4QBSLIAgoRRW52aXJvbm1lbnRBUElLZXkSNwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAEgASgJQgIYAVIUZW52aXJvbm1lbnROYW1lc3BhY2USMgoHYXBpX2tleRgCIAEoCzIZLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleVIGYXBpS2V5EjEKFGVudmlyb25tZW50X2Rpc2FibGVkGAMgASgIUhNlbnZpcm9ubWVudERpc2FibGVkEiEKCnByb2plY3RfaWQYBCABKAlCAhgBUglwcm9qZWN0SWQSRgoLZW52aXJvbm1lbnQYBSABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSKAoQcHJvamVjdF91cmxfY29kZRgGIAEoCVIOcHJvamVjdFVybENvZGVCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwqaCwoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8SEWJ1Y2tldGVlci5hdXRvb3BzGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIoYBCgZDbGF1c2USDgoCaWQYASABKAlSAmlkEiwKBmNsYXVzZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRI+CgthY3Rpb25fdHlwZRgDIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUi3wIKEk9wc0V2ZW50UmF0ZUNsYXVzZRIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkEhcKB2dvYWxfaWQYAyABKAlSBmdvYWxJZBIbCgltaW5fY291bnQYBCABKANSCG1pbkNvdW50EikKEHRocmVhZHNob2xkX3JhdGUYBSABKAFSD3RocmVhZHNob2xkUmF0ZRJKCghvcGVyYXRvchgGIAEoDjIuLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3ISPgoLYWN0aW9uX3R5cGUYByABKA4yHS5idWNrZXRlZXIuYXV0b29wcy5BY3Rpb25UeXBlUgphY3Rpb25UeXBlIjMKCE9wZXJhdG9yEhQKEEdSRUFURVJfT1JfRVFVQUwQABIRCg1MRVNTX09SX0VRVUFMEAFKBAgBEAIiZAoORGF0ZXRpbWVDbGF1c2USEgoEdGltZRgBIAEoA1IEdGltZRI+CgthY3Rpb25fdHlwZRgCIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUilwEKGlByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlEh8KC3NjaGVkdWxlX2lkGAEgASgJUgpzY2hlZHVsZUlkEh0KCmV4ZWN1dGVfYXQYAiABKANSCWV4ZWN1dGVBdBIWCgZ3ZWlnaHQYAyABKAVSBndlaWdodBIhCgx0cmlnZ2VyZWRfYXQYBCABKANSC3RyaWdnZXJlZEF0IpgBCiZQcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZRJLCglzY2hlZHVsZXMYASADKAsyLS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVIJc2NoZWR1bGVzEiEKDHZhcmlhdGlvbl9pZBgCIAEoCVILdmFyaWF0aW9uSWQi2AIKKFByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2USSwoJc2NoZWR1bGVzGAEgAygLMi0uYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0U2NoZWR1bGVSCXNjaGVkdWxlcxJgCghpbnRlcnZhbBgCIAEoDjJELmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2UuSW50ZXJ2YWxSCGludGVydmFsEh4KCmluY3JlbWVudHMYAyABKANSCmluY3JlbWVudHMSIQoMdmFyaWF0aW9uX2lkGAQgASgJUgt2YXJpYXRpb25JZCI6CghJbnRlcnZhbBILCgdVTktOT1dOEAASCgoGSE9VUkxZEAESCQoFREFJTFkQAhIKCgZXRUVLTFkQAyoyCgpBY3Rpb25UeXBlEgsKB1VOS05PV04QABIKCgZFTkFCTEUQARILCgdESVNBQkxFEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dG9vcHNiBnByb3RvMwq9BQohcHJvdG8vYXV0b29wcy9hdXRvX29wc19ydWxlLnByb3RvEhFidWNrZXRlZXIuYXV0b29wcxoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8i0AIKC0F1dG9PcHNSdWxlEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSNQoIb3BzX3R5cGUYAyABKA4yGi5idWNrZXRlZXIuYXV0b29wcy5PcHNUeXBlUgdvcHNUeXBlEjMKB2NsYXVzZXMYBCADKAsyGS5idWNrZXRlZXIuYXV0b29wcy5DbGF1c2VSB2NsYXVzZXMSHQoKY3JlYXRlZF9hdBgHIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCCABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAkgASgIUgdkZWxldGVkEkgKD2F1dG9fb3BzX3N0YXR1cxgKIAEoDjIgLmJ1Y2tldGVlci5hdXRvb3BzLkF1dG9PcHNTdGF0dXNSDWF1dG9PcHNTdGF0dXNKBAgGEAciVAoMQXV0b09wc1J1bGVzEkQKDmF1dG9fb3BzX3J1bGVzGAEgAygLMh4uYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1J1bGVSDGF1dG9PcHNSdWxlcyo/CgdPcHNUeXBlEhAKDFRZUEVfVU5LTk9XThAAEgwKCFNDSEVEVUxFEAISDgoKRVZFTlRfUkFURRADIgQIARABKkQKDUF1dG9PcHNTdGF0dXMSCwoHV0FJVElORxAAEgsKB1JVTk5JTkcQARIMCghGSU5JU0hFRBACEgsKB1NUT1BQRUQQA0IxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYXV0b29wc2IGcHJvdG8zCvADCiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uIrcCCglSZWNpcGllbnQSOgoEdHlwZRgBIAEoDjImLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50LlR5cGVSBHR5cGUSZQoXc2xhY2tfY2hhbm5lbF9yZWNpcGllbnQYAiABKAsyLS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlNsYWNrQ2hhbm5lbFJlY2lwaWVudFIVc2xhY2tDaGFubmVsUmVjaXBpZW50EkYKCGxhbmd1YWdlGAMgASgOMiouYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnQuTGFuZ3VhZ2VSCGxhbmd1YWdlIhgKBFR5cGUSEAoMU2xhY2tDaGFubmVsEAAiJQoITGFuZ3VhZ2USCwoHRU5HTElTSBAAEgwKCEpBUEFORVNFEAEiOAoVU2xhY2tDaGFubmVsUmVjaXBpZW50Eh8KC3dlYmhvb2tfdXJsGAEgASgJUgp3ZWJob29rVXJsQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwr9BwolcHJvdG8vbm90aWZpY2F0aW9uL3N1YnNjcmlwdGlvbi5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoicHJvdG8vbm90aWZpY2F0aW9uL3JlY2lwaWVudC5wcm90byLXBgoMU3Vic2NyaXB0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpjcmVhdGVkX2F0GAIgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EhoKCGRpc2FibGVkGAQgASgIUghkaXNhYmxlZBJSCgxzb3VyY2VfdHlwZXMYBSADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYBiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYByABKAlSBG5hbWUiswQKClNvdXJjZVR5cGUSGAoURE9NQUlOX0VWRU5UX0ZFQVRVUkUQABIVChFET01BSU5fRVZFTlRfR09BTBABEhsKF0RPTUFJTl9FVkVOVF9FWFBFUklNRU5UEAISGAoURE9NQUlOX0VWRU5UX0FDQ09VTlQQAxIXChNET01BSU5fRVZFTlRfQVBJS0VZEAQSGAoURE9NQUlOX0VWRU5UX1NFR01FTlQQBRIcChhET01BSU5fRVZFTlRfRU5WSVJPTk1FTlQQBhIeChpET01BSU5fRVZFTlRfQURNSU5fQUNDT1VOVBAHEh0KGURPTUFJTl9FVkVOVF9BVVRPT1BTX1JVTEUQCBIVChFET01BSU5fRVZFTlRfUFVTSBAJEh0KGURPTUFJTl9FVkVOVF9TVUJTQ1JJUFRJT04QChIjCh9ET01BSU5fRVZFTlRfQURNSU5fU1VCU0NSSVBUSU9OEAsSGAoURE9NQUlOX0VWRU5UX1BST0pFQ1QQDBIYChRET01BSU5fRVZFTlRfV0VCSE9PSxANEiQKIERPTUFJTl9FVkVOVF9QUk9HUkVTU0lWRV9ST0xMT1VUEA4SHQoZRE9NQUlOX0VWRU5UX09SR0FOSVpBVElPThAPEh0KGURPTUFJTl9FVkVOVF9GTEFHX1RSSUdHRVIQEBIRCg1GRUFUVVJFX1NUQUxFEGQSFwoSRVhQRVJJTUVOVF9SVU5OSU5HEMgBEg4KCU1BVV9DT1VOVBCsAkI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vbm90aWZpY2F0aW9uYgZwcm90bzMK9wUKJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8i4gQKElByb2dyZXNzaXZlUm9sbG91dBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiwKBmNsYXVzZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRJECgZzdGF0dXMYBCABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzUgZzdGF0dXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBI+CgR0eXBlGAcgASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVSBHR5cGUSTgoKc3RvcHBlZF9ieRgIIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeRIdCgpzdG9wcGVkX2F0GAkgASgDUglzdG9wcGVkQXQiMgoEVHlwZRITCg9NQU5VQUxfU0NIRURVTEUQABIVChFURU1QTEFURV9TQ0hFRFVMRRABIj0KBlN0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADIkkKCVN0b3BwZWRCeRILCgdVTktOT1dOEAASCAoEVVNFUhABEhAKDE9QU19TQ0hFRFVMRRACEhMKD09QU19LSUxMX1NXSVRDSBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMKqAUKIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSK1BAoLRmxhZ1RyaWdnZXISDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEjcKBHR5cGUYBCABKA4yIy5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5UeXBlUgR0eXBlEj0KBmFjdGlvbhgFIAEoDjIlLmJ1Y2tldGVlci5mZWF0dXJlLkZsYWdUcmlnZ2VyLkFjdGlvblIGYWN0aW9uEiAKC2Rlc2NyaXB0aW9uGAYgASgJUgtkZXNjcmlwdGlvbhIjCg10cmlnZ2VyX2NvdW50GAcgASgFUgx0cmlnZ2VyQ291bnQSKgoRbGFzdF90cmlnZ2VyZWRfYXQYCCABKANSD2xhc3RUcmlnZ2VyZWRBdBIUCgV0b2tlbhgJIAEoCVIFdG9rZW4SGgoIZGlzYWJsZWQYCiABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCyABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAwgASgDUgl1cGRhdGVkQXQiKgoEVHlwZRIQCgxUeXBlX1VOS05PV04QABIQCgxUeXBlX1dFQkhPT0sQASI7CgZBY3Rpb24SEgoOQWN0aW9uX1VOS05PV04QABINCglBY3Rpb25fT04QARIOCgpBY3Rpb25fT0ZGEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwrPwgEKHnByb3RvL2V2ZW50L2RvbWFpbi9ldmVudC5wcm90bxIWYnVja2V0ZWVyLmV2ZW50LmRvbWFpbhoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGhpwcm90by9mZWF0dXJlL2NsYXVzZS5wcm90bxobcHJvdG8vZmVhdHVyZS9mZWF0dXJlLnByb3RvGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGhtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8aGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvGhtwcm90by9hY2NvdW50L2FjY291bnQucHJvdG8aG3Byb3RvL2FjY291bnQvYXBpX2tleS5wcm90bxohcHJvdG8vYXV0b29wcy9hdXRvX29wc19ydWxlLnByb3RvGhpwcm90by9hdXRvb3BzL2NsYXVzZS5wcm90bxolcHJvdG8vbm90aWZpY2F0aW9uL3N1YnNjcmlwdGlvbi5wcm90bxoicHJvdG8vbm90aWZpY2F0aW9uL3JlY2lwaWVudC5wcm90bxogcHJvdG8vZmVhdHVyZS9wcmVyZXF1aXNpdGUucHJvdG8aJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90bxogcHJvdG8vZmVhdHVyZS9mbGFnX3RyaWdnZXIucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byL3LQoFRXZlbnQSDgoCaWQYASABKAlSAmlkEhwKCXRpbWVzdGFtcBgCIAEoA1IJdGltZXN0YW1wEkkKC2VudGl0eV90eXBlGAMgASgOMiguYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FdmVudC5FbnRpdHlUeXBlUgplbnRpdHlUeXBlEhsKCWVudGl0eV9pZBgEIAEoCVIIZW50aXR5SWQSNgoEdHlwZRgFIAEoDjIiLmJ1Y2tldGVlci5ldmVudC5kb21haW4uRXZlbnQuVHlwZVIEdHlwZRI2CgZlZGl0b3IYBiABKAsyHi5idWNrZXRlZXIuZXZlbnQuZG9tYWluLkVkaXRvclIGZWRpdG9yEigKBGRhdGEYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgRkYXRhEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgIIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USJAoOaXNfYWRtaW5fZXZlbnQYCSABKAhSDGlzQWRtaW5FdmVudBI5CgdvcHRpb25zGAogASgLMh8uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5PcHRpb25zUgdvcHRpb25zEh8KC2VudGl0eV9kYXRhGAsgASgJUgplbnRpdHlEYXRhEjAKFHByZXZpb3VzX2VudGl0eV9kYXRhGAwgASgJUhJwcmV2aW91c0VudGl0eURhdGEikwIKCkVudGl0eVR5cGUSCwoHRkVBVFVSRRAAEggKBEdPQUwQARIOCgpFWFBFUklNRU5UEAISCwoHQUNDT1VOVBADEgoKBkFQSUtFWRAEEgsKB1NFR01FTlQQBRIPCgtFTlZJUk9OTUVOVBAGEhEKDUFETUlOX0FDQ09VTlQQBxIQCgxBVVRPT1BTX1JVTEUQCBIICgRQVVNIEAkSEAoMU1VCU0NSSVBUSU9OEAoSFgoSQURNSU5fU1VCU0NSSVBUSU9OEAsSCwoHUFJPSkVDVBAMEhcKE1BST0dSRVNTSVZFX1JPTExPVVQQDhIQCgxPUkdBTklaQVRJT04QDxIQCgxGTEFHX1RSSUdHRVIQECIECA0QDSK+JwoEVHlwZRILCgdVTktOT1dOEAASEwoPRkVBVFVSRV9DUkVBVEVEEAESEwoPRkVBVFVSRV9SRU5BTUVEEAISEwoPRkVBVFVSRV9FTkFCTEVEEAMSFAoQRkVBVFVSRV9ESVNBQkxFRBAEEhMKD0ZFQVRVUkVfREVMRVRFRBAFEh8KG0ZFQVRVUkVfREVTQ1JJUFRJT05fQ0hBTkdFRBAIEhsKF0ZFQVRVUkVfVkFSSUFUSU9OX0FEREVEEAkSHQoZRkVBVFVSRV9WQVJJQVRJT05fUkVNT1ZFRBAKEiEKHUZFQVRVUkVfT0ZGX1ZBUklBVElPTl9DSEFOR0VEEAsSGwoXVkFSSUFUSU9OX1ZBTFVFX0NIQU5HRUQQDBIaChZWQVJJQVRJT05fTkFNRV9DSEFOR0VEEA0SIQodVkFSSUFUSU9OX0RFU0NSSVBUSU9OX0NIQU5HRUQQDhIYChRWQVJJQVRJT05fVVNFUl9BRERFRBAPEhoKFlZBUklBVElPTl9VU0VSX1JFTU9WRUQQEBIWChJGRUFUVVJFX1JVTEVfQURERUQQERIhCh1GRUFUVVJFX1JVTEVfU1RSQVRFR1lfQ0hBTkdFRBASEhgKFEZFQVRVUkVfUlVMRV9ERUxFVEVEEBMSFQoRUlVMRV9DTEFVU0VfQURERUQQFBIXChNSVUxFX0NMQVVTRV9ERUxFVEVEEBUSHwobUlVMRV9GSVhFRF9TVFJBVEVHWV9DSEFOR0VEEBYSIQodUlVMRV9ST0xMT1VUX1NUUkFURUdZX0NIQU5HRUQQFxIcChhDTEFVU0VfQVRUUklCVVRFX0NIQU5HRUQQGBIbChdDTEFVU0VfT1BFUkFUT1JfQ0hBTkdFRBAZEhYKEkNMQVVTRV9WQUxVRV9BRERFRBAaEhgKFENMQVVTRV9WQUxVRV9SRU1PVkVEEBsSJAogRkVBVFVSRV9ERUZBVUxUX1NUUkFURUdZX0NIQU5HRUQQHBIVChFGRUFUVVJFX1RBR19BRERFRBAdEhcKE0ZFQVRVUkVfVEFHX1JFTU9WRUQQHhIfChtGRUFUVVJFX1ZFUlNJT05fSU5DUkVNRU5URUQQHxIUChBGRUFUVVJFX0FSQ0hJVkVEECASEgoORkVBVFVSRV9DTE9ORUQQIRIWChJGRUFUVVJFX1VOQVJDSElWRUQQIxIXChNTQU1QTElOR19TRUVEX1JFU0VUECISFgoSUFJFUkVRVUlTSVRFX0FEREVEECQSGAoUUFJFUkVRVUlTSVRFX1JFTU9WRUQQJRIiCh5QUkVSRVFVSVNJVEVfVkFSSUFUSU9OX0NIQU5HRUQQJhIfChtGRUFUVVJFX1JVTEVTX09SREVSX0NIQU5HRUQQJxITCg9GRUFUVVJFX1VQREFURUQQKBIQCgxHT0FMX0NSRUFURUQQZBIQCgxHT0FMX1JFTkFNRUQQZRIcChhHT0FMX0RFU0NSSVBUSU9OX0NIQU5HRUQQZhIQCgxHT0FMX0RFTEVURUQQZxIRCg1HT0FMX0FSQ0hJVkVEEGgSFwoSRVhQRVJJTUVOVF9DUkVBVEVEEMgBEhcKEkVYUEVSSU1FTlRfU1RPUFBFRBDJARIgChtFWFBFUklNRU5UX1NUQVJUX0FUX0NIQU5HRUQQygESHwoaRVhQRVJJTUVOVF9TVE9QX0FUX0NIQU5HRUQQywESFwoSRVhQRVJJTUVOVF9ERUxFVEVEEMwBEh4KGUVYUEVSSU1FTlRfUEVSSU9EX0NIQU5HRUQQzQESHAoXRVhQRVJJTUVOVF9OQU1FX0NIQU5HRUQQzgESIwoeRVhQRVJJTUVOVF9ERVNDUklQVElPTl9DSEFOR0VEEM8BEhcKEkVYUEVSSU1FTlRfU1RBUlRFRBDQARIYChNFWFBFUklNRU5UX0ZJTklTSEVEENEBEhgKE0VYUEVSSU1FTlRfQVJDSElWRUQQ0gESGAoPQUNDT1VOVF9DUkVBVEVEEKwCGgIIARIdChRBQ0NPVU5UX1JPTEVfQ0hBTkdFRBCtAhoCCAESGAoPQUNDT1VOVF9FTkFCTEVEEK4CGgIIARIZChBBQ0NPVU5UX0RJU0FCTEVEEK8CGgIIARIYCg9BQ0NPVU5UX0RFTEVURUQQsAIaAggBEhcKEkFDQ09VTlRfVjJfQ1JFQVRFRBCxAhIcChdBQ0NPVU5UX1YyX05BTUVfQ0hBTkdFRBCyAhIoCiNBQ0NPVU5UX1YyX0FWQVRBUl9JTUFHRV9VUkxfQ0hBTkdFRBCzAhIpCiRBQ0NPVU5UX1YyX09SR0FOSVpBVElPTl9ST0xFX0NIQU5HRUQQtAISKQokQUNDT1VOVF9WMl9FTlZJUk9OTUVOVF9ST0xFU19DSEFOR0VEELUCEhcKEkFDQ09VTlRfVjJfRU5BQkxFRBC2AhIYChNBQ0NPVU5UX1YyX0RJU0FCTEVEELcCEhcKEkFDQ09VTlRfVjJfREVMRVRFRBC4AhIlCiBBQ0NPVU5UX1YyX0NSRUFURURfU0VBUkNIX0ZJTFRFUhC5AhIqCiVBQ0NPVU5UX1YyX1NFQVJDSF9GSUxURVJfTkFORV9DSEFOR0VEELoCEisKJkFDQ09VTlRfVjJfU0VBUkNIX0ZJTFRFUl9RVUVSWV9DSEFOR0VEELsCEi0KKEFDQ09VTlRfVjJfU0VBUkNIX0ZJTFRFUl9ERUZBVUxUX0NIQU5HRUQQvAISJQogQUNDT1VOVF9WMl9TRUFSQ0hfRklMVEVSX0RFTEVURUQQvQISIgodQUNDT1VOVF9WMl9GSVJTVF9OQU1FX0NIQU5HRUQQvgISIQocQUNDT1VOVF9WMl9MQVNUX05BTUVfQ0hBTkdFRBC/AhIgChtBQ0NPVU5UX1YyX0xBTkdVQUdFX0NIQU5HRUQQwAISFwoSQUNDT1VOVF9WMl9VUERBVEVEEMECEhMKDkFQSUtFWV9DUkVBVEVEEJADEhgKE0FQSUtFWV9OQU1FX0NIQU5HRUQQkQMSEwoOQVBJS0VZX0VOQUJMRUQQkgMSFAoPQVBJS0VZX0RJU0FCTEVEEJMDEhQKD1NFR01FTlRfQ1JFQVRFRBD0AxIUCg9TRUdNRU5UX0RFTEVURUQQ9QMSGQoUU0VHTUVOVF9OQU1FX0NIQU5HRUQQ9gMSIAobU0VHTUVOVF9ERVNDUklQVElPTl9DSEFOR0VEEPcDEhcKElNFR01FTlRfUlVMRV9BRERFRBD4AxIZChRTRUdNRU5UX1JVTEVfREVMRVRFRBD5AxIeChlTRUdNRU5UX1JVTEVfQ0xBVVNFX0FEREVEEPoDEiAKG1NFR01FTlRfUlVMRV9DTEFVU0VfREVMRVRFRBD7AxIlCiBTRUdNRU5UX0NMQVVTRV9BVFRSSUJVVEVfQ0hBTkdFRBD8AxIkCh9TRUdNRU5UX0NMQVVTRV9PUEVSQVRPUl9DSEFOR0VEEP0DEh8KGlNFR01FTlRfQ0xBVVNFX1ZBTFVFX0FEREVEEP4DEiEKHFNFR01FTlRfQ0xBVVNFX1ZBTFVFX1JFTU9WRUQQ/wMSFwoSU0VHTUVOVF9VU0VSX0FEREVEEIAEEhkKFFNFR01FTlRfVVNFUl9ERUxFVEVEEIEEEh4KGVNFR01FTlRfQlVMS19VUExPQURfVVNFUlMQggQSLQooU0VHTUVOVF9CVUxLX1VQTE9BRF9VU0VSU19TVEFUVVNfQ0hBTkdFRBCDBBIYChNFTlZJUk9OTUVOVF9DUkVBVEVEENgEEhgKE0VOVklST05NRU5UX1JFTkFNRUQQ2QQSJAofRU5WSVJPTk1FTlRfREVTQ1JJUFRJT05fQ0hBTkdFRBDaBBIYChNFTlZJUk9OTUVOVF9ERUxFVEVEENsEEhsKFkVOVklST05NRU5UX1YyX0NSRUFURUQQ3AQSGwoWRU5WSVJPTk1FTlRfVjJfUkVOQU1FRBDdBBInCiJFTlZJUk9OTUVOVF9WMl9ERVNDUklQVElPTl9DSEFOR0VEEN4EEhwKF0VOVklST05NRU5UX1YyX0FSQ0hJVkVEEN8EEh4KGUVOVklST05NRU5UX1YyX1VOQVJDSElWRUQQ4AQSKwomRU5WSVJPTk1FTlRfVjJfUkVRVUlSRV9DT01NRU5UX0NIQU5HRUQQ4QQSHgoVQURNSU5fQUNDT1VOVF9DUkVBVEVEELwFGgIIARIeChVBRE1JTl9BQ0NPVU5UX0VOQUJMRUQQvgUaAggBEh8KFkFETUlOX0FDQ09VTlRfRElTQUJMRUQQvwUaAggBEhkKFEFVVE9PUFNfUlVMRV9DUkVBVEVEEKAGEhkKFEFVVE9PUFNfUlVMRV9ERUxFVEVEEKEGEiIKHUFVVE9PUFNfUlVMRV9PUFNfVFlQRV9DSEFOR0VEEKIGEiAKG0FVVE9PUFNfUlVMRV9DTEFVU0VfREVMRVRFRBCjBhIqCiFBVVRPT1BTX1JVTEVfVFJJR0dFUkVEX0FUX0NIQU5HRUQQpAYaAggBEiAKG09QU19FVkVOVF9SQVRFX0NMQVVTRV9BRERFRBClBhIiCh1PUFNfRVZFTlRfUkFURV9DTEFVU0VfQ0hBTkdFRBCmBhIaChVEQVRFVElNRV9DTEFVU0VfQURERUQQpwYSHAoXREFURVRJTUVfQ0xBVVNFX0NIQU5HRUQQqAYSGQoUQVVUT09QU19SVUxFX1NUT1BQRUQQqQYSJAofQVVUT09QU19SVUxFX09QU19TVEFUVVNfQ0hBTkdFRBCqBhIRCgxQVVNIX0NSRUFURUQQhAcSEQoMUFVTSF9ERUxFVEVEEIUHEhQKD1BVU0hfVEFHU19BRERFRBCGBxIWChFQVVNIX1RBR1NfREVMRVRFRBCHBxIRCgxQVVNIX1JFTkFNRUQQiAcSEQoMUFVTSF9VUERBVEVEEIkHEhkKFFNVQlNDUklQVElPTl9DUkVBVEVEEOgHEhkKFFNVQlNDUklQVElPTl9ERUxFVEVEEOkHEhkKFFNVQlNDUklQVElPTl9FTkFCTEVEEOoHEhoKFVNVQlNDUklQVElPTl9ESVNBQkxFRBDrBxIjCh5TVUJTQ1JJUFRJT05fU09VUkNFX1RZUEVfQURERUQQ7AcSJQogU1VCU0NSSVBUSU9OX1NPVVJDRV9UWVBFX0RFTEVURUQQ7QcSGQoUU1VCU0NSSVBUSU9OX1JFTkFNRUQQ7gcSHwoaQURNSU5fU1VCU0NSSVBUSU9OX0NSRUFURUQQzAgSHwoaQURNSU5fU1VCU0NSSVBUSU9OX0RFTEVURUQQzQgSHwoaQURNSU5fU1VCU0NSSVBUSU9OX0VOQUJMRUQQzggSIAobQURNSU5fU1VCU0NSSVBUSU9OX0RJU0FCTEVEEM8IEikKJEFETUlOX1NVQlNDUklQVElPTl9TT1VSQ0VfVFlQRV9BRERFRBDQCBIrCiZBRE1JTl9TVUJTQ1JJUFRJT05fU09VUkNFX1RZUEVfREVMRVRFRBDRCBIfChpBRE1JTl9TVUJTQ1JJUFRJT05fUkVOQU1FRBDSCBIUCg9QUk9KRUNUX0NSRUFURUQQsAkSIAobUFJPSkVDVF9ERVNDUklQVElPTl9DSEFOR0VEELEJEhQKD1BST0pFQ1RfRU5BQkxFRBCyCRIVChBQUk9KRUNUX0RJU0FCTEVEELMJEhoKFVBST0pFQ1RfVFJJQUxfQ1JFQVRFRBC0CRIcChdQUk9KRUNUX1RSSUFMX0NPTlZFUlRFRBC1CRIUCg9QUk9KRUNUX1JFTkFNRUQQtgkSIAobUFJPR1JFU1NJVkVfUk9MTE9VVF9DUkVBVEVEEPgKEiAKG1BST0dSRVNTSVZFX1JPTExPVVRfREVMRVRFRBD5ChI2CjFQUk9HUkVTU0lWRV9ST0xMT1VUX1NDSEVEVUxFX1RSSUdHRVJFRF9BVF9DSEFOR0VEEPoKEiAKG1BST0dSRVNTSVZFX1JPTExPVVRfU1RPUFBFRBD7ChIZChRPUkdBTklaQVRJT05fQ1JFQVRFRBDcCxIeChlPUkdBTklaQVRJT05fTkFNRV9DSEFOR0VEEN0LEiUKIE9SR0FOSVpBVElPTl9ERVNDUklQVElPTl9DSEFOR0VEEN4LEhkKFE9SR0FOSVpBVElPTl9FTkFCTEVEEN8LEhoKFU9SR0FOSVpBVElPTl9ESVNBQkxFRBDgCxIaChVPUkdBTklaQVRJT05fQVJDSElWRUQQ4QsSHAoXT1JHQU5JWkFUSU9OX1VOQVJDSElWRUQQ4gsSIQocT1JHQU5JWkFUSU9OX1RSSUFMX0NPTlZFUlRFRBDjCxIlCiBPUkdBTklaQVRJT05fT1dORVJfRU1BSUxfQ0hBTkdFRBDkCxIZChRGTEFHX1RSSUdHRVJfQ1JFQVRFRBDBDBIXChJGTEFHX1RSSUdHRVJfUkVTRVQQwgwSJQogRkxBR19UUklHR0VSX0RFU0NSSVBUSU9OX0NIQU5HRUQQwwwSGgoVRkxBR19UUklHR0VSX0RJU0FCTEVEEMQMEhkKFEZMQUdfVFJJR0dFUl9FTkFCTEVEEMUMEhkKFEZMQUdfVFJJR0dFUl9ERUxFVEVEEMYMEh8KGkZMQUdfVFJJR0dFUl9VU0FHRV9VUERBVEVEEMcMIgYIlAoQlAoiBgiVChCVCiIGCJYKEJYKIgYIlwoQlwoiBgiYChCYCiIGCJkKEJkKIj8KBkVkaXRvchIUCgVlbWFpbBgBIAEoCVIFZW1haWwSGQoIaXNfYWRtaW4YAyABKAhSB2lzQWRtaW5KBAgCEAMiRAoHT3B0aW9ucxIYCgdjb21tZW50GAEgASgJUgdjb21tZW50Eh8KC25ld192ZXJzaW9uGAIgASgFUgpuZXdWZXJzaW9uIvMEChNGZWF0dXJlQ3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhISCgR1c2VyGAQgASgJUgR1c2VyEjwKCnZhcmlhdGlvbnMYBSADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSWAoaZGVmYXVsdF9vbl92YXJpYXRpb25faW5kZXgYBiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIXZGVmYXVsdE9uVmFyaWF0aW9uSW5kZXgSWgobZGVmYXVsdF9vZmZfdmFyaWF0aW9uX2luZGV4GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSGGRlZmF1bHRPZmZWYXJpYXRpb25JbmRleBJPCg52YXJpYXRpb25fdHlwZRgIIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRISCgR0YWdzGAkgAygJUgR0YWdzEkUKDXByZXJlcXVpc2l0ZXMYCiADKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDXByZXJlcXVpc2l0ZXMSLQoFcnVsZXMYCyADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxIzCgd0YXJnZXRzGAwgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzImYKE0ZlYXR1cmVVcGRhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhYKBGRhdGEYAiABKAlCAhgBUgRkYXRhEicKDXByZXZpb3VzX2RhdGEYAyABKAlCAhgBUgxwcmV2aW91c0RhdGEiJQoTRmVhdHVyZUVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiJgoURmVhdHVyZURpc2FibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIiYKFEZlYXR1cmVBcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIoChZGZWF0dXJlVW5hcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIlChNGZWF0dXJlRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCItChtFdmFsdWF0aW9uRGVsYXlhYmxlU2V0RXZlbnQSDgoCaWQYASABKAlSAmlkIi8KHUV2YWx1YXRpb25VbmRlbGF5YWJsZVNldEV2ZW50Eg4KAmlkGAEgASgJUgJpZCI5ChNGZWF0dXJlUmVuYW1lZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIlIKHkZlYXR1cmVEZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIlYKH0ZlYXR1cmVPZmZWYXJpYXRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiMKDW9mZl92YXJpYXRpb24YAiABKAlSDG9mZlZhcmlhdGlvbiJoChpGZWF0dXJlVmFyaWF0aW9uQWRkZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSOgoJdmFyaWF0aW9uGAIgASgLMhwuYnVja2V0ZWVyLmZlYXR1cmUuVmFyaWF0aW9uUgl2YXJpYXRpb24iUQocRmVhdHVyZVZhcmlhdGlvblJlbW92ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIQoMdmFyaWF0aW9uX2lkGAIgASgJUgt2YXJpYXRpb25JZCJhChpWYXJpYXRpb25WYWx1ZUNoYW5nZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSDgoCaWQYAiABKAlSAmlkEhQKBXZhbHVlGAMgASgJUgV2YWx1ZSJeChlWYXJpYXRpb25OYW1lQ2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIOCgJpZBgCIAEoCVICaWQSEgoEbmFtZRgDIAEoCVIEbmFtZSJzCiBWYXJpYXRpb25EZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSDgoCaWQYAiABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbiJcChdWYXJpYXRpb25Vc2VyQWRkZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSDgoCaWQYAiABKAlSAmlkEhIKBHVzZXIYAyABKAlSBHVzZXIiXgoZVmFyaWF0aW9uVXNlclJlbW92ZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSDgoCaWQYAiABKAlSAmlkEhIKBHVzZXIYAyABKAlSBHVzZXIiVAoVRmVhdHVyZVJ1bGVBZGRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIrCgRydWxlGAIgASgLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIEcnVsZSKRAQoeRmVhdHVyZUNoYW5nZVJ1bGVTdHJhdGVneUV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSNwoIc3RyYXRlZ3kYAyABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIIc3RyYXRlZ3kiWQodRmVhdHVyZVJ1bGVzT3JkZXJDaGFuZ2VkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhkKCHJ1bGVfaWRzGAIgAygJUgdydWxlSWRzIkIKF0ZlYXR1cmVSdWxlRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQimAEKIEZlYXR1cmVGaXhlZFN0cmF0ZWd5Q2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPAoIc3RyYXRlZ3kYAyABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5UghzdHJhdGVneSKcAQoiRmVhdHVyZVJvbGxvdXRTdHJhdGVneUNoYW5nZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEj4KCHN0cmF0ZWd5GAMgASgLMiIuYnVja2V0ZWVyLmZlYXR1cmUuUm9sbG91dFN0cmF0ZWd5UghzdHJhdGVneSKBAQoUUnVsZUNsYXVzZUFkZGVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIxCgZjbGF1c2UYAyABKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSBmNsYXVzZSJgChZSdWxlQ2xhdXNlRGVsZXRlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSDgoCaWQYAyABKAlSAmlkIoMBChtDbGF1c2VBdHRyaWJ1dGVDaGFuZ2VkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIOCgJpZBgDIAEoCVICaWQSHAoJYXR0cmlidXRlGAQgASgJUglhdHRyaWJ1dGUipAEKGkNsYXVzZU9wZXJhdG9yQ2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSDgoCaWQYAyABKAlSAmlkEj4KCG9wZXJhdG9yGAQgASgOMiIuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvciJ1ChVDbGF1c2VWYWx1ZUFkZGVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIOCgJpZBgDIAEoCVICaWQSFAoFdmFsdWUYBCABKAlSBXZhbHVlIncKF0NsYXVzZVZhbHVlUmVtb3ZlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSDgoCaWQYAyABKAlSAmlkEhQKBXZhbHVlGAQgASgJUgV2YWx1ZSJtCiJGZWF0dXJlRGVmYXVsdFN0cmF0ZWd5Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBI3CghzdHJhdGVneRgCIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneSI4ChRGZWF0dXJlVGFnQWRkZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEAoDdGFnGAIgASgJUgN0YWciOgoWRmVhdHVyZVRhZ1JlbW92ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEAoDdGFnGAIgASgJUgN0YWciSgoeRmVhdHVyZVZlcnNpb25JbmNyZW1lbnRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIYCgd2ZXJzaW9uGAIgASgFUgd2ZXJzaW9uIrUEChJGZWF0dXJlQ2xvbmVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEjwKCnZhcmlhdGlvbnMYBCADKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCnZhcmlhdGlvbnMSMwoHdGFyZ2V0cxgFIAMoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLlRhcmdldFIHdGFyZ2V0cxItCgVydWxlcxgGIAMoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBXJ1bGVzEkYKEGRlZmF1bHRfc3RyYXRlZ3kYByABKAsyGy5idWNrZXRlZXIuZmVhdHVyZS5TdHJhdGVneVIPZGVmYXVsdFN0cmF0ZWd5EiMKDW9mZl92YXJpYXRpb24YCCABKAlSDG9mZlZhcmlhdGlvbhISCgR0YWdzGAkgAygJUgR0YWdzEh4KCm1haW50YWluZXIYCiABKAlSCm1haW50YWluZXISTwoOdmFyaWF0aW9uX3R5cGUYCyABKA4yKC5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlLlZhcmlhdGlvblR5cGVSDXZhcmlhdGlvblR5cGUSRQoNcHJlcmVxdWlzaXRlcxgMIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcyJECh1GZWF0dXJlU2FtcGxpbmdTZWVkUmVzZXRFdmVudBIjCg1zYW1wbGluZ19zZWVkGAEgASgJUgxzYW1wbGluZ1NlZWQisAEKEEdvYWxDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEhgKB2RlbGV0ZWQYBCABKAhSB2RlbGV0ZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCI2ChBHb2FsUmVuYW1lZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIk8KG0dvYWxEZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIiMKEUdvYWxBcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIiChBHb2FsRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCLzAwoWRXhwZXJpbWVudENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEicKD2ZlYXR1cmVfdmVyc2lvbhgDIAEoBVIOZmVhdHVyZVZlcnNpb24SPAoKdmFyaWF0aW9ucxgEIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIbCgdnb2FsX2lkGAUgASgJQgIYAVIGZ29hbElkEhkKCHN0YXJ0X2F0GAYgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYByABKANSBnN0b3BBdBIYCgdzdG9wcGVkGAggASgIUgdzdG9wcGVkEh0KCnN0b3BwZWRfYXQYCSABKANSCXN0b3BwZWRBdBIdCgpjcmVhdGVkX2F0GAogASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgLIAEoA1IJdXBkYXRlZEF0EhkKCGdvYWxfaWRzGAwgAygJUgdnb2FsSWRzEhIKBG5hbWUYDSABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YDiABKAlSC2Rlc2NyaXB0aW9uEioKEWJhc2VfdmFyaWF0aW9uX2lkGA8gASgJUg9iYXNlVmFyaWF0aW9uSWQiRwoWRXhwZXJpbWVudFN0b3BwZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKc3RvcHBlZF9hdBgCIAEoA1IJc3RvcHBlZEF0IikKF0V4cGVyaW1lbnRBcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIoChZFeHBlcmltZW50RGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCJKCh1FeHBlcmltZW50U3RhcnRBdENoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSGQoIc3RhcnRfYXQYAiABKANSB3N0YXJ0QXQiRwocRXhwZXJpbWVudFN0b3BBdENoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSFwoHc3RvcF9hdBgCIAEoA1IGc3RvcEF0ImIKHEV4cGVyaW1lbnRQZXJpb2RDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhkKCHN0YXJ0X2F0GAIgASgDUgdzdGFydEF0EhcKB3N0b3BfYXQYAyABKANSBnN0b3BBdCJAChpFeHBlcmltZW50TmFtZUNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJVCiFFeHBlcmltZW50RGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiIYChZFeHBlcmltZW50U3RhcnRlZEV2ZW50IhkKF0V4cGVyaW1lbnRGaW5pc2hlZEV2ZW50Iv4DChVBY2NvdW50VjJDcmVhdGVkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgDIAEoCVIOYXZhdGFySW1hZ2VVcmwSJwoPb3JnYW5pemF0aW9uX2lkGAQgASgJUg5vcmdhbml6YXRpb25JZBJbChFvcmdhbml6YXRpb25fcm9sZRgFIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgGIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSGgoIZGlzYWJsZWQYByABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSHQoKZmlyc3RfbmFtZRgKIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgLIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYDCABKAlSCGxhbmd1YWdlIlYKFUFjY291bnRWMlVwZGF0ZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSJwoPb3JnYW5pemF0aW9uX2lkGAIgASgJUg5vcmdhbml6YXRpb25JZCJFChlBY2NvdW50VjJOYW1lQ2hhbmdlZEV2ZW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBISCgRuYW1lGAIgASgJUgRuYW1lImUKI0FjY291bnRWMkF2YXRhckltYWdlVVJMQ2hhbmdlZEV2ZW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBIoChBhdmF0YXJfaW1hZ2VfdXJsGAIgASgJUg5hdmF0YXJJbWFnZVVybCKaAQolQWNjb3VudFYyT3JnYW5pemF0aW9uUm9sZUNoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSWwoRb3JnYW5pemF0aW9uX3JvbGUYAiABKA4yLi5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5Pcmdhbml6YXRpb25SEG9yZ2FuaXphdGlvblJvbGUimAEKJUFjY291bnRWMkVudmlyb25tZW50Um9sZXNDaGFuZ2VkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsElkKEWVudmlyb25tZW50X3JvbGVzGAIgAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIQZW52aXJvbm1lbnRSb2xlcyItChVBY2NvdW50VjJFbmFibGVkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsIi4KFkFjY291bnRWMkRpc2FibGVkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsIi0KFUFjY291bnRWMkRlbGV0ZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwi1wEKGFNlYXJjaEZpbHRlckNyZWF0ZWRFdmVudBISCgROYW1lGAEgASgJUgROYW1lEhQKBVF1ZXJ5GAIgASgJUgVRdWVyeRJDCgpUYXJnZXRUeXBlGAMgASgOMiMuYnVja2V0ZWVyLmFjY291bnQuRmlsdGVyVGFyZ2V0VHlwZVIKVGFyZ2V0VHlwZRIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZBIlCg5kZWZhdWx0X2ZpbHRlchgFIAEoCFINZGVmYXVsdEZpbHRlciJCChxTZWFyY2hGaWx0ZXJOYW1lQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgROYW1lGAIgASgJUgROYW1lIkUKHVNlYXJjaEZpbHRlclF1ZXJ5Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIUCgVRdWVyeRgCIAEoCVIFUXVlcnkiWAofU2VhcmNoRmlsdGVyRGVmYXVsdENoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSJQoOZGVmYXVsdF9maWx0ZXIYAiABKAhSDWRlZmF1bHRGaWx0ZXIiKgoYU2VhcmNoRmlsdGVyRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCLGAQoSQVBJS2V5Q3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEjIKBHJvbGUYAyABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgEIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCI8ChZBUElLZXlOYW1lQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIiQKEkFQSUtleUVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiJQoTQVBJS2V5RGlzYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiWwoTU2VnbWVudENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24iJQoTU2VnbWVudERlbGV0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiPQoXU2VnbWVudE5hbWVDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiUgoeU2VnbWVudERlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iVAoVU2VnbWVudFJ1bGVBZGRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIrCgRydWxlGAIgASgLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIEcnVsZSJCChdTZWdtZW50UnVsZURlbGV0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkIogBChtTZWdtZW50UnVsZUNsYXVzZUFkZGVkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIxCgZjbGF1c2UYAyABKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2VSBmNsYXVzZSJ0Ch1TZWdtZW50UnVsZUNsYXVzZURlbGV0ZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQilwEKIlNlZ21lbnRDbGF1c2VBdHRyaWJ1dGVDaGFuZ2VkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIbCgljbGF1c2VfaWQYAyABKAlSCGNsYXVzZUlkEhwKCWF0dHJpYnV0ZRgEIAEoCVIJYXR0cmlidXRlIrgBCiFTZWdtZW50Q2xhdXNlT3BlcmF0b3JDaGFuZ2VkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIbCgljbGF1c2VfaWQYAyABKAlSCGNsYXVzZUlkEj4KCG9wZXJhdG9yGAQgASgOMiIuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlLk9wZXJhdG9yUghvcGVyYXRvciKJAQocU2VnbWVudENsYXVzZVZhbHVlQWRkZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQSFAoFdmFsdWUYBCABKAlSBXZhbHVlIosBCh5TZWdtZW50Q2xhdXNlVmFsdWVSZW1vdmVkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIbCgljbGF1c2VfaWQYAyABKAlSCGNsYXVzZUlkEhQKBXZhbHVlGAQgASgJUgV2YWx1ZSKNAQoVU2VnbWVudFVzZXJBZGRlZEV2ZW50Eh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBIZCgh1c2VyX2lkcxgCIAMoCVIHdXNlcklkcxI6CgVzdGF0ZRgDIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSKPAQoXU2VnbWVudFVzZXJEZWxldGVkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhkKCHVzZXJfaWRzGAIgAygJUgd1c2VySWRzEjoKBXN0YXRlGAMgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlIrMBChtTZWdtZW50QnVsa1VwbG9hZFVzZXJzRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjkKBnN0YXR1cxgCIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUi1gEKKFNlZ21lbnRCdWxrVXBsb2FkVXNlcnNTdGF0dXNDaGFuZ2VkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjkKBnN0YXR1cxgCIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSFAoFY291bnQYBCABKANSBWNvdW50IvQBChdFbnZpcm9ubWVudENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHAoJbmFtZXNwYWNlGAIgASgJUgluYW1lc3BhY2USEgoEbmFtZRgDIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb24SGAoHZGVsZXRlZBgFIAEoCFIHZGVsZXRlZBIdCgpjcmVhdGVkX2F0GAYgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgHIAEoA1IJdXBkYXRlZEF0Eh0KCnByb2plY3RfaWQYCCABKAlSCXByb2plY3RJZCI9ChdFbnZpcm9ubWVudFJlbmFtZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJWCiJFbnZpcm9ubWVudERlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iRwoXRW52aXJvbm1lbnREZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhwKCW5hbWVzcGFjZRgCIAEoCVIJbmFtZXNwYWNlIp4CChlFbnZpcm9ubWVudFYyQ3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIdCgpwcm9qZWN0X2lkGAUgASgJUglwcm9qZWN0SWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEh0KCmNyZWF0ZWRfYXQYByABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAggASgDUgl1cGRhdGVkQXQSJwoPcmVxdWlyZV9jb21tZW50GAkgASgIUg5yZXF1aXJlQ29tbWVudCKAAQoZRW52aXJvbm1lbnRWMlJlbmFtZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKcHJvamVjdF9pZBgCIAEoCVIJcHJvamVjdElkEhkKCG9sZF9uYW1lGAMgASgJUgdvbGROYW1lEhkKCG5ld19uYW1lGAQgASgJUgduZXdOYW1lIrsBCiRFbnZpcm9ubWVudFYyRGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSHQoKcHJvamVjdF9pZBgDIAEoCVIJcHJvamVjdElkEicKD29sZF9kZXNjcmlwdGlvbhgEIAEoCVIOb2xkRGVzY3JpcHRpb24SJwoPbmV3X2Rlc2NyaXB0aW9uGAUgASgJUg5uZXdEZXNjcmlwdGlvbiKVAQonRW52aXJvbm1lbnRWMlJlcXVpcmVDb21tZW50Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCnByb2plY3RfaWQYAyABKAlSCXByb2plY3RJZBInCg9yZXF1aXJlX2NvbW1lbnQYBCABKAhSDnJlcXVpcmVDb21tZW50Il8KGkVudmlyb25tZW50VjJBcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCnByb2plY3RfaWQYAyABKAlSCXByb2plY3RJZCJhChxFbnZpcm9ubWVudFYyVW5hcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCnByb2plY3RfaWQYAyABKAlSCXByb2plY3RJZCKpAgoXQXV0b09wc1J1bGVDcmVhdGVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEjUKCG9wc190eXBlGAIgASgOMhouYnVja2V0ZWVyLmF1dG9vcHMuT3BzVHlwZVIHb3BzVHlwZRIzCgdjbGF1c2VzGAMgAygLMhkuYnVja2V0ZWVyLmF1dG9vcHMuQ2xhdXNlUgdjbGF1c2VzEh0KCmNyZWF0ZWRfYXQYBSABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAYgASgDUgl1cGRhdGVkQXQSPwoKb3BzX3N0YXR1cxgHIAEoDjIgLmJ1Y2tldGVlci5hdXRvb3BzLkF1dG9PcHNTdGF0dXNSCW9wc1N0YXR1c0oECAQQBSIZChdBdXRvT3BzUnVsZVN0b3BwZWRFdmVudCIZChdBdXRvT3BzUnVsZURlbGV0ZWRFdmVudCJXCh5BdXRvT3BzUnVsZU9wc1R5cGVDaGFuZ2VkRXZlbnQSNQoIb3BzX3R5cGUYASABKA4yGi5idWNrZXRlZXIuYXV0b29wcy5PcHNUeXBlUgdvcHNUeXBlIiQKIkF1dG9PcHNSdWxlVHJpZ2dlcmVkQXRDaGFuZ2VkRXZlbnQiYwogQXV0b09wc1J1bGVPcHNTdGF0dXNDaGFuZ2VkRXZlbnQSPwoKb3BzX3N0YXR1cxgBIAEoDjIgLmJ1Y2tldGVlci5hdXRvb3BzLkF1dG9PcHNTdGF0dXNSCW9wc1N0YXR1cyKVAQocT3BzRXZlbnRSYXRlQ2xhdXNlQWRkZWRFdmVudBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkElgKFW9wc19ldmVudF9yYXRlX2NsYXVzZRgCIAEoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVISb3BzRXZlbnRSYXRlQ2xhdXNlIpcBCh5PcHNFdmVudFJhdGVDbGF1c2VDaGFuZ2VkRXZlbnQSGwoJY2xhdXNlX2lkGAEgASgJUghjbGF1c2VJZBJYChVvcHNfZXZlbnRfcmF0ZV9jbGF1c2UYAiABKAsyJS5idWNrZXRlZXIuYXV0b29wcy5PcHNFdmVudFJhdGVDbGF1c2VSEm9wc0V2ZW50UmF0ZUNsYXVzZSI8Ch1BdXRvT3BzUnVsZUNsYXVzZURlbGV0ZWRFdmVudBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkIoMBChhEYXRldGltZUNsYXVzZUFkZGVkRXZlbnQSGwoJY2xhdXNlX2lkGAEgASgJUghjbGF1c2VJZBJKCg9kYXRldGltZV9jbGF1c2UYAiABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2UihQEKGkRhdGV0aW1lQ2xhdXNlQ2hhbmdlZEV2ZW50EhsKCWNsYXVzZV9pZBgBIAEoCVIIY2xhdXNlSWQSSgoPZGF0ZXRpbWVfY2xhdXNlGAIgASgLMiEuYnVja2V0ZWVyLmF1dG9vcHMuRGF0ZXRpbWVDbGF1c2VSDmRhdGV0aW1lQ2xhdXNlInAKEFB1c2hDcmVhdGVkRXZlbnQSLgoTZmNtX3NlcnZpY2VfYWNjb3VudBgBIAEoCVIRZmNtU2VydmljZUFjY291bnQSEgoEdGFncxgDIAMoCVIEdGFncxISCgRuYW1lGAQgASgJUgRuYW1lSgQIAhADIhIKEFB1c2hEZWxldGVkRXZlbnQiKAoSUHVzaFRhZ3NBZGRlZEV2ZW50EhIKBHRhZ3MYAiADKAlSBHRhZ3MiKgoUUHVzaFRhZ3NEZWxldGVkRXZlbnQSEgoEdGFncxgCIAMoCVIEdGFncyImChBQdXNoUmVuYW1lZEV2ZW50EhIKBG5hbWUYAiABKAlSBG5hbWUiKgoUUHVzaFRhZ3NVcGRhdGVkRXZlbnQSEgoEdGFncxgCIAMoCVIEdGFncyJYChBQdXNoVXBkYXRlZEV2ZW50EjAKBG5hbWUYASABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVSBG5hbWUSEgoEdGFncxgCIAMoCVIEdGFncyLDAQoYU3Vic2NyaXB0aW9uQ3JlYXRlZEV2ZW50ElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzEj8KCXJlY2lwaWVudBgCIAEoCzIhLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50UglyZWNpcGllbnQSEgoEbmFtZRgDIAEoCVIEbmFtZSIaChhTdWJzY3JpcHRpb25EZWxldGVkRXZlbnQiGgoYU3Vic2NyaXB0aW9uRW5hYmxlZEV2ZW50IhsKGVN1YnNjcmlwdGlvbkRpc2FibGVkRXZlbnQidwohU3Vic2NyaXB0aW9uU291cmNlVHlwZXNBZGRlZEV2ZW50ElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzInkKI1N1YnNjcmlwdGlvblNvdXJjZVR5cGVzRGVsZXRlZEV2ZW50ElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIi4KGFN1YnNjcmlwdGlvblJlbmFtZWRFdmVudBISCgRuYW1lGAEgASgJUgRuYW1lIsgBCh1BZG1pblN1YnNjcmlwdGlvbkNyZWF0ZWRFdmVudBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYAiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYAyABKAlSBG5hbWUiHwodQWRtaW5TdWJzY3JpcHRpb25EZWxldGVkRXZlbnQiHwodQWRtaW5TdWJzY3JpcHRpb25FbmFibGVkRXZlbnQiIAoeQWRtaW5TdWJzY3JpcHRpb25EaXNhYmxlZEV2ZW50InwKJkFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNBZGRlZEV2ZW50ElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzIn4KKEFkbWluU3Vic2NyaXB0aW9uU291cmNlVHlwZXNEZWxldGVkRXZlbnQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMiMwodQWRtaW5TdWJzY3JpcHRpb25SZW5hbWVkRXZlbnQSEgoEbmFtZRgBIAEoCVIEbmFtZSKLAgoTUHJvamVjdENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uEhoKCGRpc2FibGVkGAMgASgIUghkaXNhYmxlZBIUCgV0cmlhbBgEIAEoCFIFdHJpYWwSIwoNY3JlYXRvcl9lbWFpbBgFIAEoCVIMY3JlYXRvckVtYWlsEh0KCmNyZWF0ZWRfYXQYBiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSEgoEbmFtZRgIIAEoCVIEbmFtZRIZCgh1cmxfY29kZRgJIAEoCVIHdXJsQ29kZSJSCh5Qcm9qZWN0RGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiI5ChNQcm9qZWN0UmVuYW1lZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIiUKE1Byb2plY3RFbmFibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIiYKFFByb2plY3REaXNhYmxlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCKQAgoYUHJvamVjdFRyaWFsQ3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlIiwKGlByb2plY3RUcmlhbENvbnZlcnRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCJdChZQcmVyZXF1aXNpdGVBZGRlZEV2ZW50EkMKDHByZXJlcXVpc2l0ZRgBIAEoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVIMcHJlcmVxdWlzaXRlImgKIVByZXJlcXVpc2l0ZVZhcmlhdGlvbkNoYW5nZWRFdmVudBJDCgxwcmVyZXF1aXNpdGUYASABKAsyHy5idWNrZXRlZXIuZmVhdHVyZS5QcmVyZXF1aXNpdGVSDHByZXJlcXVpc2l0ZSI5ChhQcmVyZXF1aXNpdGVSZW1vdmVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkIvsBCh5Qcm9ncmVzc2l2ZVJvbGxvdXRDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBIsCgZjbGF1c2UYAyABKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgZjbGF1c2USHQoKY3JlYXRlZF9hdBgEIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBSABKANSCXVwZGF0ZWRBdBI+CgR0eXBlGAYgASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVSBHR5cGUi5QEKHlByb2dyZXNzaXZlUm9sbG91dFN0b3BwZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSRAoGc3RhdHVzGAIgASgOMiwuYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlN0YXR1c1IGc3RhdHVzEk4KCnN0b3BwZWRfYnkYAyABKA4yLy5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RvcHBlZEJ5UglzdG9wcGVkQnkSHQoKc3RvcHBlZF9hdBgEIAEoA1IJc3RvcHBlZEF0IjAKHlByb2dyZXNzaXZlUm9sbG91dERlbGV0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiVAoxUHJvZ3Jlc3NpdmVSb2xsb3V0U2NoZWR1bGVUcmlnZ2VyZWRBdENoYW5nZWRFdmVudBIfCgtzY2hlZHVsZV9pZBgBIAEoCVIKc2NoZWR1bGVJZCKoAgoYT3JnYW5pemF0aW9uQ3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEhQKBXRyaWFsGAcgASgIUgV0cmlhbBIdCgpjcmVhdGVkX2F0GAggASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgJIAEoA1IJdXBkYXRlZEF0Eh8KC293bmVyX2VtYWlsGAogASgJUgpvd25lckVtYWlsIlcKI09yZ2FuaXphdGlvbkRlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iVQoiT3JnYW5pemF0aW9uT3duZXJFbWFpbENoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHwoLb3duZXJfZW1haWwYAiABKAlSCm93bmVyRW1haWwiQgocT3JnYW5pemF0aW9uTmFtZUNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSIqChhPcmdhbml6YXRpb25FbmFibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIisKGU9yZ2FuaXphdGlvbkRpc2FibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIisKGU9yZ2FuaXphdGlvbkFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkIi0KG09yZ2FuaXphdGlvblVuYXJjaGl2ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiMQofT3JnYW5pemF0aW9uVHJpYWxDb252ZXJ0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQi6wIKF0ZsYWdUcmlnZ2VyQ3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRI3CgR0eXBlGAQgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YBSABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgGIAEoCVILZGVzY3JpcHRpb24SFAoFdG9rZW4YByABKAlSBXRva2VuEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQikQEKFUZsYWdUcmlnZ2VyUmVzZXRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2USFAoFdG9rZW4YBCABKAlSBXRva2VuIqoBCiJGbGFnVHJpZ2dlckRlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIgCgtkZXNjcmlwdGlvbhgEIAEoCVILZGVzY3JpcHRpb24ifgoYRmxhZ1RyaWdnZXJEaXNhYmxlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZSJ9ChdGbGFnVHJpZ2dlckVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEjMKFWVudmlyb25tZW50X25hbWVzcGFjZRgDIAEoCVIUZW52aXJvbm1lbnROYW1lc3BhY2UifQoXRmxhZ1RyaWdnZXJEZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlItMBChxGbGFnVHJpZ2dlclVzYWdlVXBkYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSMwoVZW52aXJvbm1lbnRfbmFtZXNwYWNlGAMgASgJUhRlbnZpcm9ubWVudE5hbWVzcGFjZRIqChFsYXN0X3RyaWdnZXJlZF9hdBgEIAEoA1IPbGFzdFRyaWdnZXJlZEF0EiMKDXRyaWdnZXJfdGltZXMYBSABKAVSDHRyaWdnZXJUaW1lcyJVCh5BY2NvdW50VjJGaXJzdE5hbWVDaGFuZ2VkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsEh0KCmZpcnN0X25hbWUYAiABKAlSCWZpcnN0TmFtZSJSCh1BY2NvdW50VjJMYXN0TmFtZUNoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSGwoJbGFzdF9uYW1lGAIgASgJUghsYXN0TmFtZSJRCh1BY2NvdW50VjJMYW5ndWFnZUNoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSGgoIbGFuZ3VhZ2UYAiABKAlSCGxhbmd1YWdlQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudC9kb21haW5iBnByb3RvMwrKAQoqcHJvdG8vZXZlbnQvZG9tYWluL2xvY2FsaXplZF9tZXNzYWdlLnByb3RvEhZidWNrZXRlZXIuZXZlbnQuZG9tYWluIkQKEExvY2FsaXplZE1lc3NhZ2USFgoGbG9jYWxlGAEgASgJUgZsb2NhbGUSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnQvZG9tYWluYgZwcm90bzMK+gUKHXByb3RvL2F1ZGl0bG9nL2F1ZGl0bG9nLnByb3RvEhJidWNrZXRlZXIuYXVkaXRsb2caGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aHnByb3RvL2V2ZW50L2RvbWFpbi9ldmVudC5wcm90bxoqcHJvdG8vZXZlbnQvZG9tYWluL2xvY2FsaXplZF9tZXNzYWdlLnByb3RvIqEECghBdWRpdExvZxIOCgJpZBgBIAEoCVICaWQSHAoJdGltZXN0YW1wGAIgASgDUgl0aW1lc3RhbXASSQoLZW50aXR5X3R5cGUYAyABKA4yKC5idWNrZXRlZXIuZXZlbnQuZG9tYWluLkV2ZW50LkVudGl0eVR5cGVSCmVudGl0eVR5cGUSGwoJZW50aXR5X2lkGAQgASgJUghlbnRpdHlJZBI2CgR0eXBlGAUgASgOMiIuYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FdmVudC5UeXBlUgR0eXBlEioKBWV2ZW50GAYgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIFZXZlbnQSNgoGZWRpdG9yGAcgASgLMh4uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FZGl0b3JSBmVkaXRvchI5CgdvcHRpb25zGAggASgLMh8uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5PcHRpb25zUgdvcHRpb25zElUKEWxvY2FsaXplZF9tZXNzYWdlGAkgASgLMiguYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5Mb2NhbGl6ZWRNZXNzYWdlUhBsb2NhbGl6ZWRNZXNzYWdlEh8KC2VudGl0eV9kYXRhGAogASgJUgplbnRpdHlEYXRhEjAKFHByZXZpb3VzX2VudGl0eV9kYXRhGAsgASgJUhJwcmV2aW91c0VudGl0eURhdGFCMlowZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1ZGl0bG9nYgZwcm90bzMKsBMKHHByb3RvL2F1ZGl0bG9nL3NlcnZpY2UucHJvdG8SEmJ1Y2tldGVlci5hdWRpdGxvZxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGh1wcm90by9hdWRpdGxvZy9hdWRpdGxvZy5wcm90byKEBAoUTGlzdEF1ZGl0TG9nc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYAyABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlEksKCG9yZGVyX2J5GAQgASgOMjAuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBdWRpdExvZ3NSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSYAoPb3JkZXJfZGlyZWN0aW9uGAUgASgOMjcuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBdWRpdExvZ3NSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgGIAEoCVINc2VhcmNoS2V5d29yZBISCgRmcm9tGAcgASgDUgRmcm9tEg4KAnRvGAggASgDUgJ0bxI8CgtlbnRpdHlfdHlwZRgJIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUgplbnRpdHlUeXBlIiUKB09yZGVyQnkSCwoHREVGQVVMVBAAEg0KCVRJTUVTVEFNUBABIiMKDk9yZGVyRGlyZWN0aW9uEggKBERFU0MQABIHCgNBU0MQASKNAQoVTGlzdEF1ZGl0TG9nc1Jlc3BvbnNlEjsKCmF1ZGl0X2xvZ3MYASADKAsyHC5idWNrZXRlZXIuYXVkaXRsb2cuQXVkaXRMb2dSCWF1ZGl0TG9ncxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCLeAwoZTGlzdEFkbWluQXVkaXRMb2dzUmVxdWVzdBIbCglwYWdlX3NpemUYASABKANSCHBhZ2VTaXplEhYKBmN1cnNvchgCIAEoCVIGY3Vyc29yElAKCG9yZGVyX2J5GAMgASgOMjUuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBZG1pbkF1ZGl0TG9nc1JlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJlCg9vcmRlcl9kaXJlY3Rpb24YBCABKA4yPC5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEFkbWluQXVkaXRMb2dzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBSABKAlSDXNlYXJjaEtleXdvcmQSEgoEZnJvbRgGIAEoA1IEZnJvbRIOCgJ0bxgHIAEoA1ICdG8SPAoLZW50aXR5X3R5cGUYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIKZW50aXR5VHlwZSIlCgdPcmRlckJ5EgsKB0RFRkFVTFQQABINCglUSU1FU1RBTVAQASIjCg5PcmRlckRpcmVjdGlvbhIICgRERVNDEAASBwoDQVNDEAEikgEKGkxpc3RBZG1pbkF1ZGl0TG9nc1Jlc3BvbnNlEjsKCmF1ZGl0X2xvZ3MYASADKAsyHC5idWNrZXRlZXIuYXVkaXRsb2cuQXVkaXRMb2dSCWF1ZGl0TG9ncxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudCL0AwoZTGlzdEZlYXR1cmVIaXN0b3J5UmVxdWVzdBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSGwoJcGFnZV9zaXplGAIgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAyABKAlSBmN1cnNvchIzChVlbnZpcm9ubWVudF9uYW1lc3BhY2UYBCABKAlSFGVudmlyb25tZW50TmFtZXNwYWNlElAKCG9yZGVyX2J5GAUgASgOMjUuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RGZWF0dXJlSGlzdG9yeVJlcXVlc3QuT3JkZXJCeVIHb3JkZXJCeRJlCg9vcmRlcl9kaXJlY3Rpb24YBiABKA4yPC5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEZlYXR1cmVIaXN0b3J5UmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYByABKAlSDXNlYXJjaEtleXdvcmQSEgoEZnJvbRgIIAEoA1IEZnJvbRIOCgJ0bxgJIAEoA1ICdG8iJQoHT3JkZXJCeRILCgdERUZBVUxUEAASDQoJVElNRVNUQU1QEAEiIwoOT3JkZXJEaXJlY3Rpb24SCAoEREVTQxAAEgcKA0FTQxABIpIBChpMaXN0RmVhdHVyZUhpc3RvcnlSZXNwb25zZRI7CgphdWRpdF9sb2dzGAEgAygLMhwuYnVja2V0ZWVyLmF1ZGl0bG9nLkF1ZGl0TG9nUglhdWRpdExvZ3MSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQy5wIKD0F1ZGl0TG9nU2VydmljZRJmCg1MaXN0QXVkaXRMb2dzEiguYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBdWRpdExvZ3NSZXF1ZXN0GikuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBdWRpdExvZ3NSZXNwb25zZSIAEnUKEkxpc3RBZG1pbkF1ZGl0TG9ncxItLmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0QWRtaW5BdWRpdExvZ3NSZXF1ZXN0Gi4uYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBZG1pbkF1ZGl0TG9nc1Jlc3BvbnNlIgASdQoSTGlzdEZlYXR1cmVIaXN0b3J5Ei0uYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RGZWF0dXJlSGlzdG9yeVJlcXVlc3QaLi5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEZlYXR1cmVIaXN0b3J5UmVzcG9uc2UiAEIyWjBnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYXVkaXRsb2diBnByb3RvMw== + auditlogDescriptor: CuQBChlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiNgoDQW55EhkKCHR5cGVfdXJsGAEgASgJUgd0eXBlVXJsEhQKBXZhbHVlGAIgASgMUgV2YWx1ZUJ2ChNjb20uZ29vZ2xlLnByb3RvYnVmQghBbnlQcm90b1ABWixnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi9hbnlwYqICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCoYECh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIjCgtEb3VibGVWYWx1ZRIUCgV2YWx1ZRgBIAEoAVIFdmFsdWUiIgoKRmxvYXRWYWx1ZRIUCgV2YWx1ZRgBIAEoAlIFdmFsdWUiIgoKSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoA1IFdmFsdWUiIwoLVUludDY0VmFsdWUSFAoFdmFsdWUYASABKARSBXZhbHVlIiIKCkludDMyVmFsdWUSFAoFdmFsdWUYASABKAVSBXZhbHVlIiMKC1VJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgNUgV2YWx1ZSIhCglCb29sVmFsdWUSFAoFdmFsdWUYASABKAhSBXZhbHVlIiMKC1N0cmluZ1ZhbHVlEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIiCgpCeXRlc1ZhbHVlEhQKBXZhbHVlGAEgASgMUgV2YWx1ZUKDAQoTY29tLmdvb2dsZS5wcm90b2J1ZkINV3JhcHBlcnNQcm90b1ABWjFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9rbm93bi93cmFwcGVyc3Bi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzMKxwMKGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSLaAgoGQ2xhdXNlEg4KAmlkGAEgASgJUgJpZBIcCglhdHRyaWJ1dGUYAiABKAlSCWF0dHJpYnV0ZRI+CghvcGVyYXRvchgDIAEoDjIiLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3ISFgoGdmFsdWVzGAQgAygJUgZ2YWx1ZXMiyQEKCE9wZXJhdG9yEgoKBkVRVUFMUxAAEgYKAklOEAESDQoJRU5EU19XSVRIEAISDwoLU1RBUlRTX1dJVEgQAxILCgdTRUdNRU5UEAQSCwoHR1JFQVRFUhAFEhQKEEdSRUFURVJfT1JfRVFVQUwQBhIICgRMRVNTEAcSEQoNTEVTU19PUl9FUVVBTBAIEgoKBkJFRk9SRRAJEgkKBUFGVEVSEAoSEAoMRkVBVFVSRV9GTEFHEAsSEwoPUEFSVElBTExZX01BVENIEAxCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2ZlYXR1cmViBnByb3RvMwq7BAoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiLQoNRml4ZWRTdHJhdGVneRIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbiKiAQoPUm9sbG91dFN0cmF0ZWd5EkwKCnZhcmlhdGlvbnMYASADKAsyLC5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3kuVmFyaWF0aW9uUgp2YXJpYXRpb25zGkEKCVZhcmlhdGlvbhIcCgl2YXJpYXRpb24YASABKAlSCXZhcmlhdGlvbhIWCgZ3ZWlnaHQYAiABKAVSBndlaWdodCL4AQoIU3RyYXRlZ3kSNAoEdHlwZRgBIAEoDjIgLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5LlR5cGVSBHR5cGUSRwoOZml4ZWRfc3RyYXRlZ3kYAiABKAsyIC5idWNrZXRlZXIuZmVhdHVyZS5GaXhlZFN0cmF0ZWd5Ug1maXhlZFN0cmF0ZWd5Ek0KEHJvbGxvdXRfc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSD3JvbGxvdXRTdHJhdGVneSIeCgRUeXBlEgkKBUZJWEVEEAASCwoHUk9MTE9VVBABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqQIKGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGnByb3RvL2ZlYXR1cmUvY2xhdXNlLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvIoQBCgRSdWxlEg4KAmlkGAEgASgJUgJpZBI3CghzdHJhdGVneRgCIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneRIzCgdjbGF1c2VzGAMgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuQ2xhdXNlUgdjbGF1c2VzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqAEKGnByb3RvL2ZlYXR1cmUvdGFyZ2V0LnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSI8CgZUYXJnZXQSHAoJdmFyaWF0aW9uGAEgASgJUgl2YXJpYXRpb24SFAoFdXNlcnMYAiADKAlSBXVzZXJzQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMK1gEKHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSJnCglWYXJpYXRpb24SDgoCaWQYASABKAlSAmlkEhQKBXZhbHVlGAIgASgJUgV2YWx1ZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCvQCCipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlIvcBChNGZWF0dXJlTGFzdFVzZWRJbmZvEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIYCgd2ZXJzaW9uGAIgASgFUgd2ZXJzaW9uEiAKDGxhc3RfdXNlZF9hdBgDIAEoA1IKbGFzdFVzZWRBdBIdCgpjcmVhdGVkX2F0GAQgASgDUgljcmVhdGVkQXQSMgoVY2xpZW50X29sZGVzdF92ZXJzaW9uGAUgASgJUhNjbGllbnRPbGRlc3RWZXJzaW9uEjIKFWNsaWVudF9sYXRlc3RfdmVyc2lvbhgGIAEoCVITY2xpZW50TGF0ZXN0VmVyc2lvbkIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCsIBCiBwcm90by9mZWF0dXJlL3ByZXJlcXVpc2l0ZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUiUAoMUHJlcmVxdWlzaXRlEh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKqgsKG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxIRYnVja2V0ZWVyLmZlYXR1cmUaGHByb3RvL2ZlYXR1cmUvcnVsZS5wcm90bxoacHJvdG8vZmVhdHVyZS90YXJnZXQucHJvdG8aHXByb3RvL2ZlYXR1cmUvdmFyaWF0aW9uLnByb3RvGhxwcm90by9mZWF0dXJlL3N0cmF0ZWd5LnByb3RvGipwcm90by9mZWF0dXJlL2ZlYXR1cmVfbGFzdF91c2VkX2luZm8ucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvItIHCgdGZWF0dXJlEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbhIYCgdlbmFibGVkGAQgASgIUgdlbmFibGVkEhgKB2RlbGV0ZWQYBSABKAhSB2RlbGV0ZWQSOQoWZXZhbHVhdGlvbl91bmRlbGF5YWJsZRgGIAEoCEICGAFSFWV2YWx1YXRpb25VbmRlbGF5YWJsZRIQCgN0dGwYByABKAVSA3R0bBIYCgd2ZXJzaW9uGAggASgFUgd2ZXJzaW9uEh0KCmNyZWF0ZWRfYXQYCSABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAogASgDUgl1cGRhdGVkQXQSPAoKdmFyaWF0aW9ucxgLIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIzCgd0YXJnZXRzGAwgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGA0gAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgOIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSIwoNb2ZmX3ZhcmlhdGlvbhgPIAEoCVIMb2ZmVmFyaWF0aW9uEhIKBHRhZ3MYECADKAlSBHRhZ3MSTAoObGFzdF91c2VkX2luZm8YESABKAsyJi5idWNrZXRlZXIuZmVhdHVyZS5GZWF0dXJlTGFzdFVzZWRJbmZvUgxsYXN0VXNlZEluZm8SHgoKbWFpbnRhaW5lchgSIAEoCVIKbWFpbnRhaW5lchJPCg52YXJpYXRpb25fdHlwZRgTIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRIaCghhcmNoaXZlZBgUIAEoCFIIYXJjaGl2ZWQSRQoNcHJlcmVxdWlzaXRlcxgVIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxIjCg1zYW1wbGluZ19zZWVkGBYgASgJUgxzYW1wbGluZ1NlZWQiPgoNVmFyaWF0aW9uVHlwZRIKCgZTVFJJTkcQABILCgdCT09MRUFOEAESCgoGTlVNQkVSEAISCAoESlNPThADIlIKCEZlYXR1cmVzEjYKCGZlYXR1cmVzGAEgAygLMhouYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZVIIZmVhdHVyZXMSDgoCaWQYAiABKAlSAmlkIlMKA1RhZxIOCgJpZBgBIAEoCVICaWQSHQoKY3JlYXRlZF9hdBgCIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCrUIChtwcm90by9mZWF0dXJlL3NlZ21lbnQucHJvdG8SEWJ1Y2tldGVlci5mZWF0dXJlGhhwcm90by9mZWF0dXJlL3J1bGUucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90byK0BAoHU2VnbWVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SLQoFcnVsZXMYBCADKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgVydWxlcxIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0EhwKB3ZlcnNpb24YByABKANCAhgBUgd2ZXJzaW9uEhgKB2RlbGV0ZWQYCCABKAhSB2RlbGV0ZWQSLgoTaW5jbHVkZWRfdXNlcl9jb3VudBgJIAEoA1IRaW5jbHVkZWRVc2VyQ291bnQSMgoTZXhjbHVkZWRfdXNlcl9jb3VudBgKIAEoA0ICGAFSEWV4Y2x1ZGVkVXNlckNvdW50EjkKBnN0YXR1cxgLIAEoDjIhLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnQuU3RhdHVzUgZzdGF0dXMSJwoQaXNfaW5fdXNlX3N0YXR1cxgMIAEoCFINaXNJblVzZVN0YXR1cxI2CghmZWF0dXJlcxgNIAMoCzIaLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmVSCGZlYXR1cmVzIj4KBlN0YXR1cxILCgdJTklUSUFMEAASDQoJVVBMT0FESU5HEAESDAoIU1VDRUVERUQQAhIKCgZGQUlMRUQQAyLUAQoLU2VnbWVudFVzZXISDgoCaWQYASABKAlSAmlkEh0KCnNlZ21lbnRfaWQYAiABKAlSCXNlZ21lbnRJZBIXCgd1c2VyX2lkGAMgASgJUgZ1c2VySWQSOgoFc3RhdGUYBCABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUSGAoHZGVsZXRlZBgFIAEoCFIHZGVsZXRlZCInCgVTdGF0ZRIMCghJTkNMVURFRBAAEhAKCEVYQ0xVREVEEAEaAggBIoIBCgxTZWdtZW50VXNlcnMSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEjQKBXVzZXJzGAIgAygLMh4uYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXJSBXVzZXJzEh0KCnVwZGF0ZWRfYXQYAyABKANSCXVwZGF0ZWRBdEIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZmVhdHVyZWIGcHJvdG8zCucDCiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IukCCg1FbnZpcm9ubWVudFYyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIdCgpwcm9qZWN0X2lkGAUgASgJUglwcm9qZWN0SWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEh0KCmNyZWF0ZWRfYXQYByABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAggASgDUgl1cGRhdGVkQXQSJwoPb3JnYW5pemF0aW9uX2lkGAkgASgJUg5vcmdhbml6YXRpb25JZBInCg9yZXF1aXJlX2NvbW1lbnQYCiABKAhSDnJlcXVpcmVDb21tZW50EiwKEmZlYXR1cmVfZmxhZ19jb3VudBgLIAEoBVIQZmVhdHVyZUZsYWdDb3VudEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwr9AwofcHJvdG8vZW52aXJvbm1lbnQvcHJvamVjdC5wcm90bxIVYnVja2V0ZWVyLmVudmlyb25tZW50IoMDCgdQcm9qZWN0Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlEicKD29yZ2FuaXphdGlvbl9pZBgKIAEoCVIOb3JnYW5pemF0aW9uSWQSKwoRZW52aXJvbm1lbnRfY291bnQYCyABKAVSEGVudmlyb25tZW50Q291bnQSLAoSZmVhdHVyZV9mbGFnX2NvdW50GAwgASgFUhBmZWF0dXJlRmxhZ0NvdW50QjVaM2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9lbnZpcm9ubWVudGIGcHJvdG8zCq8ECiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8SFWJ1Y2tldGVlci5lbnZpcm9ubWVudCKwAwoMT3JnYW5pemF0aW9uEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhkKCHVybF9jb2RlGAMgASgJUgd1cmxDb2RlEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSGgoIYXJjaGl2ZWQYBiABKAhSCGFyY2hpdmVkEhQKBXRyaWFsGAcgASgIUgV0cmlhbBIdCgpjcmVhdGVkX2F0GAggASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgJIAEoA1IJdXBkYXRlZEF0EiEKDHN5c3RlbV9hZG1pbhgKIAEoCFILc3lzdGVtQWRtaW4SIwoNcHJvamVjdF9jb3VudBgLIAEoBVIMcHJvamVjdENvdW50EisKEWVudmlyb25tZW50X2NvdW50GAwgASgFUhBlbnZpcm9ubWVudENvdW50Eh0KCnVzZXJfY291bnQYDSABKAVSCXVzZXJDb3VudBIfCgtvd25lcl9lbWFpbBgOIAEoCVIKb3duZXJFbWFpbEI1WjNnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZW52aXJvbm1lbnRiBnByb3RvMwqQAwohcHJvdG8vYWNjb3VudC9zZWFyY2hfZmlsdGVyLnByb3RvEhFidWNrZXRlZXIuYWNjb3VudCLpAQoMU2VhcmNoRmlsdGVyEg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEhQKBXF1ZXJ5GAMgASgJUgVxdWVyeRJRChJmaWx0ZXJfdGFyZ2V0X3R5cGUYBCABKA4yIy5idWNrZXRlZXIuYWNjb3VudC5GaWx0ZXJUYXJnZXRUeXBlUhBmaWx0ZXJUYXJnZXRUeXBlEiUKDmVudmlyb25tZW50X2lkGAUgASgJUg1lbnZpcm9ubWVudElkEiUKDmRlZmF1bHRfZmlsdGVyGAYgASgIUg1kZWZhdWx0RmlsdGVyKjEKEEZpbHRlclRhcmdldFR5cGUSCwoHVU5LTk9XThAAEhAKDEZFQVRVUkVfRkxBRxABQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hY2NvdW50YgZwcm90bzMKoxMKG3Byb3RvL2FjY291bnQvYWNjb3VudC5wcm90bxIRYnVja2V0ZWVyLmFjY291bnQaI3Byb3RvL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnByb3RvGh9wcm90by9lbnZpcm9ubWVudC9wcm9qZWN0LnByb3RvGiRwcm90by9lbnZpcm9ubWVudC9vcmdhbml6YXRpb24ucHJvdG8aIXByb3RvL2FjY291bnQvc2VhcmNoX2ZpbHRlci5wcm90byKrAgoHQWNjb3VudBIOCgJpZBgBIAEoCVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWUSMwoEcm9sZRgEIAEoDjIfLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnQuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgFIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAggASgIUgdkZWxldGVkIjkKBFJvbGUSCgoGVklFV0VSEAASCgoGRURJVE9SEAESCQoFT1dORVIQAhIOCgpVTkFTU0lHTkVEEGM6AhgBIqgICglBY2NvdW50VjISFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUSKAoQYXZhdGFyX2ltYWdlX3VybBgDIAEoCVIOYXZhdGFySW1hZ2VVcmwSJwoPb3JnYW5pemF0aW9uX2lkGAQgASgJUg5vcmdhbml6YXRpb25JZBJbChFvcmdhbml6YXRpb25fcm9sZRgFIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZRJZChFlbnZpcm9ubWVudF9yb2xlcxgGIAMoCzIsLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5FbnZpcm9ubWVudFJvbGVSEGVudmlyb25tZW50Um9sZXMSGgoIZGlzYWJsZWQYByABKAhSCGRpc2FibGVkEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSRgoOc2VhcmNoX2ZpbHRlcnMYCiADKAsyHy5idWNrZXRlZXIuYWNjb3VudC5TZWFyY2hGaWx0ZXJSDXNlYXJjaEZpbHRlcnMSHQoKZmlyc3RfbmFtZRgLIAEoCVIJZmlyc3ROYW1lEhsKCWxhc3RfbmFtZRgMIAEoCVIIbGFzdE5hbWUSGgoIbGFuZ3VhZ2UYDSABKAlSCGxhbmd1YWdlEhsKCWxhc3Rfc2VlbhgOIAEoA1IIbGFzdFNlZW4SKAoQYXZhdGFyX2ZpbGVfdHlwZRgPIAEoCVIOYXZhdGFyRmlsZVR5cGUSIQoMYXZhdGFyX2ltYWdlGBAgASgMUgthdmF0YXJJbWFnZRIrChFlbnZpcm9ubWVudF9jb3VudBgRIAEoBVIQZW52aXJvbm1lbnRDb3VudBrXAQoEUm9sZSJZCgtFbnZpcm9ubWVudBIaChZFbnZpcm9ubWVudF9VTkFTU0lHTkVEEAASFgoSRW52aXJvbm1lbnRfVklFV0VSEAESFgoSRW52aXJvbm1lbnRfRURJVE9SEAIidAoMT3JnYW5pemF0aW9uEhsKF09yZ2FuaXphdGlvbl9VTkFTU0lHTkVEEAASFwoTT3JnYW5pemF0aW9uX01FTUJFUhABEhYKEk9yZ2FuaXphdGlvbl9BRE1JThACEhYKEk9yZ2FuaXphdGlvbl9PV05FUhADGnsKD0Vudmlyb25tZW50Um9sZRIlCg5lbnZpcm9ubWVudF9pZBgBIAEoCVINZW52aXJvbm1lbnRJZBJBCgRyb2xlGAIgASgOMi0uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuRW52aXJvbm1lbnRSBHJvbGUizQYKDkNvbnNvbGVBY2NvdW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBISCgRuYW1lGAIgASgJUgRuYW1lEh0KCmF2YXRhcl91cmwYAyABKAlSCWF2YXRhclVybBImCg9pc19zeXN0ZW1fYWRtaW4YBCABKAhSDWlzU3lzdGVtQWRtaW4SRwoMb3JnYW5pemF0aW9uGAUgASgLMiMuYnVja2V0ZWVyLmVudmlyb25tZW50Lk9yZ2FuaXphdGlvblIMb3JnYW5pemF0aW9uElsKEW9yZ2FuaXphdGlvbl9yb2xlGAYgASgOMi4uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuT3JnYW5pemF0aW9uUhBvcmdhbml6YXRpb25Sb2xlEl4KEWVudmlyb25tZW50X3JvbGVzGAcgAygLMjEuYnVja2V0ZWVyLmFjY291bnQuQ29uc29sZUFjY291bnQuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzEkYKDnNlYXJjaF9maWx0ZXJzGAggAygLMh8uYnVja2V0ZWVyLmFjY291bnQuU2VhcmNoRmlsdGVyUg1zZWFyY2hGaWx0ZXJzEh0KCmZpcnN0X25hbWUYCSABKAlSCWZpcnN0TmFtZRIbCglsYXN0X25hbWUYCiABKAlSCGxhc3ROYW1lEhoKCGxhbmd1YWdlGAsgASgJUghsYW5ndWFnZRIoChBhdmF0YXJfZmlsZV90eXBlGAwgASgJUg5hdmF0YXJGaWxlVHlwZRIhCgxhdmF0YXJfaW1hZ2UYDSABKAxSC2F2YXRhckltYWdlGtYBCg9FbnZpcm9ubWVudFJvbGUSRgoLZW52aXJvbm1lbnQYASABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSOAoHcHJvamVjdBgCIAEoCzIeLmJ1Y2tldGVlci5lbnZpcm9ubWVudC5Qcm9qZWN0Ugdwcm9qZWN0EkEKBHJvbGUYAyABKA4yLS5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuUm9sZS5FbnZpcm9ubWVudFIEcm9sZUIxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYWNjb3VudGIGcHJvdG8zCuAFChtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8SEWJ1Y2tldGVlci5hY2NvdW50GiNwcm90by9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5wcm90byK1AgoGQVBJS2V5Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEjIKBHJvbGUYAyABKA4yHi5idWNrZXRlZXIuYWNjb3VudC5BUElLZXkuUm9sZVIEcm9sZRIaCghkaXNhYmxlZBgEIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdCJ5CgRSb2xlEgsKB1VOS05PV04QABIOCgpTREtfQ0xJRU5UEAESDgoKU0RLX1NFUlZFUhACEhgKFFBVQkxJQ19BUElfUkVBRF9PTkxZEAMSFAoQUFVCTElDX0FQSV9XUklURRAEEhQKEFBVQkxJQ19BUElfQURNSU4QBSKVAgoRRW52aXJvbm1lbnRBUElLZXkSMgoHYXBpX2tleRgCIAEoCzIZLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleVIGYXBpS2V5EjEKFGVudmlyb25tZW50X2Rpc2FibGVkGAMgASgIUhNlbnZpcm9ubWVudERpc2FibGVkEiEKCnByb2plY3RfaWQYBCABKAlCAhgBUglwcm9qZWN0SWQSRgoLZW52aXJvbm1lbnQYBSABKAsyJC5idWNrZXRlZXIuZW52aXJvbm1lbnQuRW52aXJvbm1lbnRWMlILZW52aXJvbm1lbnQSKAoQcHJvamVjdF91cmxfY29kZRgGIAEoCVIOcHJvamVjdFVybENvZGVKBAgBEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2FjY291bnRiBnByb3RvMwqaCwoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8SEWJ1Y2tldGVlci5hdXRvb3BzGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIoYBCgZDbGF1c2USDgoCaWQYASABKAlSAmlkEiwKBmNsYXVzZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRI+CgthY3Rpb25fdHlwZRgDIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUi3wIKEk9wc0V2ZW50UmF0ZUNsYXVzZRIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkEhcKB2dvYWxfaWQYAyABKAlSBmdvYWxJZBIbCgltaW5fY291bnQYBCABKANSCG1pbkNvdW50EikKEHRocmVhZHNob2xkX3JhdGUYBSABKAFSD3RocmVhZHNob2xkUmF0ZRJKCghvcGVyYXRvchgGIAEoDjIuLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZS5PcGVyYXRvclIIb3BlcmF0b3ISPgoLYWN0aW9uX3R5cGUYByABKA4yHS5idWNrZXRlZXIuYXV0b29wcy5BY3Rpb25UeXBlUgphY3Rpb25UeXBlIjMKCE9wZXJhdG9yEhQKEEdSRUFURVJfT1JfRVFVQUwQABIRCg1MRVNTX09SX0VRVUFMEAFKBAgBEAIiZAoORGF0ZXRpbWVDbGF1c2USEgoEdGltZRgBIAEoA1IEdGltZRI+CgthY3Rpb25fdHlwZRgCIAEoDjIdLmJ1Y2tldGVlci5hdXRvb3BzLkFjdGlvblR5cGVSCmFjdGlvblR5cGUilwEKGlByb2dyZXNzaXZlUm9sbG91dFNjaGVkdWxlEh8KC3NjaGVkdWxlX2lkGAEgASgJUgpzY2hlZHVsZUlkEh0KCmV4ZWN1dGVfYXQYAiABKANSCWV4ZWN1dGVBdBIWCgZ3ZWlnaHQYAyABKAVSBndlaWdodBIhCgx0cmlnZ2VyZWRfYXQYBCABKANSC3RyaWdnZXJlZEF0IpgBCiZQcm9ncmVzc2l2ZVJvbGxvdXRNYW51YWxTY2hlZHVsZUNsYXVzZRJLCglzY2hlZHVsZXMYASADKAsyLS5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVIJc2NoZWR1bGVzEiEKDHZhcmlhdGlvbl9pZBgCIAEoCVILdmFyaWF0aW9uSWQi2AIKKFByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2USSwoJc2NoZWR1bGVzGAEgAygLMi0uYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0U2NoZWR1bGVSCXNjaGVkdWxlcxJgCghpbnRlcnZhbBgCIAEoDjJELmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dFRlbXBsYXRlU2NoZWR1bGVDbGF1c2UuSW50ZXJ2YWxSCGludGVydmFsEh4KCmluY3JlbWVudHMYAyABKANSCmluY3JlbWVudHMSIQoMdmFyaWF0aW9uX2lkGAQgASgJUgt2YXJpYXRpb25JZCI6CghJbnRlcnZhbBILCgdVTktOT1dOEAASCgoGSE9VUkxZEAESCQoFREFJTFkQAhIKCgZXRUVLTFkQAyoyCgpBY3Rpb25UeXBlEgsKB1VOS05PV04QABIKCgZFTkFCTEUQARILCgdESVNBQkxFEAJCMVovZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1dG9vcHNiBnByb3RvMwq9BQohcHJvdG8vYXV0b29wcy9hdXRvX29wc19ydWxlLnByb3RvEhFidWNrZXRlZXIuYXV0b29wcxoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8i0AIKC0F1dG9PcHNSdWxlEg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSNQoIb3BzX3R5cGUYAyABKA4yGi5idWNrZXRlZXIuYXV0b29wcy5PcHNUeXBlUgdvcHNUeXBlEjMKB2NsYXVzZXMYBCADKAsyGS5idWNrZXRlZXIuYXV0b29wcy5DbGF1c2VSB2NsYXVzZXMSHQoKY3JlYXRlZF9hdBgHIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCCABKANSCXVwZGF0ZWRBdBIYCgdkZWxldGVkGAkgASgIUgdkZWxldGVkEkgKD2F1dG9fb3BzX3N0YXR1cxgKIAEoDjIgLmJ1Y2tldGVlci5hdXRvb3BzLkF1dG9PcHNTdGF0dXNSDWF1dG9PcHNTdGF0dXNKBAgGEAciVAoMQXV0b09wc1J1bGVzEkQKDmF1dG9fb3BzX3J1bGVzGAEgAygLMh4uYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1J1bGVSDGF1dG9PcHNSdWxlcyo/CgdPcHNUeXBlEhAKDFRZUEVfVU5LTk9XThAAEgwKCFNDSEVEVUxFEAISDgoKRVZFTlRfUkFURRADIgQIARABKkQKDUF1dG9PcHNTdGF0dXMSCwoHV0FJVElORxAAEgsKB1JVTk5JTkcQARIMCghGSU5JU0hFRBACEgsKB1NUT1BQRUQQA0IxWi9naXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vYXV0b29wc2IGcHJvdG8zCvADCiJwcm90by9ub3RpZmljYXRpb24vcmVjaXBpZW50LnByb3RvEhZidWNrZXRlZXIubm90aWZpY2F0aW9uIrcCCglSZWNpcGllbnQSOgoEdHlwZRgBIAEoDjImLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50LlR5cGVSBHR5cGUSZQoXc2xhY2tfY2hhbm5lbF9yZWNpcGllbnQYAiABKAsyLS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlNsYWNrQ2hhbm5lbFJlY2lwaWVudFIVc2xhY2tDaGFubmVsUmVjaXBpZW50EkYKCGxhbmd1YWdlGAMgASgOMiouYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnQuTGFuZ3VhZ2VSCGxhbmd1YWdlIhgKBFR5cGUSEAoMU2xhY2tDaGFubmVsEAAiJQoITGFuZ3VhZ2USCwoHRU5HTElTSBAAEgwKCEpBUEFORVNFEAEiOAoVU2xhY2tDaGFubmVsUmVjaXBpZW50Eh8KC3dlYmhvb2tfdXJsGAEgASgJUgp3ZWJob29rVXJsQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ub3RpZmljYXRpb25iBnByb3RvMwr9BwolcHJvdG8vbm90aWZpY2F0aW9uL3N1YnNjcmlwdGlvbi5wcm90bxIWYnVja2V0ZWVyLm5vdGlmaWNhdGlvbhoicHJvdG8vbm90aWZpY2F0aW9uL3JlY2lwaWVudC5wcm90byLXBgoMU3Vic2NyaXB0aW9uEg4KAmlkGAEgASgJUgJpZBIdCgpjcmVhdGVkX2F0GAIgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgDIAEoA1IJdXBkYXRlZEF0EhoKCGRpc2FibGVkGAQgASgIUghkaXNhYmxlZBJSCgxzb3VyY2VfdHlwZXMYBSADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcxI/CglyZWNpcGllbnQYBiABKAsyIS5idWNrZXRlZXIubm90aWZpY2F0aW9uLlJlY2lwaWVudFIJcmVjaXBpZW50EhIKBG5hbWUYByABKAlSBG5hbWUiswQKClNvdXJjZVR5cGUSGAoURE9NQUlOX0VWRU5UX0ZFQVRVUkUQABIVChFET01BSU5fRVZFTlRfR09BTBABEhsKF0RPTUFJTl9FVkVOVF9FWFBFUklNRU5UEAISGAoURE9NQUlOX0VWRU5UX0FDQ09VTlQQAxIXChNET01BSU5fRVZFTlRfQVBJS0VZEAQSGAoURE9NQUlOX0VWRU5UX1NFR01FTlQQBRIcChhET01BSU5fRVZFTlRfRU5WSVJPTk1FTlQQBhIeChpET01BSU5fRVZFTlRfQURNSU5fQUNDT1VOVBAHEh0KGURPTUFJTl9FVkVOVF9BVVRPT1BTX1JVTEUQCBIVChFET01BSU5fRVZFTlRfUFVTSBAJEh0KGURPTUFJTl9FVkVOVF9TVUJTQ1JJUFRJT04QChIjCh9ET01BSU5fRVZFTlRfQURNSU5fU1VCU0NSSVBUSU9OEAsSGAoURE9NQUlOX0VWRU5UX1BST0pFQ1QQDBIYChRET01BSU5fRVZFTlRfV0VCSE9PSxANEiQKIERPTUFJTl9FVkVOVF9QUk9HUkVTU0lWRV9ST0xMT1VUEA4SHQoZRE9NQUlOX0VWRU5UX09SR0FOSVpBVElPThAPEh0KGURPTUFJTl9FVkVOVF9GTEFHX1RSSUdHRVIQEBIRCg1GRUFUVVJFX1NUQUxFEGQSFwoSRVhQRVJJTUVOVF9SVU5OSU5HEMgBEg4KCU1BVV9DT1VOVBCsAkI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vbm90aWZpY2F0aW9uYgZwcm90bzMK9wUKJ3Byb3RvL2F1dG9vcHMvcHJvZ3Jlc3NpdmVfcm9sbG91dC5wcm90bxIRYnVja2V0ZWVyLmF1dG9vcHMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8i4gQKElByb2dyZXNzaXZlUm9sbG91dBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiwKBmNsYXVzZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRJECgZzdGF0dXMYBCABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzUgZzdGF0dXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBI+CgR0eXBlGAcgASgOMiouYnVja2V0ZWVyLmF1dG9vcHMuUHJvZ3Jlc3NpdmVSb2xsb3V0LlR5cGVSBHR5cGUSTgoKc3RvcHBlZF9ieRgIIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeRIdCgpzdG9wcGVkX2F0GAkgASgDUglzdG9wcGVkQXQiMgoEVHlwZRITCg9NQU5VQUxfU0NIRURVTEUQABIVChFURU1QTEFURV9TQ0hFRFVMRRABIj0KBlN0YXR1cxILCgdXQUlUSU5HEAASCwoHUlVOTklORxABEgwKCEZJTklTSEVEEAISCwoHU1RPUFBFRBADIkkKCVN0b3BwZWRCeRILCgdVTktOT1dOEAASCAoEVVNFUhABEhAKDE9QU19TQ0hFRFVMRRACEhMKD09QU19LSUxMX1NXSVRDSBADQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdXRvb3BzYgZwcm90bzMKoAUKIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvEhFidWNrZXRlZXIuZmVhdHVyZSKtBAoLRmxhZ1RyaWdnZXISDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBI3CgR0eXBlGAQgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YBSABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgGIAEoCVILZGVzY3JpcHRpb24SIwoNdHJpZ2dlcl9jb3VudBgHIAEoBVIMdHJpZ2dlckNvdW50EioKEWxhc3RfdHJpZ2dlcmVkX2F0GAggASgDUg9sYXN0VHJpZ2dlcmVkQXQSFAoFdG9rZW4YCSABKAlSBXRva2VuEhoKCGRpc2FibGVkGAogASgIUghkaXNhYmxlZBIdCgpjcmVhdGVkX2F0GAsgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgMIAEoA1IJdXBkYXRlZEF0EiUKDmVudmlyb25tZW50X2lkGA0gASgJUg1lbnZpcm9ubWVudElkIioKBFR5cGUSEAoMVHlwZV9VTktOT1dOEAASEAoMVHlwZV9XRUJIT09LEAEiOwoGQWN0aW9uEhIKDkFjdGlvbl9VTktOT1dOEAASDQoJQWN0aW9uX09OEAESDgoKQWN0aW9uX09GRhACSgQIAxAEQjFaL2dpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9mZWF0dXJlYgZwcm90bzMKj8IBCh5wcm90by9ldmVudC9kb21haW4vZXZlbnQucHJvdG8SFmJ1Y2tldGVlci5ldmVudC5kb21haW4aGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bxoacHJvdG8vZmVhdHVyZS9jbGF1c2UucHJvdG8aG3Byb3RvL2ZlYXR1cmUvZmVhdHVyZS5wcm90bxoYcHJvdG8vZmVhdHVyZS9ydWxlLnByb3RvGh1wcm90by9mZWF0dXJlL3ZhcmlhdGlvbi5wcm90bxoccHJvdG8vZmVhdHVyZS9zdHJhdGVneS5wcm90bxobcHJvdG8vZmVhdHVyZS9zZWdtZW50LnByb3RvGhpwcm90by9mZWF0dXJlL3RhcmdldC5wcm90bxobcHJvdG8vYWNjb3VudC9hY2NvdW50LnByb3RvGhtwcm90by9hY2NvdW50L2FwaV9rZXkucHJvdG8aIXByb3RvL2F1dG9vcHMvYXV0b19vcHNfcnVsZS5wcm90bxoacHJvdG8vYXV0b29wcy9jbGF1c2UucHJvdG8aJXByb3RvL25vdGlmaWNhdGlvbi9zdWJzY3JpcHRpb24ucHJvdG8aInByb3RvL25vdGlmaWNhdGlvbi9yZWNpcGllbnQucHJvdG8aIHByb3RvL2ZlYXR1cmUvcHJlcmVxdWlzaXRlLnByb3RvGidwcm90by9hdXRvb3BzL3Byb2dyZXNzaXZlX3JvbGxvdXQucHJvdG8aIHByb3RvL2ZlYXR1cmUvZmxhZ190cmlnZ2VyLnByb3RvGiFwcm90by9hY2NvdW50L3NlYXJjaF9maWx0ZXIucHJvdG8i7y0KBUV2ZW50Eg4KAmlkGAEgASgJUgJpZBIcCgl0aW1lc3RhbXAYAiABKANSCXRpbWVzdGFtcBJJCgtlbnRpdHlfdHlwZRgDIAEoDjIoLmJ1Y2tldGVlci5ldmVudC5kb21haW4uRXZlbnQuRW50aXR5VHlwZVIKZW50aXR5VHlwZRIbCgllbnRpdHlfaWQYBCABKAlSCGVudGl0eUlkEjYKBHR5cGUYBSABKA4yIi5idWNrZXRlZXIuZXZlbnQuZG9tYWluLkV2ZW50LlR5cGVSBHR5cGUSNgoGZWRpdG9yGAYgASgLMh4uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FZGl0b3JSBmVkaXRvchIoCgRkYXRhGAcgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIEZGF0YRIkCg5pc19hZG1pbl9ldmVudBgJIAEoCFIMaXNBZG1pbkV2ZW50EjkKB29wdGlvbnMYCiABKAsyHy5idWNrZXRlZXIuZXZlbnQuZG9tYWluLk9wdGlvbnNSB29wdGlvbnMSHwoLZW50aXR5X2RhdGEYCyABKAlSCmVudGl0eURhdGESMAoUcHJldmlvdXNfZW50aXR5X2RhdGEYDCABKAlSEnByZXZpb3VzRW50aXR5RGF0YRIlCg5lbnZpcm9ubWVudF9pZBgNIAEoCVINZW52aXJvbm1lbnRJZCKTAgoKRW50aXR5VHlwZRILCgdGRUFUVVJFEAASCAoER09BTBABEg4KCkVYUEVSSU1FTlQQAhILCgdBQ0NPVU5UEAMSCgoGQVBJS0VZEAQSCwoHU0VHTUVOVBAFEg8KC0VOVklST05NRU5UEAYSEQoNQURNSU5fQUNDT1VOVBAHEhAKDEFVVE9PUFNfUlVMRRAIEggKBFBVU0gQCRIQCgxTVUJTQ1JJUFRJT04QChIWChJBRE1JTl9TVUJTQ1JJUFRJT04QCxILCgdQUk9KRUNUEAwSFwoTUFJPR1JFU1NJVkVfUk9MTE9VVBAOEhAKDE9SR0FOSVpBVElPThAPEhAKDEZMQUdfVFJJR0dFUhAQIgQIDRANIr4nCgRUeXBlEgsKB1VOS05PV04QABITCg9GRUFUVVJFX0NSRUFURUQQARITCg9GRUFUVVJFX1JFTkFNRUQQAhITCg9GRUFUVVJFX0VOQUJMRUQQAxIUChBGRUFUVVJFX0RJU0FCTEVEEAQSEwoPRkVBVFVSRV9ERUxFVEVEEAUSHwobRkVBVFVSRV9ERVNDUklQVElPTl9DSEFOR0VEEAgSGwoXRkVBVFVSRV9WQVJJQVRJT05fQURERUQQCRIdChlGRUFUVVJFX1ZBUklBVElPTl9SRU1PVkVEEAoSIQodRkVBVFVSRV9PRkZfVkFSSUFUSU9OX0NIQU5HRUQQCxIbChdWQVJJQVRJT05fVkFMVUVfQ0hBTkdFRBAMEhoKFlZBUklBVElPTl9OQU1FX0NIQU5HRUQQDRIhCh1WQVJJQVRJT05fREVTQ1JJUFRJT05fQ0hBTkdFRBAOEhgKFFZBUklBVElPTl9VU0VSX0FEREVEEA8SGgoWVkFSSUFUSU9OX1VTRVJfUkVNT1ZFRBAQEhYKEkZFQVRVUkVfUlVMRV9BRERFRBAREiEKHUZFQVRVUkVfUlVMRV9TVFJBVEVHWV9DSEFOR0VEEBISGAoURkVBVFVSRV9SVUxFX0RFTEVURUQQExIVChFSVUxFX0NMQVVTRV9BRERFRBAUEhcKE1JVTEVfQ0xBVVNFX0RFTEVURUQQFRIfChtSVUxFX0ZJWEVEX1NUUkFURUdZX0NIQU5HRUQQFhIhCh1SVUxFX1JPTExPVVRfU1RSQVRFR1lfQ0hBTkdFRBAXEhwKGENMQVVTRV9BVFRSSUJVVEVfQ0hBTkdFRBAYEhsKF0NMQVVTRV9PUEVSQVRPUl9DSEFOR0VEEBkSFgoSQ0xBVVNFX1ZBTFVFX0FEREVEEBoSGAoUQ0xBVVNFX1ZBTFVFX1JFTU9WRUQQGxIkCiBGRUFUVVJFX0RFRkFVTFRfU1RSQVRFR1lfQ0hBTkdFRBAcEhUKEUZFQVRVUkVfVEFHX0FEREVEEB0SFwoTRkVBVFVSRV9UQUdfUkVNT1ZFRBAeEh8KG0ZFQVRVUkVfVkVSU0lPTl9JTkNSRU1FTlRFRBAfEhQKEEZFQVRVUkVfQVJDSElWRUQQIBISCg5GRUFUVVJFX0NMT05FRBAhEhYKEkZFQVRVUkVfVU5BUkNISVZFRBAjEhcKE1NBTVBMSU5HX1NFRURfUkVTRVQQIhIWChJQUkVSRVFVSVNJVEVfQURERUQQJBIYChRQUkVSRVFVSVNJVEVfUkVNT1ZFRBAlEiIKHlBSRVJFUVVJU0lURV9WQVJJQVRJT05fQ0hBTkdFRBAmEh8KG0ZFQVRVUkVfUlVMRVNfT1JERVJfQ0hBTkdFRBAnEhMKD0ZFQVRVUkVfVVBEQVRFRBAoEhAKDEdPQUxfQ1JFQVRFRBBkEhAKDEdPQUxfUkVOQU1FRBBlEhwKGEdPQUxfREVTQ1JJUFRJT05fQ0hBTkdFRBBmEhAKDEdPQUxfREVMRVRFRBBnEhEKDUdPQUxfQVJDSElWRUQQaBIXChJFWFBFUklNRU5UX0NSRUFURUQQyAESFwoSRVhQRVJJTUVOVF9TVE9QUEVEEMkBEiAKG0VYUEVSSU1FTlRfU1RBUlRfQVRfQ0hBTkdFRBDKARIfChpFWFBFUklNRU5UX1NUT1BfQVRfQ0hBTkdFRBDLARIXChJFWFBFUklNRU5UX0RFTEVURUQQzAESHgoZRVhQRVJJTUVOVF9QRVJJT0RfQ0hBTkdFRBDNARIcChdFWFBFUklNRU5UX05BTUVfQ0hBTkdFRBDOARIjCh5FWFBFUklNRU5UX0RFU0NSSVBUSU9OX0NIQU5HRUQQzwESFwoSRVhQRVJJTUVOVF9TVEFSVEVEENABEhgKE0VYUEVSSU1FTlRfRklOSVNIRUQQ0QESGAoTRVhQRVJJTUVOVF9BUkNISVZFRBDSARIYCg9BQ0NPVU5UX0NSRUFURUQQrAIaAggBEh0KFEFDQ09VTlRfUk9MRV9DSEFOR0VEEK0CGgIIARIYCg9BQ0NPVU5UX0VOQUJMRUQQrgIaAggBEhkKEEFDQ09VTlRfRElTQUJMRUQQrwIaAggBEhgKD0FDQ09VTlRfREVMRVRFRBCwAhoCCAESFwoSQUNDT1VOVF9WMl9DUkVBVEVEELECEhwKF0FDQ09VTlRfVjJfTkFNRV9DSEFOR0VEELICEigKI0FDQ09VTlRfVjJfQVZBVEFSX0lNQUdFX1VSTF9DSEFOR0VEELMCEikKJEFDQ09VTlRfVjJfT1JHQU5JWkFUSU9OX1JPTEVfQ0hBTkdFRBC0AhIpCiRBQ0NPVU5UX1YyX0VOVklST05NRU5UX1JPTEVTX0NIQU5HRUQQtQISFwoSQUNDT1VOVF9WMl9FTkFCTEVEELYCEhgKE0FDQ09VTlRfVjJfRElTQUJMRUQQtwISFwoSQUNDT1VOVF9WMl9ERUxFVEVEELgCEiUKIEFDQ09VTlRfVjJfQ1JFQVRFRF9TRUFSQ0hfRklMVEVSELkCEioKJUFDQ09VTlRfVjJfU0VBUkNIX0ZJTFRFUl9OQU5FX0NIQU5HRUQQugISKwomQUNDT1VOVF9WMl9TRUFSQ0hfRklMVEVSX1FVRVJZX0NIQU5HRUQQuwISLQooQUNDT1VOVF9WMl9TRUFSQ0hfRklMVEVSX0RFRkFVTFRfQ0hBTkdFRBC8AhIlCiBBQ0NPVU5UX1YyX1NFQVJDSF9GSUxURVJfREVMRVRFRBC9AhIiCh1BQ0NPVU5UX1YyX0ZJUlNUX05BTUVfQ0hBTkdFRBC+AhIhChxBQ0NPVU5UX1YyX0xBU1RfTkFNRV9DSEFOR0VEEL8CEiAKG0FDQ09VTlRfVjJfTEFOR1VBR0VfQ0hBTkdFRBDAAhIXChJBQ0NPVU5UX1YyX1VQREFURUQQwQISEwoOQVBJS0VZX0NSRUFURUQQkAMSGAoTQVBJS0VZX05BTUVfQ0hBTkdFRBCRAxITCg5BUElLRVlfRU5BQkxFRBCSAxIUCg9BUElLRVlfRElTQUJMRUQQkwMSFAoPU0VHTUVOVF9DUkVBVEVEEPQDEhQKD1NFR01FTlRfREVMRVRFRBD1AxIZChRTRUdNRU5UX05BTUVfQ0hBTkdFRBD2AxIgChtTRUdNRU5UX0RFU0NSSVBUSU9OX0NIQU5HRUQQ9wMSFwoSU0VHTUVOVF9SVUxFX0FEREVEEPgDEhkKFFNFR01FTlRfUlVMRV9ERUxFVEVEEPkDEh4KGVNFR01FTlRfUlVMRV9DTEFVU0VfQURERUQQ+gMSIAobU0VHTUVOVF9SVUxFX0NMQVVTRV9ERUxFVEVEEPsDEiUKIFNFR01FTlRfQ0xBVVNFX0FUVFJJQlVURV9DSEFOR0VEEPwDEiQKH1NFR01FTlRfQ0xBVVNFX09QRVJBVE9SX0NIQU5HRUQQ/QMSHwoaU0VHTUVOVF9DTEFVU0VfVkFMVUVfQURERUQQ/gMSIQocU0VHTUVOVF9DTEFVU0VfVkFMVUVfUkVNT1ZFRBD/AxIXChJTRUdNRU5UX1VTRVJfQURERUQQgAQSGQoUU0VHTUVOVF9VU0VSX0RFTEVURUQQgQQSHgoZU0VHTUVOVF9CVUxLX1VQTE9BRF9VU0VSUxCCBBItCihTRUdNRU5UX0JVTEtfVVBMT0FEX1VTRVJTX1NUQVRVU19DSEFOR0VEEIMEEhgKE0VOVklST05NRU5UX0NSRUFURUQQ2AQSGAoTRU5WSVJPTk1FTlRfUkVOQU1FRBDZBBIkCh9FTlZJUk9OTUVOVF9ERVNDUklQVElPTl9DSEFOR0VEENoEEhgKE0VOVklST05NRU5UX0RFTEVURUQQ2wQSGwoWRU5WSVJPTk1FTlRfVjJfQ1JFQVRFRBDcBBIbChZFTlZJUk9OTUVOVF9WMl9SRU5BTUVEEN0EEicKIkVOVklST05NRU5UX1YyX0RFU0NSSVBUSU9OX0NIQU5HRUQQ3gQSHAoXRU5WSVJPTk1FTlRfVjJfQVJDSElWRUQQ3wQSHgoZRU5WSVJPTk1FTlRfVjJfVU5BUkNISVZFRBDgBBIrCiZFTlZJUk9OTUVOVF9WMl9SRVFVSVJFX0NPTU1FTlRfQ0hBTkdFRBDhBBIeChVBRE1JTl9BQ0NPVU5UX0NSRUFURUQQvAUaAggBEh4KFUFETUlOX0FDQ09VTlRfRU5BQkxFRBC+BRoCCAESHwoWQURNSU5fQUNDT1VOVF9ESVNBQkxFRBC/BRoCCAESGQoUQVVUT09QU19SVUxFX0NSRUFURUQQoAYSGQoUQVVUT09QU19SVUxFX0RFTEVURUQQoQYSIgodQVVUT09QU19SVUxFX09QU19UWVBFX0NIQU5HRUQQogYSIAobQVVUT09QU19SVUxFX0NMQVVTRV9ERUxFVEVEEKMGEioKIUFVVE9PUFNfUlVMRV9UUklHR0VSRURfQVRfQ0hBTkdFRBCkBhoCCAESIAobT1BTX0VWRU5UX1JBVEVfQ0xBVVNFX0FEREVEEKUGEiIKHU9QU19FVkVOVF9SQVRFX0NMQVVTRV9DSEFOR0VEEKYGEhoKFURBVEVUSU1FX0NMQVVTRV9BRERFRBCnBhIcChdEQVRFVElNRV9DTEFVU0VfQ0hBTkdFRBCoBhIZChRBVVRPT1BTX1JVTEVfU1RPUFBFRBCpBhIkCh9BVVRPT1BTX1JVTEVfT1BTX1NUQVRVU19DSEFOR0VEEKoGEhEKDFBVU0hfQ1JFQVRFRBCEBxIRCgxQVVNIX0RFTEVURUQQhQcSFAoPUFVTSF9UQUdTX0FEREVEEIYHEhYKEVBVU0hfVEFHU19ERUxFVEVEEIcHEhEKDFBVU0hfUkVOQU1FRBCIBxIRCgxQVVNIX1VQREFURUQQiQcSGQoUU1VCU0NSSVBUSU9OX0NSRUFURUQQ6AcSGQoUU1VCU0NSSVBUSU9OX0RFTEVURUQQ6QcSGQoUU1VCU0NSSVBUSU9OX0VOQUJMRUQQ6gcSGgoVU1VCU0NSSVBUSU9OX0RJU0FCTEVEEOsHEiMKHlNVQlNDUklQVElPTl9TT1VSQ0VfVFlQRV9BRERFRBDsBxIlCiBTVUJTQ1JJUFRJT05fU09VUkNFX1RZUEVfREVMRVRFRBDtBxIZChRTVUJTQ1JJUFRJT05fUkVOQU1FRBDuBxIfChpBRE1JTl9TVUJTQ1JJUFRJT05fQ1JFQVRFRBDMCBIfChpBRE1JTl9TVUJTQ1JJUFRJT05fREVMRVRFRBDNCBIfChpBRE1JTl9TVUJTQ1JJUFRJT05fRU5BQkxFRBDOCBIgChtBRE1JTl9TVUJTQ1JJUFRJT05fRElTQUJMRUQQzwgSKQokQURNSU5fU1VCU0NSSVBUSU9OX1NPVVJDRV9UWVBFX0FEREVEENAIEisKJkFETUlOX1NVQlNDUklQVElPTl9TT1VSQ0VfVFlQRV9ERUxFVEVEENEIEh8KGkFETUlOX1NVQlNDUklQVElPTl9SRU5BTUVEENIIEhQKD1BST0pFQ1RfQ1JFQVRFRBCwCRIgChtQUk9KRUNUX0RFU0NSSVBUSU9OX0NIQU5HRUQQsQkSFAoPUFJPSkVDVF9FTkFCTEVEELIJEhUKEFBST0pFQ1RfRElTQUJMRUQQswkSGgoVUFJPSkVDVF9UUklBTF9DUkVBVEVEELQJEhwKF1BST0pFQ1RfVFJJQUxfQ09OVkVSVEVEELUJEhQKD1BST0pFQ1RfUkVOQU1FRBC2CRIgChtQUk9HUkVTU0lWRV9ST0xMT1VUX0NSRUFURUQQ+AoSIAobUFJPR1JFU1NJVkVfUk9MTE9VVF9ERUxFVEVEEPkKEjYKMVBST0dSRVNTSVZFX1JPTExPVVRfU0NIRURVTEVfVFJJR0dFUkVEX0FUX0NIQU5HRUQQ+goSIAobUFJPR1JFU1NJVkVfUk9MTE9VVF9TVE9QUEVEEPsKEhkKFE9SR0FOSVpBVElPTl9DUkVBVEVEENwLEh4KGU9SR0FOSVpBVElPTl9OQU1FX0NIQU5HRUQQ3QsSJQogT1JHQU5JWkFUSU9OX0RFU0NSSVBUSU9OX0NIQU5HRUQQ3gsSGQoUT1JHQU5JWkFUSU9OX0VOQUJMRUQQ3wsSGgoVT1JHQU5JWkFUSU9OX0RJU0FCTEVEEOALEhoKFU9SR0FOSVpBVElPTl9BUkNISVZFRBDhCxIcChdPUkdBTklaQVRJT05fVU5BUkNISVZFRBDiCxIhChxPUkdBTklaQVRJT05fVFJJQUxfQ09OVkVSVEVEEOMLEiUKIE9SR0FOSVpBVElPTl9PV05FUl9FTUFJTF9DSEFOR0VEEOQLEhkKFEZMQUdfVFJJR0dFUl9DUkVBVEVEEMEMEhcKEkZMQUdfVFJJR0dFUl9SRVNFVBDCDBIlCiBGTEFHX1RSSUdHRVJfREVTQ1JJUFRJT05fQ0hBTkdFRBDDDBIaChVGTEFHX1RSSUdHRVJfRElTQUJMRUQQxAwSGQoURkxBR19UUklHR0VSX0VOQUJMRUQQxQwSGQoURkxBR19UUklHR0VSX0RFTEVURUQQxgwSHwoaRkxBR19UUklHR0VSX1VTQUdFX1VQREFURUQQxwwiBgiUChCUCiIGCJUKEJUKIgYIlgoQlgoiBgiXChCXCiIGCJgKEJgKIgYImQoQmQpKBAgIEAkiPwoGRWRpdG9yEhQKBWVtYWlsGAEgASgJUgVlbWFpbBIZCghpc19hZG1pbhgDIAEoCFIHaXNBZG1pbkoECAIQAyJECgdPcHRpb25zEhgKB2NvbW1lbnQYASABKAlSB2NvbW1lbnQSHwoLbmV3X3ZlcnNpb24YAiABKAVSCm5ld1ZlcnNpb24i8wQKE0ZlYXR1cmVDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uEhIKBHVzZXIYBCABKAlSBHVzZXISPAoKdmFyaWF0aW9ucxgFIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxJYChpkZWZhdWx0X29uX3ZhcmlhdGlvbl9pbmRleBgGIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlUhdkZWZhdWx0T25WYXJpYXRpb25JbmRleBJaChtkZWZhdWx0X29mZl92YXJpYXRpb25faW5kZXgYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIYZGVmYXVsdE9mZlZhcmlhdGlvbkluZGV4Ek8KDnZhcmlhdGlvbl90eXBlGAggASgOMiguYnVja2V0ZWVyLmZlYXR1cmUuRmVhdHVyZS5WYXJpYXRpb25UeXBlUg12YXJpYXRpb25UeXBlEhIKBHRhZ3MYCSADKAlSBHRhZ3MSRQoNcHJlcmVxdWlzaXRlcxgKIAMoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVINcHJlcmVxdWlzaXRlcxItCgVydWxlcxgLIAMoCzIXLmJ1Y2tldGVlci5mZWF0dXJlLlJ1bGVSBXJ1bGVzEjMKB3RhcmdldHMYDCADKAsyGS5idWNrZXRlZXIuZmVhdHVyZS5UYXJnZXRSB3RhcmdldHMiZgoTRmVhdHVyZVVwZGF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSFgoEZGF0YRgCIAEoCUICGAFSBGRhdGESJwoNcHJldmlvdXNfZGF0YRgDIAEoCUICGAFSDHByZXZpb3VzRGF0YSIlChNGZWF0dXJlRW5hYmxlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCImChRGZWF0dXJlRGlzYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiJgoURmVhdHVyZUFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkIigKFkZlYXR1cmVVbmFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkIiUKE0ZlYXR1cmVEZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIi0KG0V2YWx1YXRpb25EZWxheWFibGVTZXRFdmVudBIOCgJpZBgBIAEoCVICaWQiLwodRXZhbHVhdGlvblVuZGVsYXlhYmxlU2V0RXZlbnQSDgoCaWQYASABKAlSAmlkIjkKE0ZlYXR1cmVSZW5hbWVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiUgoeRmVhdHVyZURlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iVgofRmVhdHVyZU9mZlZhcmlhdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIwoNb2ZmX3ZhcmlhdGlvbhgCIAEoCVIMb2ZmVmFyaWF0aW9uImgKGkZlYXR1cmVWYXJpYXRpb25BZGRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBI6Cgl2YXJpYXRpb24YAiABKAsyHC5idWNrZXRlZXIuZmVhdHVyZS5WYXJpYXRpb25SCXZhcmlhdGlvbiJRChxGZWF0dXJlVmFyaWF0aW9uUmVtb3ZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIhCgx2YXJpYXRpb25faWQYAiABKAlSC3ZhcmlhdGlvbklkImEKGlZhcmlhdGlvblZhbHVlQ2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIOCgJpZBgCIAEoCVICaWQSFAoFdmFsdWUYAyABKAlSBXZhbHVlIl4KGVZhcmlhdGlvbk5hbWVDaGFuZ2VkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEg4KAmlkGAIgASgJUgJpZBISCgRuYW1lGAMgASgJUgRuYW1lInMKIFZhcmlhdGlvbkRlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIOCgJpZBgCIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAyABKAlSC2Rlc2NyaXB0aW9uIlwKF1ZhcmlhdGlvblVzZXJBZGRlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIOCgJpZBgCIAEoCVICaWQSEgoEdXNlchgDIAEoCVIEdXNlciJeChlWYXJpYXRpb25Vc2VyUmVtb3ZlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIOCgJpZBgCIAEoCVICaWQSEgoEdXNlchgDIAEoCVIEdXNlciJUChVGZWF0dXJlUnVsZUFkZGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEisKBHJ1bGUYAiABKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgRydWxlIpEBCh5GZWF0dXJlQ2hhbmdlUnVsZVN0cmF0ZWd5RXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI3CghzdHJhdGVneRgDIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5UghzdHJhdGVneSJZCh1GZWF0dXJlUnVsZXNPcmRlckNoYW5nZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSGQoIcnVsZV9pZHMYAiADKAlSB3J1bGVJZHMiQgoXRmVhdHVyZVJ1bGVEZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZCKYAQogRmVhdHVyZUZpeGVkU3RyYXRlZ3lDaGFuZ2VkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBI8CghzdHJhdGVneRgDIAEoCzIgLmJ1Y2tldGVlci5mZWF0dXJlLkZpeGVkU3RyYXRlZ3lSCHN0cmF0ZWd5IpwBCiJGZWF0dXJlUm9sbG91dFN0cmF0ZWd5Q2hhbmdlZEV2ZW50Eh0KCmZlYXR1cmVfaWQYASABKAlSCWZlYXR1cmVJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSPgoIc3RyYXRlZ3kYAyABKAsyIi5idWNrZXRlZXIuZmVhdHVyZS5Sb2xsb3V0U3RyYXRlZ3lSCHN0cmF0ZWd5IoEBChRSdWxlQ2xhdXNlQWRkZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEjEKBmNsYXVzZRgDIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZVIGY2xhdXNlImAKFlJ1bGVDbGF1c2VEZWxldGVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIOCgJpZBgDIAEoCVICaWQigwEKG0NsYXVzZUF0dHJpYnV0ZUNoYW5nZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEg4KAmlkGAMgASgJUgJpZBIcCglhdHRyaWJ1dGUYBCABKAlSCWF0dHJpYnV0ZSKkAQoaQ2xhdXNlT3BlcmF0b3JDaGFuZ2VkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIOCgJpZBgDIAEoCVICaWQSPgoIb3BlcmF0b3IYBCABKA4yIi5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2UuT3BlcmF0b3JSCG9wZXJhdG9yInUKFUNsYXVzZVZhbHVlQWRkZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEg4KAmlkGAMgASgJUgJpZBIUCgV2YWx1ZRgEIAEoCVIFdmFsdWUidwoXQ2xhdXNlVmFsdWVSZW1vdmVkRXZlbnQSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhcKB3J1bGVfaWQYAiABKAlSBnJ1bGVJZBIOCgJpZBgDIAEoCVICaWQSFAoFdmFsdWUYBCABKAlSBXZhbHVlIm0KIkZlYXR1cmVEZWZhdWx0U3RyYXRlZ3lDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEjcKCHN0cmF0ZWd5GAIgASgLMhsuYnVja2V0ZWVyLmZlYXR1cmUuU3RyYXRlZ3lSCHN0cmF0ZWd5IjgKFEZlYXR1cmVUYWdBZGRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIQCgN0YWcYAiABKAlSA3RhZyI6ChZGZWF0dXJlVGFnUmVtb3ZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIQCgN0YWcYAiABKAlSA3RhZyJKCh5GZWF0dXJlVmVyc2lvbkluY3JlbWVudGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhgKB3ZlcnNpb24YAiABKAVSB3ZlcnNpb24itQQKEkZlYXR1cmVDbG9uZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SPAoKdmFyaWF0aW9ucxgEIAMoCzIcLmJ1Y2tldGVlci5mZWF0dXJlLlZhcmlhdGlvblIKdmFyaWF0aW9ucxIzCgd0YXJnZXRzGAUgAygLMhkuYnVja2V0ZWVyLmZlYXR1cmUuVGFyZ2V0Ugd0YXJnZXRzEi0KBXJ1bGVzGAYgAygLMhcuYnVja2V0ZWVyLmZlYXR1cmUuUnVsZVIFcnVsZXMSRgoQZGVmYXVsdF9zdHJhdGVneRgHIAEoCzIbLmJ1Y2tldGVlci5mZWF0dXJlLlN0cmF0ZWd5Ug9kZWZhdWx0U3RyYXRlZ3kSIwoNb2ZmX3ZhcmlhdGlvbhgIIAEoCVIMb2ZmVmFyaWF0aW9uEhIKBHRhZ3MYCSADKAlSBHRhZ3MSHgoKbWFpbnRhaW5lchgKIAEoCVIKbWFpbnRhaW5lchJPCg52YXJpYXRpb25fdHlwZRgLIAEoDjIoLmJ1Y2tldGVlci5mZWF0dXJlLkZlYXR1cmUuVmFyaWF0aW9uVHlwZVINdmFyaWF0aW9uVHlwZRJFCg1wcmVyZXF1aXNpdGVzGAwgAygLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUg1wcmVyZXF1aXNpdGVzIkQKHUZlYXR1cmVTYW1wbGluZ1NlZWRSZXNldEV2ZW50EiMKDXNhbXBsaW5nX3NlZWQYASABKAlSDHNhbXBsaW5nU2VlZCKwAQoQR29hbENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgDIAEoCVILZGVzY3JpcHRpb24SGAoHZGVsZXRlZBgEIAEoCFIHZGVsZXRlZBIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0IjYKEEdvYWxSZW5hbWVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiTwobR29hbERlc2NyaXB0aW9uQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24iIwoRR29hbEFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkIiIKEEdvYWxEZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIvMDChZFeHBlcmltZW50Q3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJwoPZmVhdHVyZV92ZXJzaW9uGAMgASgFUg5mZWF0dXJlVmVyc2lvbhI8Cgp2YXJpYXRpb25zGAQgAygLMhwuYnVja2V0ZWVyLmZlYXR1cmUuVmFyaWF0aW9uUgp2YXJpYXRpb25zEhsKB2dvYWxfaWQYBSABKAlCAhgBUgZnb2FsSWQSGQoIc3RhcnRfYXQYBiABKANSB3N0YXJ0QXQSFwoHc3RvcF9hdBgHIAEoA1IGc3RvcEF0EhgKB3N0b3BwZWQYCCABKAhSB3N0b3BwZWQSHQoKc3RvcHBlZF9hdBgJIAEoA1IJc3RvcHBlZEF0Eh0KCmNyZWF0ZWRfYXQYCiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAsgASgDUgl1cGRhdGVkQXQSGQoIZ29hbF9pZHMYDCADKAlSB2dvYWxJZHMSEgoEbmFtZRgNIAEoCVIEbmFtZRIgCgtkZXNjcmlwdGlvbhgOIAEoCVILZGVzY3JpcHRpb24SKgoRYmFzZV92YXJpYXRpb25faWQYDyABKAlSD2Jhc2VWYXJpYXRpb25JZCJHChZFeHBlcmltZW50U3RvcHBlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpzdG9wcGVkX2F0GAIgASgDUglzdG9wcGVkQXQiKQoXRXhwZXJpbWVudEFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkIigKFkV4cGVyaW1lbnREZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIkoKHUV4cGVyaW1lbnRTdGFydEF0Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIZCghzdGFydF9hdBgCIAEoA1IHc3RhcnRBdCJHChxFeHBlcmltZW50U3RvcEF0Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIXCgdzdG9wX2F0GAIgASgDUgZzdG9wQXQiYgocRXhwZXJpbWVudFBlcmlvZENoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSGQoIc3RhcnRfYXQYAiABKANSB3N0YXJ0QXQSFwoHc3RvcF9hdBgDIAEoA1IGc3RvcEF0IkAKGkV4cGVyaW1lbnROYW1lQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIlUKIUV4cGVyaW1lbnREZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIhgKFkV4cGVyaW1lbnRTdGFydGVkRXZlbnQiGQoXRXhwZXJpbWVudEZpbmlzaGVkRXZlbnQi/gMKFUFjY291bnRWMkNyZWF0ZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSEgoEbmFtZRgCIAEoCVIEbmFtZRIoChBhdmF0YXJfaW1hZ2VfdXJsGAMgASgJUg5hdmF0YXJJbWFnZVVybBInCg9vcmdhbml6YXRpb25faWQYBCABKAlSDm9yZ2FuaXphdGlvbklkElsKEW9yZ2FuaXphdGlvbl9yb2xlGAUgASgOMi4uYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLlJvbGUuT3JnYW5pemF0aW9uUhBvcmdhbml6YXRpb25Sb2xlElkKEWVudmlyb25tZW50X3JvbGVzGAYgAygLMiwuYnVja2V0ZWVyLmFjY291bnQuQWNjb3VudFYyLkVudmlyb25tZW50Um9sZVIQZW52aXJvbm1lbnRSb2xlcxIaCghkaXNhYmxlZBgHIAEoCFIIZGlzYWJsZWQSHQoKY3JlYXRlZF9hdBgIIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCSABKANSCXVwZGF0ZWRBdBIdCgpmaXJzdF9uYW1lGAogASgJUglmaXJzdE5hbWUSGwoJbGFzdF9uYW1lGAsgASgJUghsYXN0TmFtZRIaCghsYW5ndWFnZRgMIAEoCVIIbGFuZ3VhZ2UiVgoVQWNjb3VudFYyVXBkYXRlZEV2ZW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBInCg9vcmdhbml6YXRpb25faWQYAiABKAlSDm9yZ2FuaXphdGlvbklkIkUKGUFjY291bnRWMk5hbWVDaGFuZ2VkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsEhIKBG5hbWUYAiABKAlSBG5hbWUiZQojQWNjb3VudFYyQXZhdGFySW1hZ2VVUkxDaGFuZ2VkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsEigKEGF2YXRhcl9pbWFnZV91cmwYAiABKAlSDmF2YXRhckltYWdlVXJsIpoBCiVBY2NvdW50VjJPcmdhbml6YXRpb25Sb2xlQ2hhbmdlZEV2ZW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbBJbChFvcmdhbml6YXRpb25fcm9sZRgCIAEoDjIuLmJ1Y2tldGVlci5hY2NvdW50LkFjY291bnRWMi5Sb2xlLk9yZ2FuaXphdGlvblIQb3JnYW5pemF0aW9uUm9sZSKYAQolQWNjb3VudFYyRW52aXJvbm1lbnRSb2xlc0NoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSWQoRZW52aXJvbm1lbnRfcm9sZXMYAiADKAsyLC5idWNrZXRlZXIuYWNjb3VudC5BY2NvdW50VjIuRW52aXJvbm1lbnRSb2xlUhBlbnZpcm9ubWVudFJvbGVzIi0KFUFjY291bnRWMkVuYWJsZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwiLgoWQWNjb3VudFYyRGlzYWJsZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwiLQoVQWNjb3VudFYyRGVsZXRlZEV2ZW50EhQKBWVtYWlsGAEgASgJUgVlbWFpbCLXAQoYU2VhcmNoRmlsdGVyQ3JlYXRlZEV2ZW50EhIKBE5hbWUYASABKAlSBE5hbWUSFAoFUXVlcnkYAiABKAlSBVF1ZXJ5EkMKClRhcmdldFR5cGUYAyABKA4yIy5idWNrZXRlZXIuYWNjb3VudC5GaWx0ZXJUYXJnZXRUeXBlUgpUYXJnZXRUeXBlEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkEiUKDmRlZmF1bHRfZmlsdGVyGAUgASgIUg1kZWZhdWx0RmlsdGVyIkIKHFNlYXJjaEZpbHRlck5hbWVDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBE5hbWUYAiABKAlSBE5hbWUiRQodU2VhcmNoRmlsdGVyUXVlcnlDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhQKBVF1ZXJ5GAIgASgJUgVRdWVyeSJYCh9TZWFyY2hGaWx0ZXJEZWZhdWx0Q2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIlCg5kZWZhdWx0X2ZpbHRlchgCIAEoCFINZGVmYXVsdEZpbHRlciIqChhTZWFyY2hGaWx0ZXJEZWxldGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIsYBChJBUElLZXlDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSMgoEcm9sZRgDIAEoDjIeLmJ1Y2tldGVlci5hY2NvdW50LkFQSUtleS5Sb2xlUgRyb2xlEhoKCGRpc2FibGVkGAQgASgIUghkaXNhYmxlZBIdCgpjcmVhdGVkX2F0GAUgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgGIAEoA1IJdXBkYXRlZEF0IjwKFkFQSUtleU5hbWVDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiJAoSQVBJS2V5RW5hYmxlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIlChNBUElLZXlEaXNhYmxlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCJbChNTZWdtZW50Q3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAMgASgJUgtkZXNjcmlwdGlvbiIlChNTZWdtZW50RGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCI9ChdTZWdtZW50TmFtZUNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZSJSCh5TZWdtZW50RGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiJUChVTZWdtZW50UnVsZUFkZGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEisKBHJ1bGUYAiABKAsyFy5idWNrZXRlZXIuZmVhdHVyZS5SdWxlUgRydWxlIkIKF1NlZ21lbnRSdWxlRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQiiAEKG1NlZ21lbnRSdWxlQ2xhdXNlQWRkZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEjEKBmNsYXVzZRgDIAEoCzIZLmJ1Y2tldGVlci5mZWF0dXJlLkNsYXVzZVIGY2xhdXNlInQKHVNlZ21lbnRSdWxlQ2xhdXNlRGVsZXRlZEV2ZW50Eh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZCKXAQoiU2VnbWVudENsYXVzZUF0dHJpYnV0ZUNoYW5nZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQSHAoJYXR0cmlidXRlGAQgASgJUglhdHRyaWJ1dGUiuAEKIVNlZ21lbnRDbGF1c2VPcGVyYXRvckNoYW5nZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQSPgoIb3BlcmF0b3IYBCABKA4yIi5idWNrZXRlZXIuZmVhdHVyZS5DbGF1c2UuT3BlcmF0b3JSCG9wZXJhdG9yIokBChxTZWdtZW50Q2xhdXNlVmFsdWVBZGRlZEV2ZW50Eh0KCnNlZ21lbnRfaWQYASABKAlSCXNlZ21lbnRJZBIXCgdydWxlX2lkGAIgASgJUgZydWxlSWQSGwoJY2xhdXNlX2lkGAMgASgJUghjbGF1c2VJZBIUCgV2YWx1ZRgEIAEoCVIFdmFsdWUiiwEKHlNlZ21lbnRDbGF1c2VWYWx1ZVJlbW92ZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSFwoHcnVsZV9pZBgCIAEoCVIGcnVsZUlkEhsKCWNsYXVzZV9pZBgDIAEoCVIIY2xhdXNlSWQSFAoFdmFsdWUYBCABKAlSBXZhbHVlIo0BChVTZWdtZW50VXNlckFkZGVkRXZlbnQSHQoKc2VnbWVudF9pZBgBIAEoCVIJc2VnbWVudElkEhkKCHVzZXJfaWRzGAIgAygJUgd1c2VySWRzEjoKBXN0YXRlGAMgASgOMiQuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudFVzZXIuU3RhdGVSBXN0YXRlIo8BChdTZWdtZW50VXNlckRlbGV0ZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSGQoIdXNlcl9pZHMYAiADKAlSB3VzZXJJZHMSOgoFc3RhdGUYAyABKA4yJC5idWNrZXRlZXIuZmVhdHVyZS5TZWdtZW50VXNlci5TdGF0ZVIFc3RhdGUiswEKG1NlZ21lbnRCdWxrVXBsb2FkVXNlcnNFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSOQoGc3RhdHVzGAIgASgOMiEuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudC5TdGF0dXNSBnN0YXR1cxI6CgVzdGF0ZRgDIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZSLWAQooU2VnbWVudEJ1bGtVcGxvYWRVc2Vyc1N0YXR1c0NoYW5nZWRFdmVudBIdCgpzZWdtZW50X2lkGAEgASgJUglzZWdtZW50SWQSOQoGc3RhdHVzGAIgASgOMiEuYnVja2V0ZWVyLmZlYXR1cmUuU2VnbWVudC5TdGF0dXNSBnN0YXR1cxI6CgVzdGF0ZRgDIAEoDjIkLmJ1Y2tldGVlci5mZWF0dXJlLlNlZ21lbnRVc2VyLlN0YXRlUgVzdGF0ZRIUCgVjb3VudBgEIAEoA1IFY291bnQi9AEKF0Vudmlyb25tZW50Q3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIcCgluYW1lc3BhY2UYAiABKAlSCW5hbWVzcGFjZRISCgRuYW1lGAMgASgJUgRuYW1lEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIYCgdkZWxldGVkGAUgASgIUgdkZWxldGVkEh0KCmNyZWF0ZWRfYXQYBiABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAcgASgDUgl1cGRhdGVkQXQSHQoKcHJvamVjdF9pZBgIIAEoCVIJcHJvamVjdElkIj0KF0Vudmlyb25tZW50UmVuYW1lZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIlYKIkVudmlyb25tZW50RGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiJHChdFbnZpcm9ubWVudERlbGV0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHAoJbmFtZXNwYWNlGAIgASgJUgluYW1lc3BhY2UingIKGUVudmlyb25tZW50VjJDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSGQoIdXJsX2NvZGUYAyABKAlSB3VybENvZGUSIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uEh0KCnByb2plY3RfaWQYBSABKAlSCXByb2plY3RJZBIaCghhcmNoaXZlZBgGIAEoCFIIYXJjaGl2ZWQSHQoKY3JlYXRlZF9hdBgHIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYCCABKANSCXVwZGF0ZWRBdBInCg9yZXF1aXJlX2NvbW1lbnQYCSABKAhSDnJlcXVpcmVDb21tZW50IoABChlFbnZpcm9ubWVudFYyUmVuYW1lZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpwcm9qZWN0X2lkGAIgASgJUglwcm9qZWN0SWQSGQoIb2xkX25hbWUYAyABKAlSB29sZE5hbWUSGQoIbmV3X25hbWUYBCABKAlSB25ld05hbWUiuwEKJEVudmlyb25tZW50VjJEZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRIdCgpwcm9qZWN0X2lkGAMgASgJUglwcm9qZWN0SWQSJwoPb2xkX2Rlc2NyaXB0aW9uGAQgASgJUg5vbGREZXNjcmlwdGlvbhInCg9uZXdfZGVzY3JpcHRpb24YBSABKAlSDm5ld0Rlc2NyaXB0aW9uIpUBCidFbnZpcm9ubWVudFYyUmVxdWlyZUNvbW1lbnRDaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSHQoKcHJvamVjdF9pZBgDIAEoCVIJcHJvamVjdElkEicKD3JlcXVpcmVfY29tbWVudBgEIAEoCFIOcmVxdWlyZUNvbW1lbnQiXwoaRW52aXJvbm1lbnRWMkFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSHQoKcHJvamVjdF9pZBgDIAEoCVIJcHJvamVjdElkImEKHEVudmlyb25tZW50VjJVbmFyY2hpdmVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSHQoKcHJvamVjdF9pZBgDIAEoCVIJcHJvamVjdElkIqkCChdBdXRvT3BzUnVsZUNyZWF0ZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQSNQoIb3BzX3R5cGUYAiABKA4yGi5idWNrZXRlZXIuYXV0b29wcy5PcHNUeXBlUgdvcHNUeXBlEjMKB2NsYXVzZXMYAyADKAsyGS5idWNrZXRlZXIuYXV0b29wcy5DbGF1c2VSB2NsYXVzZXMSHQoKY3JlYXRlZF9hdBgFIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYBiABKANSCXVwZGF0ZWRBdBI/CgpvcHNfc3RhdHVzGAcgASgOMiAuYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1N0YXR1c1IJb3BzU3RhdHVzSgQIBBAFIhkKF0F1dG9PcHNSdWxlU3RvcHBlZEV2ZW50IhkKF0F1dG9PcHNSdWxlRGVsZXRlZEV2ZW50IlcKHkF1dG9PcHNSdWxlT3BzVHlwZUNoYW5nZWRFdmVudBI1CghvcHNfdHlwZRgBIAEoDjIaLmJ1Y2tldGVlci5hdXRvb3BzLk9wc1R5cGVSB29wc1R5cGUiJAoiQXV0b09wc1J1bGVUcmlnZ2VyZWRBdENoYW5nZWRFdmVudCJjCiBBdXRvT3BzUnVsZU9wc1N0YXR1c0NoYW5nZWRFdmVudBI/CgpvcHNfc3RhdHVzGAEgASgOMiAuYnVja2V0ZWVyLmF1dG9vcHMuQXV0b09wc1N0YXR1c1IJb3BzU3RhdHVzIpUBChxPcHNFdmVudFJhdGVDbGF1c2VBZGRlZEV2ZW50EhsKCWNsYXVzZV9pZBgBIAEoCVIIY2xhdXNlSWQSWAoVb3BzX2V2ZW50X3JhdGVfY2xhdXNlGAIgASgLMiUuYnVja2V0ZWVyLmF1dG9vcHMuT3BzRXZlbnRSYXRlQ2xhdXNlUhJvcHNFdmVudFJhdGVDbGF1c2UilwEKHk9wc0V2ZW50UmF0ZUNsYXVzZUNoYW5nZWRFdmVudBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkElgKFW9wc19ldmVudF9yYXRlX2NsYXVzZRgCIAEoCzIlLmJ1Y2tldGVlci5hdXRvb3BzLk9wc0V2ZW50UmF0ZUNsYXVzZVISb3BzRXZlbnRSYXRlQ2xhdXNlIjwKHUF1dG9PcHNSdWxlQ2xhdXNlRGVsZXRlZEV2ZW50EhsKCWNsYXVzZV9pZBgBIAEoCVIIY2xhdXNlSWQigwEKGERhdGV0aW1lQ2xhdXNlQWRkZWRFdmVudBIbCgljbGF1c2VfaWQYASABKAlSCGNsYXVzZUlkEkoKD2RhdGV0aW1lX2NsYXVzZRgCIAEoCzIhLmJ1Y2tldGVlci5hdXRvb3BzLkRhdGV0aW1lQ2xhdXNlUg5kYXRldGltZUNsYXVzZSKFAQoaRGF0ZXRpbWVDbGF1c2VDaGFuZ2VkRXZlbnQSGwoJY2xhdXNlX2lkGAEgASgJUghjbGF1c2VJZBJKCg9kYXRldGltZV9jbGF1c2UYAiABKAsyIS5idWNrZXRlZXIuYXV0b29wcy5EYXRldGltZUNsYXVzZVIOZGF0ZXRpbWVDbGF1c2UicAoQUHVzaENyZWF0ZWRFdmVudBIuChNmY21fc2VydmljZV9hY2NvdW50GAEgASgJUhFmY21TZXJ2aWNlQWNjb3VudBISCgR0YWdzGAMgAygJUgR0YWdzEhIKBG5hbWUYBCABKAlSBG5hbWVKBAgCEAMiEgoQUHVzaERlbGV0ZWRFdmVudCIoChJQdXNoVGFnc0FkZGVkRXZlbnQSEgoEdGFncxgCIAMoCVIEdGFncyIqChRQdXNoVGFnc0RlbGV0ZWRFdmVudBISCgR0YWdzGAIgAygJUgR0YWdzIiYKEFB1c2hSZW5hbWVkRXZlbnQSEgoEbmFtZRgCIAEoCVIEbmFtZSIqChRQdXNoVGFnc1VwZGF0ZWRFdmVudBISCgR0YWdzGAIgAygJUgR0YWdzIlgKEFB1c2hVcGRhdGVkRXZlbnQSMAoEbmFtZRgBIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIEbmFtZRISCgR0YWdzGAIgAygJUgR0YWdzIsMBChhTdWJzY3JpcHRpb25DcmVhdGVkRXZlbnQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMSPwoJcmVjaXBpZW50GAIgASgLMiEuYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5SZWNpcGllbnRSCXJlY2lwaWVudBISCgRuYW1lGAMgASgJUgRuYW1lIhoKGFN1YnNjcmlwdGlvbkRlbGV0ZWRFdmVudCIaChhTdWJzY3JpcHRpb25FbmFibGVkRXZlbnQiGwoZU3Vic2NyaXB0aW9uRGlzYWJsZWRFdmVudCJ3CiFTdWJzY3JpcHRpb25Tb3VyY2VUeXBlc0FkZGVkRXZlbnQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMieQojU3Vic2NyaXB0aW9uU291cmNlVHlwZXNEZWxldGVkRXZlbnQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMiLgoYU3Vic2NyaXB0aW9uUmVuYW1lZEV2ZW50EhIKBG5hbWUYASABKAlSBG5hbWUiyAEKHUFkbWluU3Vic2NyaXB0aW9uQ3JlYXRlZEV2ZW50ElIKDHNvdXJjZV90eXBlcxgBIAMoDjIvLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uU3Vic2NyaXB0aW9uLlNvdXJjZVR5cGVSC3NvdXJjZVR5cGVzEj8KCXJlY2lwaWVudBgCIAEoCzIhLmJ1Y2tldGVlci5ub3RpZmljYXRpb24uUmVjaXBpZW50UglyZWNpcGllbnQSEgoEbmFtZRgDIAEoCVIEbmFtZSIfCh1BZG1pblN1YnNjcmlwdGlvbkRlbGV0ZWRFdmVudCIfCh1BZG1pblN1YnNjcmlwdGlvbkVuYWJsZWRFdmVudCIgCh5BZG1pblN1YnNjcmlwdGlvbkRpc2FibGVkRXZlbnQifAomQWRtaW5TdWJzY3JpcHRpb25Tb3VyY2VUeXBlc0FkZGVkRXZlbnQSUgoMc291cmNlX3R5cGVzGAEgAygOMi8uYnVja2V0ZWVyLm5vdGlmaWNhdGlvbi5TdWJzY3JpcHRpb24uU291cmNlVHlwZVILc291cmNlVHlwZXMifgooQWRtaW5TdWJzY3JpcHRpb25Tb3VyY2VUeXBlc0RlbGV0ZWRFdmVudBJSCgxzb3VyY2VfdHlwZXMYASADKA4yLy5idWNrZXRlZXIubm90aWZpY2F0aW9uLlN1YnNjcmlwdGlvbi5Tb3VyY2VUeXBlUgtzb3VyY2VUeXBlcyIzCh1BZG1pblN1YnNjcmlwdGlvblJlbmFtZWRFdmVudBISCgRuYW1lGAEgASgJUgRuYW1lIosCChNQcm9qZWN0Q3JlYXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIgCgtkZXNjcmlwdGlvbhgCIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzYWJsZWQYAyABKAhSCGRpc2FibGVkEhQKBXRyaWFsGAQgASgIUgV0cmlhbBIjCg1jcmVhdG9yX2VtYWlsGAUgASgJUgxjcmVhdG9yRW1haWwSHQoKY3JlYXRlZF9hdBgGIAEoA1IJY3JlYXRlZEF0Eh0KCnVwZGF0ZWRfYXQYByABKANSCXVwZGF0ZWRBdBISCgRuYW1lGAggASgJUgRuYW1lEhkKCHVybF9jb2RlGAkgASgJUgd1cmxDb2RlIlIKHlByb2plY3REZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSIAoLZGVzY3JpcHRpb24YAiABKAlSC2Rlc2NyaXB0aW9uIjkKE1Byb2plY3RSZW5hbWVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUiJQoTUHJvamVjdEVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiJgoUUHJvamVjdERpc2FibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIpACChhQcm9qZWN0VHJpYWxDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhIaCghkaXNhYmxlZBgDIAEoCFIIZGlzYWJsZWQSFAoFdHJpYWwYBCABKAhSBXRyaWFsEiMKDWNyZWF0b3JfZW1haWwYBSABKAlSDGNyZWF0b3JFbWFpbBIdCgpjcmVhdGVkX2F0GAYgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgHIAEoA1IJdXBkYXRlZEF0EhIKBG5hbWUYCCABKAlSBG5hbWUSGQoIdXJsX2NvZGUYCSABKAlSB3VybENvZGUiLAoaUHJvamVjdFRyaWFsQ29udmVydGVkRXZlbnQSDgoCaWQYASABKAlSAmlkIl0KFlByZXJlcXVpc2l0ZUFkZGVkRXZlbnQSQwoMcHJlcmVxdWlzaXRlGAEgASgLMh8uYnVja2V0ZWVyLmZlYXR1cmUuUHJlcmVxdWlzaXRlUgxwcmVyZXF1aXNpdGUiaAohUHJlcmVxdWlzaXRlVmFyaWF0aW9uQ2hhbmdlZEV2ZW50EkMKDHByZXJlcXVpc2l0ZRgBIAEoCzIfLmJ1Y2tldGVlci5mZWF0dXJlLlByZXJlcXVpc2l0ZVIMcHJlcmVxdWlzaXRlIjkKGFByZXJlcXVpc2l0ZVJlbW92ZWRFdmVudBIdCgpmZWF0dXJlX2lkGAEgASgJUglmZWF0dXJlSWQi+wEKHlByb2dyZXNzaXZlUm9sbG91dENyZWF0ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiwKBmNsYXVzZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBmNsYXVzZRIdCgpjcmVhdGVkX2F0GAQgASgDUgljcmVhdGVkQXQSHQoKdXBkYXRlZF9hdBgFIAEoA1IJdXBkYXRlZEF0Ej4KBHR5cGUYBiABKA4yKi5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuVHlwZVIEdHlwZSLlAQoeUHJvZ3Jlc3NpdmVSb2xsb3V0U3RvcHBlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBJECgZzdGF0dXMYAiABKA4yLC5idWNrZXRlZXIuYXV0b29wcy5Qcm9ncmVzc2l2ZVJvbGxvdXQuU3RhdHVzUgZzdGF0dXMSTgoKc3RvcHBlZF9ieRgDIAEoDjIvLmJ1Y2tldGVlci5hdXRvb3BzLlByb2dyZXNzaXZlUm9sbG91dC5TdG9wcGVkQnlSCXN0b3BwZWRCeRIdCgpzdG9wcGVkX2F0GAQgASgDUglzdG9wcGVkQXQiMAoeUHJvZ3Jlc3NpdmVSb2xsb3V0RGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCJUCjFQcm9ncmVzc2l2ZVJvbGxvdXRTY2hlZHVsZVRyaWdnZXJlZEF0Q2hhbmdlZEV2ZW50Eh8KC3NjaGVkdWxlX2lkGAEgASgJUgpzY2hlZHVsZUlkIqgCChhPcmdhbml6YXRpb25DcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEhIKBG5hbWUYAiABKAlSBG5hbWUSGQoIdXJsX2NvZGUYAyABKAlSB3VybENvZGUSIAoLZGVzY3JpcHRpb24YBCABKAlSC2Rlc2NyaXB0aW9uEhoKCGRpc2FibGVkGAUgASgIUghkaXNhYmxlZBIaCghhcmNoaXZlZBgGIAEoCFIIYXJjaGl2ZWQSFAoFdHJpYWwYByABKAhSBXRyaWFsEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSHwoLb3duZXJfZW1haWwYCiABKAlSCm93bmVyRW1haWwiVwojT3JnYW5pemF0aW9uRGVzY3JpcHRpb25DaGFuZ2VkRXZlbnQSDgoCaWQYASABKAlSAmlkEiAKC2Rlc2NyaXB0aW9uGAIgASgJUgtkZXNjcmlwdGlvbiJVCiJPcmdhbml6YXRpb25Pd25lckVtYWlsQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIfCgtvd25lcl9lbWFpbBgCIAEoCVIKb3duZXJFbWFpbCJCChxPcmdhbml6YXRpb25OYW1lQ2hhbmdlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lIioKGE9yZ2FuaXphdGlvbkVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiKwoZT3JnYW5pemF0aW9uRGlzYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiKwoZT3JnYW5pemF0aW9uQXJjaGl2ZWRFdmVudBIOCgJpZBgBIAEoCVICaWQiLQobT3JnYW5pemF0aW9uVW5hcmNoaXZlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCIxCh9Pcmdhbml6YXRpb25UcmlhbENvbnZlcnRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZCLjAgoXRmxhZ1RyaWdnZXJDcmVhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBI3CgR0eXBlGAQgASgOMiMuYnVja2V0ZWVyLmZlYXR1cmUuRmxhZ1RyaWdnZXIuVHlwZVIEdHlwZRI9CgZhY3Rpb24YBSABKA4yJS5idWNrZXRlZXIuZmVhdHVyZS5GbGFnVHJpZ2dlci5BY3Rpb25SBmFjdGlvbhIgCgtkZXNjcmlwdGlvbhgGIAEoCVILZGVzY3JpcHRpb24SFAoFdG9rZW4YByABKAlSBXRva2VuEh0KCmNyZWF0ZWRfYXQYCCABKANSCWNyZWF0ZWRBdBIdCgp1cGRhdGVkX2F0GAkgASgDUgl1cGRhdGVkQXQSJQoOZW52aXJvbm1lbnRfaWQYCiABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiiQEKFUZsYWdUcmlnZ2VyUmVzZXRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEhQKBXRva2VuGAQgASgJUgV0b2tlbhIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCKiAQoiRmxhZ1RyaWdnZXJEZXNjcmlwdGlvbkNoYW5nZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbhIlCg5lbnZpcm9ubWVudF9pZBgFIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCJ2ChhGbGFnVHJpZ2dlckRpc2FibGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBIlCg5lbnZpcm9ubWVudF9pZBgEIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCJ1ChdGbGFnVHJpZ2dlckVuYWJsZWRFdmVudBIOCgJpZBgBIAEoCVICaWQSHQoKZmVhdHVyZV9pZBgCIAEoCVIJZmVhdHVyZUlkEiUKDmVudmlyb25tZW50X2lkGAQgASgJUg1lbnZpcm9ubWVudElkSgQIAxAEInUKF0ZsYWdUcmlnZ2VyRGVsZXRlZEV2ZW50Eg4KAmlkGAEgASgJUgJpZBIdCgpmZWF0dXJlX2lkGAIgASgJUglmZWF0dXJlSWQSJQoOZW52aXJvbm1lbnRfaWQYBCABKAlSDWVudmlyb25tZW50SWRKBAgDEAQiywEKHEZsYWdUcmlnZ2VyVXNhZ2VVcGRhdGVkRXZlbnQSDgoCaWQYASABKAlSAmlkEh0KCmZlYXR1cmVfaWQYAiABKAlSCWZlYXR1cmVJZBIqChFsYXN0X3RyaWdnZXJlZF9hdBgEIAEoA1IPbGFzdFRyaWdnZXJlZEF0EiMKDXRyaWdnZXJfdGltZXMYBSABKAVSDHRyaWdnZXJUaW1lcxIlCg5lbnZpcm9ubWVudF9pZBgGIAEoCVINZW52aXJvbm1lbnRJZEoECAMQBCJVCh5BY2NvdW50VjJGaXJzdE5hbWVDaGFuZ2VkRXZlbnQSFAoFZW1haWwYASABKAlSBWVtYWlsEh0KCmZpcnN0X25hbWUYAiABKAlSCWZpcnN0TmFtZSJSCh1BY2NvdW50VjJMYXN0TmFtZUNoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSGwoJbGFzdF9uYW1lGAIgASgJUghsYXN0TmFtZSJRCh1BY2NvdW50VjJMYW5ndWFnZUNoYW5nZWRFdmVudBIUCgVlbWFpbBgBIAEoCVIFZW1haWwSGgoIbGFuZ3VhZ2UYAiABKAlSCGxhbmd1YWdlQjZaNGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9ldmVudC9kb21haW5iBnByb3RvMwrKAQoqcHJvdG8vZXZlbnQvZG9tYWluL2xvY2FsaXplZF9tZXNzYWdlLnByb3RvEhZidWNrZXRlZXIuZXZlbnQuZG9tYWluIkQKEExvY2FsaXplZE1lc3NhZ2USFgoGbG9jYWxlGAEgASgJUgZsb2NhbGUSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZUI2WjRnaXRodWIuY29tL2J1Y2tldGVlci1pby9idWNrZXRlZXIvcHJvdG8vZXZlbnQvZG9tYWluYgZwcm90bzMK+gUKHXByb3RvL2F1ZGl0bG9nL2F1ZGl0bG9nLnByb3RvEhJidWNrZXRlZXIuYXVkaXRsb2caGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aHnByb3RvL2V2ZW50L2RvbWFpbi9ldmVudC5wcm90bxoqcHJvdG8vZXZlbnQvZG9tYWluL2xvY2FsaXplZF9tZXNzYWdlLnByb3RvIqEECghBdWRpdExvZxIOCgJpZBgBIAEoCVICaWQSHAoJdGltZXN0YW1wGAIgASgDUgl0aW1lc3RhbXASSQoLZW50aXR5X3R5cGUYAyABKA4yKC5idWNrZXRlZXIuZXZlbnQuZG9tYWluLkV2ZW50LkVudGl0eVR5cGVSCmVudGl0eVR5cGUSGwoJZW50aXR5X2lkGAQgASgJUghlbnRpdHlJZBI2CgR0eXBlGAUgASgOMiIuYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FdmVudC5UeXBlUgR0eXBlEioKBWV2ZW50GAYgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIFZXZlbnQSNgoGZWRpdG9yGAcgASgLMh4uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5FZGl0b3JSBmVkaXRvchI5CgdvcHRpb25zGAggASgLMh8uYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5PcHRpb25zUgdvcHRpb25zElUKEWxvY2FsaXplZF9tZXNzYWdlGAkgASgLMiguYnVja2V0ZWVyLmV2ZW50LmRvbWFpbi5Mb2NhbGl6ZWRNZXNzYWdlUhBsb2NhbGl6ZWRNZXNzYWdlEh8KC2VudGl0eV9kYXRhGAogASgJUgplbnRpdHlEYXRhEjAKFHByZXZpb3VzX2VudGl0eV9kYXRhGAsgASgJUhJwcmV2aW91c0VudGl0eURhdGFCMlowZ2l0aHViLmNvbS9idWNrZXRlZXItaW8vYnVja2V0ZWVyL3Byb3RvL2F1ZGl0bG9nYgZwcm90bzMKoBMKHHByb3RvL2F1ZGl0bG9nL3NlcnZpY2UucHJvdG8SEmJ1Y2tldGVlci5hdWRpdGxvZxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvGh1wcm90by9hdWRpdGxvZy9hdWRpdGxvZy5wcm90byL8AwoUTGlzdEF1ZGl0TG9nc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJLCghvcmRlcl9ieRgEIAEoDjIwLmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0QXVkaXRMb2dzUmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmAKD29yZGVyX2RpcmVjdGlvbhgFIAEoDjI3LmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0QXVkaXRMb2dzUmVxdWVzdC5PcmRlckRpcmVjdGlvblIOb3JkZXJEaXJlY3Rpb24SJQoOc2VhcmNoX2tleXdvcmQYBiABKAlSDXNlYXJjaEtleXdvcmQSEgoEZnJvbRgHIAEoA1IEZnJvbRIOCgJ0bxgIIAEoA1ICdG8SPAoLZW50aXR5X3R5cGUYCSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIKZW50aXR5VHlwZRIlCg5lbnZpcm9ubWVudF9pZBgKIAEoCVINZW52aXJvbm1lbnRJZCIlCgdPcmRlckJ5EgsKB0RFRkFVTFQQABINCglUSU1FU1RBTVAQASIjCg5PcmRlckRpcmVjdGlvbhIICgRERVNDEAASBwoDQVNDEAFKBAgDEAQijQEKFUxpc3RBdWRpdExvZ3NSZXNwb25zZRI7CgphdWRpdF9sb2dzGAEgAygLMhwuYnVja2V0ZWVyLmF1ZGl0bG9nLkF1ZGl0TG9nUglhdWRpdExvZ3MSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQi3gMKGUxpc3RBZG1pbkF1ZGl0TG9nc1JlcXVlc3QSGwoJcGFnZV9zaXplGAEgASgDUghwYWdlU2l6ZRIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchJQCghvcmRlcl9ieRgDIAEoDjI1LmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0QWRtaW5BdWRpdExvZ3NSZXF1ZXN0Lk9yZGVyQnlSB29yZGVyQnkSZQoPb3JkZXJfZGlyZWN0aW9uGAQgASgOMjwuYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBZG1pbkF1ZGl0TG9nc1JlcXVlc3QuT3JkZXJEaXJlY3Rpb25SDm9yZGVyRGlyZWN0aW9uEiUKDnNlYXJjaF9rZXl3b3JkGAUgASgJUg1zZWFyY2hLZXl3b3JkEhIKBGZyb20YBiABKANSBGZyb20SDgoCdG8YByABKANSAnRvEjwKC2VudGl0eV90eXBlGAggASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSCmVudGl0eVR5cGUiJQoHT3JkZXJCeRILCgdERUZBVUxUEAASDQoJVElNRVNUQU1QEAEiIwoOT3JkZXJEaXJlY3Rpb24SCAoEREVTQxAAEgcKA0FTQxABIpIBChpMaXN0QWRtaW5BdWRpdExvZ3NSZXNwb25zZRI7CgphdWRpdF9sb2dzGAEgAygLMhwuYnVja2V0ZWVyLmF1ZGl0bG9nLkF1ZGl0TG9nUglhdWRpdExvZ3MSFgoGY3Vyc29yGAIgASgJUgZjdXJzb3ISHwoLdG90YWxfY291bnQYAyABKANSCnRvdGFsQ291bnQi7AMKGUxpc3RGZWF0dXJlSGlzdG9yeVJlcXVlc3QSHQoKZmVhdHVyZV9pZBgBIAEoCVIJZmVhdHVyZUlkEhsKCXBhZ2Vfc2l6ZRgCIAEoA1IIcGFnZVNpemUSFgoGY3Vyc29yGAMgASgJUgZjdXJzb3ISUAoIb3JkZXJfYnkYBSABKA4yNS5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEZlYXR1cmVIaXN0b3J5UmVxdWVzdC5PcmRlckJ5UgdvcmRlckJ5EmUKD29yZGVyX2RpcmVjdGlvbhgGIAEoDjI8LmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0RmVhdHVyZUhpc3RvcnlSZXF1ZXN0Lk9yZGVyRGlyZWN0aW9uUg5vcmRlckRpcmVjdGlvbhIlCg5zZWFyY2hfa2V5d29yZBgHIAEoCVINc2VhcmNoS2V5d29yZBISCgRmcm9tGAggASgDUgRmcm9tEg4KAnRvGAkgASgDUgJ0bxIlCg5lbnZpcm9ubWVudF9pZBgKIAEoCVINZW52aXJvbm1lbnRJZCIlCgdPcmRlckJ5EgsKB0RFRkFVTFQQABINCglUSU1FU1RBTVAQASIjCg5PcmRlckRpcmVjdGlvbhIICgRERVNDEAASBwoDQVNDEAFKBAgEEAUikgEKGkxpc3RGZWF0dXJlSGlzdG9yeVJlc3BvbnNlEjsKCmF1ZGl0X2xvZ3MYASADKAsyHC5idWNrZXRlZXIuYXVkaXRsb2cuQXVkaXRMb2dSCWF1ZGl0TG9ncxIWCgZjdXJzb3IYAiABKAlSBmN1cnNvchIfCgt0b3RhbF9jb3VudBgDIAEoA1IKdG90YWxDb3VudDLnAgoPQXVkaXRMb2dTZXJ2aWNlEmYKDUxpc3RBdWRpdExvZ3MSKC5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEF1ZGl0TG9nc1JlcXVlc3QaKS5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEF1ZGl0TG9nc1Jlc3BvbnNlIgASdQoSTGlzdEFkbWluQXVkaXRMb2dzEi0uYnVja2V0ZWVyLmF1ZGl0bG9nLkxpc3RBZG1pbkF1ZGl0TG9nc1JlcXVlc3QaLi5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEFkbWluQXVkaXRMb2dzUmVzcG9uc2UiABJ1ChJMaXN0RmVhdHVyZUhpc3RvcnkSLS5idWNrZXRlZXIuYXVkaXRsb2cuTGlzdEZlYXR1cmVIaXN0b3J5UmVxdWVzdBouLmJ1Y2tldGVlci5hdWRpdGxvZy5MaXN0RmVhdHVyZUhpc3RvcnlSZXNwb25zZSIAQjJaMGdpdGh1Yi5jb20vYnVja2V0ZWVyLWlvL2J1Y2tldGVlci9wcm90by9hdWRpdGxvZ2IGcHJvdG8z config: grpcPort: 9000 httpPort: 9003 diff --git a/migration/mysql/20241113142932_update_environment_id_table.sql b/migration/mysql/20241113142932_update_environment_id_table.sql new file mode 100644 index 0000000000..fafda411ff --- /dev/null +++ b/migration/mysql/20241113142932_update_environment_id_table.sql @@ -0,0 +1,120 @@ +-- Step 1: Drop all foreign keys referencing environment_namespace +ALTER TABLE auto_ops_rule DROP FOREIGN KEY foreign_auto_ops_rule_feature_id_environment_namespace; +ALTER TABLE experiment DROP FOREIGN KEY foreign_experiment_feature_id_environment_namespace; +ALTER TABLE ops_count +DROP FOREIGN KEY foreign_ops_count_feature_id_environment_namespace, +DROP FOREIGN KEY foreign_ops_count_auto_ops_rule_id_environment_namespace; +ALTER TABLE ops_progressive_rollout DROP FOREIGN KEY foreign_progressive_rollout_feature_id_environment_namespace; +ALTER TABLE flag_trigger DROP FOREIGN KEY foreign_flag_trigger_feature_id_environment_namespace; +ALTER TABLE segment_user DROP FOREIGN KEY foreign_segment_user_segment_id_environment_namespace; + +-- Step 2: Populate environment_id with values from environment_namespace +UPDATE feature SET environment_id = environment_namespace; +UPDATE account SET environment_id = environment_namespace; +UPDATE api_key SET environment_id = environment_namespace; +UPDATE audit_log SET environment_id = environment_namespace; +UPDATE auto_ops_rule SET environment_id = environment_namespace; +UPDATE experiment SET environment_id = environment_namespace; +UPDATE experiment_result SET environment_id = environment_namespace; +UPDATE feature_last_used_info SET environment_id = environment_namespace; +UPDATE flag_trigger SET environment_id = environment_namespace; +UPDATE goal SET environment_id = environment_namespace; +UPDATE mau SET environment_id = environment_namespace; +UPDATE ops_count SET environment_id = environment_namespace; +UPDATE ops_progressive_rollout SET environment_id = environment_namespace; +UPDATE push SET environment_id = environment_namespace; +UPDATE segment SET environment_id = environment_namespace; +UPDATE segment_user SET environment_id = environment_namespace; +UPDATE subscription SET environment_id = environment_namespace; +UPDATE tag SET environment_id = environment_namespace; + +-- Step 3: Change PRIMARY KEY to use environment_id instead of environment_namespace +ALTER TABLE feature_last_used_info +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE mau +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (user_id, yearmonth, source_id, environment_id); + +ALTER TABLE ops_count +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE ops_progressive_rollout +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE segment_user +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE feature +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE account +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE api_key +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE audit_log +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE auto_ops_rule +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE experiment +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE experiment_result +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE flag_trigger +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE goal +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE push +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE segment +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE subscription +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); + +ALTER TABLE tag +ALGORITHM=INPLACE, +DROP PRIMARY KEY, +ADD PRIMARY KEY (id, environment_id); \ No newline at end of file diff --git a/migration/mysql/atlas.sum b/migration/mysql/atlas.sum index 5053498d93..ba1bed6ee7 100644 --- a/migration/mysql/atlas.sum +++ b/migration/mysql/atlas.sum @@ -1,4 +1,4 @@ -h1:OJvYQmdFDLoyPO32FuZtV3/wh6AE6KcLRc7Y+jadtE8= +h1:V8cRpgqJinbttzFCPGa+rbd3Zrm6BGsTB0w58QlTuVs= 20240626022133_initialization.sql h1:u9qmPkwWX7PN92qEcDDfR92lrMpwadQSMxUJgv6LjQ0= 20240708065726_update_audit_log_table.sql h1:k7gK8Njv1yHMsYXAQtSgMaSbXy4lxyZ9MPzbJyMyyoM= 20240815043128_update_auto_ops_rule_table.sql h1:6ib+XfS1uu9AUO3qESvkpUfOu3qUsLwHm9KHcrGEz0E= @@ -11,3 +11,4 @@ h1:OJvYQmdFDLoyPO32FuZtV3/wh6AE6KcLRc7Y+jadtE8= 20241028031327_add_org_url_unique.sql h1:Xn0Pilm+RRseqZZXdsIdXulwy+R69xIC6ygA8MD19CM= 20241029011618_update_account_v2_table.sql h1:vcQDt2A4WdC0DP/SdZNjsl/T4oVrIVITgPRgc773Hn4= 20241113125451_update_environment_namespace.sql h1:dqTCT/L3QtjMIsM788jAisRiDU0ItEx4m3xgOiuXU1k= +20241113142932_update_environment_id_table.sql h1:MufoP4KqI2pl8lCV5OHhyITYC+VQcYJc3jSwDpqK0Ks= diff --git a/pkg/account/api/api.go b/pkg/account/api/api.go index d892da6f61..099ac07468 100644 --- a/pkg/account/api/api.go +++ b/pkg/account/api/api.go @@ -263,15 +263,15 @@ func (s *AccountService) checkSystemAdminRole( func (s *AccountService) checkEnvironmentRole( ctx context.Context, requiredRole proto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*proto.AccountV2, error) { - account, err := s.getAccountV2ByEnvironmentID(ctx, email, environmentNamespace, localizer) + account, err := s.getAccountV2ByEnvironmentID(ctx, email, environmentId, localizer) if err != nil { return nil, err } @@ -285,7 +285,7 @@ func (s *AccountService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -301,7 +301,7 @@ func (s *AccountService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -317,7 +317,7 @@ func (s *AccountService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/account/api/api_key.go b/pkg/account/api/api_key.go index 3b986be776..9ac640612f 100644 --- a/pkg/account/api/api_key.go +++ b/pkg/account/api/api_key.go @@ -39,7 +39,7 @@ func (s *AccountService) CreateAPIKey( editor, err := s.checkOrganizationRoleByEnvironmentID( ctx, proto.AccountV2_Role_Organization_ADMIN, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ) if err != nil { @@ -54,7 +54,7 @@ func (s *AccountService) CreateAPIKey( "Failed to create a new api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -67,14 +67,19 @@ func (s *AccountService) CreateAPIKey( return nil, dt.Err() } err = s.accountStorage.RunInTransaction(ctx, func() error { - handler, err := command.NewAPIKeyCommandHandler(editor, key, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAPIKeyCommandHandler( + editor, + key, + s.publisher, + req.EnvironmentId, + ) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - return s.accountStorage.CreateAPIKey(ctx, key, req.EnvironmentNamespace) + return s.accountStorage.CreateAPIKey(ctx, key, req.EnvironmentId) }) if err != nil { if err == v2as.ErrAPIKeyAlreadyExists { @@ -91,7 +96,7 @@ func (s *AccountService) CreateAPIKey( "Failed to create api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -116,7 +121,7 @@ func (s *AccountService) ChangeAPIKeyName( editor, err := s.checkOrganizationRoleByEnvironmentID( ctx, proto.AccountV2_Role_Organization_ADMIN, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ) if err != nil { @@ -127,12 +132,18 @@ func (s *AccountService) ChangeAPIKeyName( "Failed to change api key name", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err := s.updateAPIKeyMySQL(ctx, editor, req.Id, req.EnvironmentNamespace, req.Command); err != nil { + if err := s.updateAPIKeyMySQL( + ctx, + editor, + req.Id, + req.EnvironmentId, + req.Command, + ); err != nil { if err == v2as.ErrAPIKeyNotFound || err == v2as.ErrAPIKeyUnexpectedAffectedRows { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -147,7 +158,7 @@ func (s *AccountService) ChangeAPIKeyName( "Failed to change api key name", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), zap.String("name", req.Command.Name), )..., @@ -172,7 +183,7 @@ func (s *AccountService) EnableAPIKey( editor, err := s.checkOrganizationRoleByEnvironmentID( ctx, proto.AccountV2_Role_Organization_ADMIN, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ) if err != nil { @@ -183,12 +194,18 @@ func (s *AccountService) EnableAPIKey( "Failed to enable api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err := s.updateAPIKeyMySQL(ctx, editor, req.Id, req.EnvironmentNamespace, req.Command); err != nil { + if err := s.updateAPIKeyMySQL( + ctx, + editor, + req.Id, + req.EnvironmentId, + req.Command, + ); err != nil { if err == v2as.ErrAPIKeyNotFound || err == v2as.ErrAPIKeyUnexpectedAffectedRows { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -203,7 +220,7 @@ func (s *AccountService) EnableAPIKey( "Failed to enable api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -227,7 +244,7 @@ func (s *AccountService) DisableAPIKey( editor, err := s.checkOrganizationRoleByEnvironmentID( ctx, proto.AccountV2_Role_Organization_ADMIN, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ) if err != nil { @@ -238,12 +255,18 @@ func (s *AccountService) DisableAPIKey( "Failed to disable api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err := s.updateAPIKeyMySQL(ctx, editor, req.Id, req.EnvironmentNamespace, req.Command); err != nil { + if err := s.updateAPIKeyMySQL( + ctx, + editor, + req.Id, + req.EnvironmentId, + req.Command, + ); err != nil { if err == v2as.ErrAPIKeyNotFound || err == v2as.ErrAPIKeyUnexpectedAffectedRows { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -258,7 +281,7 @@ func (s *AccountService) DisableAPIKey( "Failed to disable api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -277,22 +300,22 @@ func (s *AccountService) DisableAPIKey( func (s *AccountService) updateAPIKeyMySQL( ctx context.Context, editor *eventproto.Editor, - id, environmentNamespace string, + id, environmentID string, cmd command.Command, ) error { return s.accountStorage.RunInTransaction(ctx, func() error { - apiKey, err := s.accountStorage.GetAPIKey(ctx, id, environmentNamespace) + apiKey, err := s.accountStorage.GetAPIKey(ctx, id, environmentID) if err != nil { return err } - handler, err := command.NewAPIKeyCommandHandler(editor, apiKey, s.publisher, environmentNamespace) + handler, err := command.NewAPIKeyCommandHandler(editor, apiKey, s.publisher, environmentID) if err != nil { return err } if err := handler.Handle(ctx, cmd); err != nil { return err } - return s.accountStorage.UpdateAPIKey(ctx, apiKey, environmentNamespace) + return s.accountStorage.UpdateAPIKey(ctx, apiKey, environmentID) }) } @@ -300,7 +323,7 @@ func (s *AccountService) GetAPIKey(ctx context.Context, req *proto.GetAPIKeyRequ localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, proto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -314,7 +337,7 @@ func (s *AccountService) GetAPIKey(ctx context.Context, req *proto.GetAPIKeyRequ } return nil, dt.Err() } - apiKey, err := s.accountStorage.GetAPIKey(ctx, req.Id, req.EnvironmentNamespace) + apiKey, err := s.accountStorage.GetAPIKey(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2as.ErrAPIKeyNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -330,7 +353,7 @@ func (s *AccountService) GetAPIKey(ctx context.Context, req *proto.GetAPIKeyRequ "Failed to get api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -353,12 +376,12 @@ func (s *AccountService) ListAPIKeys( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, proto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.Disabled != nil { whereParts = append(whereParts, mysql.NewFilter("disabled", "=", req.Disabled.Value)) @@ -402,7 +425,7 @@ func (s *AccountService) ListAPIKeys( "Failed to list api keys", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -544,7 +567,7 @@ func (s *AccountService) GetAPIKeyBySearchingAllEnvironments( "Failed to get api key", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", e.Id), + zap.String("environmentId", e.Id), zap.String("id", req.Id), )..., ) diff --git a/pkg/account/api/api_key_test.go b/pkg/account/api/api_key_test.go index ea6bef6788..7536abed49 100644 --- a/pkg/account/api/api_key_test.go +++ b/pkg/account/api/api_key_test.go @@ -514,7 +514,7 @@ func TestGetAPIKeyMySQL(t *testing.T) { }, }, nil) }, - req: &accountproto.GetAPIKeyRequest{Id: "id", EnvironmentNamespace: "ns0"}, + req: &accountproto.GetAPIKeyRequest{Id: "id", EnvironmentId: "ns0"}, getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -538,7 +538,7 @@ func TestGetAPIKeyMySQL(t *testing.T) { }, }, nil).AnyTimes() }, - req: &accountproto.GetAPIKeyRequest{Id: "id", EnvironmentNamespace: "ns0"}, + req: &accountproto.GetAPIKeyRequest{Id: "id", EnvironmentId: "ns0"}, getExpectedErr: func(localizer locale.Localizer) error { return createError(localizer, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)) }, @@ -629,7 +629,7 @@ func TestListAPIKeysMySQL(t *testing.T) { }, }, nil).AnyTimes() }, - input: &accountproto.ListAPIKeysRequest{EnvironmentNamespace: "ns0"}, + input: &accountproto.ListAPIKeysRequest{EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(localizer, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)) @@ -671,7 +671,7 @@ func TestListAPIKeysMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), ).Return([]*accountproto.APIKey{}, 0, int64(0), nil) }, - input: &accountproto.ListAPIKeysRequest{EnvironmentNamespace: "ns0"}, + input: &accountproto.ListAPIKeysRequest{EnvironmentId: "ns0"}, expected: &accountproto.ListAPIKeysResponse{ApiKeys: []*accountproto.APIKey{}, Cursor: "0"}, getExpectedErr: func(localizer locale.Localizer) error { return nil diff --git a/pkg/account/command/api_key.go b/pkg/account/command/api_key.go index a3e7f71d1d..635df2baaa 100644 --- a/pkg/account/command/api_key.go +++ b/pkg/account/command/api_key.go @@ -28,29 +28,29 @@ import ( ) type apiKeyCommandHandler struct { - editor *eventproto.Editor - apiKey *domain.APIKey - previousAPIKey *domain.APIKey - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + apiKey *domain.APIKey + previousAPIKey *domain.APIKey + publisher publisher.Publisher + environmentID string } func NewAPIKeyCommandHandler( editor *eventproto.Editor, apiKey *domain.APIKey, p publisher.Publisher, - environmentNamespace string, + environmentID string, ) (Handler, error) { prev := &domain.APIKey{} if err := copier.Copy(prev, apiKey); err != nil { return nil, err } return &apiKeyCommandHandler{ - editor: editor, - apiKey: apiKey, - previousAPIKey: prev, - publisher: p, - environmentNamespace: environmentNamespace, + editor: editor, + apiKey: apiKey, + previousAPIKey: prev, + publisher: p, + environmentID: environmentID, }, nil } @@ -119,7 +119,7 @@ func (h *apiKeyCommandHandler) send(ctx context.Context, eventType eventproto.Ev h.apiKey.Id, eventType, event, - h.environmentNamespace, + h.environmentID, h.apiKey.APIKey, prev, ) diff --git a/pkg/account/storage/v2/api_key.go b/pkg/account/storage/v2/api_key.go index 06ce9c8e0f..57252d178a 100644 --- a/pkg/account/storage/v2/api_key.go +++ b/pkg/account/storage/v2/api_key.go @@ -44,7 +44,7 @@ var ( selectAPIKeyV2ByIDSQLQuery string ) -func (s *accountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error { +func (s *accountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error { _, err := s.qe(ctx).ExecContext( ctx, insertAPIKeyV2SQLQuery, @@ -54,7 +54,7 @@ func (s *accountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, env k.Disabled, k.CreatedAt, k.UpdatedAt, - environmentNamespace, + environmentID, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -65,7 +65,7 @@ func (s *accountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, env return nil } -func (s *accountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error { +func (s *accountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error { result, err := s.qe(ctx).ExecContext( ctx, updateAPIKeyV2SQLQuery, @@ -74,7 +74,7 @@ func (s *accountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, env k.Disabled, k.UpdatedAt, k.Id, - environmentNamespace, + environmentID, ) if err != nil { return err @@ -89,14 +89,14 @@ func (s *accountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, env return nil } -func (s *accountStorage) GetAPIKey(ctx context.Context, id, environmentNamespace string) (*domain.APIKey, error) { +func (s *accountStorage) GetAPIKey(ctx context.Context, id, environmentID string) (*domain.APIKey, error) { apiKey := proto.APIKey{} var role int32 err := s.qe(ctx).QueryRowContext( ctx, selectAPIKeyV2ByIDSQLQuery, id, - environmentNamespace, + environmentID, ).Scan( &apiKey.Id, &apiKey.Name, diff --git a/pkg/account/storage/v2/api_key_test.go b/pkg/account/storage/v2/api_key_test.go index fc07112878..77a144b64e 100644 --- a/pkg/account/storage/v2/api_key_test.go +++ b/pkg/account/storage/v2/api_key_test.go @@ -33,11 +33,11 @@ func TestCreateAPIKey(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*accountStorage) - input *domain.APIKey - environmentNamespace string - expectedErr error + desc string + setup func(*accountStorage) + input *domain.APIKey + environmentId string + expectedErr error }{ { desc: "ErrAPIKeyAlreadyExists", @@ -49,8 +49,8 @@ func TestCreateAPIKey(t *testing.T) { input: &domain.APIKey{ APIKey: &proto.APIKey{Id: "aid-0"}, }, - environmentNamespace: "ns0", - expectedErr: ErrAPIKeyAlreadyExists, + environmentId: "ns0", + expectedErr: ErrAPIKeyAlreadyExists, }, { desc: "Error", @@ -62,8 +62,8 @@ func TestCreateAPIKey(t *testing.T) { input: &domain.APIKey{ APIKey: &proto.APIKey{Id: "aid-0"}, }, - environmentNamespace: "ns0", - expectedErr: errors.New("error"), + environmentId: "ns0", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -77,8 +77,8 @@ func TestCreateAPIKey(t *testing.T) { input: &domain.APIKey{ APIKey: &proto.APIKey{Id: "aid-0", Name: "name", Role: 0, Disabled: false, CreatedAt: 2, UpdatedAt: 3}, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -87,7 +87,7 @@ func TestCreateAPIKey(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.CreateAPIKey(context.Background(), p.input, p.environmentNamespace) + err := storage.CreateAPIKey(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -99,7 +99,7 @@ func TestUpdateAPIKey(t *testing.T) { defer mockController.Finish() id := "aid-0" - environmentNamespace := "ns0" + environmentId := "ns0" name := "name" role := proto.APIKey_Role(0) disabled := false @@ -107,11 +107,11 @@ func TestUpdateAPIKey(t *testing.T) { updatedAt := int64(3) patterns := []struct { - desc string - setup func(*accountStorage) - input *domain.APIKey - environmentNamespace string - expectedErr error + desc string + setup func(*accountStorage) + input *domain.APIKey + environmentId string + expectedErr error }{ { desc: "ErrAPIKeyUnexpectedAffectedRows", @@ -125,8 +125,8 @@ func TestUpdateAPIKey(t *testing.T) { input: &domain.APIKey{ APIKey: &proto.APIKey{Id: id}, }, - environmentNamespace: environmentNamespace, - expectedErr: ErrAPIKeyUnexpectedAffectedRows, + environmentId: environmentId, + expectedErr: ErrAPIKeyUnexpectedAffectedRows, }, { desc: "Error", @@ -138,8 +138,8 @@ func TestUpdateAPIKey(t *testing.T) { input: &domain.APIKey{ APIKey: &proto.APIKey{Id: id}, }, - environmentNamespace: environmentNamespace, - expectedErr: errors.New("error"), + environmentId: environmentId, + expectedErr: errors.New("error"), }, { desc: "Success", @@ -149,14 +149,14 @@ func TestUpdateAPIKey(t *testing.T) { s.client.(*mock.MockClient).EXPECT().ExecContext( gomock.Any(), gomock.Any(), - name, int32(role), disabled, updatedAt, id, environmentNamespace, + name, int32(role), disabled, updatedAt, id, environmentId, ).Return(result, nil) }, input: &domain.APIKey{ APIKey: &proto.APIKey{Id: id, Name: name, Role: role, Disabled: disabled, CreatedAt: createdAt, UpdatedAt: updatedAt}, }, - environmentNamespace: environmentNamespace, - expectedErr: nil, + environmentId: environmentId, + expectedErr: nil, }, } for _, p := range patterns { @@ -165,7 +165,7 @@ func TestUpdateAPIKey(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdateAPIKey(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdateAPIKey(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -176,11 +176,11 @@ func TestGetAPIKey(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*accountStorage) - id string - environmentNamespace string - expectedErr error + desc string + setup func(*accountStorage) + id string + environmentId string + expectedErr error }{ { desc: "ErrAPIKeyNotFound", @@ -191,9 +191,9 @@ func TestGetAPIKey(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns0", - expectedErr: ErrAPIKeyNotFound, + id: "id-0", + environmentId: "ns0", + expectedErr: ErrAPIKeyNotFound, }, { desc: "Error", @@ -205,9 +205,9 @@ func TestGetAPIKey(t *testing.T) { ).Return(row) }, - id: "id-0", - environmentNamespace: "ns0", - expectedErr: errors.New("error"), + id: "id-0", + environmentId: "ns0", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -220,9 +220,9 @@ func TestGetAPIKey(t *testing.T) { "id-0", "ns0", ).Return(row) }, - id: "id-0", - environmentNamespace: "ns0", - expectedErr: nil, + id: "id-0", + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -231,7 +231,7 @@ func TestGetAPIKey(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetAPIKey(context.Background(), p.id, p.environmentNamespace) + _, err := storage.GetAPIKey(context.Background(), p.id, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/account/storage/v2/mock/storage.go b/pkg/account/storage/v2/mock/storage.go index 5dce242587..c9d928dd1b 100644 --- a/pkg/account/storage/v2/mock/storage.go +++ b/pkg/account/storage/v2/mock/storage.go @@ -44,17 +44,17 @@ func (m *MockAccountStorage) EXPECT() *MockAccountStorageMockRecorder { } // CreateAPIKey mocks base method. -func (m *MockAccountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error { +func (m *MockAccountStorage) CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateAPIKey", ctx, k, environmentNamespace) + ret := m.ctrl.Call(m, "CreateAPIKey", ctx, k, environmentID) ret0, _ := ret[0].(error) return ret0 } // CreateAPIKey indicates an expected call of CreateAPIKey. -func (mr *MockAccountStorageMockRecorder) CreateAPIKey(ctx, k, environmentNamespace any) *gomock.Call { +func (mr *MockAccountStorageMockRecorder) CreateAPIKey(ctx, k, environmentID any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).CreateAPIKey), ctx, k, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).CreateAPIKey), ctx, k, environmentID) } // CreateAccountV2 mocks base method. @@ -86,18 +86,18 @@ func (mr *MockAccountStorageMockRecorder) DeleteAccountV2(ctx, a any) *gomock.Ca } // GetAPIKey mocks base method. -func (m *MockAccountStorage) GetAPIKey(ctx context.Context, id, environmentNamespace string) (*domain.APIKey, error) { +func (m *MockAccountStorage) GetAPIKey(ctx context.Context, id, environmentID string) (*domain.APIKey, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAPIKey", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetAPIKey", ctx, id, environmentID) ret0, _ := ret[0].(*domain.APIKey) ret1, _ := ret[1].(error) return ret0, ret1 } // GetAPIKey indicates an expected call of GetAPIKey. -func (mr *MockAccountStorageMockRecorder) GetAPIKey(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockAccountStorageMockRecorder) GetAPIKey(ctx, id, environmentID any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).GetAPIKey), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).GetAPIKey), ctx, id, environmentID) } // GetAccountV2 mocks base method. @@ -209,17 +209,17 @@ func (mr *MockAccountStorageMockRecorder) RunInTransaction(ctx, f any) *gomock.C } // UpdateAPIKey mocks base method. -func (m *MockAccountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error { +func (m *MockAccountStorage) UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateAPIKey", ctx, k, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateAPIKey", ctx, k, environmentID) ret0, _ := ret[0].(error) return ret0 } // UpdateAPIKey indicates an expected call of UpdateAPIKey. -func (mr *MockAccountStorageMockRecorder) UpdateAPIKey(ctx, k, environmentNamespace any) *gomock.Call { +func (mr *MockAccountStorageMockRecorder) UpdateAPIKey(ctx, k, environmentID any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).UpdateAPIKey), ctx, k, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAPIKey", reflect.TypeOf((*MockAccountStorage)(nil).UpdateAPIKey), ctx, k, environmentID) } // UpdateAccountV2 mocks base method. diff --git a/pkg/account/storage/v2/sql/api_key_v2/insert_api_key_v2.sql b/pkg/account/storage/v2/sql/api_key_v2/insert_api_key_v2.sql index 8d99438a67..275ffb379d 100644 --- a/pkg/account/storage/v2/sql/api_key_v2/insert_api_key_v2.sql +++ b/pkg/account/storage/v2/sql/api_key_v2/insert_api_key_v2.sql @@ -5,5 +5,5 @@ INSERT INTO api_key ( disabled, created_at, updated_at, - environment_namespace + environment_id ) VALUES (?, ?, ?, ?, ?, ?, ?) diff --git a/pkg/account/storage/v2/sql/api_key_v2/select_api_key_v2_by_id.sql b/pkg/account/storage/v2/sql/api_key_v2/select_api_key_v2_by_id.sql index 8bf473ea65..4b2b0fb6e2 100644 --- a/pkg/account/storage/v2/sql/api_key_v2/select_api_key_v2_by_id.sql +++ b/pkg/account/storage/v2/sql/api_key_v2/select_api_key_v2_by_id.sql @@ -9,4 +9,4 @@ FROM api_key WHERE id = ? AND - environment_namespace = ? \ No newline at end of file + environment_id = ? \ No newline at end of file diff --git a/pkg/account/storage/v2/sql/api_key_v2/update_api_key_v2.sql b/pkg/account/storage/v2/sql/api_key_v2/update_api_key_v2.sql index c56a76b784..066589c703 100644 --- a/pkg/account/storage/v2/sql/api_key_v2/update_api_key_v2.sql +++ b/pkg/account/storage/v2/sql/api_key_v2/update_api_key_v2.sql @@ -5,4 +5,4 @@ UPDATE api_key SET updated_at = ? WHERE id = ? AND - environment_namespace = ? \ No newline at end of file + environment_id = ? \ No newline at end of file diff --git a/pkg/account/storage/v2/storage.go b/pkg/account/storage/v2/storage.go index 8888a2836d..a91e023a33 100644 --- a/pkg/account/storage/v2/storage.go +++ b/pkg/account/storage/v2/storage.go @@ -39,9 +39,9 @@ type AccountStorage interface { limit, offset int, ) ([]*proto.AccountV2, int, int64, error) GetSystemAdminAccountV2(ctx context.Context, email string) (*domain.AccountV2, error) - CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error - UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentNamespace string) error - GetAPIKey(ctx context.Context, id, environmentNamespace string) (*domain.APIKey, error) + CreateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error + UpdateAPIKey(ctx context.Context, k *domain.APIKey, environmentID string) error + GetAPIKey(ctx context.Context, id, environmentID string) (*domain.APIKey, error) ListAPIKeys( ctx context.Context, whereParts []mysql.WherePart, diff --git a/pkg/api/api/api.go b/pkg/api/api/api.go index d3dc643b19..30a0fbc93b 100644 --- a/pkg/api/api/api.go +++ b/pkg/api/api/api.go @@ -184,10 +184,10 @@ type getEvaluationResponse struct { } type event struct { - ID string `json:"id,omitempty"` - Event json.RawMessage `json:"event,omitempty"` - EnvironmentNamespace string `json:"environment_namespace,omitempty"` - Type EventType `json:"type,omitempty"` + ID string `json:"id,omitempty"` + Event json.RawMessage `json:"event,omitempty"` + EnvironmentId string `json:"environment_id,omitempty"` + Type EventType `json:"type,omitempty"` } type metricsEvent struct { @@ -541,22 +541,22 @@ func (s *gatewayService) publishUserEvent( return err } userEvent := &serviceeventproto.UserEvent{ - Id: id.String(), - SourceId: sourceID, - Tag: tag, - UserId: user.Id, - LastSeen: time.Now().Unix(), - Data: nil, // We set nil until we decide again what to do with the user metadata. - EnvironmentNamespace: environmentId, + Id: id.String(), + SourceId: sourceID, + Tag: tag, + UserId: user.Id, + LastSeen: time.Now().Unix(), + Data: nil, // We set nil until we decide again what to do with the user metadata. + EnvironmentId: environmentId, } ue, err := ptypes.MarshalAny(userEvent) if err != nil { return err } event := &eventproto.Event{ - Id: id.String(), - Event: ue, - EnvironmentNamespace: environmentId, + Id: id.String(), + Event: ue, + EnvironmentId: environmentId, } return s.userPublisher.Publish(ctx, event) } @@ -750,8 +750,8 @@ func (s *gatewayService) getSegmentUsers( )..., ) req := &featureproto.ListSegmentUsersRequest{ - SegmentId: segmentID, - EnvironmentNamespace: environmentId, + SegmentId: segmentID, + EnvironmentId: environmentId, } res, err := s.featureClient.ListSegmentUsers(ctx, req) if err != nil { @@ -828,9 +828,9 @@ func (s *gatewayService) listFeatures( cursor := "" for { resp, err := s.featureClient.ListFeatures(ctx, &featureproto.ListFeaturesRequest{ - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentId, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -895,7 +895,7 @@ func (s *gatewayService) registerEvents(w http.ResponseWriter, req *http.Request restEventCounter.WithLabelValues(callerGatewayService, typ, codeOK).Add(float64(len(messages) - len(errors))) } for _, event := range reqBody.Events { - event.EnvironmentNamespace = envAPIKey.Environment.Id + event.EnvironmentId = envAPIKey.Environment.Id if event.ID == "" { rest.ReturnFailureResponse(w, errMissingEventID) return @@ -921,9 +921,9 @@ func (s *gatewayService) registerEvents(w http.ResponseWriter, req *http.Request continue } goalMessages = append(goalMessages, &eventproto.Event{ - Id: event.ID, - Event: goalAny, - EnvironmentNamespace: event.EnvironmentNamespace, + Id: event.ID, + Event: goalAny, + EnvironmentId: event.EnvironmentId, }) case EvaluationEventType: eval, errCode, err := s.getEvaluationEvent(req.Context(), event) @@ -945,9 +945,9 @@ func (s *gatewayService) registerEvents(w http.ResponseWriter, req *http.Request continue } evaluationMessages = append(evaluationMessages, &eventproto.Event{ - Id: event.ID, - Event: evalAny, - EnvironmentNamespace: event.EnvironmentNamespace, + Id: event.ID, + Event: evalAny, + EnvironmentId: event.EnvironmentId, }) case MetricsEventType: metrics, errCode, err := s.getMetricsEvent(req.Context(), event) @@ -969,9 +969,9 @@ func (s *gatewayService) registerEvents(w http.ResponseWriter, req *http.Request continue } metricsMessages = append(metricsMessages, &eventproto.Event{ - Id: event.ID, - Event: metricsAny, - EnvironmentNamespace: event.EnvironmentNamespace, + Id: event.ID, + Event: metricsAny, + EnvironmentId: event.EnvironmentId, }) default: errs[event.ID] = ®isterEventsResponseError{ diff --git a/pkg/api/api/api_grpc.go b/pkg/api/api/api_grpc.go index 040fd9ef27..8b28560332 100644 --- a/pkg/api/api/api_grpc.go +++ b/pkg/api/api/api_grpc.go @@ -262,9 +262,9 @@ func (s *grpcGatewayService) Track(ctx context.Context, req *gwproto.TrackReques return nil, ErrInternal } event := &eventproto.Event{ - Id: id.String(), - Event: goal, - EnvironmentNamespace: envAPIKey.Environment.Id, + Id: id.String(), + Event: goal, + EnvironmentId: envAPIKey.Environment.Id, } if err := s.goalPublisher.Publish(ctx, event); err != nil { if err == publisher.ErrBadMessage { @@ -1025,22 +1025,22 @@ func (s *grpcGatewayService) publishUserEvent( return err } userEvent := &serviceeventproto.UserEvent{ - Id: id.String(), - SourceId: sourceID, - Tag: tag, - UserId: user.Id, - LastSeen: time.Now().Unix(), - Data: nil, // We set nil until we decide again what to do with the user metadata. - EnvironmentNamespace: environmentId, + Id: id.String(), + SourceId: sourceID, + Tag: tag, + UserId: user.Id, + LastSeen: time.Now().Unix(), + Data: nil, // We set nil until we decide again what to do with the user metadata. + EnvironmentId: environmentId, } ue, err := ptypes.MarshalAny(userEvent) if err != nil { return err } event := &eventproto.Event{ - Id: id.String(), - Event: ue, - EnvironmentNamespace: environmentId, + Id: id.String(), + Event: ue, + EnvironmentId: environmentId, } return s.userPublisher.Publish(ctx, event) } @@ -1082,9 +1082,9 @@ func (s *grpcGatewayService) listFeatures( cursor := "" for { resp, err := s.featureClient.ListFeatures(ctx, &featureproto.ListFeaturesRequest{ - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentId, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -1190,8 +1190,8 @@ func (s *grpcGatewayService) getSegmentUsersBySegmentID( )..., ) req := &featureproto.ListSegmentUsersRequest{ - SegmentId: segmentID, - EnvironmentNamespace: environmentId, + SegmentId: segmentID, + EnvironmentId: environmentId, } res, err := s.featureClient.ListSegmentUsers(ctx, req) if err != nil { @@ -1206,8 +1206,8 @@ func (s *grpcGatewayService) getSegmentUsersBySegmentID( return nil, ErrInternal } reqGet := &featureproto.GetSegmentRequest{ - Id: segmentID, - EnvironmentNamespace: environmentId, + Id: segmentID, + EnvironmentId: environmentId, } respGet, err := s.featureClient.GetSegment(ctx, reqGet) if err != nil { @@ -1317,7 +1317,7 @@ func (s *grpcGatewayService) RegisterEvents( return errs } for i, event := range req.Events { - event.EnvironmentNamespace = envAPIKey.Environment.Id + event.EnvironmentId = envAPIKey.Environment.Id if event.Id == "" { return nil, ErrMissingEventID } @@ -1332,7 +1332,7 @@ func (s *grpcGatewayService) RegisterEvents( zap.String("apiKey", envAPIKey.ApiKey.Id), zap.String("projectID", envAPIKey.ProjectId), zap.String("eventID", event.Id), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), zap.Any("event", event.Event), zap.Any("sourceId", req.SourceId), ) diff --git a/pkg/api/api/feature.go b/pkg/api/api/feature.go index dcaaff69c2..5d516df7d8 100644 --- a/pkg/api/api/feature.go +++ b/pkg/api/api/feature.go @@ -44,7 +44,7 @@ func (s *grpcGatewayService) CreateFeature( return nil, err } res, err := s.featureClient.CreateFeature(ctx, &featureproto.CreateFeatureRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, + EnvironmentId: envAPIKey.Environment.Id, Command: &featureproto.CreateFeatureCommand{ Id: req.Id, Name: req.Name, @@ -81,8 +81,8 @@ func (s *grpcGatewayService) GetFeature( return nil, err } resp, err := s.featureClient.GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - Id: req.Id, + EnvironmentId: envAPIKey.Environment.Id, + Id: req.Id, }) if err != nil { return nil, err @@ -110,11 +110,11 @@ func (s *grpcGatewayService) ListFeatures( return nil, err } resp, err := s.featureClient.ListFeatures(ctx, &featureproto.ListFeaturesRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - PageSize: req.PageSize, - Cursor: req.Cursor, - OrderBy: req.OrderBy, - OrderDirection: req.OrderDirection, + EnvironmentId: envAPIKey.Environment.Id, + PageSize: req.PageSize, + Cursor: req.Cursor, + OrderBy: req.OrderBy, + OrderDirection: req.OrderDirection, }) if err != nil { return nil, err diff --git a/pkg/api/api/push.go b/pkg/api/api/push.go index 910fe1de8e..5d29b7efd1 100644 --- a/pkg/api/api/push.go +++ b/pkg/api/api/push.go @@ -45,12 +45,12 @@ func (s *grpcGatewayService) ListPushes( res, err := s.pushClient.ListPushes( ctx, &pushproto.ListPushesRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - PageSize: req.PageSize, - Cursor: req.Cursor, - OrderBy: req.OrderBy, - OrderDirection: req.OrderDirection, - SearchKeyword: req.SearchKeyword, + EnvironmentId: envAPIKey.Environment.Id, + PageSize: req.PageSize, + Cursor: req.Cursor, + OrderBy: req.OrderBy, + OrderDirection: req.OrderDirection, + SearchKeyword: req.SearchKeyword, }, ) if err != nil { @@ -93,10 +93,10 @@ func (s *grpcGatewayService) CreatePush( res, err := s.pushClient.CreatePush( ctx, &pushproto.CreatePushRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - Name: req.Name, - Tags: req.Tags, - FcmServiceAccount: req.FcmServiceAccount, + EnvironmentId: envAPIKey.Environment.Id, + Name: req.Name, + Tags: req.Tags, + FcmServiceAccount: req.FcmServiceAccount, }, ) if err != nil { @@ -138,8 +138,8 @@ func (s *grpcGatewayService) GetPush( res, err := s.pushClient.GetPush( ctx, &pushproto.GetPushRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - Id: req.Id, + EnvironmentId: envAPIKey.Environment.Id, + Id: req.Id, }, ) if err != nil { @@ -181,8 +181,8 @@ func (s *grpcGatewayService) UpdatePush( _, err := s.pushClient.DeletePush( ctx, &pushproto.DeletePushRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - Id: req.Id, + EnvironmentId: envAPIKey.Environment.Id, + Id: req.Id, }, ) if err != nil { @@ -195,10 +195,10 @@ func (s *grpcGatewayService) UpdatePush( res, err := s.pushClient.UpdatePush( ctx, &pushproto.UpdatePushRequest{ - EnvironmentNamespace: envAPIKey.Environment.Id, - Id: req.Id, - Name: req.Name, - Tags: req.Tags, + EnvironmentId: envAPIKey.Environment.Id, + Id: req.Id, + Name: req.Name, + Tags: req.Tags, }, ) if err != nil { diff --git a/pkg/auditlog/api/api.go b/pkg/auditlog/api/api.go index b76351fd09..f1051ce755 100644 --- a/pkg/auditlog/api/api.go +++ b/pkg/auditlog/api/api.go @@ -100,7 +100,7 @@ func (s *auditlogService) ListAuditLogs( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -121,7 +121,7 @@ func (s *auditlogService) ListAuditLogs( return nil, dt.Err() } whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.From != 0 { whereParts = append(whereParts, mysql.NewFilter("timestamp", ">=", req.From)) @@ -312,13 +312,13 @@ func (s *auditlogService) ListFeatureHistory( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), mysql.NewFilter("entity_type", "=", int32(eventproto.Event_FEATURE)), mysql.NewFilter("entity_id", "=", req.FeatureId), } @@ -367,7 +367,7 @@ func (s *auditlogService) ListFeatureHistory( "Failed to list feature history", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("featureId", req.FeatureId), )..., ) @@ -420,17 +420,17 @@ func (s *auditlogService) newFeatureHistoryAuditLogListOrders( func (s *auditlogService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -444,7 +444,7 @@ func (s *auditlogService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -460,7 +460,7 @@ func (s *auditlogService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -476,7 +476,7 @@ func (s *auditlogService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/auditlog/api/api_test.go b/pkg/auditlog/api/api_test.go index c0dc235b08..890567cc49 100644 --- a/pkg/auditlog/api/api_test.go +++ b/pkg/auditlog/api/api_test.go @@ -79,7 +79,7 @@ func TestListAuditLogsMySQL(t *testing.T) { service: newAuditLogServiceWithGetAccountByEnvironmentMock(t, mockController, accountproto.AccountV2_Role_Organization_OWNER, accountproto.AccountV2_Role_Environment_EDITOR), context: createContextWithToken(t, true), setup: nil, - input: &proto.ListAuditLogsRequest{Cursor: "XXX", EnvironmentNamespace: "ns0"}, + input: &proto.ListAuditLogsRequest{Cursor: "XXX", EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(statusInvalidCursor, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "cursor"), localizer) @@ -94,7 +94,7 @@ func TestListAuditLogsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, 0, int64(0), errors.New("test")) }, - input: &proto.ListAuditLogsRequest{EnvironmentNamespace: "ns0"}, + input: &proto.ListAuditLogsRequest{EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(statusInternal, localizer.MustLocalize(locale.InternalServerError), localizer) @@ -105,7 +105,7 @@ func TestListAuditLogsMySQL(t *testing.T) { service: newAuditLogServiceWithGetAccountByEnvironmentMock(t, mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), context: createContextWithToken(t, false), setup: func(s *auditlogService) {}, - input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) @@ -120,7 +120,7 @@ func TestListAuditLogsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), ).Return(createAuditLogs(t), 2, int64(10), nil) }, - input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, expected: &proto.ListAuditLogsResponse{AuditLogs: createAuditLogs(t), Cursor: "2", TotalCount: 10}, getExpectedErr: func(localizer locale.Localizer) error { return nil @@ -135,7 +135,7 @@ func TestListAuditLogsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), ).Return(createAuditLogs(t), 2, int64(10), nil) }, - input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &proto.ListAuditLogsRequest{PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, expected: &proto.ListAuditLogsResponse{AuditLogs: createAuditLogs(t), Cursor: "2", TotalCount: 10}, getExpectedErr: func(localizer locale.Localizer) error { return nil @@ -259,7 +259,7 @@ func TestListFeatureHistoryMySQL(t *testing.T) { service: newAuditLogServiceWithGetAccountByEnvironmentMock(t, mockController, accountproto.AccountV2_Role_Organization_OWNER, accountproto.AccountV2_Role_Environment_EDITOR), context: createContextWithToken(t, false), setup: nil, - input: &proto.ListFeatureHistoryRequest{Cursor: "XXX", EnvironmentNamespace: "ns0"}, + input: &proto.ListFeatureHistoryRequest{Cursor: "XXX", EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(localizer, statusInvalidCursor, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "cursor")) @@ -274,7 +274,7 @@ func TestListFeatureHistoryMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, 0, int64(0), errors.New("test")) }, - input: &proto.ListFeatureHistoryRequest{EnvironmentNamespace: "ns0"}, + input: &proto.ListFeatureHistoryRequest{EnvironmentId: "ns0"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(localizer, statusInternal, localizer.MustLocalize(locale.InternalServerError)) @@ -286,7 +286,7 @@ func TestListFeatureHistoryMySQL(t *testing.T) { context: createContextWithTokenRoleUnassigned(t), setup: func(s *auditlogService) {}, input: &proto.ListFeatureHistoryRequest{ - FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0", + FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentId: "ns0", }, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { @@ -303,7 +303,7 @@ func TestListFeatureHistoryMySQL(t *testing.T) { ).Return(createAuditLogs(t), 2, int64(10), nil) }, input: &proto.ListFeatureHistoryRequest{ - FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0", + FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentId: "ns0", }, expected: &proto.ListFeatureHistoryResponse{AuditLogs: createAuditLogs(t), Cursor: "2", TotalCount: int64(10)}, getExpectedErr: func(localizer locale.Localizer) error { @@ -320,7 +320,7 @@ func TestListFeatureHistoryMySQL(t *testing.T) { ).Return(createAuditLogs(t), 2, int64(10), nil) }, input: &proto.ListFeatureHistoryRequest{ - FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0", + FeatureId: "fid-1", PageSize: 2, Cursor: "", EnvironmentId: "ns0", }, expected: &proto.ListFeatureHistoryResponse{AuditLogs: createAuditLogs(t), Cursor: "2", TotalCount: int64(10)}, getExpectedErr: func(localizer locale.Localizer) error { diff --git a/pkg/auditlog/domain/auditlog.go b/pkg/auditlog/domain/auditlog.go index ca454de5f2..ebcbce0d73 100644 --- a/pkg/auditlog/domain/auditlog.go +++ b/pkg/auditlog/domain/auditlog.go @@ -21,10 +21,10 @@ import ( type AuditLog struct { *proto.AuditLog - EnvironmentNamespace string + EnvironmentId string } -func NewAuditLog(event *domainevent.Event, environmentNamespace string) *AuditLog { +func NewAuditLog(event *domainevent.Event, environmentId string) *AuditLog { return &AuditLog{ AuditLog: &proto.AuditLog{ Id: event.Id, @@ -38,6 +38,6 @@ func NewAuditLog(event *domainevent.Event, environmentNamespace string) *AuditLo PreviousEntityData: event.PreviousEntityData, Options: event.Options, }, - EnvironmentNamespace: environmentNamespace, + EnvironmentId: environmentId, } } diff --git a/pkg/auditlog/domain/auditlog_test.go b/pkg/auditlog/domain/auditlog_test.go index ac1a69eb7b..42e8ddd821 100644 --- a/pkg/auditlog/domain/auditlog_test.go +++ b/pkg/auditlog/domain/auditlog_test.go @@ -35,7 +35,8 @@ func TestNewAuditLog(t *testing.T) { EntityData: "entityData", PreviousEntityData: "previousEntityData", Options: &domainevent.Options{Comment: "comment"}, - }, "en", + }, + "en", ) assert.IsType(t, &AuditLog{}, actual) assert.Equal(t, "id", actual.Id) @@ -47,5 +48,5 @@ func TestNewAuditLog(t *testing.T) { assert.Equal(t, "entityData", actual.EntityData) assert.Equal(t, "previousEntityData", actual.PreviousEntityData) assert.Equal(t, &domainevent.Options{Comment: "comment"}, actual.Options) - assert.Equal(t, "en", actual.EnvironmentNamespace) + assert.Equal(t, "en", actual.EnvironmentId) } diff --git a/pkg/auditlog/storage/v2/admin_audit_log_test.go b/pkg/auditlog/storage/v2/admin_audit_log_test.go index 32b21a1d7d..cddb1ec3de 100644 --- a/pkg/auditlog/storage/v2/admin_audit_log_test.go +++ b/pkg/auditlog/storage/v2/admin_audit_log_test.go @@ -92,8 +92,8 @@ func TestCreateAdminAuditLogs(t *testing.T) { ).Return(nil, nil) }, input: []*domain.AuditLog{ - {AuditLog: &proto.AuditLog{Id: id0, Timestamp: 1, EntityType: 2, EntityId: "e0", Type: 3, EntityData: "ed", PreviousEntityData: "ped"}, EnvironmentNamespace: "ns0"}, - {AuditLog: &proto.AuditLog{Id: id1, Timestamp: 10, EntityType: 3, EntityId: "e2", Type: 4, EntityData: "ed", PreviousEntityData: "ped"}, EnvironmentNamespace: "ns1"}, + {AuditLog: &proto.AuditLog{Id: id0, Timestamp: 1, EntityType: 2, EntityId: "e0", Type: 3, EntityData: "ed", PreviousEntityData: "ped"}, EnvironmentId: "ns0"}, + {AuditLog: &proto.AuditLog{Id: id1, Timestamp: 10, EntityType: 3, EntityId: "e2", Type: 4, EntityData: "ed", PreviousEntityData: "ped"}, EnvironmentId: "ns1"}, }, expectedErr: nil, }, @@ -165,7 +165,7 @@ func TestCreateAdminAuditLog(t *testing.T) { EntityData: "ed", PreviousEntityData: "ped", }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: nil, }, diff --git a/pkg/auditlog/storage/v2/audit_log.go b/pkg/auditlog/storage/v2/audit_log.go index b143a59470..9f1fead5e8 100644 --- a/pkg/auditlog/storage/v2/audit_log.go +++ b/pkg/auditlog/storage/v2/audit_log.go @@ -82,7 +82,7 @@ func (s *auditLogStorage) CreateAuditLogs(ctx context.Context, auditLogs []*doma mysql.JSONObject{Val: al.Event}, mysql.JSONObject{Val: al.Editor}, mysql.JSONObject{Val: al.Options}, - al.EnvironmentNamespace, + al.EnvironmentId, al.EntityData, al.PreviousEntityData, ) @@ -109,7 +109,7 @@ func (s *auditLogStorage) CreateAuditLog(ctx context.Context, auditLog *domain.A mysql.JSONObject{Val: auditLog.Event}, mysql.JSONObject{Val: auditLog.Editor}, mysql.JSONObject{Val: auditLog.Options}, - auditLog.EnvironmentNamespace, + auditLog.EnvironmentId, auditLog.EntityData, auditLog.PreviousEntityData, ) diff --git a/pkg/auditlog/storage/v2/audit_log_test.go b/pkg/auditlog/storage/v2/audit_log_test.go index 535fe5e07b..15e8f54f8b 100644 --- a/pkg/auditlog/storage/v2/audit_log_test.go +++ b/pkg/auditlog/storage/v2/audit_log_test.go @@ -92,8 +92,8 @@ func TestCreateAuditLogs(t *testing.T) { ).Return(nil, nil) }, input: []*domain.AuditLog{ - {AuditLog: &proto.AuditLog{Id: id0, Timestamp: 1, EntityType: 2, EntityId: "e0", Type: 3}, EnvironmentNamespace: "ns0"}, - {AuditLog: &proto.AuditLog{Id: id1, Timestamp: 10, EntityType: 3, EntityId: "e2", Type: 4}, EnvironmentNamespace: "ns1"}, + {AuditLog: &proto.AuditLog{Id: id0, Timestamp: 1, EntityType: 2, EntityId: "e0", Type: 3}, EnvironmentId: "ns0"}, + {AuditLog: &proto.AuditLog{Id: id1, Timestamp: 10, EntityType: 3, EntityId: "e2", Type: 4}, EnvironmentId: "ns1"}, }, expectedErr: nil, }, @@ -163,7 +163,7 @@ func TestCreateAuditLog(t *testing.T) { EntityId: "e0", Type: 3, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: nil, }, diff --git a/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_log_v2.sql b/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_log_v2.sql index 7f7e979300..c025770475 100644 --- a/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_log_v2.sql +++ b/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_log_v2.sql @@ -7,7 +7,7 @@ INSERT INTO audit_log ( event, editor, options, - environment_namespace, + environment_id, entity_data, previous_entity_data ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) diff --git a/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_logs_v2.sql b/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_logs_v2.sql index 9f0298c7eb..e70533886c 100644 --- a/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_logs_v2.sql +++ b/pkg/auditlog/storage/v2/sql/auditlog/insert_audit_logs_v2.sql @@ -7,7 +7,7 @@ INSERT INTO audit_log ( event, editor, options, - environment_namespace, + environment_id, entity_data, previous_entity_data ) VALUES diff --git a/pkg/autoops/api/api.go b/pkg/autoops/api/api.go index c1581aa6d4..f306acdf5e 100644 --- a/pkg/autoops/api/api.go +++ b/pkg/autoops/api/api.go @@ -107,7 +107,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -125,7 +125,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( "Failed to create a new autoOpsRule", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -143,7 +143,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( "Failed to extract opsEventRateClauses", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -156,7 +156,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( return nil, dt.Err() } for _, c := range opsEventRateClauses { - exist, err := s.existGoal(ctx, req.EnvironmentNamespace, c.GoalId) + exist, err := s.existGoal(ctx, req.EnvironmentId, c.GoalId) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -170,7 +170,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( if !exist { s.logger.Error( "Goal does not exist", - log.FieldsFromImcomingContext(ctx).AddFields(zap.String("environmentNamespace", req.EnvironmentNamespace))..., + log.FieldsFromImcomingContext(ctx).AddFields(zap.String("environmentId", req.EnvironmentId))..., ) dt, err := statusOpsEventRateClauseGoalNotFound.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -201,14 +201,14 @@ func (s *AutoOpsService) CreateAutoOpsRule( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(tx) - handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentId) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - return autoOpsRuleStorage.CreateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentNamespace) + return autoOpsRuleStorage.CreateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentId) }) if err != nil { if err == v2as.ErrAutoOpsRuleAlreadyExists { @@ -225,7 +225,7 @@ func (s *AutoOpsService) CreateAutoOpsRule( "Failed to create autoOps", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -465,7 +465,7 @@ func (s *AutoOpsService) StopAutoOpsRule( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -493,7 +493,7 @@ func (s *AutoOpsService) StopAutoOpsRule( err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(tx) - autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentNamespace) + autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -507,14 +507,14 @@ func (s *AutoOpsService) StopAutoOpsRule( } return dt.Err() } - handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentId) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentNamespace) + return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentId) }) if err != nil { @@ -554,7 +554,7 @@ func (s *AutoOpsService) DeleteAutoOpsRule( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -580,18 +580,18 @@ func (s *AutoOpsService) DeleteAutoOpsRule( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(tx) - autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentNamespace) + autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentId) if err != nil { return err } - handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentId) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentNamespace) + return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentId) }) if err != nil { if err == v2as.ErrAutoOpsRuleNotFound || err == v2as.ErrAutoOpsRuleUnexpectedAffectedRows { @@ -608,7 +608,7 @@ func (s *AutoOpsService) DeleteAutoOpsRule( "Failed to delete autoOpsRule", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -654,7 +654,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -669,7 +669,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( opsEventRateClauses = append(opsEventRateClauses, c.OpsEventRateClause) } for _, c := range opsEventRateClauses { - exist, err := s.existGoal(ctx, req.EnvironmentNamespace, c.GoalId) + exist, err := s.existGoal(ctx, req.EnvironmentId, c.GoalId) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -683,7 +683,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( if !exist { s.logger.Error( "Goal does not exist", - log.FieldsFromImcomingContext(ctx).AddFields(zap.String("environmentNamespace", req.EnvironmentNamespace))..., + log.FieldsFromImcomingContext(ctx).AddFields(zap.String("environmentId", req.EnvironmentId))..., ) dt, err := statusOpsEventRateClauseGoalNotFound.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -715,7 +715,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(tx) - autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentNamespace) + autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -808,7 +808,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( } return dt.Err() } - handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentId) if err != nil { return err } @@ -817,7 +817,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( return err } } - return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentNamespace) + return autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentId) }) if err != nil { if err == v2as.ErrAutoOpsRuleNotFound || err == v2as.ErrAutoOpsRuleUnexpectedAffectedRows { @@ -837,7 +837,7 @@ func (s *AutoOpsService) UpdateAutoOpsRule( "Failed to update autoOpsRule", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1012,7 +1012,7 @@ func (s *AutoOpsService) GetAutoOpsRule( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1020,7 +1020,7 @@ func (s *AutoOpsService) GetAutoOpsRule( return nil, err } autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(s.mysqlClient) - autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentNamespace) + autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2as.ErrAutoOpsRuleNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -1080,7 +1080,7 @@ func (s *AutoOpsService) ListAutoOpsRules( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1090,7 +1090,7 @@ func (s *AutoOpsService) ListAutoOpsRules( req.PageSize, req.Cursor, req.FeatureIds, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, autoOpsRuleStorage, ) @@ -1108,13 +1108,13 @@ func (s *AutoOpsService) listAutoOpsRules( pageSize int64, cursor string, featureIds []string, - environmentNamespace string, + environmentId string, localizer locale.Localizer, storage v2as.AutoOpsRuleStorage, ) ([]*autoopsproto.AutoOpsRule, string, error) { whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } fIDs := make([]interface{}, 0, len(featureIds)) for _, fID := range featureIds { @@ -1151,7 +1151,7 @@ func (s *AutoOpsService) listAutoOpsRules( "Failed to list autoOpsRules", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1173,14 +1173,14 @@ func (s *AutoOpsService) ExecuteAutoOps( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := s.validateExecuteAutoOpsRequest(req, localizer); err != nil { return nil, err } - triggered, err := s.checkIfHasAlreadyTriggered(ctx, localizer, req.Id, req.EnvironmentNamespace) + triggered, err := s.checkIfHasAlreadyTriggered(ctx, localizer, req.Id, req.EnvironmentId) if err != nil { return nil, err } @@ -1206,7 +1206,7 @@ func (s *AutoOpsService) ExecuteAutoOps( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { autoOpsRuleStorage := v2as.NewAutoOpsRuleStorage(tx) - autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentNamespace) + autoOpsRule, err := autoOpsRuleStorage.GetAutoOpsRule(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -1231,7 +1231,7 @@ func (s *AutoOpsService) ExecuteAutoOps( } ftStorage := ftstorage.NewFeatureStorage(tx) - feature, err := ftStorage.GetFeature(ctx, autoOpsRule.FeatureId, req.EnvironmentNamespace) + feature, err := ftStorage.GetFeature(ctx, autoOpsRule.FeatureId, req.EnvironmentId) if err != nil { return err } @@ -1240,7 +1240,7 @@ func (s *AutoOpsService) ExecuteAutoOps( if executeClause.ActionType == autoopsproto.ActionType_DISABLE { if err := s.stopProgressiveRollout( ctx, - req.EnvironmentNamespace, + req.EnvironmentId, autoOpsRule, prStorage, localizer, @@ -1251,7 +1251,7 @@ func (s *AutoOpsService) ExecuteAutoOps( if err := executeAutoOpsRuleOperation( ctx, ftStorage, - req.EnvironmentNamespace, + req.EnvironmentId, executeClause.ActionType, feature, s.logger, @@ -1261,7 +1261,7 @@ func (s *AutoOpsService) ExecuteAutoOps( "Failed to execute auto ops rule operation", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("autoOpsRuleId", autoOpsRule.Id), zap.String("featureId", autoOpsRule.FeatureId), )..., @@ -1272,7 +1272,7 @@ func (s *AutoOpsService) ExecuteAutoOps( if autoOpsRule.Clauses[len(autoOpsRule.Clauses)-1].Id == req.ExecuteAutoOpsRuleCommand.ClauseId { opsStatus = autoopsproto.AutoOpsStatus_FINISHED } - handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewAutoOpsCommandHandler(editor, autoOpsRule, s.publisher, req.EnvironmentId) if err != nil { return err } @@ -1280,14 +1280,14 @@ func (s *AutoOpsService) ExecuteAutoOps( return err } - if err = autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentNamespace); err != nil { + if err = autoOpsRuleStorage.UpdateAutoOpsRule(ctx, autoOpsRule, req.EnvironmentId); err != nil { if err == v2as.ErrAutoOpsRuleUnexpectedAffectedRows { s.logger.Warn( "No rows were affected", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil @@ -1303,7 +1303,7 @@ func (s *AutoOpsService) ExecuteAutoOps( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -1319,7 +1319,7 @@ func (s *AutoOpsService) ExecuteAutoOps( "Failed to execute autoOpsRule", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1336,7 +1336,7 @@ func (s *AutoOpsService) ExecuteAutoOps( func (s *AutoOpsService) stopProgressiveRollout( ctx context.Context, - environmentNamespace string, + environmentId string, autoOpsRule *domain.AutoOpsRule, storage v2as.ProgressiveRolloutStorage, localizer locale.Localizer, @@ -1350,7 +1350,7 @@ func (s *AutoOpsService) stopProgressiveRollout( "Failed to check operation type", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("autoOpsRuleId", autoOpsRule.Id), zap.String("featureId", autoOpsRule.FeatureId), )..., @@ -1373,14 +1373,14 @@ func (s *AutoOpsService) stopProgressiveRollout( ctx, storage, s.convToInterfaceSlice([]string{autoOpsRule.FeatureId}), - environmentNamespace, + environmentId, stoppedBy, ); err != nil { s.logger.Error( "Failed to stop progressive rollout", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("autoOpsRuleId", autoOpsRule.Id), zap.String("featureId", autoOpsRule.FeatureId), )..., @@ -1438,10 +1438,10 @@ func (s *AutoOpsService) checkIfHasAlreadyTriggered( ctx context.Context, localizer locale.Localizer, ruleID, - environmentNamespace string, + environmentId string, ) (bool, error) { storage := v2as.NewAutoOpsRuleStorage(s.mysqlClient) - autoOpsRule, err := storage.GetAutoOpsRule(ctx, ruleID, environmentNamespace) + autoOpsRule, err := storage.GetAutoOpsRule(ctx, ruleID, environmentId) if err != nil { if err == v2as.ErrAutoOpsRuleNotFound { s.logger.Warn( @@ -1449,7 +1449,7 @@ func (s *AutoOpsService) checkIfHasAlreadyTriggered( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("ruleID", ruleID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -1465,7 +1465,7 @@ func (s *AutoOpsService) checkIfHasAlreadyTriggered( "Failed to get auto ops rule", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1483,7 +1483,7 @@ func (s *AutoOpsService) checkIfHasAlreadyTriggered( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("ruleID", ruleID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return true, nil @@ -1498,7 +1498,7 @@ func (s *AutoOpsService) ListOpsCounts( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1506,7 +1506,7 @@ func (s *AutoOpsService) ListOpsCounts( ctx, req.PageSize, req.Cursor, - req.EnvironmentNamespace, + req.EnvironmentId, req.FeatureIds, req.AutoOpsRuleIds, localizer, @@ -1524,13 +1524,13 @@ func (s *AutoOpsService) listOpsCounts( ctx context.Context, pageSize int64, cursor string, - environmentNamespace string, + environmentId string, featureIDs []string, autoOpsRuleIDs []string, localizer locale.Localizer, ) ([]*autoopsproto.OpsCount, string, error) { whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } fIDs := make([]interface{}, 0, len(featureIDs)) for _, fID := range featureIDs { @@ -1575,7 +1575,7 @@ func (s *AutoOpsService) listOpsCounts( "Failed to list opsCounts", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1590,8 +1590,8 @@ func (s *AutoOpsService) listOpsCounts( return opsCounts, strconv.Itoa(nextCursor), nil } -func (s *AutoOpsService) existGoal(ctx context.Context, environmentNamespace string, goalID string) (bool, error) { - _, err := s.getGoal(ctx, environmentNamespace, goalID) +func (s *AutoOpsService) existGoal(ctx context.Context, environmentId string, goalID string) (bool, error) { + _, err := s.getGoal(ctx, environmentId, goalID) if err != nil { if err == storage.ErrKeyNotFound { return false, nil @@ -1603,18 +1603,18 @@ func (s *AutoOpsService) existGoal(ctx context.Context, environmentNamespace str func (s *AutoOpsService) getGoal( ctx context.Context, - environmentNamespace, goalID string, + environmentId, goalID string, ) (*experimentproto.Goal, error) { resp, err := s.experimentClient.GetGoal(ctx, &experimentproto.GetGoalRequest{ - Id: goalID, - EnvironmentNamespace: environmentNamespace, + Id: goalID, + EnvironmentId: environmentId, }) if err != nil { s.logger.Error( "Failed to get goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("goalId", goalID), )..., ) @@ -1626,17 +1626,17 @@ func (s *AutoOpsService) getGoal( func (s *AutoOpsService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -1650,7 +1650,7 @@ func (s *AutoOpsService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -1666,7 +1666,7 @@ func (s *AutoOpsService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -1682,7 +1682,7 @@ func (s *AutoOpsService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/autoops/api/api_test.go b/pkg/autoops/api/api_test.go index 02224d149d..58985ab1d6 100644 --- a/pkg/autoops/api/api_test.go +++ b/pkg/autoops/api/api_test.go @@ -596,8 +596,8 @@ func TestUpdateAutoOpsRuleMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.UpdateAutoOpsRuleRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", AddDatetimeClauseCommands: []*autoopsproto.AddDatetimeClauseCommand{{ DatetimeClause: &autoopsproto.DatetimeClause{ ActionType: autoopsproto.ActionType_ENABLE, @@ -679,9 +679,9 @@ func TestStopAutoOpsRuleMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.StopAutoOpsRuleRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", - Command: &autoopsproto.StopAutoOpsRuleCommand{}, + Id: "aid1", + EnvironmentId: "ns0", + Command: &autoopsproto.StopAutoOpsRuleCommand{}, }, expectedErr: nil, }, @@ -744,9 +744,9 @@ func TestDeleteAutoOpsRuleMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.DeleteAutoOpsRuleRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", - Command: &autoopsproto.DeleteAutoOpsRuleCommand{}, + Id: "aid1", + EnvironmentId: "ns0", + Command: &autoopsproto.DeleteAutoOpsRuleCommand{}, }, expectedErr: nil, }, @@ -792,7 +792,7 @@ func TestGetAutoOpsRuleMySQL(t *testing.T) { { desc: "err: ErrIDRequired", service: createAutoOpsService(mockController, nil), - req: &autoopsproto.GetAutoOpsRuleRequest{EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetAutoOpsRuleRequest{EnvironmentId: "ns0"}, expectedErr: createError(statusIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { @@ -805,14 +805,14 @@ func TestGetAutoOpsRuleMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &autoopsproto.GetAutoOpsRuleRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetAutoOpsRuleRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, { desc: "errPermissionDenied", service: createServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *AutoOpsService) {}, - req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentId: "ns0"}, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { @@ -825,7 +825,7 @@ func TestGetAutoOpsRuleMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentId: "ns0"}, expectedErr: nil, }, { @@ -838,7 +838,7 @@ func TestGetAutoOpsRuleMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetAutoOpsRuleRequest{Id: "aid1", EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -892,14 +892,14 @@ func TestListAutoOpsRulesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: nil, }, { desc: "errPermissionDenied", service: createServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *AutoOpsService) {}, - req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { @@ -914,7 +914,7 @@ func TestListAutoOpsRulesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListAutoOpsRulesRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: nil, }, } @@ -967,14 +967,14 @@ func TestListOpsCountsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - req: &autoopsproto.ListOpsCountsRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListOpsCountsRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: nil, }, { desc: "errPermissionDenied", service: createServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *AutoOpsService) {}, - req: &autoopsproto.ListOpsCountsRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListOpsCountsRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { @@ -989,7 +989,7 @@ func TestListOpsCountsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - req: &autoopsproto.ListOpsCountsRequest{EnvironmentNamespace: "ns0", Cursor: ""}, + req: &autoopsproto.ListOpsCountsRequest{EnvironmentId: "ns0", Cursor: ""}, expectedErr: nil, }, } @@ -1045,8 +1045,8 @@ func TestExecuteAutoOpsRuleMySQL(t *testing.T) { { desc: "err: ErrNoExecuteAutoOpsRuleCommand_ClauseId", req: &autoopsproto.ExecuteAutoOpsRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ ClauseId: "", }, @@ -1063,8 +1063,8 @@ func TestExecuteAutoOpsRuleMySQL(t *testing.T) { ).Return(row) }, req: &autoopsproto.ExecuteAutoOpsRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ ClauseId: "id", }, @@ -1085,8 +1085,8 @@ func TestExecuteAutoOpsRuleMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.ExecuteAutoOpsRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ ClauseId: "testClauseId", }, diff --git a/pkg/autoops/api/flag_trigger_operation.go b/pkg/autoops/api/flag_trigger_operation.go index d67301150a..16a24cb732 100644 --- a/pkg/autoops/api/flag_trigger_operation.go +++ b/pkg/autoops/api/flag_trigger_operation.go @@ -29,7 +29,7 @@ import ( func executeAutoOpsRuleOperation( ctx context.Context, ftStorage ftstorage.FeatureStorage, - environmentNamespace string, + environmentId string, actionType autoopsproto.ActionType, feature *ftdomain.Feature, logger *zap.Logger, @@ -37,9 +37,9 @@ func executeAutoOpsRuleOperation( ) error { switch actionType { case autoopsproto.ActionType_ENABLE: - return enableFeature(ctx, ftStorage, environmentNamespace, feature, logger) + return enableFeature(ctx, ftStorage, environmentId, feature, logger) case autoopsproto.ActionType_DISABLE: - return disableFeature(ctx, ftStorage, environmentNamespace, feature, logger) + return disableFeature(ctx, ftStorage, environmentId, feature, logger) } dt, err := statusUnknownOpsType.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -57,7 +57,7 @@ func executeAutoOpsRuleOperation( func enableFeature( ctx context.Context, ftStorage ftstorage.FeatureStorage, - environmentNamespace string, + environmentId string, feature *ftdomain.Feature, logger *zap.Logger, ) error { @@ -65,7 +65,7 @@ func enableFeature( // If the flag is already disabled, we skip the updating return nil } - if err := ftStorage.UpdateFeature(ctx, feature, environmentNamespace); err != nil { + if err := ftStorage.UpdateFeature(ctx, feature, environmentId); err != nil { return err } return nil @@ -77,7 +77,7 @@ func enableFeature( func disableFeature( ctx context.Context, ftStorage ftstorage.FeatureStorage, - environmentNamespace string, + environmentId string, feature *ftdomain.Feature, logger *zap.Logger, ) error { @@ -85,7 +85,7 @@ func disableFeature( // If the flag is already disabled, we skip the updating return nil } - if err := ftStorage.UpdateFeature(ctx, feature, environmentNamespace); err != nil { + if err := ftStorage.UpdateFeature(ctx, feature, environmentId); err != nil { return err } return nil diff --git a/pkg/autoops/api/progressive_rollout.go b/pkg/autoops/api/progressive_rollout.go index edd174bdbe..46ade364fe 100644 --- a/pkg/autoops/api/progressive_rollout.go +++ b/pkg/autoops/api/progressive_rollout.go @@ -50,7 +50,7 @@ func (s *AutoOpsService) CreateProgressiveRollout( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (s *AutoOpsService) CreateProgressiveRollout( editor, progressiveRollout, s.publisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -96,7 +96,7 @@ func (s *AutoOpsService) CreateProgressiveRollout( if err := handler.Handle(ctx, req.Command); err != nil { return err } - return storage.CreateProgressiveRollout(ctx, progressiveRollout, req.EnvironmentNamespace) + return storage.CreateProgressiveRollout(ctx, progressiveRollout, req.EnvironmentId) }) if err != nil { switch err { @@ -114,7 +114,7 @@ func (s *AutoOpsService) CreateProgressiveRollout( "Failed to create ProgressiveRollout", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusProgressiveRolloutInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -136,7 +136,7 @@ func (s *AutoOpsService) GetProgressiveRollout( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -144,14 +144,14 @@ func (s *AutoOpsService) GetProgressiveRollout( return nil, err } storage := v2as.NewProgressiveRolloutStorage(s.mysqlClient) - progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentNamespace) + progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentId) if err != nil { s.logger.Error( "Failed to get progressive rollout", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) if err == v2as.ErrProgressiveRolloutNotFound { @@ -185,7 +185,7 @@ func (s *AutoOpsService) StopProgressiveRollout( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -195,7 +195,7 @@ func (s *AutoOpsService) StopProgressiveRollout( err = s.updateProgressiveRollout( ctx, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Command, editor, localizer, @@ -208,7 +208,7 @@ func (s *AutoOpsService) StopProgressiveRollout( func (s *AutoOpsService) updateProgressiveRollout( ctx context.Context, - progressiveRolloutID, environmentNamespace string, + progressiveRolloutID, environmentId string, cmd command.Command, editor *eventproto.Editor, localizer locale.Localizer, @@ -232,7 +232,7 @@ func (s *AutoOpsService) updateProgressiveRollout( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { storage := v2as.NewProgressiveRolloutStorage(tx) - progressiveRollout, err := storage.GetProgressiveRollout(ctx, progressiveRolloutID, environmentNamespace) + progressiveRollout, err := storage.GetProgressiveRollout(ctx, progressiveRolloutID, environmentId) if err != nil { return err } @@ -240,7 +240,7 @@ func (s *AutoOpsService) updateProgressiveRollout( editor, progressiveRollout, s.publisher, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -248,7 +248,7 @@ func (s *AutoOpsService) updateProgressiveRollout( if err := handler.Handle(ctx, cmd); err != nil { return err } - return storage.UpdateProgressiveRollout(ctx, progressiveRollout, environmentNamespace) + return storage.UpdateProgressiveRollout(ctx, progressiveRollout, environmentId) }) if err != nil { s.logger.Error( @@ -256,7 +256,7 @@ func (s *AutoOpsService) updateProgressiveRollout( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", progressiveRolloutID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) if err == v2as.ErrProgressiveRolloutNotFound || err == v2as.ErrProgressiveRolloutUnexpectedAffectedRows { @@ -288,7 +288,7 @@ func (s *AutoOpsService) DeleteProgressiveRollout( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -314,7 +314,7 @@ func (s *AutoOpsService) DeleteProgressiveRollout( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { storage := v2as.NewProgressiveRolloutStorage(tx) - progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentNamespace) + progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -322,7 +322,7 @@ func (s *AutoOpsService) DeleteProgressiveRollout( editor, progressiveRollout, s.publisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -330,14 +330,14 @@ func (s *AutoOpsService) DeleteProgressiveRollout( if err := handler.Handle(ctx, req.Command); err != nil { return err } - return storage.DeleteProgressiveRollout(ctx, req.Id, req.EnvironmentNamespace) + return storage.DeleteProgressiveRollout(ctx, req.Id, req.EnvironmentId) }) if err != nil { s.logger.Error( "Failed to delete ProgressiveRollout", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) if err == v2as.ErrProgressiveRolloutNotFound || err == v2as.ErrProgressiveRolloutUnexpectedAffectedRows { @@ -369,7 +369,7 @@ func (s *AutoOpsService) ListProgressiveRollouts( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -395,7 +395,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -422,12 +422,12 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( var event *eventproto.Event err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { storage := v2as.NewProgressiveRolloutStorage(tx) - progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentNamespace) + progressiveRollout, err := storage.GetProgressiveRollout(ctx, req.Id, req.EnvironmentId) if err != nil { return err } ftStorage := ftstorage.NewFeatureStorage(tx) - feature, err := ftStorage.GetFeature(ctx, progressiveRollout.FeatureId, req.EnvironmentNamespace) + feature, err := ftStorage.GetFeature(ctx, progressiveRollout.FeatureId, req.EnvironmentId) if err != nil { return err } @@ -436,7 +436,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( "Progressive rollout is already stopped", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", progressiveRollout.Id), zap.String("featureId", progressiveRollout.FeatureId), )..., @@ -456,7 +456,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("ruleID", req.ChangeProgressiveRolloutTriggeredAtCommand.ScheduleId), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil @@ -470,7 +470,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( editor, progressiveRollout, s.publisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -478,14 +478,13 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( if err := handler.Handle(ctx, req.ChangeProgressiveRolloutTriggeredAtCommand); err != nil { return err } - if err := storage.UpdateProgressiveRollout(ctx, progressiveRollout, req.EnvironmentNamespace); err != nil { + if err := storage.UpdateProgressiveRollout(ctx, progressiveRollout, req.EnvironmentId); err != nil { return err } defaultStrategy, err := ExecuteProgressiveRolloutOperation( progressiveRollout, feature, req.ChangeProgressiveRolloutTriggeredAtCommand.ScheduleId, - req.EnvironmentNamespace, ) if err != nil { return err @@ -500,12 +499,12 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( if err != nil { return err } - if err := ftStorage.UpdateFeature(ctx, updated, req.EnvironmentNamespace); err != nil { + if err := ftStorage.UpdateFeature(ctx, updated, req.EnvironmentId); err != nil { s.logger.Error( "Failed to update feature flag", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", progressiveRollout.Id), zap.String("featureId", progressiveRollout.FeatureId), )..., @@ -520,7 +519,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( &eventproto.FeatureUpdatedEvent{ Id: updated.Id, }, - req.EnvironmentNamespace, + req.EnvironmentId, updated.Feature, feature.Feature, domainevent.WithComment("Progressive rollout executed"), @@ -536,7 +535,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( "Failed to execute progressiveRollout", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) if err == v2as.ErrProgressiveRolloutNotFound || err == v2as.ErrProgressiveRolloutUnexpectedAffectedRows { @@ -564,7 +563,7 @@ func (s *AutoOpsService) ExecuteProgressiveRollout( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentId", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -611,7 +610,7 @@ func (s *AutoOpsService) listProgressiveRollouts( localizer locale.Localizer, ) ([]*autoopsproto.ProgressiveRollout, int64, int, error) { whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } limit := int(req.PageSize) cursor := req.Cursor @@ -643,7 +642,7 @@ func (s *AutoOpsService) listProgressiveRollouts( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, 0, 0, err @@ -667,7 +666,7 @@ func (s *AutoOpsService) listProgressiveRollouts( "Failed to list progressive rollouts", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusProgressiveRolloutInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -913,8 +912,8 @@ func (s *AutoOpsService) getFeature( localizer locale.Localizer, ) (*featureproto.Feature, error) { resp, err := s.featureClient.GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: req.EnvironmentNamespace, - Id: req.Command.FeatureId, + EnvironmentId: req.EnvironmentId, + Id: req.Command.FeatureId, }) if err != nil { return nil, err diff --git a/pkg/autoops/api/progressive_rollout_operation.go b/pkg/autoops/api/progressive_rollout_operation.go index 47e1641dd9..8c29781fb5 100644 --- a/pkg/autoops/api/progressive_rollout_operation.go +++ b/pkg/autoops/api/progressive_rollout_operation.go @@ -32,7 +32,7 @@ const totalVariationWeight = int32(100000) func ExecuteProgressiveRolloutOperation( progressiveRollout *domain.ProgressiveRollout, feature *ftdomain.Feature, - scheduleID, environmentNamespace string, + scheduleID string, ) (*featureproto.Strategy, error) { var variationID string var weight int32 diff --git a/pkg/autoops/api/progressive_rollout_test.go b/pkg/autoops/api/progressive_rollout_test.go index bc71c5b5b2..474a82a709 100644 --- a/pkg/autoops/api/progressive_rollout_test.go +++ b/pkg/autoops/api/progressive_rollout_test.go @@ -906,7 +906,7 @@ func TestGetProgressiveRolloutMySQL(t *testing.T) { }{ { desc: "err: ErrIDRequired", - req: &autoopsproto.GetProgressiveRolloutRequest{EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetProgressiveRolloutRequest{EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { @@ -918,7 +918,7 @@ func TestGetProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &autoopsproto.GetProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutNotFound, localizer.MustLocalizeWithTemplate(locale.NotFoundError, locale.ProgressiveRollout)), }, { @@ -930,7 +930,7 @@ func TestGetProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &autoopsproto.GetProgressiveRolloutRequest{Id: "aid1", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.GetProgressiveRolloutRequest{Id: "aid1", EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -978,7 +978,7 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { }, { desc: "err: command is reuired", - req: &autoopsproto.StopProgressiveRolloutRequest{Id: "id", EnvironmentNamespace: "ns"}, + req: &autoopsproto.StopProgressiveRolloutRequest{Id: "id", EnvironmentId: "ns"}, expectedErr: createError(statusProgressiveRolloutNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, { @@ -987,8 +987,8 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { s.mysqlClient.(*mysqlmock.MockClient).EXPECT().BeginTx(gomock.Any()).Return(nil, errors.New("error")) }, req: &autoopsproto.StopProgressiveRolloutRequest{ - Id: "id", - EnvironmentNamespace: "ns", + Id: "id", + EnvironmentId: "ns", Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -1004,8 +1004,8 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { ).Return(errors.New("error")) }, req: &autoopsproto.StopProgressiveRolloutRequest{ - Id: "id", - EnvironmentNamespace: "ns", + Id: "id", + EnvironmentId: "ns", Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -1021,8 +1021,8 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { ).Return(v2as.ErrProgressiveRolloutNotFound) }, req: &autoopsproto.StopProgressiveRolloutRequest{ - Id: "id", - EnvironmentNamespace: "ns", + Id: "id", + EnvironmentId: "ns", Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -1038,8 +1038,8 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { ).Return(v2as.ErrProgressiveRolloutUnexpectedAffectedRows) }, req: &autoopsproto.StopProgressiveRolloutRequest{ - Id: "id", - EnvironmentNamespace: "ns", + Id: "id", + EnvironmentId: "ns", Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -1055,8 +1055,8 @@ func TestStopProgressiveRolloutMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.StopProgressiveRolloutRequest{ - Id: "id", - EnvironmentNamespace: "ns", + Id: "id", + EnvironmentId: "ns", Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -1111,7 +1111,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { setup: func(s *AutoOpsService) { s.mysqlClient.(*mysqlmock.MockClient).EXPECT().BeginTx(gomock.Any()).Return(nil, errors.New("error")) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutInternal, localizer.MustLocalize(locale.InternalServerError)), }, { @@ -1122,7 +1122,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(errors.New("error")) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutInternal, localizer.MustLocalize(locale.InternalServerError)), }, { @@ -1133,7 +1133,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(errors.New("error")) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutInternal, localizer.MustLocalize(locale.InternalServerError)), }, { @@ -1144,7 +1144,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(v2as.ErrProgressiveRolloutNotFound) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutNotFound, localizer.MustLocalizeWithTemplate(locale.NotFoundError, locale.ProgressiveRollout)), }, { @@ -1155,7 +1155,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(v2as.ErrProgressiveRolloutUnexpectedAffectedRows) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "wrongid", EnvironmentId: "ns0"}, expectedErr: createError(statusProgressiveRolloutNotFound, localizer.MustLocalizeWithTemplate(locale.NotFoundError, locale.ProgressiveRollout)), }, { @@ -1166,7 +1166,7 @@ func TestDeleteProgressiveRolloutMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil) }, - req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "aid1", EnvironmentNamespace: "ns0"}, + req: &autoopsproto.DeleteProgressiveRolloutRequest{Id: "aid1", EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -1202,18 +1202,18 @@ func TestListProgressiveRolloutsMySQL(t *testing.T) { } patterns := []struct { - desc string - setup func(*AutoOpsService) - orderBy autoopsproto.ListProgressiveRolloutsRequest_OrderBy - environmentNamespace string - expected error + desc string + setup func(*AutoOpsService) + orderBy autoopsproto.ListProgressiveRolloutsRequest_OrderBy + environmentId string + expected error }{ { - desc: "err: InvalidOrderBy", - setup: nil, - orderBy: autoopsproto.ListProgressiveRolloutsRequest_OrderBy(999), - environmentNamespace: "ns0", - expected: createError(statusProgressiveRolloutInvalidOrderBy, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "order_by")), + desc: "err: InvalidOrderBy", + setup: nil, + orderBy: autoopsproto.ListProgressiveRolloutsRequest_OrderBy(999), + environmentId: "ns0", + expected: createError(statusProgressiveRolloutInvalidOrderBy, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "order_by")), }, { desc: "err: interal error", @@ -1231,9 +1231,9 @@ func TestListProgressiveRolloutsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - orderBy: autoopsproto.ListProgressiveRolloutsRequest_DEFAULT, - environmentNamespace: "ns0", - expected: createError(statusProgressiveRolloutInternal, localizer.MustLocalizeWithTemplate(locale.InternalServerError)), + orderBy: autoopsproto.ListProgressiveRolloutsRequest_DEFAULT, + environmentId: "ns0", + expected: createError(statusProgressiveRolloutInternal, localizer.MustLocalizeWithTemplate(locale.InternalServerError)), }, { desc: "success", @@ -1251,9 +1251,9 @@ func TestListProgressiveRolloutsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - orderBy: autoopsproto.ListProgressiveRolloutsRequest_DEFAULT, - environmentNamespace: "ns0", - expected: nil, + orderBy: autoopsproto.ListProgressiveRolloutsRequest_DEFAULT, + environmentId: "ns0", + expected: nil, }, } for _, p := range patterns { @@ -1263,8 +1263,8 @@ func TestListProgressiveRolloutsMySQL(t *testing.T) { p.setup(service) } req := &autoopsproto.ListProgressiveRolloutsRequest{ - OrderBy: p.orderBy, - EnvironmentNamespace: "ns0", + OrderBy: p.orderBy, + EnvironmentId: "ns0", } _, err := service.ListProgressiveRollouts(ctx, req) assert.Equal(t, p.expected, err) @@ -1323,8 +1323,8 @@ func TestExecuteProgressiveRolloutMySQL(t *testing.T) { s.mysqlClient.(*mysqlmock.MockClient).EXPECT().BeginTx(gomock.Any()).Return(nil, errors.New("error")) }, req: &autoopsproto.ExecuteProgressiveRolloutRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", ChangeProgressiveRolloutTriggeredAtCommand: &autoopsproto.ChangeProgressiveRolloutScheduleTriggeredAtCommand{ ScheduleId: "sid1", }, @@ -1340,8 +1340,8 @@ func TestExecuteProgressiveRolloutMySQL(t *testing.T) { ).Return(nil) }, req: &autoopsproto.ExecuteProgressiveRolloutRequest{ - Id: "aid1", - EnvironmentNamespace: "ns0", + Id: "aid1", + EnvironmentId: "ns0", ChangeProgressiveRolloutTriggeredAtCommand: &autoopsproto.ChangeProgressiveRolloutScheduleTriggeredAtCommand{ ScheduleId: "sid1", }, diff --git a/pkg/autoops/api/stop_progressive_rollout_operation.go b/pkg/autoops/api/stop_progressive_rollout_operation.go index 7afb0e3edc..49de85af38 100644 --- a/pkg/autoops/api/stop_progressive_rollout_operation.go +++ b/pkg/autoops/api/stop_progressive_rollout_operation.go @@ -27,11 +27,11 @@ func executeStopProgressiveRolloutOperation( ctx context.Context, storage v2as.ProgressiveRolloutStorage, featureIDs []interface{}, - environmentNamespace string, + environmentId string, operation autoopsproto.ProgressiveRollout_StoppedBy, ) error { whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), mysql.NewInFilter("feature_id", featureIDs), } list, _, _, err := storage.ListProgressiveRollouts(ctx, whereParts, nil, 0, 0) @@ -44,7 +44,7 @@ func executeStopProgressiveRolloutOperation( if err := r.Stop(operation); err != nil { return err } - if err := storage.UpdateProgressiveRollout(ctx, r, environmentNamespace); err != nil { + if err := storage.UpdateProgressiveRollout(ctx, r, environmentId); err != nil { return err } } diff --git a/pkg/autoops/command/auto_ops_rule.go b/pkg/autoops/command/auto_ops_rule.go index 5f8a0ef934..1c67a5c4b7 100644 --- a/pkg/autoops/command/auto_ops_rule.go +++ b/pkg/autoops/command/auto_ops_rule.go @@ -28,29 +28,29 @@ import ( ) type autoOpsRuleCommandHandler struct { - editor *eventproto.Editor - autoOpsRule *domain.AutoOpsRule - previousAutoOpsRule *domain.AutoOpsRule - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + autoOpsRule *domain.AutoOpsRule + previousAutoOpsRule *domain.AutoOpsRule + publisher publisher.Publisher + environmentId string } func NewAutoOpsCommandHandler( editor *eventproto.Editor, autoOpsRule *domain.AutoOpsRule, p publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.AutoOpsRule{} if err := copier.Copy(prev, autoOpsRule); err != nil { return nil, err } return &autoOpsRuleCommandHandler{ - editor: editor, - autoOpsRule: autoOpsRule, - previousAutoOpsRule: prev, - publisher: p, - environmentNamespace: environmentNamespace, + editor: editor, + autoOpsRule: autoOpsRule, + previousAutoOpsRule: prev, + publisher: p, + environmentId: environmentId, }, nil } @@ -184,7 +184,7 @@ func (h *autoOpsRuleCommandHandler) send(ctx context.Context, eventType eventpro h.autoOpsRule.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.autoOpsRule.AutoOpsRule, prev, ) diff --git a/pkg/autoops/command/progressive_rollout.go b/pkg/autoops/command/progressive_rollout.go index 1682a808c4..d28792d961 100644 --- a/pkg/autoops/command/progressive_rollout.go +++ b/pkg/autoops/command/progressive_rollout.go @@ -32,14 +32,14 @@ type progressiveRolloutCommandHandler struct { progressiveRollout *domain.ProgressiveRollout previousProgressiveRollout *domain.ProgressiveRollout publisher publisher.Publisher - environmentNamespace string + environmentId string } func NewProgressiveRolloutCommandHandler( editor *eventproto.Editor, progressiveRollout *domain.ProgressiveRollout, publisher publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.ProgressiveRollout{} if err := copier.Copy(prev, progressiveRollout); err != nil { @@ -50,7 +50,7 @@ func NewProgressiveRolloutCommandHandler( progressiveRollout: progressiveRollout, previousProgressiveRollout: prev, publisher: publisher, - environmentNamespace: environmentNamespace, + environmentId: environmentId, }, nil } @@ -152,7 +152,7 @@ func (h *progressiveRolloutCommandHandler) send( h.progressiveRollout.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.progressiveRollout.ProgressiveRollout, prev, ) diff --git a/pkg/autoops/storage/v2/auto_ops_rule.go b/pkg/autoops/storage/v2/auto_ops_rule.go index 1a2264a507..4097a495bd 100644 --- a/pkg/autoops/storage/v2/auto_ops_rule.go +++ b/pkg/autoops/storage/v2/auto_ops_rule.go @@ -44,9 +44,9 @@ var ( ) type AutoOpsRuleStorage interface { - CreateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentNamespace string) error - UpdateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentNamespace string) error - GetAutoOpsRule(ctx context.Context, id, environmentNamespace string) (*domain.AutoOpsRule, error) + CreateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentId string) error + UpdateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentId string) error + GetAutoOpsRule(ctx context.Context, id, environmentId string) (*domain.AutoOpsRule, error) ListAutoOpsRules( ctx context.Context, whereParts []mysql.WherePart, @@ -66,7 +66,7 @@ func NewAutoOpsRuleStorage(qe mysql.QueryExecer) AutoOpsRuleStorage { func (s *autoOpsRuleStorage) CreateAutoOpsRule( ctx context.Context, e *domain.AutoOpsRule, - environmentNamespace string, + environmentId string, ) error { _, err := s.qe.ExecContext( ctx, @@ -79,7 +79,7 @@ func (s *autoOpsRuleStorage) CreateAutoOpsRule( e.UpdatedAt, e.Deleted, int32(e.AutoOpsStatus), - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -93,7 +93,7 @@ func (s *autoOpsRuleStorage) CreateAutoOpsRule( func (s *autoOpsRuleStorage) UpdateAutoOpsRule( ctx context.Context, e *domain.AutoOpsRule, - environmentNamespace string, + environmentId string, ) error { result, err := s.qe.ExecContext( ctx, @@ -106,7 +106,7 @@ func (s *autoOpsRuleStorage) UpdateAutoOpsRule( e.Deleted, int32(e.AutoOpsStatus), e.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -123,7 +123,7 @@ func (s *autoOpsRuleStorage) UpdateAutoOpsRule( func (s *autoOpsRuleStorage) GetAutoOpsRule( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.AutoOpsRule, error) { autoOpsRule := proto.AutoOpsRule{} var opsType int32 @@ -131,7 +131,7 @@ func (s *autoOpsRuleStorage) GetAutoOpsRule( ctx, selectAutoOpsRuleSQL, id, - environmentNamespace, + environmentId, ).Scan( &autoOpsRule.Id, &autoOpsRule.FeatureId, diff --git a/pkg/autoops/storage/v2/auto_ops_rule_test.go b/pkg/autoops/storage/v2/auto_ops_rule_test.go index b4c8625dc1..939c808a41 100644 --- a/pkg/autoops/storage/v2/auto_ops_rule_test.go +++ b/pkg/autoops/storage/v2/auto_ops_rule_test.go @@ -42,10 +42,10 @@ func TestCreateAutoOpsRule(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*autoOpsRuleStorage) - input *domain.AutoOpsRule - environmentNamespace string - expectedErr error + setup func(*autoOpsRuleStorage) + input *domain.AutoOpsRule + environmentId string + expectedErr error }{ { setup: func(s *autoOpsRuleStorage) { @@ -56,8 +56,8 @@ func TestCreateAutoOpsRule(t *testing.T) { input: &domain.AutoOpsRule{ AutoOpsRule: &proto.AutoOpsRule{Id: "id-0"}, }, - environmentNamespace: "ns0", - expectedErr: ErrAutoOpsRuleAlreadyExists, + environmentId: "ns0", + expectedErr: ErrAutoOpsRuleAlreadyExists, }, { setup: func(s *autoOpsRuleStorage) { @@ -68,8 +68,8 @@ func TestCreateAutoOpsRule(t *testing.T) { input: &domain.AutoOpsRule{ AutoOpsRule: &proto.AutoOpsRule{Id: "id-1"}, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -77,7 +77,7 @@ func TestCreateAutoOpsRule(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.CreateAutoOpsRule(context.Background(), p.input, p.environmentNamespace) + err := storage.CreateAutoOpsRule(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -88,10 +88,10 @@ func TestUpdateAutoOpsRule(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*autoOpsRuleStorage) - input *domain.AutoOpsRule - environmentNamespace string - expectedErr error + setup func(*autoOpsRuleStorage) + input *domain.AutoOpsRule + environmentId string + expectedErr error }{ { setup: func(s *autoOpsRuleStorage) { @@ -104,8 +104,8 @@ func TestUpdateAutoOpsRule(t *testing.T) { input: &domain.AutoOpsRule{ AutoOpsRule: &proto.AutoOpsRule{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: ErrAutoOpsRuleUnexpectedAffectedRows, + environmentId: "ns", + expectedErr: ErrAutoOpsRuleUnexpectedAffectedRows, }, { setup: func(s *autoOpsRuleStorage) { @@ -118,8 +118,8 @@ func TestUpdateAutoOpsRule(t *testing.T) { input: &domain.AutoOpsRule{ AutoOpsRule: &proto.AutoOpsRule{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: nil, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -127,7 +127,7 @@ func TestUpdateAutoOpsRule(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdateAutoOpsRule(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdateAutoOpsRule(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -138,11 +138,11 @@ func TestGetAutoOpsRule(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*autoOpsRuleStorage) - input string - environmentNamespace string - expected *domain.AutoOpsRule - expectedErr error + setup func(*autoOpsRuleStorage) + input string + environmentId string + expected *domain.AutoOpsRule + expectedErr error }{ { setup: func(s *autoOpsRuleStorage) { @@ -152,10 +152,10 @@ func TestGetAutoOpsRule(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "", - environmentNamespace: "ns0", - expected: nil, - expectedErr: ErrAutoOpsRuleNotFound, + input: "", + environmentId: "ns0", + expected: nil, + expectedErr: ErrAutoOpsRuleNotFound, }, { setup: func(s *autoOpsRuleStorage) { @@ -165,8 +165,8 @@ func TestGetAutoOpsRule(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "id-0", - environmentNamespace: "ns0", + input: "id-0", + environmentId: "ns0", expected: &domain.AutoOpsRule{ AutoOpsRule: &proto.AutoOpsRule{Id: "id-0"}, }, @@ -178,7 +178,7 @@ func TestGetAutoOpsRule(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetAutoOpsRule(context.Background(), p.input, p.environmentNamespace) + _, err := storage.GetAutoOpsRule(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } diff --git a/pkg/autoops/storage/v2/mock/auto_ops_rule.go b/pkg/autoops/storage/v2/mock/auto_ops_rule.go index c386a9b17e..d2c237ca9b 100644 --- a/pkg/autoops/storage/v2/mock/auto_ops_rule.go +++ b/pkg/autoops/storage/v2/mock/auto_ops_rule.go @@ -44,32 +44,32 @@ func (m *MockAutoOpsRuleStorage) EXPECT() *MockAutoOpsRuleStorageMockRecorder { } // CreateAutoOpsRule mocks base method. -func (m *MockAutoOpsRuleStorage) CreateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentNamespace string) error { +func (m *MockAutoOpsRuleStorage) CreateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateAutoOpsRule", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "CreateAutoOpsRule", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateAutoOpsRule indicates an expected call of CreateAutoOpsRule. -func (mr *MockAutoOpsRuleStorageMockRecorder) CreateAutoOpsRule(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockAutoOpsRuleStorageMockRecorder) CreateAutoOpsRule(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).CreateAutoOpsRule), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).CreateAutoOpsRule), ctx, e, environmentId) } // GetAutoOpsRule mocks base method. -func (m *MockAutoOpsRuleStorage) GetAutoOpsRule(ctx context.Context, id, environmentNamespace string) (*domain.AutoOpsRule, error) { +func (m *MockAutoOpsRuleStorage) GetAutoOpsRule(ctx context.Context, id, environmentId string) (*domain.AutoOpsRule, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAutoOpsRule", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetAutoOpsRule", ctx, id, environmentId) ret0, _ := ret[0].(*domain.AutoOpsRule) ret1, _ := ret[1].(error) return ret0, ret1 } // GetAutoOpsRule indicates an expected call of GetAutoOpsRule. -func (mr *MockAutoOpsRuleStorageMockRecorder) GetAutoOpsRule(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockAutoOpsRuleStorageMockRecorder) GetAutoOpsRule(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).GetAutoOpsRule), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).GetAutoOpsRule), ctx, id, environmentId) } // ListAutoOpsRules mocks base method. @@ -89,15 +89,15 @@ func (mr *MockAutoOpsRuleStorageMockRecorder) ListAutoOpsRules(ctx, whereParts, } // UpdateAutoOpsRule mocks base method. -func (m *MockAutoOpsRuleStorage) UpdateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentNamespace string) error { +func (m *MockAutoOpsRuleStorage) UpdateAutoOpsRule(ctx context.Context, e *domain.AutoOpsRule, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateAutoOpsRule", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateAutoOpsRule", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateAutoOpsRule indicates an expected call of UpdateAutoOpsRule. -func (mr *MockAutoOpsRuleStorageMockRecorder) UpdateAutoOpsRule(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockAutoOpsRuleStorageMockRecorder) UpdateAutoOpsRule(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).UpdateAutoOpsRule), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAutoOpsRule", reflect.TypeOf((*MockAutoOpsRuleStorage)(nil).UpdateAutoOpsRule), ctx, e, environmentId) } diff --git a/pkg/autoops/storage/v2/mock/progressive_rollout.go b/pkg/autoops/storage/v2/mock/progressive_rollout.go index 66ad798cd9..19a71ba78f 100644 --- a/pkg/autoops/storage/v2/mock/progressive_rollout.go +++ b/pkg/autoops/storage/v2/mock/progressive_rollout.go @@ -44,46 +44,46 @@ func (m *MockProgressiveRolloutStorage) EXPECT() *MockProgressiveRolloutStorageM } // CreateProgressiveRollout mocks base method. -func (m *MockProgressiveRolloutStorage) CreateProgressiveRollout(ctx context.Context, progressiveRollout *domain.ProgressiveRollout, environmentNamespace string) error { +func (m *MockProgressiveRolloutStorage) CreateProgressiveRollout(ctx context.Context, progressiveRollout *domain.ProgressiveRollout, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateProgressiveRollout", ctx, progressiveRollout, environmentNamespace) + ret := m.ctrl.Call(m, "CreateProgressiveRollout", ctx, progressiveRollout, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateProgressiveRollout indicates an expected call of CreateProgressiveRollout. -func (mr *MockProgressiveRolloutStorageMockRecorder) CreateProgressiveRollout(ctx, progressiveRollout, environmentNamespace any) *gomock.Call { +func (mr *MockProgressiveRolloutStorageMockRecorder) CreateProgressiveRollout(ctx, progressiveRollout, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).CreateProgressiveRollout), ctx, progressiveRollout, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).CreateProgressiveRollout), ctx, progressiveRollout, environmentId) } // DeleteProgressiveRollout mocks base method. -func (m *MockProgressiveRolloutStorage) DeleteProgressiveRollout(ctx context.Context, id, environmentNamespace string) error { +func (m *MockProgressiveRolloutStorage) DeleteProgressiveRollout(ctx context.Context, id, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteProgressiveRollout", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "DeleteProgressiveRollout", ctx, id, environmentId) ret0, _ := ret[0].(error) return ret0 } // DeleteProgressiveRollout indicates an expected call of DeleteProgressiveRollout. -func (mr *MockProgressiveRolloutStorageMockRecorder) DeleteProgressiveRollout(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockProgressiveRolloutStorageMockRecorder) DeleteProgressiveRollout(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).DeleteProgressiveRollout), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).DeleteProgressiveRollout), ctx, id, environmentId) } // GetProgressiveRollout mocks base method. -func (m *MockProgressiveRolloutStorage) GetProgressiveRollout(ctx context.Context, id, environmentNamespace string) (*domain.ProgressiveRollout, error) { +func (m *MockProgressiveRolloutStorage) GetProgressiveRollout(ctx context.Context, id, environmentId string) (*domain.ProgressiveRollout, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetProgressiveRollout", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetProgressiveRollout", ctx, id, environmentId) ret0, _ := ret[0].(*domain.ProgressiveRollout) ret1, _ := ret[1].(error) return ret0, ret1 } // GetProgressiveRollout indicates an expected call of GetProgressiveRollout. -func (mr *MockProgressiveRolloutStorageMockRecorder) GetProgressiveRollout(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockProgressiveRolloutStorageMockRecorder) GetProgressiveRollout(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).GetProgressiveRollout), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).GetProgressiveRollout), ctx, id, environmentId) } // ListProgressiveRollouts mocks base method. @@ -104,15 +104,15 @@ func (mr *MockProgressiveRolloutStorageMockRecorder) ListProgressiveRollouts(ctx } // UpdateProgressiveRollout mocks base method. -func (m *MockProgressiveRolloutStorage) UpdateProgressiveRollout(ctx context.Context, progressiveRollout *domain.ProgressiveRollout, environmentNamespace string) error { +func (m *MockProgressiveRolloutStorage) UpdateProgressiveRollout(ctx context.Context, progressiveRollout *domain.ProgressiveRollout, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateProgressiveRollout", ctx, progressiveRollout, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateProgressiveRollout", ctx, progressiveRollout, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateProgressiveRollout indicates an expected call of UpdateProgressiveRollout. -func (mr *MockProgressiveRolloutStorageMockRecorder) UpdateProgressiveRollout(ctx, progressiveRollout, environmentNamespace any) *gomock.Call { +func (mr *MockProgressiveRolloutStorageMockRecorder) UpdateProgressiveRollout(ctx, progressiveRollout, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).UpdateProgressiveRollout), ctx, progressiveRollout, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutStorage)(nil).UpdateProgressiveRollout), ctx, progressiveRollout, environmentId) } diff --git a/pkg/autoops/storage/v2/progressive_rollout.go b/pkg/autoops/storage/v2/progressive_rollout.go index 681f415acf..7864c2b57c 100644 --- a/pkg/autoops/storage/v2/progressive_rollout.go +++ b/pkg/autoops/storage/v2/progressive_rollout.go @@ -55,10 +55,10 @@ type ProgressiveRolloutStorage interface { CreateProgressiveRollout( ctx context.Context, progressiveRollout *domain.ProgressiveRollout, - environmentNamespace string, + environmentId string, ) error - GetProgressiveRollout(ctx context.Context, id, environmentNamespace string) (*domain.ProgressiveRollout, error) - DeleteProgressiveRollout(ctx context.Context, id, environmentNamespace string) error + GetProgressiveRollout(ctx context.Context, id, environmentId string) (*domain.ProgressiveRollout, error) + DeleteProgressiveRollout(ctx context.Context, id, environmentId string) error ListProgressiveRollouts( ctx context.Context, whereParts []mysql.WherePart, @@ -67,7 +67,7 @@ type ProgressiveRolloutStorage interface { ) ([]*autoopsproto.ProgressiveRollout, int64, int, error) UpdateProgressiveRollout(ctx context.Context, progressiveRollout *domain.ProgressiveRollout, - environmentNamespace string, + environmentId string, ) error } @@ -78,7 +78,7 @@ func NewProgressiveRolloutStorage(qe mysql.QueryExecer) ProgressiveRolloutStorag func (s *progressiveRolloutStorage) CreateProgressiveRollout( ctx context.Context, progressiveRollout *domain.ProgressiveRollout, - environmentNamespace string, + environmentId string, ) error { _, err := s.qe.ExecContext( ctx, @@ -92,7 +92,7 @@ func (s *progressiveRolloutStorage) CreateProgressiveRollout( progressiveRollout.StoppedAt, progressiveRollout.CreatedAt, progressiveRollout.UpdatedAt, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -105,14 +105,14 @@ func (s *progressiveRolloutStorage) CreateProgressiveRollout( func (s *progressiveRolloutStorage) GetProgressiveRollout( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.ProgressiveRollout, error) { progressiveRollout := autoopsproto.ProgressiveRollout{} err := s.qe.QueryRowContext( ctx, selectOpsProgressiveRolloutSQL, id, - environmentNamespace, + environmentId, ).Scan( &progressiveRollout.Id, &progressiveRollout.FeatureId, @@ -135,13 +135,13 @@ func (s *progressiveRolloutStorage) GetProgressiveRollout( func (s *progressiveRolloutStorage) DeleteProgressiveRollout( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) error { result, err := s.qe.ExecContext( ctx, deleteOpsProgressiveRolloutSQL, id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -206,7 +206,7 @@ func (s *progressiveRolloutStorage) ListProgressiveRollouts( func (s *progressiveRolloutStorage) UpdateProgressiveRollout( ctx context.Context, progressiveRollout *domain.ProgressiveRollout, - environmentNamespace string, + environmentId string, ) error { result, err := s.qe.ExecContext( ctx, @@ -220,7 +220,7 @@ func (s *progressiveRolloutStorage) UpdateProgressiveRollout( &progressiveRollout.CreatedAt, &progressiveRollout.UpdatedAt, &progressiveRollout.Id, - environmentNamespace, + environmentId, ) if err != nil { return err diff --git a/pkg/autoops/storage/v2/progressive_rollout_test.go b/pkg/autoops/storage/v2/progressive_rollout_test.go index 4cbf0d4647..17a461b73e 100644 --- a/pkg/autoops/storage/v2/progressive_rollout_test.go +++ b/pkg/autoops/storage/v2/progressive_rollout_test.go @@ -41,11 +41,11 @@ func TestCreateProgressiveRollout(t *testing.T) { defer mockController.Finish() patterns := []struct { - desc string - setup func(*progressiveRolloutStorage) - input *domain.ProgressiveRollout - environmentNamespace string - expectedErr error + desc string + setup func(*progressiveRolloutStorage) + input *domain.ProgressiveRollout + environmentId string + expectedErr error }{ { desc: "", @@ -57,8 +57,8 @@ func TestCreateProgressiveRollout(t *testing.T) { input: &domain.ProgressiveRollout{ ProgressiveRollout: &proto.ProgressiveRollout{Id: "id-1"}, }, - environmentNamespace: "ns0", - expectedErr: ErrProgressiveRolloutAlreadyExists, + environmentId: "ns0", + expectedErr: ErrProgressiveRolloutAlreadyExists, }, { setup: func(s *progressiveRolloutStorage) { @@ -69,8 +69,8 @@ func TestCreateProgressiveRollout(t *testing.T) { input: &domain.ProgressiveRollout{ ProgressiveRollout: &proto.ProgressiveRollout{Id: "id-1"}, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -78,7 +78,7 @@ func TestCreateProgressiveRollout(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.CreateProgressiveRollout(context.Background(), p.input, p.environmentNamespace) + err := storage.CreateProgressiveRollout(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } diff --git a/pkg/autoops/storage/v2/sql/auto_ops_rule/insert_auto_ops_rule.sql b/pkg/autoops/storage/v2/sql/auto_ops_rule/insert_auto_ops_rule.sql index 6b93270131..6e371d9c83 100644 --- a/pkg/autoops/storage/v2/sql/auto_ops_rule/insert_auto_ops_rule.sql +++ b/pkg/autoops/storage/v2/sql/auto_ops_rule/insert_auto_ops_rule.sql @@ -7,7 +7,7 @@ INSERT INTO auto_ops_rule ( updated_at, deleted, status, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? ) diff --git a/pkg/autoops/storage/v2/sql/auto_ops_rule/select_auto_ops_rule.sql b/pkg/autoops/storage/v2/sql/auto_ops_rule/select_auto_ops_rule.sql index f6b9eaec6a..098476c9ea 100644 --- a/pkg/autoops/storage/v2/sql/auto_ops_rule/select_auto_ops_rule.sql +++ b/pkg/autoops/storage/v2/sql/auto_ops_rule/select_auto_ops_rule.sql @@ -11,4 +11,4 @@ FROM auto_ops_rule WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/autoops/storage/v2/sql/auto_ops_rule/update_auto_ops_rule.sql b/pkg/autoops/storage/v2/sql/auto_ops_rule/update_auto_ops_rule.sql index e0d4342d55..7fb96926b0 100644 --- a/pkg/autoops/storage/v2/sql/auto_ops_rule/update_auto_ops_rule.sql +++ b/pkg/autoops/storage/v2/sql/auto_ops_rule/update_auto_ops_rule.sql @@ -10,4 +10,4 @@ SET status = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/delete_ops_progressive_rollout.sql b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/delete_ops_progressive_rollout.sql index 189cd39dbf..1c0154fc5a 100644 --- a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/delete_ops_progressive_rollout.sql +++ b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/delete_ops_progressive_rollout.sql @@ -2,4 +2,4 @@ DELETE FROM ops_progressive_rollout WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/insert_ops_progressive_rollout.sql b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/insert_ops_progressive_rollout.sql index 50d4568b86..7daace5858 100644 --- a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/insert_ops_progressive_rollout.sql +++ b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/insert_ops_progressive_rollout.sql @@ -8,7 +8,7 @@ INSERT INTO ops_progressive_rollout ( stopped_at, created_at, updated_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) diff --git a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/select_ops_progressive_rollout.sql b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/select_ops_progressive_rollout.sql index 65f349a77a..b6f969566a 100644 --- a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/select_ops_progressive_rollout.sql +++ b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/select_ops_progressive_rollout.sql @@ -12,4 +12,4 @@ FROM ops_progressive_rollout WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/update_ops_progressive_rollout.sql b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/update_ops_progressive_rollout.sql index ca46f34eb5..ea81c3599b 100644 --- a/pkg/autoops/storage/v2/sql/ops_progressive_rollout/update_ops_progressive_rollout.sql +++ b/pkg/autoops/storage/v2/sql/ops_progressive_rollout/update_ops_progressive_rollout.sql @@ -11,4 +11,4 @@ SET updated_at = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/batch/api/api_test.go b/pkg/batch/api/api_test.go index ca8498b4e6..0a005c5247 100644 --- a/pkg/batch/api/api_test.go +++ b/pkg/batch/api/api_test.go @@ -291,8 +291,8 @@ func TestDatetimeWatcher(t *testing.T) { autoOpsRulesMockClient.EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "env0", + PageSize: 0, + EnvironmentId: "env0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -342,8 +342,8 @@ func TestEventCountWatcher(t *testing.T) { autoOpsRulesMockClient.EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "env0", + PageSize: 0, + EnvironmentId: "env0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -356,8 +356,8 @@ func TestEventCountWatcher(t *testing.T) { autoOpsRulesMockClient.EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "env1", + PageSize: 0, + EnvironmentId: "env1", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -443,8 +443,8 @@ func TestProgressiveRolloutWatcher(t *testing.T) { autoOpsRulesMockClient.EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - PageSize: 0, - EnvironmentNamespace: "env0", + PageSize: 0, + EnvironmentId: "env0", }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ @@ -457,8 +457,8 @@ func TestProgressiveRolloutWatcher(t *testing.T) { autoOpsRulesMockClient.EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - PageSize: 0, - EnvironmentNamespace: "env1", + PageSize: 0, + EnvironmentId: "env1", }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ diff --git a/pkg/batch/jobs/cacher/apikeycacher.go b/pkg/batch/jobs/cacher/apikeycacher.go index 11d9ec41cf..b3c596e94d 100644 --- a/pkg/batch/jobs/cacher/apikeycacher.go +++ b/pkg/batch/jobs/cacher/apikeycacher.go @@ -106,8 +106,8 @@ func (c *apiKeyCacher) listEnvAPIKeys( environment *envproto.EnvironmentV2, ) ([]*acproto.EnvironmentAPIKey, error) { req := &acproto.ListAPIKeysRequest{ - PageSize: 0, - EnvironmentNamespace: environment.Id, + PageSize: 0, + EnvironmentId: environment.Id, } resp, err := c.accountClient.ListAPIKeys(ctx, req) if err != nil { diff --git a/pkg/batch/jobs/cacher/autoopsrulescacher.go b/pkg/batch/jobs/cacher/autoopsrulescacher.go index 388332d2e2..8a33d3a4a6 100644 --- a/pkg/batch/jobs/cacher/autoopsrulescacher.go +++ b/pkg/batch/jobs/cacher/autoopsrulescacher.go @@ -96,8 +96,8 @@ func (c *autoOpsRulesCacher) listAutoOpsRules( environmentID string, ) ([]*aoproto.AutoOpsRule, error) { req := &aoproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: environmentID, + PageSize: 0, + EnvironmentId: environmentID, } resp, err := c.autoOpsClient.ListAutoOpsRules(ctx, req) if err != nil { diff --git a/pkg/batch/jobs/cacher/experimentcacher.go b/pkg/batch/jobs/cacher/experimentcacher.go index 57ec3ab4f7..a41a8e3167 100644 --- a/pkg/batch/jobs/cacher/experimentcacher.go +++ b/pkg/batch/jobs/cacher/experimentcacher.go @@ -98,8 +98,8 @@ func (c *experimentCacher) listExperiments( environmentID string, ) ([]*expproto.Experiment, error) { req := &expproto.ListExperimentsRequest{ - PageSize: 0, - EnvironmentNamespace: environmentID, + PageSize: 0, + EnvironmentId: environmentID, Statuses: []expproto.Experiment_Status{ expproto.Experiment_RUNNING, expproto.Experiment_STOPPED, diff --git a/pkg/batch/jobs/cacher/featureflagcacher.go b/pkg/batch/jobs/cacher/featureflagcacher.go index d3c39c714f..c11fe303d2 100644 --- a/pkg/batch/jobs/cacher/featureflagcacher.go +++ b/pkg/batch/jobs/cacher/featureflagcacher.go @@ -102,8 +102,8 @@ func (c *featureFlagCacher) listFeatures( environmentID string, ) ([]*ftproto.Feature, error) { req := &ftproto.ListFeaturesRequest{ - PageSize: 0, - EnvironmentNamespace: environmentID, + PageSize: 0, + EnvironmentId: environmentID, } resp, err := c.featureClient.ListFeatures(ctx, req) if err != nil { diff --git a/pkg/batch/jobs/cacher/segmentusercacher.go b/pkg/batch/jobs/cacher/segmentusercacher.go index cb100bf34c..38cc850952 100644 --- a/pkg/batch/jobs/cacher/segmentusercacher.go +++ b/pkg/batch/jobs/cacher/segmentusercacher.go @@ -119,9 +119,9 @@ func (c *segmentUserCacher) listSegments( environmentID string, ) ([]*ftproto.Segment, error) { req := &ftproto.ListSegmentsRequest{ - PageSize: 0, - EnvironmentNamespace: environmentID, - IsInUseStatus: &wrapperspb.BoolValue{Value: true}, + PageSize: 0, + EnvironmentId: environmentID, + IsInUseStatus: &wrapperspb.BoolValue{Value: true}, } resp, err := c.featureClient.ListSegments(ctx, req) if err != nil { @@ -135,9 +135,9 @@ func (c *segmentUserCacher) listSegmentUsers( environmentID, segmentID string, ) ([]*ftproto.SegmentUser, error) { req := &ftproto.ListSegmentUsersRequest{ - PageSize: 0, - EnvironmentNamespace: environmentID, - SegmentId: segmentID, + PageSize: 0, + EnvironmentId: environmentID, + SegmentId: segmentID, } resp, err := c.featureClient.ListSegmentUsers(ctx, req) if err != nil { diff --git a/pkg/batch/jobs/calculator/experiment_calculate.go b/pkg/batch/jobs/calculator/experiment_calculate.go index b671408547..2ed4aeccae 100644 --- a/pkg/batch/jobs/calculator/experiment_calculate.go +++ b/pkg/batch/jobs/calculator/experiment_calculate.go @@ -124,7 +124,7 @@ func (e *experimentCalculate) Run(ctx context.Context) error { e.logger.Error("Failed to calculate experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(calculateErr), - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.String("experimentId", ex.Id), )..., ) @@ -132,7 +132,7 @@ func (e *experimentCalculate) Run(ctx context.Context) error { } e.logger.Debug("Experiment calculated successfully", log.FieldsFromImcomingContext(ctx).AddFields( - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.String("experimentId", ex.Id), )..., ) @@ -151,7 +151,7 @@ func (e *experimentCalculate) calculateExperimentWithLock(ctx context.Context, } if !locked { e.logger.Info("Experiment is being calculated by another instance", - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.String("experimentId", experiment.Id), ) return nil @@ -163,13 +163,13 @@ func (e *experimentCalculate) calculateExperimentWithLock(ctx context.Context, if unlockErr != nil { e.logger.Error("Failed to release lock", zap.Error(unlockErr), - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.String("experimentId", experiment.Id), ) } if !unlocked { e.logger.Warn("Lock was not released, possibly expired", - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.String("experimentId", experiment.Id), ) } @@ -214,13 +214,13 @@ func (e *experimentCalculate) listEnvironments( func (e *experimentCalculate) listExperiments( ctx context.Context, - namespace string, + environmentId string, ) ([]*experiment.Experiment, error) { req := &experiment.ListExperimentsRequest{ - From: time.Now().In(e.location).Add(-2 * 24 * time.Hour).Unix(), - PageSize: 0, - Cursor: "", - EnvironmentNamespace: namespace, + From: time.Now().In(e.location).Add(-2 * 24 * time.Hour).Unix(), + PageSize: 0, + Cursor: "", + EnvironmentId: environmentId, Statuses: []experiment.Experiment_Status{ experiment.Experiment_RUNNING, experiment.Experiment_STOPPED, diff --git a/pkg/batch/jobs/experiment/experiment_status_updater.go b/pkg/batch/jobs/experiment/experiment_status_updater.go index d868ed3c86..da6f9a9deb 100644 --- a/pkg/batch/jobs/experiment/experiment_status_updater.go +++ b/pkg/batch/jobs/experiment/experiment_status_updater.go @@ -79,7 +79,7 @@ func (u *experimentStatusUpdater) Run(ctx context.Context) (lastErr error) { exps, err := u.listExperiments(ctx, env.Id, status) if err != nil { u.logger.Error("Failed to list experiments", zap.Error(err), - zap.String("environmentNamespace", env.Id), + zap.String("environmentId", env.Id), zap.Int32("status", int32(status)), ) lastErr = err @@ -98,17 +98,17 @@ func (u *experimentStatusUpdater) Run(ctx context.Context) (lastErr error) { func (u *experimentStatusUpdater) updateStatus( ctx context.Context, - environmentNamespace string, + environmentId string, experiment *experimentproto.Experiment, ) error { if experiment.Status == experimentproto.Experiment_WAITING { - if err := u.updateToRunning(ctx, environmentNamespace, experiment); err != nil { + if err := u.updateToRunning(ctx, environmentId, experiment); err != nil { return err } return nil } if experiment.Status == experimentproto.Experiment_RUNNING { - if err := u.updateToStopped(ctx, environmentNamespace, experiment); err != nil { + if err := u.updateToStopped(ctx, environmentId, experiment); err != nil { return err } } @@ -117,27 +117,27 @@ func (u *experimentStatusUpdater) updateStatus( func (u *experimentStatusUpdater) updateToRunning( ctx context.Context, - environmentNamespace string, + environmentId string, experiment *experimentproto.Experiment, ) error { de := domain.Experiment{Experiment: experiment} if err := de.Start(); err != nil { if err != domain.ErrExperimentBeforeStart { u.logger.Error("Failed to start check if experiment running", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("id", experiment.Id)) return err } return nil } _, err := u.experimentClient.StartExperiment(ctx, &experimentproto.StartExperimentRequest{ - EnvironmentNamespace: environmentNamespace, - Id: experiment.Id, - Command: &experimentproto.StartExperimentCommand{}, + EnvironmentId: environmentId, + Id: experiment.Id, + Command: &experimentproto.StartExperimentCommand{}, }) if err != nil { u.logger.Error("Failed to update status to running", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("id", experiment.Id)) return err } @@ -146,27 +146,27 @@ func (u *experimentStatusUpdater) updateToRunning( func (u *experimentStatusUpdater) updateToStopped( ctx context.Context, - environmentNamespace string, + environmentId string, experiment *experimentproto.Experiment, ) error { de := domain.Experiment{Experiment: experiment} if err := de.Finish(); err != nil { if err != domain.ErrExperimentBeforeStop { u.logger.Error("Failed to end check if experiment running", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("id", experiment.Id)) return err } return nil } _, err := u.experimentClient.FinishExperiment(ctx, &experimentproto.FinishExperimentRequest{ - EnvironmentNamespace: environmentNamespace, - Id: experiment.Id, - Command: &experimentproto.FinishExperimentCommand{}, + EnvironmentId: environmentId, + Id: experiment.Id, + Command: &experimentproto.FinishExperimentCommand{}, }) if err != nil { u.logger.Error("Failed to update status to stopped", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("id", experiment.Id)) return err } @@ -175,17 +175,17 @@ func (u *experimentStatusUpdater) updateToStopped( func (u *experimentStatusUpdater) listExperiments( ctx context.Context, - environmentNamespace string, + environmentId string, status experimentproto.Experiment_Status, ) ([]*experimentproto.Experiment, error) { var experiments []*experimentproto.Experiment cursor := "" for { resp, err := u.experimentClient.ListExperiments(ctx, &experimentproto.ListExperimentsRequest{ - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentNamespace, - Status: &wrappersproto.Int32Value{Value: int32(status)}, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: environmentId, + Status: &wrappersproto.Int32Value{Value: int32(status)}, }) if err != nil { return nil, err diff --git a/pkg/batch/jobs/notification/experiment_running_watcher.go b/pkg/batch/jobs/notification/experiment_running_watcher.go index e6233f722d..4900999d9f 100644 --- a/pkg/batch/jobs/notification/experiment_running_watcher.go +++ b/pkg/batch/jobs/notification/experiment_running_watcher.go @@ -102,9 +102,9 @@ func (w *experimentRunningWatcher) createNotificationEvent( return nil, err } ne := &senderproto.NotificationEvent{ - Id: id.String(), - EnvironmentNamespace: environment.Id, - SourceType: notificationproto.Subscription_EXPERIMENT_RUNNING, + Id: id.String(), + EnvironmentId: environment.Id, + SourceType: notificationproto.Subscription_EXPERIMENT_RUNNING, Notification: &senderproto.Notification{ Type: senderproto.Notification_ExperimentRunning, ExperimentRunningNotification: &senderproto.ExperimentRunningNotification{ @@ -141,16 +141,16 @@ func (w *experimentRunningWatcher) listEnvironments(ctx context.Context) ([]*env func (w *experimentRunningWatcher) listExperiments( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*experimentproto.Experiment, error) { var experiments []*experimentproto.Experiment cursor := "" for { resp, err := w.experimentClient.ListExperiments(ctx, &experimentproto.ListExperimentsRequest{ - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentNamespace, - Status: &wrappersproto.Int32Value{Value: int32(experimentproto.Experiment_RUNNING)}, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: environmentId, + Status: &wrappersproto.Int32Value{Value: int32(experimentproto.Experiment_RUNNING)}, }) if err != nil { return nil, err diff --git a/pkg/batch/jobs/notification/feature_stale_watcher.go b/pkg/batch/jobs/notification/feature_stale_watcher.go index c2811ac535..c96c36ea55 100644 --- a/pkg/batch/jobs/notification/feature_stale_watcher.go +++ b/pkg/batch/jobs/notification/feature_stale_watcher.go @@ -109,9 +109,9 @@ func (w *featureStaleWatcher) createNotificationEvent( return nil, err } ne := &senderproto.NotificationEvent{ - Id: id.String(), - EnvironmentNamespace: environment.Id, - SourceType: notificationproto.Subscription_FEATURE_STALE, + Id: id.String(), + EnvironmentId: environment.Id, + SourceType: notificationproto.Subscription_FEATURE_STALE, Notification: &senderproto.Notification{ Type: senderproto.Notification_FeatureStale, FeatureStaleNotification: &senderproto.FeatureStaleNotification{ @@ -148,16 +148,16 @@ func (w *featureStaleWatcher) listEnvironments(ctx context.Context) ([]*environm func (w *featureStaleWatcher) listFeatures( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*featureproto.Feature, error) { var features []*featureproto.Feature cursor := "" for { resp, err := w.featureClient.ListFeatures(ctx, &featureproto.ListFeaturesRequest{ - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentNamespace, - Archived: &wrappers.BoolValue{Value: false}, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: environmentId, + Archived: &wrappers.BoolValue{Value: false}, }) if err != nil { return nil, err diff --git a/pkg/batch/jobs/notification/mau_count_watcher.go b/pkg/batch/jobs/notification/mau_count_watcher.go index 6af9832edb..486db8f7bb 100644 --- a/pkg/batch/jobs/notification/mau_count_watcher.go +++ b/pkg/batch/jobs/notification/mau_count_watcher.go @@ -155,11 +155,11 @@ func (w *mauCountWatcher) listEnvironments( func (w *mauCountWatcher) getUserCount( ctx context.Context, - environmentNamespace, yearMonth string, + environmentId, yearMonth string, ) (eventCount, userCount int64, err error) { resp, e := w.eventCounterClient.GetMAUCount(ctx, &ecproto.GetMAUCountRequest{ - EnvironmentNamespace: environmentNamespace, - YearMonth: yearMonth, + EnvironmentId: environmentId, + YearMonth: yearMonth, }) if e != nil { err = e @@ -196,9 +196,9 @@ func (w *mauCountWatcher) createNotificationEvent( return nil, err } ne := &senderproto.NotificationEvent{ - Id: id.String(), - EnvironmentNamespace: environment.Id, - SourceType: notificationproto.Subscription_MAU_COUNT, + Id: id.String(), + EnvironmentId: environment.Id, + SourceType: notificationproto.Subscription_MAU_COUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_MauCount, MauCountNotification: &senderproto.MauCountNotification{ diff --git a/pkg/batch/jobs/notification/mau_count_watcher_test.go b/pkg/batch/jobs/notification/mau_count_watcher_test.go index f5b6ce8986..a68155c490 100644 --- a/pkg/batch/jobs/notification/mau_count_watcher_test.go +++ b/pkg/batch/jobs/notification/mau_count_watcher_test.go @@ -176,8 +176,8 @@ func TestCreateMAUNotification(t *testing.T) { w.eventCounterClient.(*ecclientmock.MockClient).EXPECT().GetMAUCount( gomock.Any(), &ecproto.GetMAUCountRequest{ - EnvironmentNamespace: "eID", - YearMonth: w.newYearMonth(year, month), + EnvironmentId: "eID", + YearMonth: w.newYearMonth(year, month), }, ).Return( &ecproto.GetMAUCountResponse{ diff --git a/pkg/batch/jobs/opsevent/datetime_watcher.go b/pkg/batch/jobs/opsevent/datetime_watcher.go index a3d8e657e8..5572b32a1e 100644 --- a/pkg/batch/jobs/opsevent/datetime_watcher.go +++ b/pkg/batch/jobs/opsevent/datetime_watcher.go @@ -107,11 +107,11 @@ func (w *datetimeWatcher) listEnvironments(ctx context.Context) ([]*envproto.Env func (w *datetimeWatcher) listAutoOpsRules( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*autoopsproto.AutoOpsRule, error) { resp, err := w.aoClient.ListAutoOpsRules(ctx, &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: environmentNamespace, + PageSize: 0, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -121,7 +121,7 @@ func (w *datetimeWatcher) listAutoOpsRules( func (w *datetimeWatcher) getExecuteClauseId( ctx context.Context, - environmentNamespace string, + environmentId string, a *autoopsdomain.AutoOpsRule, ) (string, error) { nowTimestamp := time.Now().Unix() @@ -141,7 +141,7 @@ func (w *datetimeWatcher) getExecuteClauseId( } if latestExecuteClauseId != "" { w.logger.Info("Clause satisfies condition", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", a.FeatureId), zap.String("autoOpsRuleId", a.Id), zap.String("clauseId", latestExecuteClauseId), diff --git a/pkg/batch/jobs/opsevent/datetime_watcher_test.go b/pkg/batch/jobs/opsevent/datetime_watcher_test.go index df0395a9da..5ca5c0f0f8 100644 --- a/pkg/batch/jobs/opsevent/datetime_watcher_test.go +++ b/pkg/batch/jobs/opsevent/datetime_watcher_test.go @@ -86,8 +86,8 @@ func TestRunDatetimeWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -134,8 +134,8 @@ func TestRunDatetimeWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ diff --git a/pkg/batch/jobs/opsevent/event_count_watcher.go b/pkg/batch/jobs/opsevent/event_count_watcher.go index 9b256ae619..261e9691cc 100644 --- a/pkg/batch/jobs/opsevent/event_count_watcher.go +++ b/pkg/batch/jobs/opsevent/event_count_watcher.go @@ -123,11 +123,11 @@ func (w *eventCountWatcher) listEnvironments(ctx context.Context) ([]*envproto.E func (w *eventCountWatcher) listAutoOpsRules( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*autoopsproto.AutoOpsRule, error) { resp, err := w.aoClient.ListAutoOpsRules(ctx, &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: environmentNamespace, + PageSize: 0, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -137,22 +137,22 @@ func (w *eventCountWatcher) listAutoOpsRules( func (w *eventCountWatcher) getExecuteClauseId( ctx context.Context, - environmentNamespace string, + environmentId string, a *autoopsdomain.AutoOpsRule, ) (string, error) { opsEventRateClauses, err := a.ExtractOpsEventRateClauses() if err != nil { w.logger.Error("Failed to extract ops event rate clauses", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", a.FeatureId), zap.String("autoOpsRuleId", a.Id), ) return "", err } - featureVersion, err := w.getLatestFeatureVersion(ctx, a.FeatureId, environmentNamespace) + featureVersion, err := w.getLatestFeatureVersion(ctx, a.FeatureId, environmentId) if err != nil { w.logger.Error("Failed to get the latest feature version", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", a.FeatureId), zap.String("autoOpsRuleId", a.Id), ) @@ -162,7 +162,7 @@ func (w *eventCountWatcher) getExecuteClauseId( for id, c := range opsEventRateClauses { logFunc := func(msg string) { w.logger.Debug(msg, - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", a.FeatureId), zap.String("autoOpsRuleId", a.Id), zap.Any("opsEventRateClause", c), @@ -170,7 +170,7 @@ func (w *eventCountWatcher) getExecuteClauseId( } evaluationCount, err := w.getTargetOpsEvaluationCount(ctx, logFunc, - environmentNamespace, + environmentId, a.Id, id, a.FeatureId, @@ -187,7 +187,7 @@ func (w *eventCountWatcher) getExecuteClauseId( opsEventCount, err := w.getTargetOpsGoalEventCount( ctx, logFunc, - environmentNamespace, + environmentId, a.Id, id, a.FeatureId, @@ -202,13 +202,13 @@ func (w *eventCountWatcher) getExecuteClauseId( continue } opsCount := opseventdomain.NewOpsCount(a.FeatureId, a.Id, id, opsEventCount, evaluationCount) - if err = w.persistOpsCount(ctx, environmentNamespace, opsCount); err != nil { + if err = w.persistOpsCount(ctx, environmentId, opsCount); err != nil { lastErr = err continue } if asmt := w.assessRule(c, evaluationCount, opsEventCount); asmt { w.logger.Info("Clause satisfies condition", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", a.FeatureId), zap.String("autoOpsRuleId", a.Id), zap.Any("opsEventRateClause", c), @@ -221,11 +221,11 @@ func (w *eventCountWatcher) getExecuteClauseId( func (w *eventCountWatcher) getLatestFeatureVersion( ctx context.Context, - featureID, environmentNamespace string, + featureID, environmentId string, ) (int32, error) { req := &ftproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: environmentNamespace, + Id: featureID, + EnvironmentId: environmentId, } resp, err := w.featureClient.GetFeature(ctx, req) if err != nil { @@ -258,12 +258,12 @@ func (w *eventCountWatcher) assessRule( func (w *eventCountWatcher) getTargetOpsEvaluationCount( ctx context.Context, logFunc func(string), - environmentNamespace, ruleID, clauseID, FeatureID, variationID string, + environmentId, ruleID, clauseID, FeatureID, variationID string, featureVersion int32, ) (int64, error) { count, err := w.getEvaluationCount( ctx, - environmentNamespace, + environmentId, ruleID, clauseID, FeatureID, @@ -281,20 +281,20 @@ func (w *eventCountWatcher) getTargetOpsEvaluationCount( func (w *eventCountWatcher) getEvaluationCount( ctx context.Context, - environmentNamespace, ruleID, clauseID, FeatureID, variationID string, + environmentId, ruleID, clauseID, FeatureID, variationID string, featureVersion int32, ) (int64, error) { resp, err := w.eventCounterClient.GetOpsEvaluationUserCount(ctx, &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: ruleID, - ClauseId: clauseID, - FeatureId: FeatureID, - FeatureVersion: featureVersion, - VariationId: variationID, + EnvironmentId: environmentId, + OpsRuleId: ruleID, + ClauseId: clauseID, + FeatureId: FeatureID, + FeatureVersion: featureVersion, + VariationId: variationID, }) if err != nil { w.logger.Error("Failed to get ops evaluation count", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("ruleId", ruleID), zap.String("clauseId", clauseID), zap.String("featureId", FeatureID), @@ -309,12 +309,12 @@ func (w *eventCountWatcher) getEvaluationCount( func (w *eventCountWatcher) getTargetOpsGoalEventCount( ctx context.Context, logFunc func(string), - environmentNamespace, ruleID, clauseID, FeatureID, variationID string, + environmentId, ruleID, clauseID, FeatureID, variationID string, featureVersion int32, ) (int64, error) { count, err := w.getOpsGoalEventCount( ctx, - environmentNamespace, + environmentId, ruleID, clauseID, FeatureID, @@ -332,20 +332,20 @@ func (w *eventCountWatcher) getTargetOpsGoalEventCount( func (w *eventCountWatcher) getOpsGoalEventCount( ctx context.Context, - environmentNamespace, ruleID, clauseID, FeatureID, variationID string, + environmentId, ruleID, clauseID, FeatureID, variationID string, featureVersion int32, ) (int64, error) { resp, err := w.eventCounterClient.GetOpsGoalUserCount(ctx, &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: ruleID, - ClauseId: clauseID, - FeatureId: FeatureID, - FeatureVersion: featureVersion, - VariationId: variationID, + EnvironmentId: environmentId, + OpsRuleId: ruleID, + ClauseId: clauseID, + FeatureId: FeatureID, + FeatureVersion: featureVersion, + VariationId: variationID, }) if err != nil { w.logger.Error("Failed to get ops goal count", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("ruleId", ruleID), zap.String("clauseId", clauseID), zap.String("featureId", FeatureID), @@ -359,15 +359,15 @@ func (w *eventCountWatcher) getOpsGoalEventCount( func (w *eventCountWatcher) persistOpsCount( ctx context.Context, - environmentNamespace string, + environmentId string, oc *opseventdomain.OpsCount, ) error { opsCountStorage := v2os.NewOpsCountStorage(w.mysqlClient) - if err := opsCountStorage.UpsertOpsCount(ctx, environmentNamespace, oc); err != nil { + if err := opsCountStorage.UpsertOpsCount(ctx, environmentId, oc); err != nil { w.logger.Error("Failed to upsert ops count", zap.Error(err), zap.String("autoOpsRuleId", oc.AutoOpsRuleId), zap.String("clauseId", oc.ClauseId), - zap.String("environmentNamespace", environmentNamespace)) + zap.String("environmentId", environmentId)) return err } return nil diff --git a/pkg/batch/jobs/opsevent/event_count_watcher_test.go b/pkg/batch/jobs/opsevent/event_count_watcher_test.go index 42bcea5aca..45c9d302b0 100644 --- a/pkg/batch/jobs/opsevent/event_count_watcher_test.go +++ b/pkg/batch/jobs/opsevent/event_count_watcher_test.go @@ -96,8 +96,8 @@ func TestRunCountWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -139,8 +139,8 @@ func TestRunCountWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -189,8 +189,8 @@ func TestRunCountWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ @@ -246,8 +246,8 @@ func TestRunCountWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListAutoOpsRules( gomock.Any(), &autoopsproto.ListAutoOpsRulesRequest{ - PageSize: 0, - EnvironmentNamespace: "ns0", + PageSize: 0, + EnvironmentId: "ns0", }, ).Return( &autoopsproto.ListAutoOpsRulesResponse{ diff --git a/pkg/batch/jobs/opsevent/progressive_rollout_watcher_test.go b/pkg/batch/jobs/opsevent/progressive_rollout_watcher_test.go index 780859026b..8ecc16b1a6 100644 --- a/pkg/batch/jobs/opsevent/progressive_rollout_watcher_test.go +++ b/pkg/batch/jobs/opsevent/progressive_rollout_watcher_test.go @@ -81,8 +81,8 @@ func TestRunProgressiveRolloutWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: "eID", - PageSize: 0, + EnvironmentId: "eID", + PageSize: 0, }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ @@ -133,8 +133,8 @@ func TestRunProgressiveRolloutWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: "eID", - PageSize: 0, + EnvironmentId: "eID", + PageSize: 0, }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ @@ -182,8 +182,8 @@ func TestRunProgressiveRolloutWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: "eID", - PageSize: 0, + EnvironmentId: "eID", + PageSize: 0, }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ @@ -235,8 +235,8 @@ func TestRunProgressiveRolloutWatcher(t *testing.T) { w.aoClient.(*aoclientemock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: "eID", - PageSize: 0, + EnvironmentId: "eID", + PageSize: 0, }, ).Return( &autoopsproto.ListProgressiveRolloutsResponse{ diff --git a/pkg/batch/jobs/opsevent/progressove_rollout_watcher.go b/pkg/batch/jobs/opsevent/progressove_rollout_watcher.go index 6e7a82c117..f749956a0c 100644 --- a/pkg/batch/jobs/opsevent/progressove_rollout_watcher.go +++ b/pkg/batch/jobs/opsevent/progressove_rollout_watcher.go @@ -101,8 +101,8 @@ func (s *progressiveRolloutWatcher) listProgressiveRollouts( resp, err := s.aoClient.ListProgressiveRollouts( ctx, &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: 0, + EnvironmentId: environmentID, + PageSize: 0, }, ) if err != nil { @@ -114,13 +114,13 @@ func (s *progressiveRolloutWatcher) listProgressiveRollouts( func (w *progressiveRolloutWatcher) executeProgressiveRollout( ctx context.Context, progressiveRollout *aoproto.ProgressiveRollout, - environmentNamespace string, + environmentId string, ) error { pr := &autoopsdomain.ProgressiveRollout{ProgressiveRollout: progressiveRollout} schedules, err := pr.ExtractSchedules() if err != nil { w.logger.Error("Failed to extract schedules", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", progressiveRollout.FeatureId), zap.String("progressiveRolloutId", progressiveRollout.Id), ) @@ -130,14 +130,14 @@ func (w *progressiveRolloutWatcher) executeProgressiveRollout( for _, s := range schedules { if s.TriggeredAt == 0 && s.ExecuteAt <= now { w.logger.Info("scheduled time is passed", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", progressiveRollout.FeatureId), zap.String("progressiveRolloutId", progressiveRollout.Id), zap.Any("datetimeClause", s), ) if err := w.progressiveRolloutExecutor.ExecuteProgressiveRollout( ctx, - environmentNamespace, + environmentId, progressiveRollout.Id, s.ScheduleId, ); err != nil { diff --git a/pkg/batch/jobs/rediscounter/redis_counter_deleter.go b/pkg/batch/jobs/rediscounter/redis_counter_deleter.go index 35f4e07dbb..c448e0e68d 100644 --- a/pkg/batch/jobs/rediscounter/redis_counter_deleter.go +++ b/pkg/batch/jobs/rediscounter/redis_counter_deleter.go @@ -114,12 +114,12 @@ func (r *redisCounterDeleter) listEnvironments(ctx context.Context) ([]*envproto return resp.Environments, nil } -func (r *redisCounterDeleter) deleteKeysByKind(environmentNamespace, kind string) (int, error) { - keyPrefix := r.newKeyPrefix(environmentNamespace, kind) - keys, err := r.scan(environmentNamespace, kind, keyPrefix) +func (r *redisCounterDeleter) deleteKeysByKind(environmentId, kind string) (int, error) { + keyPrefix := r.newKeyPrefix(environmentId, kind) + keys, err := r.scan(environmentId, kind, keyPrefix) if err != nil { r.logger.Error("Failed to scan keys from redis", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), zap.String("keyPrefix", keyPrefix), ) @@ -127,17 +127,17 @@ func (r *redisCounterDeleter) deleteKeysByKind(environmentNamespace, kind string } if len(keys) == 0 { r.logger.Info("No keys was found", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), ) return 0, nil } - filteredKeys, err := r.filterKeysOlderThanThirtyOneDays(environmentNamespace, kind, keys) + filteredKeys, err := r.filterKeysOlderThanThirtyOneDays(environmentId, kind, keys) if err != nil { return 0, err } r.logger.Info("Filtered keys older than 31 days", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), zap.Int("filteredKeysSize", len(filteredKeys)), ) @@ -149,7 +149,7 @@ func (r *redisCounterDeleter) deleteKeysByKind(environmentNamespace, kind string for _, chunk := range chunks { if err := r.deleteKeys(chunk); err != nil { r.logger.Error("Failed to delete chunk from redis", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), zap.Strings("keys", chunk), zap.Int("deletedKeysSizeUntilTheError", deletedKeys), @@ -163,14 +163,14 @@ func (r *redisCounterDeleter) deleteKeysByKind(environmentNamespace, kind string return deletedKeys, nil } -func (r *redisCounterDeleter) newKeyPrefix(environmentNamespace, kind string) string { - keyPrefix := cache.MakeKeyPrefix(kind, environmentNamespace) +func (r *redisCounterDeleter) newKeyPrefix(environmentId, kind string) string { + keyPrefix := cache.MakeKeyPrefix(kind, environmentId) return keyPrefix + "*" } -func (r *redisCounterDeleter) scan(environmentNamespace, kind, key string) ([]string, error) { +func (r *redisCounterDeleter) scan(environmentId, kind, key string) ([]string, error) { r.logger.Info("Starting scan keys from Redis", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), ) startTime := time.Now() @@ -192,7 +192,7 @@ func (r *redisCounterDeleter) scan(environmentNamespace, kind, key string) ([]st return nil, err } r.logger.Info("Finished scanning keys from Redis", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), zap.Duration("elapsedTime", time.Since(startTime)), zap.Int("keysSize", len(keys)), @@ -201,23 +201,23 @@ func (r *redisCounterDeleter) scan(environmentNamespace, kind, key string) ([]st } func (r *redisCounterDeleter) filterKeysOlderThanThirtyOneDays( - environmentNamespace, kind string, + environmentId, kind string, keys []string, ) ([]string, error) { filteredKeys := make([]string, 0, len(keys)) for _, key := range keys { - // E.g. environment_namespace:uc:1689835532:feature_id:variation_id + // E.g. environment_id:uc:1689835532:feature_id:variation_id var regex string - if environmentNamespace == "" { + if environmentId == "" { regex = fmt.Sprintf("%s:(.*?):", kind) } else { - regex = fmt.Sprintf("%s:%s:(.*?):", environmentNamespace, kind) + regex = fmt.Sprintf("%s:%s:(.*?):", environmentId, kind) } re := regexp.MustCompile(regex) match := re.FindStringSubmatch(key) if len(match) == 0 { r.logger.Error("Failed to find submatch string", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), zap.String("key", key), zap.String("regex", regex), @@ -228,7 +228,7 @@ func (r *redisCounterDeleter) filterKeysOlderThanThirtyOneDays( if err != nil { r.logger.Error("Failed to convert string to int", zap.String("created_at", match[1]), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("kind", kind), ) return nil, errParseInt diff --git a/pkg/batch/jobs/rediscounter/redis_counter_deleter_test.go b/pkg/batch/jobs/rediscounter/redis_counter_deleter_test.go index dedc55ecd1..34fa14d912 100644 --- a/pkg/batch/jobs/rediscounter/redis_counter_deleter_test.go +++ b/pkg/batch/jobs/rediscounter/redis_counter_deleter_test.go @@ -454,12 +454,12 @@ func TestDeleteKeys(t *testing.T) { } } -func makeDummyKeys(t *testing.T, environmentNamespace, kind string, days, size int) []string { +func makeDummyKeys(t *testing.T, environmentId, kind string, days, size int) []string { t.Helper() now := time.Now() keys := make([]string, 0, size) for i := 0; i < size; i++ { - key := fmt.Sprintf("%s:%s:%d:feature_id_%d:variation_id_%d", environmentNamespace, kind, now.Unix()-(int64(days)*day), i, i) + key := fmt.Sprintf("%s:%s:%d:feature_id_%d:variation_id_%d", environmentId, kind, now.Unix()-(int64(days)*day), i, i) keys = append(keys, key) } return keys diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index e8e4259c79..f33a67cda9 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -92,27 +92,27 @@ type Lister interface { Keys(pattern string, maxSize int) ([]string, error) } -func MakeKey(kind, id, environmentNamespace string) string { - if environmentNamespace == storage.AdminEnvironmentNamespace { +func MakeKey(kind, id, environmentId string) string { + if environmentId == storage.AdminEnvironmentID { return fmt.Sprintf("%s:%s", kind, id) } - return fmt.Sprintf("%s:%s:%s", environmentNamespace, kind, id) + return fmt.Sprintf("%s:%s:%s", environmentId, kind, id) } -func MakeKeyPrefix(kind, environmentNamespace string) string { - if environmentNamespace == storage.AdminEnvironmentNamespace { +func MakeKeyPrefix(kind, environmentId string) string { + if environmentId == storage.AdminEnvironmentID { return fmt.Sprintf("%s:", kind) } - return fmt.Sprintf("%s:%s:", environmentNamespace, kind) + return fmt.Sprintf("%s:%s:", environmentId, kind) } // MakeHashSlotKey creates a key to ensure that multiple keys are allocated in the same hash slot. // https://redis.io/topics/cluster-spec#keys-hash-tags -func MakeHashSlotKey(hashTag, id, environmentNamespace string) string { - if environmentNamespace == storage.AdminEnvironmentNamespace { +func MakeHashSlotKey(hashTag, id, environmentId string) string { + if environmentId == storage.AdminEnvironmentID { return fmt.Sprintf("{%s}%s", hashTag, id) } - return fmt.Sprintf("{%s:%s}%s", environmentNamespace, hashTag, id) + return fmt.Sprintf("{%s:%s}%s", environmentId, hashTag, id) } func Bytes(value interface{}) ([]byte, error) { diff --git a/pkg/cache/v3/autoops.go b/pkg/cache/v3/autoops.go index 21c57bd8a1..3f30f85203 100644 --- a/pkg/cache/v3/autoops.go +++ b/pkg/cache/v3/autoops.go @@ -31,8 +31,8 @@ const ( ) type AutoOpsRulesCache interface { - Get(environmentNamespace string) (*aoproto.AutoOpsRules, error) - Put(autoOps *aoproto.AutoOpsRules, environmentNamespace string) error + Get(environmentId string) (*aoproto.AutoOpsRules, error) + Put(autoOps *aoproto.AutoOpsRules, environmentId string) error } type autoOpsRulesCache struct { @@ -43,8 +43,8 @@ func NewAutoOpsRulesCache(c cache.MultiGetCache) AutoOpsRulesCache { return &autoOpsRulesCache{cache: c} } -func (c *autoOpsRulesCache) Get(environmentNamespace string) (*aoproto.AutoOpsRules, error) { - key := c.key(environmentNamespace) +func (c *autoOpsRulesCache) Get(environmentId string) (*aoproto.AutoOpsRules, error) { + key := c.key(environmentId) value, err := c.cache.Get(key) if err != nil { return nil, err @@ -61,15 +61,15 @@ func (c *autoOpsRulesCache) Get(environmentNamespace string) (*aoproto.AutoOpsRu return autoOps, nil } -func (c *autoOpsRulesCache) Put(autoOps *aoproto.AutoOpsRules, environmentNamespace string) error { +func (c *autoOpsRulesCache) Put(autoOps *aoproto.AutoOpsRules, environmentId string) error { buffer, err := proto.Marshal(autoOps) if err != nil { return err } - key := c.key(environmentNamespace) + key := c.key(environmentId) return c.cache.Put(key, buffer, autoOpsRuleCacheTTL) } -func (c *autoOpsRulesCache) key(environmentNamespace string) string { - return fmt.Sprintf("%s:%s", environmentNamespace, autoOpsRuleKind) +func (c *autoOpsRulesCache) key(environmentId string) string { + return fmt.Sprintf("%s:%s", environmentId, autoOpsRuleKind) } diff --git a/pkg/cache/v3/environment_api_key.go b/pkg/cache/v3/environment_api_key.go index c364b02167..38e89d99dc 100644 --- a/pkg/cache/v3/environment_api_key.go +++ b/pkg/cache/v3/environment_api_key.go @@ -70,6 +70,6 @@ func (c *environmentAPIKeyCache) Put(environmentAPIKey *accountproto.Environment } func (c *environmentAPIKeyCache) key(id string) string { - // always use AdminEnvironmentNamespace because we'd like to get APIKey and environment_namespace only by id - return cache.MakeKey(environmentAPIKeyKind, id, storage.AdminEnvironmentNamespace) + // always use AdminEnvironmentNamespace because we'd like to get APIKey and environment_id only by id + return cache.MakeKey(environmentAPIKeyKind, id, storage.AdminEnvironmentID) } diff --git a/pkg/cache/v3/experiments.go b/pkg/cache/v3/experiments.go index e80dca5dc8..e89473b7b9 100644 --- a/pkg/cache/v3/experiments.go +++ b/pkg/cache/v3/experiments.go @@ -31,8 +31,8 @@ const ( ) type ExperimentsCache interface { - Get(environmentNamespace string) (*exproto.Experiments, error) - Put(experiments *exproto.Experiments, environmentNamespace string) error + Get(environmentId string) (*exproto.Experiments, error) + Put(experiments *exproto.Experiments, environmentId string) error } type experimentsCache struct { @@ -43,8 +43,8 @@ func NewExperimentsCache(c cache.MultiGetCache) ExperimentsCache { return &experimentsCache{cache: c} } -func (c *experimentsCache) Get(environmentNamespace string) (*exproto.Experiments, error) { - key := c.key(environmentNamespace) +func (c *experimentsCache) Get(environmentId string) (*exproto.Experiments, error) { + key := c.key(environmentId) value, err := c.cache.Get(key) if err != nil { return nil, err @@ -61,15 +61,15 @@ func (c *experimentsCache) Get(environmentNamespace string) (*exproto.Experiment return experiments, nil } -func (c *experimentsCache) Put(experiments *exproto.Experiments, environmentNamespace string) error { +func (c *experimentsCache) Put(experiments *exproto.Experiments, environmentId string) error { buffer, err := proto.Marshal(experiments) if err != nil { return err } - key := c.key(environmentNamespace) + key := c.key(environmentId) return c.cache.Put(key, buffer, experimentCacheTTL) } -func (c *experimentsCache) key(environmentNamespace string) string { - return fmt.Sprintf("%s:%s", environmentNamespace, experimentsKind) +func (c *experimentsCache) key(environmentId string) string { + return fmt.Sprintf("%s:%s", environmentId, experimentsKind) } diff --git a/pkg/cache/v3/features.go b/pkg/cache/v3/features.go index f24083f7b9..6a643fe949 100644 --- a/pkg/cache/v3/features.go +++ b/pkg/cache/v3/features.go @@ -31,8 +31,8 @@ const ( ) type FeaturesCache interface { - Get(environmentNamespace string) (*featureproto.Features, error) - Put(features *featureproto.Features, environmentNamespace string) error + Get(environmentId string) (*featureproto.Features, error) + Put(features *featureproto.Features, environmentId string) error } type featuresCache struct { @@ -43,8 +43,8 @@ func NewFeaturesCache(c cache.MultiGetCache) FeaturesCache { return &featuresCache{cache: c} } -func (c *featuresCache) Get(environmentNamespace string) (*featureproto.Features, error) { - key := c.key(environmentNamespace) +func (c *featuresCache) Get(environmentId string) (*featureproto.Features, error) { + key := c.key(environmentId) value, err := c.cache.Get(key) if err != nil { return nil, err @@ -61,15 +61,15 @@ func (c *featuresCache) Get(environmentNamespace string) (*featureproto.Features return features, nil } -func (c *featuresCache) Put(features *featureproto.Features, environmentNamespace string) error { +func (c *featuresCache) Put(features *featureproto.Features, environmentId string) error { buffer, err := proto.Marshal(features) if err != nil { return err } - key := c.key(environmentNamespace) + key := c.key(environmentId) return c.cache.Put(key, buffer, featuresTTL) } -func (c *featuresCache) key(environmentNamespace string) string { - return fmt.Sprintf("%s:%s", environmentNamespace, featuresKind) +func (c *featuresCache) key(environmentId string) string { + return fmt.Sprintf("%s:%s", environmentId, featuresKind) } diff --git a/pkg/cache/v3/features_test.go b/pkg/cache/v3/features_test.go index 22ea526d63..0f68ce02f3 100644 --- a/pkg/cache/v3/features_test.go +++ b/pkg/cache/v3/features_test.go @@ -29,8 +29,8 @@ import ( ) const ( - tag = "bucketeer-tag" - environmentNamespace = "bucketeer-environment" + tag = "bucketeer-tag" + environmentId = "bucketeer-environment" ) func TestGetFeatures(t *testing.T) { @@ -40,7 +40,7 @@ func TestGetFeatures(t *testing.T) { features := createFeatures(t) dataFeatures := marshalMessage(t, features) - key := fmt.Sprintf("%s:%s", environmentNamespace, featuresKind) + key := fmt.Sprintf("%s:%s", environmentId, featuresKind) patterns := []struct { desc string @@ -73,7 +73,7 @@ func TestGetFeatures(t *testing.T) { t.Run(p.desc, func(t *testing.T) { tf := newFeaturesCache(t, mockController) p.setup(tf) - features, err := tf.Get(environmentNamespace) + features, err := tf.Get(environmentId) if err == nil { assert.Equal(t, features.Features[0].Id, features.Features[0].Id) assert.Equal(t, features.Features[0].Name, features.Features[0].Name) @@ -90,7 +90,7 @@ func TestPutFeatures(t *testing.T) { features := createFeatures(t) dataFeatures := marshalMessage(t, features) - key := fmt.Sprintf("%s:%s", environmentNamespace, featuresKind) + key := fmt.Sprintf("%s:%s", environmentId, featuresKind) patterns := []struct { desc string @@ -119,7 +119,7 @@ func TestPutFeatures(t *testing.T) { if p.setup != nil { p.setup(tf) } - err := tf.Put(p.input, environmentNamespace) + err := tf.Put(p.input, environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/cache/v3/mock/autoops.go b/pkg/cache/v3/mock/autoops.go index 075adf5863..e3de064823 100644 --- a/pkg/cache/v3/mock/autoops.go +++ b/pkg/cache/v3/mock/autoops.go @@ -41,30 +41,30 @@ func (m *MockAutoOpsRulesCache) EXPECT() *MockAutoOpsRulesCacheMockRecorder { } // Get mocks base method. -func (m *MockAutoOpsRulesCache) Get(environmentNamespace string) (*autoops.AutoOpsRules, error) { +func (m *MockAutoOpsRulesCache) Get(environmentId string) (*autoops.AutoOpsRules, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", environmentNamespace) + ret := m.ctrl.Call(m, "Get", environmentId) ret0, _ := ret[0].(*autoops.AutoOpsRules) ret1, _ := ret[1].(error) return ret0, ret1 } // Get indicates an expected call of Get. -func (mr *MockAutoOpsRulesCacheMockRecorder) Get(environmentNamespace any) *gomock.Call { +func (mr *MockAutoOpsRulesCacheMockRecorder) Get(environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockAutoOpsRulesCache)(nil).Get), environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockAutoOpsRulesCache)(nil).Get), environmentId) } // Put mocks base method. -func (m *MockAutoOpsRulesCache) Put(autoOps *autoops.AutoOpsRules, environmentNamespace string) error { +func (m *MockAutoOpsRulesCache) Put(autoOps *autoops.AutoOpsRules, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Put", autoOps, environmentNamespace) + ret := m.ctrl.Call(m, "Put", autoOps, environmentId) ret0, _ := ret[0].(error) return ret0 } // Put indicates an expected call of Put. -func (mr *MockAutoOpsRulesCacheMockRecorder) Put(autoOps, environmentNamespace any) *gomock.Call { +func (mr *MockAutoOpsRulesCacheMockRecorder) Put(autoOps, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockAutoOpsRulesCache)(nil).Put), autoOps, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockAutoOpsRulesCache)(nil).Put), autoOps, environmentId) } diff --git a/pkg/cache/v3/mock/experiments.go b/pkg/cache/v3/mock/experiments.go index 513dfebe0a..537c14b2bc 100644 --- a/pkg/cache/v3/mock/experiments.go +++ b/pkg/cache/v3/mock/experiments.go @@ -41,30 +41,30 @@ func (m *MockExperimentsCache) EXPECT() *MockExperimentsCacheMockRecorder { } // Get mocks base method. -func (m *MockExperimentsCache) Get(environmentNamespace string) (*experiment.Experiments, error) { +func (m *MockExperimentsCache) Get(environmentId string) (*experiment.Experiments, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", environmentNamespace) + ret := m.ctrl.Call(m, "Get", environmentId) ret0, _ := ret[0].(*experiment.Experiments) ret1, _ := ret[1].(error) return ret0, ret1 } // Get indicates an expected call of Get. -func (mr *MockExperimentsCacheMockRecorder) Get(environmentNamespace any) *gomock.Call { +func (mr *MockExperimentsCacheMockRecorder) Get(environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockExperimentsCache)(nil).Get), environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockExperimentsCache)(nil).Get), environmentId) } // Put mocks base method. -func (m *MockExperimentsCache) Put(experiments *experiment.Experiments, environmentNamespace string) error { +func (m *MockExperimentsCache) Put(experiments *experiment.Experiments, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Put", experiments, environmentNamespace) + ret := m.ctrl.Call(m, "Put", experiments, environmentId) ret0, _ := ret[0].(error) return ret0 } // Put indicates an expected call of Put. -func (mr *MockExperimentsCacheMockRecorder) Put(experiments, environmentNamespace any) *gomock.Call { +func (mr *MockExperimentsCacheMockRecorder) Put(experiments, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockExperimentsCache)(nil).Put), experiments, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockExperimentsCache)(nil).Put), experiments, environmentId) } diff --git a/pkg/cache/v3/mock/features.go b/pkg/cache/v3/mock/features.go index 9400b0d1e6..87ea78a315 100644 --- a/pkg/cache/v3/mock/features.go +++ b/pkg/cache/v3/mock/features.go @@ -41,30 +41,30 @@ func (m *MockFeaturesCache) EXPECT() *MockFeaturesCacheMockRecorder { } // Get mocks base method. -func (m *MockFeaturesCache) Get(environmentNamespace string) (*feature.Features, error) { +func (m *MockFeaturesCache) Get(environmentId string) (*feature.Features, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", environmentNamespace) + ret := m.ctrl.Call(m, "Get", environmentId) ret0, _ := ret[0].(*feature.Features) ret1, _ := ret[1].(error) return ret0, ret1 } // Get indicates an expected call of Get. -func (mr *MockFeaturesCacheMockRecorder) Get(environmentNamespace any) *gomock.Call { +func (mr *MockFeaturesCacheMockRecorder) Get(environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockFeaturesCache)(nil).Get), environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockFeaturesCache)(nil).Get), environmentId) } // Put mocks base method. -func (m *MockFeaturesCache) Put(features *feature.Features, environmentNamespace string) error { +func (m *MockFeaturesCache) Put(features *feature.Features, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Put", features, environmentNamespace) + ret := m.ctrl.Call(m, "Put", features, environmentId) ret0, _ := ret[0].(error) return ret0 } // Put indicates an expected call of Put. -func (mr *MockFeaturesCacheMockRecorder) Put(features, environmentNamespace any) *gomock.Call { +func (mr *MockFeaturesCacheMockRecorder) Put(features, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockFeaturesCache)(nil).Put), features, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockFeaturesCache)(nil).Put), features, environmentId) } diff --git a/pkg/cache/v3/mock/segment_users.go b/pkg/cache/v3/mock/segment_users.go index 2e44bfa403..6be92cb3d2 100644 --- a/pkg/cache/v3/mock/segment_users.go +++ b/pkg/cache/v3/mock/segment_users.go @@ -41,45 +41,45 @@ func (m *MockSegmentUsersCache) EXPECT() *MockSegmentUsersCacheMockRecorder { } // Get mocks base method. -func (m *MockSegmentUsersCache) Get(segmentID, environmentNamespace string) (*feature.SegmentUsers, error) { +func (m *MockSegmentUsersCache) Get(segmentID, environmentId string) (*feature.SegmentUsers, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", segmentID, environmentNamespace) + ret := m.ctrl.Call(m, "Get", segmentID, environmentId) ret0, _ := ret[0].(*feature.SegmentUsers) ret1, _ := ret[1].(error) return ret0, ret1 } // Get indicates an expected call of Get. -func (mr *MockSegmentUsersCacheMockRecorder) Get(segmentID, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentUsersCacheMockRecorder) Get(segmentID, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockSegmentUsersCache)(nil).Get), segmentID, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockSegmentUsersCache)(nil).Get), segmentID, environmentId) } // GetAll mocks base method. -func (m *MockSegmentUsersCache) GetAll(environmentNamespace string) ([]*feature.SegmentUsers, error) { +func (m *MockSegmentUsersCache) GetAll(environmentId string) ([]*feature.SegmentUsers, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAll", environmentNamespace) + ret := m.ctrl.Call(m, "GetAll", environmentId) ret0, _ := ret[0].([]*feature.SegmentUsers) ret1, _ := ret[1].(error) return ret0, ret1 } // GetAll indicates an expected call of GetAll. -func (mr *MockSegmentUsersCacheMockRecorder) GetAll(environmentNamespace any) *gomock.Call { +func (mr *MockSegmentUsersCacheMockRecorder) GetAll(environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockSegmentUsersCache)(nil).GetAll), environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockSegmentUsersCache)(nil).GetAll), environmentId) } // Put mocks base method. -func (m *MockSegmentUsersCache) Put(segmentUsers *feature.SegmentUsers, environmentNamespace string) error { +func (m *MockSegmentUsersCache) Put(segmentUsers *feature.SegmentUsers, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Put", segmentUsers, environmentNamespace) + ret := m.ctrl.Call(m, "Put", segmentUsers, environmentId) ret0, _ := ret[0].(error) return ret0 } // Put indicates an expected call of Put. -func (mr *MockSegmentUsersCacheMockRecorder) Put(segmentUsers, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentUsersCacheMockRecorder) Put(segmentUsers, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockSegmentUsersCache)(nil).Put), segmentUsers, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Put", reflect.TypeOf((*MockSegmentUsersCache)(nil).Put), segmentUsers, environmentId) } diff --git a/pkg/cache/v3/segment_users.go b/pkg/cache/v3/segment_users.go index 7d041b25e9..5433a11f01 100644 --- a/pkg/cache/v3/segment_users.go +++ b/pkg/cache/v3/segment_users.go @@ -31,9 +31,9 @@ const ( ) type SegmentUsersCache interface { - Get(segmentID, environmentNamespace string) (*featureproto.SegmentUsers, error) - GetAll(environmentNamespace string) ([]*featureproto.SegmentUsers, error) - Put(segmentUsers *featureproto.SegmentUsers, environmentNamespace string) error + Get(segmentID, environmentId string) (*featureproto.SegmentUsers, error) + GetAll(environmentId string) ([]*featureproto.SegmentUsers, error) + Put(segmentUsers *featureproto.SegmentUsers, environmentId string) error } type segmentUsersCache struct { @@ -44,8 +44,8 @@ func NewSegmentUsersCache(c cache.MultiGetCache) SegmentUsersCache { return &segmentUsersCache{cache: c} } -func (c *segmentUsersCache) Get(segmentID, environmentNamespace string) (*featureproto.SegmentUsers, error) { - key := c.key(segmentID, environmentNamespace) +func (c *segmentUsersCache) Get(segmentID, environmentId string) (*featureproto.SegmentUsers, error) { + key := c.key(segmentID, environmentId) value, err := c.cache.Get(key) if err != nil { return nil, err @@ -62,8 +62,8 @@ func (c *segmentUsersCache) Get(segmentID, environmentNamespace string) (*featur return segmentUsers, nil } -func (c *segmentUsersCache) GetAll(environmentNamespace string) ([]*featureproto.SegmentUsers, error) { - keys, err := c.scan(environmentNamespace) +func (c *segmentUsersCache) GetAll(environmentId string) ([]*featureproto.SegmentUsers, error) { + keys, err := c.scan(environmentId) if err != nil { return nil, err } @@ -87,17 +87,17 @@ func (c *segmentUsersCache) GetAll(environmentNamespace string) ([]*featureproto return segmentUsers, nil } -func (c *segmentUsersCache) Put(segmentUsers *featureproto.SegmentUsers, environmentNamespace string) error { +func (c *segmentUsersCache) Put(segmentUsers *featureproto.SegmentUsers, environmentId string) error { buffer, err := proto.Marshal(segmentUsers) if err != nil { return err } - key := c.key(segmentUsers.SegmentId, environmentNamespace) + key := c.key(segmentUsers.SegmentId, environmentId) return c.cache.Put(key, buffer, segmentUsersTTL) } -func (c *segmentUsersCache) scan(environmentNamespace string) ([]string, error) { - keyPrefix := cache.MakeKeyPrefix(segmentUsersKind, environmentNamespace) +func (c *segmentUsersCache) scan(environmentId string) ([]string, error) { + keyPrefix := cache.MakeKeyPrefix(segmentUsersKind, environmentId) key := keyPrefix + "*" var cursor uint64 var k []string @@ -119,6 +119,6 @@ func (c *segmentUsersCache) scan(environmentNamespace string) ([]string, error) return keys, nil } -func (c *segmentUsersCache) key(segmentID, environmentNamespace string) string { - return cache.MakeKey(segmentUsersKind, segmentID, environmentNamespace) +func (c *segmentUsersCache) key(segmentID, environmentId string) string { + return cache.MakeKey(segmentUsersKind, segmentID, environmentId) } diff --git a/pkg/cache/v3/segment_users_test.go b/pkg/cache/v3/segment_users_test.go index c80ce29bb2..808fad1bf6 100644 --- a/pkg/cache/v3/segment_users_test.go +++ b/pkg/cache/v3/segment_users_test.go @@ -38,7 +38,7 @@ func TestGetSegmentUser(t *testing.T) { segmentUsers := createSegmentUsersCache(t) dataSegmentUsers := marshalMessage(t, segmentUsers) - key := cache.MakeKey(segmentUsersKind, segmentID, environmentNamespace) + key := cache.MakeKey(segmentUsersKind, segmentID, environmentId) patterns := []struct { desc string @@ -71,7 +71,7 @@ func TestGetSegmentUser(t *testing.T) { t.Run(p.desc, func(t *testing.T) { sc := newSegmentUsersCache(t, mockController) p.setup(sc) - cache, err := sc.Get(segmentID, environmentNamespace) + cache, err := sc.Get(segmentID, environmentId) if err == nil { assert.Equal(t, segmentUsers.SegmentId, cache.SegmentId) assert.Equal(t, segmentUsers.Users[0].Id, cache.Users[0].Id) @@ -93,11 +93,11 @@ func TestGetAllSegmentUser(t *testing.T) { segmentUsers := createSegmentUsersCache(t) dataSegmentUsers := marshalMessage(t, segmentUsers) keys := []string{ - fmt.Sprintf("%s:%s:segment-id-1", environmentNamespace, segmentUsersKind), - fmt.Sprintf("%s:%s:segment-id-2", environmentNamespace, segmentUsersKind), + fmt.Sprintf("%s:%s:segment-id-1", environmentId, segmentUsersKind), + fmt.Sprintf("%s:%s:segment-id-2", environmentId, segmentUsersKind), } - keyPrefix := cache.MakeKeyPrefix(segmentUsersKind, environmentNamespace) + keyPrefix := cache.MakeKeyPrefix(segmentUsersKind, environmentId) key := keyPrefix + "*" var cursor uint64 @@ -146,7 +146,7 @@ func TestGetAllSegmentUser(t *testing.T) { t.Run(p.desc, func(t *testing.T) { sc := newSegmentUsersCache(t, mockController) p.setup(sc) - allUsers, err := sc.GetAll(environmentNamespace) + allUsers, err := sc.GetAll(environmentId) if err == nil { users := allUsers[0] assert.Equal(t, segmentUsers.SegmentId, users.SegmentId) @@ -170,7 +170,7 @@ func TestPutSegmentUser(t *testing.T) { segmentUsers := createSegmentUsersCache(t) dataSegmentUsers := marshalMessage(t, segmentUsers) - key := cache.MakeKey(segmentUsersKind, segmentID, environmentNamespace) + key := cache.MakeKey(segmentUsersKind, segmentID, environmentId) patterns := []struct { desc string @@ -199,7 +199,7 @@ func TestPutSegmentUser(t *testing.T) { if p.setup != nil { p.setup(sc) } - err := sc.Put(p.input, environmentNamespace) + err := sc.Put(p.input, environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/domainevent/domain/event.go b/pkg/domainevent/domain/event.go index 185f7a8532..c99b86e304 100644 --- a/pkg/domainevent/domain/event.go +++ b/pkg/domainevent/domain/event.go @@ -46,13 +46,13 @@ func NewEvent( entityID string, eventType domain.Event_Type, event pb.Message, - environmentNamespace string, + environmentID string, entityData, previousEntityData interface{}, opts ...Option, ) (*domain.Event, error) { return newEvent( editor, entityType, entityID, eventType, event, - environmentNamespace, false, entityData, previousEntityData, opts...) + environmentID, false, entityData, previousEntityData, opts...) } func NewAdminEvent( @@ -66,7 +66,7 @@ func NewAdminEvent( ) (*domain.Event, error) { return newEvent( editor, entityType, entityID, eventType, event, - storage.AdminEnvironmentNamespace, true, entityData, previousEntityData, opts...) + storage.AdminEnvironmentID, true, entityData, previousEntityData, opts...) } func newEvent( @@ -75,7 +75,7 @@ func newEvent( entityID string, eventType domain.Event_Type, event pb.Message, - environmentNamespace string, + environmentID string, isAdminEvent bool, entity, previousEntity interface{}, opts ...Option, @@ -109,17 +109,17 @@ func newEvent( } } return &domain.Event{ - Id: id.String(), - Timestamp: time.Now().Unix(), - EntityType: entityType, - EntityId: entityID, - Type: eventType, - Editor: editor, - Data: buf, - EnvironmentNamespace: environmentNamespace, - IsAdminEvent: isAdminEvent, - EntityData: string(entityData), - PreviousEntityData: string(prevEntityData), - Options: &options, + Id: id.String(), + Timestamp: time.Now().Unix(), + EntityType: entityType, + EntityId: entityID, + Type: eventType, + Editor: editor, + Data: buf, + EnvironmentId: environmentID, + IsAdminEvent: isAdminEvent, + EntityData: string(entityData), + PreviousEntityData: string(prevEntityData), + Options: &options, }, nil } diff --git a/pkg/environment/storage/v2/sql/environment/select_environments.sql b/pkg/environment/storage/v2/sql/environment/select_environments.sql index 332dae59e2..0aaffa18e9 100644 --- a/pkg/environment/storage/v2/sql/environment/select_environments.sql +++ b/pkg/environment/storage/v2/sql/environment/select_environments.sql @@ -4,7 +4,7 @@ SELECT FROM environment_v2 LEFT JOIN - feature ON environment_v2.id = feature.environment_namespace + feature ON environment_v2.id = feature.environment_id %s GROUP BY environment_v2.id diff --git a/pkg/environment/storage/v2/sql/project/select_projects.sql b/pkg/environment/storage/v2/sql/project/select_projects.sql index 399054da8f..1f9e193f7c 100644 --- a/pkg/environment/storage/v2/sql/project/select_projects.sql +++ b/pkg/environment/storage/v2/sql/project/select_projects.sql @@ -7,7 +7,7 @@ FROM LEFT JOIN environment_v2 ON project.id = environment_v2.project_id LEFT JOIN - feature ON environment_v2.id = feature.environment_namespace + feature ON environment_v2.id = feature.environment_id %s GROUP BY project.id diff --git a/pkg/eventcounter/api/api.go b/pkg/eventcounter/api/api.go index d1f15307d1..0379a8e519 100644 --- a/pkg/eventcounter/api/api.go +++ b/pkg/eventcounter/api/api.go @@ -118,7 +118,7 @@ func (s *eventCounterService) GetExperimentEvaluationCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -129,7 +129,7 @@ func (s *eventCounterService) GetExperimentEvaluationCount( endAt := time.Unix(req.EndAt, 0) evaluationCounts, err := s.eventStorage.QueryEvaluationCount( ctx, - req.EnvironmentNamespace, + req.EnvironmentId, startAt, endAt, req.FeatureId, @@ -140,7 +140,7 @@ func (s *eventCounterService) GetExperimentEvaluationCount( "Failed to query experiment evaluation counts", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.Time("startAt", startAt), zap.Time("endAt", endAt), zap.String("featureId", req.FeatureId), @@ -244,7 +244,7 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -252,15 +252,15 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( return nil, err } resp, err := s.featureClient.GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: req.EnvironmentNamespace, - Id: req.FeatureId, + EnvironmentId: req.EnvironmentId, + Id: req.FeatureId, }) if err != nil { s.logger.Error( "Failed to get feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("featureId", req.FeatureId), )..., ) @@ -292,13 +292,13 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( for _, vID := range vIDs { eventCountKeys := s.getEventCountKeys( hourlyTimeStamps, - req.EnvironmentNamespace, + req.EnvironmentId, req.FeatureId, vID, ) userCountKeys := s.getUserCountKeys( hourlyTimeStamps, - req.EnvironmentNamespace, + req.EnvironmentId, req.FeatureId, vID, ) @@ -307,7 +307,7 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( s.logCountError( ctx, err, - "Failed to get event counts", req.EnvironmentNamespace, req.FeatureId, vID, + "Failed to get event counts", req.EnvironmentId, req.FeatureId, vID, resp.Feature.Version, timestampUnit, req.TimeRange, ) @@ -324,14 +324,14 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( userCounts, err := s.getUserCounts( userCountKeys, req.FeatureId, - req.EnvironmentNamespace, + req.EnvironmentId, timestampUnit, ) if err != nil { s.logCountError( ctx, err, - "Failed to get user counts", req.EnvironmentNamespace, req.FeatureId, vID, + "Failed to get user counts", req.EnvironmentId, req.FeatureId, vID, resp.Feature.Version, timestampUnit, req.TimeRange, ) @@ -347,13 +347,13 @@ func (s *eventCounterService) GetEvaluationTimeseriesCount( totalUserCounts, err := s.getTotalUserCounts( userCountKeys, req.FeatureId, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { s.logCountError( ctx, err, - "Failed to get user counts", req.EnvironmentNamespace, req.FeatureId, vID, + "Failed to get user counts", req.EnvironmentId, req.FeatureId, vID, resp.Feature.Version, timestampUnit, req.TimeRange, ) @@ -453,18 +453,18 @@ func (s *eventCounterService) getTotalEventCounts( func (s *eventCounterService) getUserCounts( keys [][]string, - featureID, environmentNamespace string, + featureID, environmentId string, unit ecproto.Timeseries_Unit, ) ([]float64, error) { if unit == ecproto.Timeseries_HOUR { - return s.getHourlyUserCounts(keys, featureID, environmentNamespace) + return s.getHourlyUserCounts(keys, featureID, environmentId) } - return s.getDailyUserCounts(keys, featureID, environmentNamespace) + return s.getDailyUserCounts(keys, featureID, environmentId) } func (s *eventCounterService) getHourlyUserCounts( days [][]string, - featureID, environmentNamespace string, + featureID, environmentId string, ) ([]float64, error) { hours := days[0] counts := make([]float64, 0, len(hours)) @@ -480,13 +480,13 @@ func (s *eventCounterService) getHourlyUserCounts( func (s *eventCounterService) getDailyUserCounts( days [][]string, - featureID, environmentNamespace string, + featureID, environmentId string, ) ([]float64, error) { counts := make([]float64, 0, len(days)) for _, day := range days { c, err := s.countUniqueUser( day, - featureID, environmentNamespace, + featureID, environmentId, ) if err != nil { return nil, err @@ -508,12 +508,12 @@ func (s *eventCounterService) flattenAry( func (s *eventCounterService) getTotalUserCounts( userCountKeys [][]string, - featureID, environmentNamespace string, + featureID, environmentId string, ) (int64, error) { flat := s.flattenAry(userCountKeys) count, err := s.countUniqueUser( flat, - featureID, environmentNamespace, + featureID, environmentId, ) if err != nil { return 0, err @@ -523,12 +523,12 @@ func (s *eventCounterService) getTotalUserCounts( func (s *eventCounterService) countUniqueUser( userCountKeys []string, - featureID, environmentNamespace string, + featureID, environmentId string, ) (count float64, err multiError) { key := newPFMergeKey( UserCountPrefix, featureID, - environmentNamespace, + environmentId, ) // We need to count the number of unique users in the target term. if e := s.evaluationCountCacher.MergeMultiKeys(key, userCountKeys); e != nil { @@ -551,7 +551,7 @@ func (s *eventCounterService) countUniqueUser( func (*eventCounterService) getEventCountKeys( hourlyTimeStamps [][]int64, - environmentNamespace string, + environmentId string, featureID string, vID string, ) [][]string { @@ -559,7 +559,7 @@ func (*eventCounterService) getEventCountKeys( for _, twentyFourHours := range hourlyTimeStamps { ecHourlyKeys := make([]string, 0, len(twentyFourHours)) for _, hour := range twentyFourHours { - ec := newEvaluationCountkey(EventCountPrefix, featureID, vID, environmentNamespace, hour) + ec := newEvaluationCountkey(EventCountPrefix, featureID, vID, environmentId, hour) ecHourlyKeys = append(ecHourlyKeys, ec) } eventCountKeys = append(eventCountKeys, ecHourlyKeys) @@ -569,7 +569,7 @@ func (*eventCounterService) getEventCountKeys( func (*eventCounterService) getUserCountKeys( hourlyTimeStamps [][]int64, - environmentNamespace string, + environmentId string, featureID string, vID string, ) [][]string { @@ -577,7 +577,7 @@ func (*eventCounterService) getUserCountKeys( for _, twentyFourHours := range hourlyTimeStamps { ucHourlyKeys := make([]string, 0, len(twentyFourHours)) for _, hour := range twentyFourHours { - uc := newEvaluationCountkey(UserCountPrefix, featureID, vID, environmentNamespace, hour) + uc := newEvaluationCountkey(UserCountPrefix, featureID, vID, environmentId, hour) ucHourlyKeys = append(ucHourlyKeys, uc) } userCountKeys = append(userCountKeys, ucHourlyKeys) @@ -588,7 +588,7 @@ func (*eventCounterService) getUserCountKeys( func (s *eventCounterService) logCountError( ctx context.Context, err error, - msg, environmentNamespace, featureID, vID string, + msg, environmentId, featureID, vID string, featureVersion int32, unit ecproto.Timeseries_Unit, timeRange ecproto.GetEvaluationTimeseriesCountRequest_TimeRange, @@ -597,7 +597,7 @@ func (s *eventCounterService) logCountError( msg, log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("unit", unit.String()), zap.String("timeRange", timeRange.String()), zap.String("featureId", featureID), @@ -608,12 +608,12 @@ func (s *eventCounterService) logCountError( } func newPFMergeKey( - kind, featureID, environmentNamespace string, + kind, featureID, environmentId string, ) string { return cache.MakeKey( kind, fmt.Sprintf("%s:%s", pfMergeKey, featureID), - environmentNamespace, + environmentId, ) } @@ -630,13 +630,13 @@ func getStartTime(loc *time.Location, endAt time.Time, durationDays int) time.Ti } func newEvaluationCountkey( - kind, featureID, variationID, environmentNamespace string, + kind, featureID, variationID, environmentId string, ts int64, ) string { return cache.MakeKey( kind, fmt.Sprintf("%d:%s:%s", ts, featureID, variationID), - environmentNamespace, + environmentId, ) } @@ -724,7 +724,7 @@ func (s *eventCounterService) GetExperimentResult( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -738,7 +738,7 @@ func (s *eventCounterService) GetExperimentResult( } return nil, dt.Err() } - result, err := s.mysqlExperimentResultStorage.GetExperimentResult(ctx, req.ExperimentId, req.EnvironmentNamespace) + result, err := s.mysqlExperimentResultStorage.GetExperimentResult(ctx, req.ExperimentId, req.EnvironmentId) if err != nil { if err == v2ecstorage.ErrExperimentResultNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -754,7 +754,7 @@ func (s *eventCounterService) GetExperimentResult( "Failed to get experiment result", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("experimentId", req.ExperimentId), )..., ) @@ -779,7 +779,7 @@ func (s *eventCounterService) ListExperimentResults( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -793,7 +793,7 @@ func (s *eventCounterService) ListExperimentResults( } return nil, dt.Err() } - experiments, err := s.listExperiments(ctx, req.FeatureId, req.FeatureVersion, req.EnvironmentNamespace) + experiments, err := s.listExperiments(ctx, req.FeatureId, req.FeatureVersion, req.EnvironmentId) if err != nil { if err == storage.ErrKeyNotFound { listExperimentCountsCounter.WithLabelValues(codeSuccess).Inc() @@ -810,7 +810,7 @@ func (s *eventCounterService) ListExperimentResults( "Failed to get Experiment list", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("featureID", req.FeatureId), zap.Int32("featureVersion", req.FeatureVersion.Value), )..., @@ -827,7 +827,7 @@ func (s *eventCounterService) ListExperimentResults( } results := make(map[string]*ecproto.ExperimentResult, len(experiments)) for _, e := range experiments { - er, err := s.getExperimentResultMySQL(ctx, e.Id, req.EnvironmentNamespace) + er, err := s.getExperimentResultMySQL(ctx, e.Id, req.EnvironmentId) if err != nil { if err == v2ecstorage.ErrExperimentResultNotFound { getExperimentCountsCounter.WithLabelValues(codeSuccess).Inc() @@ -836,7 +836,7 @@ func (s *eventCounterService) ListExperimentResults( "Failed to get Experiment result", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("experimentID", e.Id), )..., ) @@ -855,17 +855,17 @@ func (s *eventCounterService) listExperiments( ctx context.Context, featureID string, featureVersion *wrappers.Int32Value, - environmentNamespace string, + environmentId string, ) ([]*experimentproto.Experiment, error) { experiments := []*experimentproto.Experiment{} cursor := "" for { resp, err := s.experimentClient.ListExperiments(ctx, &experimentproto.ListExperimentsRequest{ - FeatureId: featureID, - FeatureVersion: featureVersion, - PageSize: listRequestPageSize, - Cursor: cursor, - EnvironmentNamespace: environmentNamespace, + FeatureId: featureID, + FeatureVersion: featureVersion, + PageSize: listRequestPageSize, + Cursor: cursor, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -886,7 +886,7 @@ func (s *eventCounterService) GetExperimentGoalCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -897,7 +897,7 @@ func (s *eventCounterService) GetExperimentGoalCount( endAt := time.Unix(req.EndAt, 0) goalCounts, err := s.eventStorage.QueryGoalCount( ctx, - req.EnvironmentNamespace, + req.EnvironmentId, startAt, endAt, req.GoalId, @@ -909,7 +909,7 @@ func (s *eventCounterService) GetExperimentGoalCount( "Failed to query experiment goal counts", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.Time("startAt", startAt), zap.Time("endAt", endAt), zap.String("featureId", req.FeatureId), @@ -1025,7 +1025,7 @@ func (s *eventCounterService) GetMAUCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1039,13 +1039,13 @@ func (s *eventCounterService) GetMAUCount( } return nil, dt.Err() } - userCount, eventCount, err := s.userCountStorage.GetMAUCount(ctx, req.EnvironmentNamespace, req.YearMonth) + userCount, eventCount, err := s.userCountStorage.GetMAUCount(ctx, req.EnvironmentId, req.YearMonth) if err != nil { s.logger.Error( "Failed to get the mau count", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("yearMonth", req.YearMonth), )..., ) @@ -1146,9 +1146,9 @@ func (s *eventCounterService) SummarizeMAUCounts( func (s *eventCounterService) getExperimentResultMySQL( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*ecproto.ExperimentResult, error) { - result, err := s.mysqlExperimentResultStorage.GetExperimentResult(ctx, id, environmentNamespace) + result, err := s.mysqlExperimentResultStorage.GetExperimentResult(ctx, id, environmentId) if err != nil { if err == v2ecstorage.ErrExperimentResultNotFound { return nil, err @@ -1157,7 +1157,7 @@ func (s *eventCounterService) getExperimentResultMySQL( "Failed to get experiment count", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return nil, err @@ -1172,7 +1172,7 @@ func (s *eventCounterService) GetOpsEvaluationUserCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1186,7 +1186,7 @@ func (s *eventCounterService) GetOpsEvaluationUserCount( req.FeatureId, int(req.FeatureVersion), req.VariationId, - req.EnvironmentNamespace, + req.EnvironmentId, ) userCount, err := s.evaluationCountCacher.GetUserCount(cacheKey) if err != nil { @@ -1194,7 +1194,7 @@ func (s *eventCounterService) GetOpsEvaluationUserCount( "Failed to get ops evaluation user count", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("opsRuleId", req.OpsRuleId), zap.String("clauseId", req.ClauseId), zap.String("featureId", req.FeatureId), @@ -1278,12 +1278,12 @@ func validateGetOpsEvaluationUserCountRequest( func newOpsEvaluationUserCountKey( kind, opsRuleID, clauseID, featureID string, featureVersion int, - variationID, environmentNamespace string, + variationID, environmentId string, ) string { return cache.MakeKey( kind, fmt.Sprintf("%s:%d:%s:%s:%s", featureID, featureVersion, opsRuleID, clauseID, variationID), - environmentNamespace, + environmentId, ) } @@ -1294,7 +1294,7 @@ func (s *eventCounterService) GetOpsGoalUserCount( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1308,7 +1308,7 @@ func (s *eventCounterService) GetOpsGoalUserCount( req.FeatureId, int(req.FeatureVersion), req.VariationId, - req.EnvironmentNamespace, + req.EnvironmentId, ) userCount, err := s.evaluationCountCacher.GetUserCount(cacheKey) if err != nil { @@ -1316,7 +1316,7 @@ func (s *eventCounterService) GetOpsGoalUserCount( "Failed to get ops goal user count", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("opsRuleId", req.OpsRuleId), zap.String("clauseId", req.ClauseId), zap.String("featureId", req.FeatureId), @@ -1400,29 +1400,29 @@ func validateGetOpsGoalUserCountRequest( func newOpsGoalUserCountKey( kind, opsRuleID, clauseID, featureID string, featureVersion int, - variationID, environmentNamespace string, + variationID, environmentId string, ) string { return cache.MakeKey( kind, fmt.Sprintf("%s:%d:%s:%s:%s", featureID, featureVersion, opsRuleID, clauseID, variationID), - environmentNamespace, + environmentId, ) } func (s *eventCounterService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -1436,7 +1436,7 @@ func (s *eventCounterService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -1452,7 +1452,7 @@ func (s *eventCounterService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -1468,7 +1468,7 @@ func (s *eventCounterService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/eventcounter/api/api_test.go b/pkg/eventcounter/api/api_test.go index e22f0179b7..9986d5ccaf 100644 --- a/pkg/eventcounter/api/api_test.go +++ b/pkg/eventcounter/api/api_test.go @@ -106,37 +106,37 @@ func TestGetExperimentEvaluationCount(t *testing.T) { { desc: "error: ErrStartAtRequired", input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + FeatureId: fID, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusStartAtRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "start_at")), }, { desc: "error: ErrEndAtRequired", input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - StartAt: correctStartAtUnix, + EnvironmentId: ns, + FeatureId: fID, + StartAt: correctStartAtUnix, }, expectedErr: createError(statusEndAtRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "end_at")), }, { desc: "error: ErrStartAtIsAfterEndAt", input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - StartAt: now.Unix(), - EndAt: now.Add(-31 * 24 * time.Hour).Unix(), + EnvironmentId: ns, + FeatureId: fID, + StartAt: now.Unix(), + EndAt: now.Add(-31 * 24 * time.Hour).Unix(), }, expectedErr: createError(statusStartAtIsAfterEndAt, localizer.MustLocalizeWithTemplate(locale.StartAtIsAfterEndAt)), }, { desc: "error: ErrFeatureIDRequired", input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, @@ -145,12 +145,12 @@ func TestGetExperimentEvaluationCount(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, - FeatureId: fID, - FeatureVersion: fVersion, - VariationIds: []string{vID1}, + EnvironmentId: ns, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, + FeatureId: fID, + FeatureVersion: fVersion, + VariationIds: []string{vID1}, }, expected: nil, expectedErr: createError(statusPermissionDenied, localizer.MustLocalizeWithTemplate(locale.PermissionDenied)), @@ -172,12 +172,12 @@ func TestGetExperimentEvaluationCount(t *testing.T) { ) }, input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, - FeatureId: fID, - FeatureVersion: fVersion, - VariationIds: []string{vID1}, + EnvironmentId: ns, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, + FeatureId: fID, + FeatureVersion: fVersion, + VariationIds: []string{vID1}, }, expected: &ecproto.GetExperimentEvaluationCountResponse{ FeatureId: fID, @@ -211,12 +211,12 @@ func TestGetExperimentEvaluationCount(t *testing.T) { nil) }, input: &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: ns, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, - FeatureId: fID, - FeatureVersion: fVersion, - VariationIds: []string{vID1, vID2}, + EnvironmentId: ns, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, + FeatureId: fID, + FeatureVersion: fVersion, + VariationIds: []string{vID1, vID2}, }, expected: &ecproto.GetExperimentEvaluationCountResponse{ FeatureId: fID, @@ -256,54 +256,54 @@ func TestListExperiments(t *testing.T) { defer mockController.Finish() patterns := []struct { - desc string - setup func(*eventCounterService) - inputFeatureID string - inputFeatureVersion *wrappers.Int32Value - expected []*experimentproto.Experiment - environmentNamespace string - expectedErr error + desc string + setup func(*eventCounterService) + inputFeatureID string + inputFeatureVersion *wrappers.Int32Value + expected []*experimentproto.Experiment + environmentId string + expectedErr error }{ { desc: "no error", setup: func(s *eventCounterService) { s.experimentClient.(*experimentclientmock.MockClient).EXPECT().ListExperiments(gomock.Any(), &experimentproto.ListExperimentsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - PageSize: listRequestPageSize, - Cursor: "", - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + PageSize: listRequestPageSize, + Cursor: "", + EnvironmentId: "ns0", }).Return(&experimentproto.ListExperimentsResponse{}, nil) }, - inputFeatureID: "fid", - inputFeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - environmentNamespace: "ns0", - expected: []*experimentproto.Experiment{}, - expectedErr: nil, + inputFeatureID: "fid", + inputFeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + environmentId: "ns0", + expected: []*experimentproto.Experiment{}, + expectedErr: nil, }, { desc: "error", setup: func(s *eventCounterService) { s.experimentClient.(*experimentclientmock.MockClient).EXPECT().ListExperiments(gomock.Any(), &experimentproto.ListExperimentsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - PageSize: listRequestPageSize, - Cursor: "", - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + PageSize: listRequestPageSize, + Cursor: "", + EnvironmentId: "ns0", }).Return(nil, errors.New("test")) }, - inputFeatureID: "fid", - inputFeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - environmentNamespace: "ns0", - expected: nil, - expectedErr: errors.New("test"), + inputFeatureID: "fid", + inputFeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + environmentId: "ns0", + expected: nil, + expectedErr: errors.New("test"), }, } for _, p := range patterns { t.Run(p.desc, func(t *testing.T) { s := newEventCounterService(t, mockController, nil, nil, nil) p.setup(s) - actual, err := s.listExperiments(context.Background(), p.inputFeatureID, p.inputFeatureVersion, p.environmentNamespace) + actual, err := s.listExperiments(context.Background(), p.inputFeatureID, p.inputFeatureVersion, p.environmentId) assert.Equal(t, p.expected, actual) assert.Equal(t, p.expectedErr, err) }) @@ -339,7 +339,7 @@ func TestGetExperimentResultMySQL(t *testing.T) { }{ { desc: "error: ErrExperimentIDRequired", - input: &ecproto.GetExperimentResultRequest{EnvironmentNamespace: "ns0"}, + input: &ecproto.GetExperimentResultRequest{EnvironmentId: "ns0"}, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "experiment_id")), }, { @@ -350,8 +350,8 @@ func TestGetExperimentResultMySQL(t *testing.T) { ).Return(nil, v2ecs.ErrExperimentResultNotFound) }, input: &ecproto.GetExperimentResultRequest{ - ExperimentId: "eid", - EnvironmentNamespace: "ns0", + ExperimentId: "eid", + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -360,8 +360,8 @@ func TestGetExperimentResultMySQL(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetExperimentResultRequest{ - ExperimentId: "eid", - EnvironmentNamespace: "ns0", + ExperimentId: "eid", + EnvironmentId: "ns0", }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalizeWithTemplate(locale.PermissionDenied)), }, @@ -375,8 +375,8 @@ func TestGetExperimentResultMySQL(t *testing.T) { ).Return(&domain.ExperimentResult{}, nil) }, input: &ecproto.GetExperimentResultRequest{ - ExperimentId: "eid", - EnvironmentNamespace: "ns0", + ExperimentId: "eid", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -426,7 +426,7 @@ func TestListExperimentResultsMySQL(t *testing.T) { }{ { desc: "error: ErrFeatureIDRequired", - input: &ecproto.ListExperimentResultsRequest{EnvironmentNamespace: "ns0"}, + input: &ecproto.ListExperimentResultsRequest{EnvironmentId: "ns0"}, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, { @@ -437,8 +437,8 @@ func TestListExperimentResultsMySQL(t *testing.T) { ).Return(nil, storage.ErrKeyNotFound) }, input: &ecproto.ListExperimentResultsRequest{ - FeatureId: "fid", - EnvironmentNamespace: "ns0", + FeatureId: "fid", + EnvironmentId: "ns0", }, expected: nil, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), @@ -451,9 +451,9 @@ func TestListExperimentResultsMySQL(t *testing.T) { ).Return(nil, errors.New("test")) }, input: &ecproto.ListExperimentResultsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + EnvironmentId: "ns0", }, expected: nil, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), @@ -463,9 +463,9 @@ func TestListExperimentResultsMySQL(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.ListExperimentResultsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + EnvironmentId: "ns0", }, expected: nil, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), @@ -495,9 +495,9 @@ func TestListExperimentResultsMySQL(t *testing.T) { ).Return(nil, v2ecs.ErrExperimentResultNotFound) }, input: &ecproto.ListExperimentResultsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + EnvironmentId: "ns0", }, expected: &ecproto.ListExperimentResultsResponse{ Results: make(map[string]*ecproto.ExperimentResult, 0), @@ -535,9 +535,9 @@ func TestListExperimentResultsMySQL(t *testing.T) { ) }, input: &ecproto.ListExperimentResultsRequest{ - FeatureId: "fid", - FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, - EnvironmentNamespace: "ns0", + FeatureId: "fid", + FeatureVersion: &wrappers.Int32Value{Value: int32(1)}, + EnvironmentId: "ns0", }, expected: &ecproto.ListExperimentResultsResponse{ Results: map[string]*ecproto.ExperimentResult{ @@ -603,51 +603,51 @@ func TestGetExperimentGoalCount(t *testing.T) { { desc: "error: ErrStartAtRequired", input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - GoalId: gID, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + FeatureId: fID, + GoalId: gID, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusStartAtRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "start_at")), }, { desc: "error: ErrEndAtRequired", input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - GoalId: gID, - StartAt: correctStartAtUnix, + EnvironmentId: ns, + FeatureId: fID, + GoalId: gID, + StartAt: correctStartAtUnix, }, expectedErr: createError(statusEndAtRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "end_at")), }, { desc: "error: ErrStartAtIsAfterEndAt", input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - GoalId: gID, - StartAt: now.Unix(), - EndAt: now.Add(-30 * 24 * time.Hour).Unix(), + EnvironmentId: ns, + FeatureId: fID, + GoalId: gID, + StartAt: now.Unix(), + EndAt: now.Add(-30 * 24 * time.Hour).Unix(), }, expectedErr: createError(statusStartAtIsAfterEndAt, localizer.MustLocalizeWithTemplate(locale.StartAtIsAfterEndAt)), }, { desc: "error: ErrFeatureIDRequired", input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - GoalId: gID, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + GoalId: gID, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, { desc: "error: ErrGoalIDRequired", input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + FeatureId: fID, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, @@ -656,10 +656,10 @@ func TestGetExperimentGoalCount(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - FeatureId: fID, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + FeatureId: fID, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -683,13 +683,13 @@ func TestGetExperimentGoalCount(t *testing.T) { ) }, input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - GoalId: gID, - FeatureId: fID, - FeatureVersion: fVersion, - VariationIds: []string{vID1}, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + GoalId: gID, + FeatureId: fID, + FeatureVersion: fVersion, + VariationIds: []string{vID1}, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expected: &ecproto.GetExperimentGoalCountResponse{ GoalId: gID, @@ -732,13 +732,13 @@ func TestGetExperimentGoalCount(t *testing.T) { ) }, input: &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: ns, - GoalId: gID, - FeatureId: fID, - FeatureVersion: fVersion, - VariationIds: []string{vID1, vID2}, - StartAt: correctStartAtUnix, - EndAt: correctEndAtUnix, + EnvironmentId: ns, + GoalId: gID, + FeatureId: fID, + FeatureVersion: fVersion, + VariationIds: []string{vID1, vID2}, + StartAt: correctStartAtUnix, + EndAt: correctEndAtUnix, }, expected: &ecproto.GetExperimentGoalCountResponse{ GoalId: gID, @@ -795,8 +795,8 @@ func TestGetMAUCount(t *testing.T) { return st.Err() } input := &ecproto.GetMAUCountRequest{ - EnvironmentNamespace: "ns0", - YearMonth: "201212", + EnvironmentId: "ns0", + YearMonth: "201212", } patterns := []struct { desc string @@ -809,7 +809,7 @@ func TestGetMAUCount(t *testing.T) { }{ { desc: "error: mau year month is required", - input: &ecproto.GetMAUCountRequest{EnvironmentNamespace: "ns0"}, + input: &ecproto.GetMAUCountRequest{EnvironmentId: "ns0"}, expected: nil, expectedErr: createError( statusMAUYearMonthRequired, @@ -820,7 +820,7 @@ func TestGetMAUCount(t *testing.T) { desc: "err: internal", setup: func(s *eventCounterService) { s.userCountStorage.(*v2ecsmock.MockUserCountStorage).EXPECT().GetMAUCount( - ctx, input.EnvironmentNamespace, input.YearMonth, + ctx, input.EnvironmentId, input.YearMonth, ).Return(int64(0), int64(0), errors.New("internal")) }, input: input, @@ -841,7 +841,7 @@ func TestGetMAUCount(t *testing.T) { envRole: toPtr(accountproto.AccountV2_Role_Environment_VIEWER), setup: func(s *eventCounterService) { s.userCountStorage.(*v2ecsmock.MockUserCountStorage).EXPECT().GetMAUCount( - ctx, input.EnvironmentNamespace, input.YearMonth, + ctx, input.EnvironmentId, input.YearMonth, ).Return(int64(2), int64(4), nil) }, input: input, @@ -1207,7 +1207,7 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() ctx := createContextWithToken(t, false) - environmentNamespace := "ns0" + environmentId := "ns0" fID := "fid" vID0 := "vid0" vID1 := "vid1" @@ -1237,15 +1237,15 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { { desc: "error: ErrFeatureIDRequired", input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, { desc: "error: ErrUnknownTimeRange", input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: "ns0", - FeatureId: fID, + EnvironmentId: "ns0", + FeatureId: fID, }, expectedErr: createError(statusUnknownTimeRange, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "time_range")), }, @@ -1253,8 +1253,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { desc: "error: get feature failed", setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1264,9 +1264,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { }, errors.New("error")) }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -1274,8 +1274,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { desc: "error: get event counts failed", setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1287,9 +1287,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { nil, errors.New("error")) }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -1297,8 +1297,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { desc: "error: MergeMultiKeys failed", setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1313,9 +1313,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT().MergeMultiKeys(gomock.Any(), gomock.Any()).Return(errors.New("error1")) }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -1323,8 +1323,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { desc: "error: GetUserCountsV2 failed", setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1341,9 +1341,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT().DeleteKey(gomock.Any()).Return(nil) }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -1351,8 +1351,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { desc: "error: DeleteKey failed", setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1369,9 +1369,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT().DeleteKey(gomock.Any()).Return(errors.New("error1")) }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -1380,9 +1380,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expected: nil, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), @@ -1393,8 +1393,8 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { envRole: toPtr(accountproto.AccountV2_Role_Environment_EDITOR), setup: func(ctx context.Context, s *eventCounterService) { s.featureClient.(*featureclientmock.MockClient).EXPECT().GetFeature(ctx, &featureproto.GetFeatureRequest{ - EnvironmentNamespace: environmentNamespace, - Id: fID, + EnvironmentId: environmentId, + Id: fID, }).Return( &featureproto.GetFeatureResponse{ Feature: &featureproto.Feature{ @@ -1405,15 +1405,15 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { vIDs := []string{vID0, vID1, defaultVariationID} hourlyTimeStamps := getFourteenDaysTimestamps() for idx, vID := range vIDs { - ec := getEventCountKeysV2(vID, fID, environmentNamespace, hourlyTimeStamps) + ec := getEventCountKeysV2(vID, fID, environmentId, hourlyTimeStamps) val := randomNumberGroup[idx] s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT().GetEventCountsV2(ec).Return( val, nil) - uc := getUserCountKeysV2(vID, fID, environmentNamespace, hourlyTimeStamps) + uc := getUserCountKeysV2(vID, fID, environmentId, hourlyTimeStamps) pfMergeKey := newPFMergeKey( UserCountPrefix, fID, - environmentNamespace, + environmentId, ) for idx := range hourlyTimeStamps { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT().MergeMultiKeys(pfMergeKey, uc[idx]).Return(nil) @@ -1426,9 +1426,9 @@ func TestGetEvaluationTimeseriesCount(t *testing.T) { } }, input: &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: fID, - TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, + EnvironmentId: environmentId, + FeatureId: fID, + TimeRange: ecproto.GetEvaluationTimeseriesCountRequest_FOURTEEN_DAYS, }, expected: &ecproto.GetEvaluationTimeseriesCountResponse{ EventCounts: []*ecproto.VariationTimeseries{ @@ -1488,7 +1488,7 @@ func TestGetOpsEvaluationUserCount(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() ctx := createContextWithToken(t, false) - environmentNamespace := "ns0" + environmentId := "ns0" opsRuleID := "rule0" clauseID := "clause0" fID := "fid0" @@ -1521,55 +1521,55 @@ func TestGetOpsEvaluationUserCount(t *testing.T) { { desc: "error: ErrOpsRuleIDRequired", input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusAutoOpsRuleIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "ops_rule_id")), }, { desc: "error: ErrClauseIDRequired", input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusClauseIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "clause_id")), }, { desc: "error: ErrFeatureIDRequired", input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, { desc: "error: ErrFeatureVersionRequired", input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + VariationId: vID0, }, expectedErr: createError(statusFeatureVersionRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_version")), }, { desc: "error: ErrVariationIDRequired", input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), }, expectedErr: createError(statusVariationIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "variation_id")), }, @@ -1578,11 +1578,11 @@ func TestGetOpsEvaluationUserCount(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -1595,12 +1595,12 @@ func TestGetOpsEvaluationUserCount(t *testing.T) { GetUserCount(cacheKey).Return(int64(1234), nil) }, input: &ecproto.GetOpsEvaluationUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expected: &ecproto.GetOpsEvaluationUserCountResponse{ OpsRuleId: opsRuleID, @@ -1610,7 +1610,7 @@ func TestGetOpsEvaluationUserCount(t *testing.T) { expectedErr: nil, }, { - desc: "success: without environment_namespace", + desc: "success: without environment_id", envId: toPtr(""), setup: func(s *eventCounterService) { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT(). @@ -1649,7 +1649,7 @@ func TestGetOpsGoalUserCount(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() ctx := createContextWithToken(t, false) - environmentNamespace := "ns0" + environmentId := "ns0" opsRuleID := "rule0" clauseID := "clause0" fID := "fid0" @@ -1682,55 +1682,55 @@ func TestGetOpsGoalUserCount(t *testing.T) { { desc: "error: ErrOpsRuleIDRequired", input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusAutoOpsRuleIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "ops_rule_id")), }, { desc: "error: ErrClauseIDRequired", input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusClauseIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "clause_id")), }, { desc: "error: ErrFeatureIDRequired", input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expectedErr: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, { desc: "error: ErrFeatureVersionRequired", input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + VariationId: vID0, }, expectedErr: createError(statusFeatureVersionRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_version")), }, { desc: "error: ErrVariationIDRequired", input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), }, expectedErr: createError(statusVariationIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "variation_id")), }, @@ -1739,11 +1739,11 @@ func TestGetOpsGoalUserCount(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -1756,12 +1756,12 @@ func TestGetOpsGoalUserCount(t *testing.T) { GetUserCount(cacheKey).Return(int64(1234), nil) }, input: &ecproto.GetOpsGoalUserCountRequest{ - EnvironmentNamespace: environmentNamespace, - OpsRuleId: opsRuleID, - ClauseId: clauseID, - FeatureId: fID, - FeatureVersion: int32(fVersion), - VariationId: vID0, + EnvironmentId: environmentId, + OpsRuleId: opsRuleID, + ClauseId: clauseID, + FeatureId: fID, + FeatureVersion: int32(fVersion), + VariationId: vID0, }, expected: &ecproto.GetOpsGoalUserCountResponse{ OpsRuleId: opsRuleID, @@ -1771,7 +1771,7 @@ func TestGetOpsGoalUserCount(t *testing.T) { expectedErr: nil, }, { - desc: "success: without environment_namespace", + desc: "success: without environment_id", envId: toPtr(""), setup: func(s *eventCounterService) { s.evaluationCountCacher.(*eccachemock.MockEventCounterCache).EXPECT(). @@ -1822,30 +1822,30 @@ func getRandomNumbers() []float64 { return nums } -func getEventCountKeys(vID, fID, environmentNamespace string, timeStamps []int64) []string { +func getEventCountKeys(vID, fID, environmentId string, timeStamps []int64) []string { eventCountKeys := []string{} for _, ts := range timeStamps { - ec := newEvaluationCountkey(EventCountPrefix, fID, vID, environmentNamespace, ts) + ec := newEvaluationCountkey(EventCountPrefix, fID, vID, environmentId, ts) eventCountKeys = append(eventCountKeys, ec) } return eventCountKeys } -func getUserCountKeys(vID, fid, environmentNamespace string, timeStamps []int64) []string { +func getUserCountKeys(vID, fid, environmentId string, timeStamps []int64) []string { userCountKeys := []string{} for _, ts := range timeStamps { - uc := newEvaluationCountkey(UserCountPrefix, fid, vID, environmentNamespace, ts) + uc := newEvaluationCountkey(UserCountPrefix, fid, vID, environmentId, ts) userCountKeys = append(userCountKeys, uc) } return userCountKeys } -func getEventCountKeysV2(vID, fID, environmentNamespace string, timeStamps [][]int64) [][]string { +func getEventCountKeysV2(vID, fID, environmentId string, timeStamps [][]int64) [][]string { eventCountKeys := [][]string{} for _, day := range timeStamps { hourly := []string{} for _, hour := range day { - ec := newEvaluationCountkey(EventCountPrefix, fID, vID, environmentNamespace, hour) + ec := newEvaluationCountkey(EventCountPrefix, fID, vID, environmentId, hour) hourly = append(hourly, ec) } eventCountKeys = append(eventCountKeys, hourly) @@ -1853,12 +1853,12 @@ func getEventCountKeysV2(vID, fID, environmentNamespace string, timeStamps [][]i return eventCountKeys } -func getUserCountKeysV2(vID, fID, environmentNamespace string, timeStamps [][]int64) [][]string { +func getUserCountKeysV2(vID, fID, environmentId string, timeStamps [][]int64) [][]string { userCountKeys := [][]string{} for _, day := range timeStamps { hourly := []string{} for _, hour := range day { - ec := newEvaluationCountkey(UserCountPrefix, fID, vID, environmentNamespace, hour) + ec := newEvaluationCountkey(UserCountPrefix, fID, vID, environmentId, hour) hourly = append(hourly, ec) } userCountKeys = append(userCountKeys, hourly) @@ -1994,10 +1994,10 @@ func TestGetUserCounts(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() featureID := "fID" - environmentNamespace := "en" + environmentId := "en" vID := "vID" - fourteenDaysKeys := getUserCountKeysV2(vID, featureID, environmentNamespace, getFourteenDaysTimestamps()) - twentyFourHoursKeys := getUserCountKeysV2(vID, featureID, environmentNamespace, [][]int64{getTwentyFourHoursTimestamps()}) + fourteenDaysKeys := getUserCountKeysV2(vID, featureID, environmentId, getFourteenDaysTimestamps()) + twentyFourHoursKeys := getUserCountKeysV2(vID, featureID, environmentId, [][]int64{getTwentyFourHoursTimestamps()}) patterns := []struct { desc string unit ecproto.Timeseries_Unit @@ -2038,7 +2038,7 @@ func TestGetUserCounts(t *testing.T) { if p.setup != nil { p.setup(gs) } - actual, _ := gs.getUserCounts(p.keys, featureID, environmentNamespace, p.unit) + actual, _ := gs.getUserCounts(p.keys, featureID, environmentId, p.unit) assert.Len(t, actual, p.expectedLen) }) } diff --git a/pkg/eventcounter/storage/v2/event.go b/pkg/eventcounter/storage/v2/event.go index 934888321a..1a29b7e146 100644 --- a/pkg/eventcounter/storage/v2/event.go +++ b/pkg/eventcounter/storage/v2/event.go @@ -44,14 +44,14 @@ var ( type EventStorage interface { QueryEvaluationCount( ctx context.Context, - environmentNamespace string, + environmentId string, startAt, endAt time.Time, featureID string, featureVersion int32, ) ([]*EvaluationEventCount, error) QueryGoalCount( ctx context.Context, - environmentNamespace string, + environmentId string, startAt, endAt time.Time, goalID, featureID string, featureVersion int32, @@ -89,7 +89,7 @@ func NewEventStorage(querier bqquerier.Client, dataset string, logger *zap.Logge func (es *eventStorage) QueryEvaluationCount( ctx context.Context, - environmentNamespace string, + environmentId string, startAt, endAt time.Time, featureID string, featureVersion int32, @@ -110,8 +110,8 @@ func (es *eventStorage) QueryEvaluationCount( query := fmt.Sprintf(string(q), datasource) params := []bigquery.QueryParameter{ { - Name: "environmentNamespace", - Value: environmentNamespace, + Name: "environmentId", + Value: environmentId, }, { Name: "startAt", @@ -171,7 +171,7 @@ func (es *eventStorage) QueryEvaluationCount( func (es *eventStorage) QueryGoalCount( ctx context.Context, - environmentNamespace string, + environmentId string, startAt, endAt time.Time, goalID, featureID string, featureVersion int32, @@ -192,8 +192,8 @@ func (es *eventStorage) QueryGoalCount( query := fmt.Sprintf(string(q), datasource) params := []bigquery.QueryParameter{ { - Name: "environmentNamespace", - Value: environmentNamespace, + Name: "environmentId", + Value: environmentId, }, { Name: "startAt", diff --git a/pkg/eventcounter/storage/v2/experiment_result.go b/pkg/eventcounter/storage/v2/experiment_result.go index 18fe4a910d..58dae7e32a 100644 --- a/pkg/eventcounter/storage/v2/experiment_result.go +++ b/pkg/eventcounter/storage/v2/experiment_result.go @@ -27,7 +27,7 @@ import ( var ErrExperimentResultNotFound = errors.New("experimentResult: experiment result not found") type ExperimentResultStorage interface { - GetExperimentResult(ctx context.Context, id, environmentNamespace string) (*domain.ExperimentResult, error) + GetExperimentResult(ctx context.Context, id, environmentId string) (*domain.ExperimentResult, error) } type experimentResultStorage struct { @@ -40,7 +40,7 @@ func NewExperimentResultStorage(qe mysql.QueryExecer) ExperimentResultStorage { func (s *experimentResultStorage) GetExperimentResult( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.ExperimentResult, error) { er := proto.ExperimentResult{} er_for_goal_results := proto.ExperimentResult{} @@ -54,13 +54,13 @@ func (s *experimentResultStorage) GetExperimentResult( experiment_result WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, id, - environmentNamespace, + environmentId, ).Scan( &er.Id, &er.ExperimentId, diff --git a/pkg/eventcounter/storage/v2/experiment_result_test.go b/pkg/eventcounter/storage/v2/experiment_result_test.go index c233468912..ea46c46df7 100644 --- a/pkg/eventcounter/storage/v2/experiment_result_test.go +++ b/pkg/eventcounter/storage/v2/experiment_result_test.go @@ -39,11 +39,11 @@ func TestGetExperimentResult(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*experimentResultStorage) - id string - environmentNamespace string - expectedErr error + desc string + setup func(*experimentResultStorage) + id string + environmentId string + expectedErr error }{ { desc: "ErrExperimentResultNotFound", @@ -54,9 +54,9 @@ func TestGetExperimentResult(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: ErrExperimentResultNotFound, + id: "id-0", + environmentId: "ns", + expectedErr: ErrExperimentResultNotFound, }, { desc: "Error", @@ -68,9 +68,9 @@ func TestGetExperimentResult(t *testing.T) { ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: errors.New("error"), + id: "id-0", + environmentId: "ns", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -81,9 +81,9 @@ func TestGetExperimentResult(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: nil, + id: "id-0", + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -92,7 +92,7 @@ func TestGetExperimentResult(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetExperimentResult(context.Background(), p.id, p.environmentNamespace) + _, err := storage.GetExperimentResult(context.Background(), p.id, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/eventcounter/storage/v2/mock/event.go b/pkg/eventcounter/storage/v2/mock/event.go index 1146633635..396be9dfe6 100644 --- a/pkg/eventcounter/storage/v2/mock/event.go +++ b/pkg/eventcounter/storage/v2/mock/event.go @@ -43,31 +43,31 @@ func (m *MockEventStorage) EXPECT() *MockEventStorageMockRecorder { } // QueryEvaluationCount mocks base method. -func (m *MockEventStorage) QueryEvaluationCount(ctx context.Context, environmentNamespace string, startAt, endAt time.Time, featureID string, featureVersion int32) ([]*v2.EvaluationEventCount, error) { +func (m *MockEventStorage) QueryEvaluationCount(ctx context.Context, environmentId string, startAt, endAt time.Time, featureID string, featureVersion int32) ([]*v2.EvaluationEventCount, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryEvaluationCount", ctx, environmentNamespace, startAt, endAt, featureID, featureVersion) + ret := m.ctrl.Call(m, "QueryEvaluationCount", ctx, environmentId, startAt, endAt, featureID, featureVersion) ret0, _ := ret[0].([]*v2.EvaluationEventCount) ret1, _ := ret[1].(error) return ret0, ret1 } // QueryEvaluationCount indicates an expected call of QueryEvaluationCount. -func (mr *MockEventStorageMockRecorder) QueryEvaluationCount(ctx, environmentNamespace, startAt, endAt, featureID, featureVersion any) *gomock.Call { +func (mr *MockEventStorageMockRecorder) QueryEvaluationCount(ctx, environmentId, startAt, endAt, featureID, featureVersion any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryEvaluationCount", reflect.TypeOf((*MockEventStorage)(nil).QueryEvaluationCount), ctx, environmentNamespace, startAt, endAt, featureID, featureVersion) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryEvaluationCount", reflect.TypeOf((*MockEventStorage)(nil).QueryEvaluationCount), ctx, environmentId, startAt, endAt, featureID, featureVersion) } // QueryGoalCount mocks base method. -func (m *MockEventStorage) QueryGoalCount(ctx context.Context, environmentNamespace string, startAt, endAt time.Time, goalID, featureID string, featureVersion int32) ([]*v2.GoalEventCount, error) { +func (m *MockEventStorage) QueryGoalCount(ctx context.Context, environmentId string, startAt, endAt time.Time, goalID, featureID string, featureVersion int32) ([]*v2.GoalEventCount, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryGoalCount", ctx, environmentNamespace, startAt, endAt, goalID, featureID, featureVersion) + ret := m.ctrl.Call(m, "QueryGoalCount", ctx, environmentId, startAt, endAt, goalID, featureID, featureVersion) ret0, _ := ret[0].([]*v2.GoalEventCount) ret1, _ := ret[1].(error) return ret0, ret1 } // QueryGoalCount indicates an expected call of QueryGoalCount. -func (mr *MockEventStorageMockRecorder) QueryGoalCount(ctx, environmentNamespace, startAt, endAt, goalID, featureID, featureVersion any) *gomock.Call { +func (mr *MockEventStorageMockRecorder) QueryGoalCount(ctx, environmentId, startAt, endAt, goalID, featureID, featureVersion any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryGoalCount", reflect.TypeOf((*MockEventStorage)(nil).QueryGoalCount), ctx, environmentNamespace, startAt, endAt, goalID, featureID, featureVersion) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryGoalCount", reflect.TypeOf((*MockEventStorage)(nil).QueryGoalCount), ctx, environmentId, startAt, endAt, goalID, featureID, featureVersion) } diff --git a/pkg/eventcounter/storage/v2/mock/experiment_result.go b/pkg/eventcounter/storage/v2/mock/experiment_result.go index 48122fde54..0376b7a658 100644 --- a/pkg/eventcounter/storage/v2/mock/experiment_result.go +++ b/pkg/eventcounter/storage/v2/mock/experiment_result.go @@ -42,16 +42,16 @@ func (m *MockExperimentResultStorage) EXPECT() *MockExperimentResultStorageMockR } // GetExperimentResult mocks base method. -func (m *MockExperimentResultStorage) GetExperimentResult(ctx context.Context, id, environmentNamespace string) (*domain.ExperimentResult, error) { +func (m *MockExperimentResultStorage) GetExperimentResult(ctx context.Context, id, environmentId string) (*domain.ExperimentResult, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetExperimentResult", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetExperimentResult", ctx, id, environmentId) ret0, _ := ret[0].(*domain.ExperimentResult) ret1, _ := ret[1].(error) return ret0, ret1 } // GetExperimentResult indicates an expected call of GetExperimentResult. -func (mr *MockExperimentResultStorageMockRecorder) GetExperimentResult(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockExperimentResultStorageMockRecorder) GetExperimentResult(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExperimentResult", reflect.TypeOf((*MockExperimentResultStorage)(nil).GetExperimentResult), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExperimentResult", reflect.TypeOf((*MockExperimentResultStorage)(nil).GetExperimentResult), ctx, id, environmentId) } diff --git a/pkg/eventcounter/storage/v2/mock/user_count.go b/pkg/eventcounter/storage/v2/mock/user_count.go index 9207e1b647..14acfca866 100644 --- a/pkg/eventcounter/storage/v2/mock/user_count.go +++ b/pkg/eventcounter/storage/v2/mock/user_count.go @@ -42,9 +42,9 @@ func (m *MockUserCountStorage) EXPECT() *MockUserCountStorageMockRecorder { } // GetMAUCount mocks base method. -func (m *MockUserCountStorage) GetMAUCount(ctx context.Context, environmentNamespace, yearMonth string) (int64, int64, error) { +func (m *MockUserCountStorage) GetMAUCount(ctx context.Context, environmentId, yearMonth string) (int64, int64, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMAUCount", ctx, environmentNamespace, yearMonth) + ret := m.ctrl.Call(m, "GetMAUCount", ctx, environmentId, yearMonth) ret0, _ := ret[0].(int64) ret1, _ := ret[1].(int64) ret2, _ := ret[2].(error) @@ -52,9 +52,9 @@ func (m *MockUserCountStorage) GetMAUCount(ctx context.Context, environmentNames } // GetMAUCount indicates an expected call of GetMAUCount. -func (mr *MockUserCountStorageMockRecorder) GetMAUCount(ctx, environmentNamespace, yearMonth any) *gomock.Call { +func (mr *MockUserCountStorageMockRecorder) GetMAUCount(ctx, environmentId, yearMonth any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMAUCount", reflect.TypeOf((*MockUserCountStorage)(nil).GetMAUCount), ctx, environmentNamespace, yearMonth) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMAUCount", reflect.TypeOf((*MockUserCountStorage)(nil).GetMAUCount), ctx, environmentId, yearMonth) } // GetMAUCounts mocks base method. diff --git a/pkg/eventcounter/storage/v2/sql/evaluation_count.sql b/pkg/eventcounter/storage/v2/sql/evaluation_count.sql index 40631edb4e..dca6cb7547 100644 --- a/pkg/eventcounter/storage/v2/sql/evaluation_count.sql +++ b/pkg/eventcounter/storage/v2/sql/evaluation_count.sql @@ -6,7 +6,7 @@ FROM `%s` WHERE timestamp BETWEEN TIMESTAMP(@startAt) AND TIMESTAMP(@endAt) - AND environment_namespace = @environmentNamespace + AND environment_id = @environmentId AND feature_id = @featureID AND feature_version = @featureVersion GROUP BY diff --git a/pkg/eventcounter/storage/v2/sql/goal_count.sql b/pkg/eventcounter/storage/v2/sql/goal_count.sql index 045897bb19..e71ef2346c 100644 --- a/pkg/eventcounter/storage/v2/sql/goal_count.sql +++ b/pkg/eventcounter/storage/v2/sql/goal_count.sql @@ -8,7 +8,7 @@ WITH grouped_by_user_evaluation AS ( `%s` WHERE timestamp BETWEEN TIMESTAMP(@startAt) AND TIMESTAMP(@endAt) - AND environment_namespace = @environmentNamespace + AND environment_id = @environmentId AND goal_id = @goalID AND feature_id = @featureID AND feature_version = @featureVersion diff --git a/pkg/eventcounter/storage/v2/user_count.go b/pkg/eventcounter/storage/v2/user_count.go index c4f57a3306..0565398adc 100644 --- a/pkg/eventcounter/storage/v2/user_count.go +++ b/pkg/eventcounter/storage/v2/user_count.go @@ -26,7 +26,7 @@ import ( type UserCountStorage interface { GetMAUCount( ctx context.Context, - environmentNamespace, yearMonth string, + environmentId, yearMonth string, ) (int64, int64, error) GetMAUCounts( ctx context.Context, @@ -48,7 +48,7 @@ func NewUserCountStorage(qe mysql.QueryExecer) UserCountStorage { func (s *userCountStorage) GetMAUCount( ctx context.Context, - environmentNamespace, yearMonth string, + environmentId, yearMonth string, ) (int64, int64, error) { query := ` SELECT @@ -57,14 +57,14 @@ func (s *userCountStorage) GetMAUCount( FROM mau WHERE - environment_namespace = ? AND + environment_id = ? AND yearmonth = ? ` var userCount, eventCount int64 err := s.qe.QueryRowContext( ctx, query, - environmentNamespace, + environmentId, yearMonth, ).Scan( &userCount, @@ -83,7 +83,7 @@ func (s *userCountStorage) GetMAUCounts( summaries := make([]*proto.MAUSummary, 0) query := ` SELECT - environment_namespace as environment_id, + environment_id, count(*) as user_count, IFNULL(SUM(event_count), 0) as request_count FROM @@ -91,7 +91,7 @@ func (s *userCountStorage) GetMAUCounts( WHERE yearmonth = ? GROUP BY - environment_namespace + environment_id ` rows, err := s.qe.QueryContext( ctx, @@ -129,7 +129,7 @@ func (s *userCountStorage) GetMAUCountsGroupBySourceID( summaries := make([]*proto.MAUSummary, 0) query := ` SELECT - environment_namespace as environment_id, + environment_id, source_id, count(*) as user_count, IFNULL(SUM(event_count), 0) as request_count @@ -138,7 +138,7 @@ func (s *userCountStorage) GetMAUCountsGroupBySourceID( WHERE yearmonth = ? GROUP BY - environment_namespace, + environment_id, source_id ` rows, err := s.qe.QueryContext( diff --git a/pkg/experiment/api/api.go b/pkg/experiment/api/api.go index 5ab9852871..d03f33dffd 100644 --- a/pkg/experiment/api/api.go +++ b/pkg/experiment/api/api.go @@ -87,17 +87,17 @@ func (s *experimentService) Register(server *grpc.Server) { func (s *experimentService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -111,7 +111,7 @@ func (s *experimentService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -127,7 +127,7 @@ func (s *experimentService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -143,7 +143,7 @@ func (s *experimentService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/experiment/api/experiment.go b/pkg/experiment/api/experiment.go index 18838a4140..7a683b7a19 100644 --- a/pkg/experiment/api/experiment.go +++ b/pkg/experiment/api/experiment.go @@ -47,7 +47,7 @@ func (s *experimentService) GetExperiment( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -55,7 +55,7 @@ func (s *experimentService) GetExperiment( return nil, err } experimentStorage := v2es.NewExperimentStorage(s.mysqlClient) - experiment, err := experimentStorage.GetExperiment(ctx, req.Id, req.EnvironmentNamespace) + experiment, err := experimentStorage.GetExperiment(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2es.ErrExperimentNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -102,13 +102,13 @@ func (s *experimentService) ListExperiments( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.Archived != nil { whereParts = append(whereParts, mysql.NewFilter("archived", "=", req.Archived.Value)) @@ -177,7 +177,7 @@ func (s *experimentService) ListExperiments( "Failed to list experiments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -234,7 +234,7 @@ func (s *experimentService) CreateExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -242,8 +242,8 @@ func (s *experimentService) CreateExperiment( return nil, err } resp, err := s.featureClient.GetFeature(ctx, &featureproto.GetFeatureRequest{ - Id: req.Command.FeatureId, - EnvironmentNamespace: req.EnvironmentNamespace, + Id: req.Command.FeatureId, + EnvironmentId: req.EnvironmentId, }) if err != nil { if code := status.Code(err); code == codes.NotFound { @@ -260,7 +260,7 @@ func (s *experimentService) CreateExperiment( "Failed to get feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -273,7 +273,7 @@ func (s *experimentService) CreateExperiment( return nil, dt.Err() } for _, gid := range req.Command.GoalIds { - _, err := s.getGoalMySQL(ctx, gid, req.EnvironmentNamespace) + _, err := s.getGoalMySQL(ctx, gid, req.EnvironmentId) if err != nil { if err == v2es.ErrGoalNotFound { dt, err := statusGoalNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -312,7 +312,7 @@ func (s *experimentService) CreateExperiment( "Failed to create a new experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -347,7 +347,7 @@ func (s *experimentService) CreateExperiment( editor, experiment, s.publisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -355,7 +355,7 @@ func (s *experimentService) CreateExperiment( if err := handler.Handle(ctx, req.Command); err != nil { return err } - return experimentStorage.CreateExperiment(ctx, experiment, req.EnvironmentNamespace) + return experimentStorage.CreateExperiment(ctx, experiment, req.EnvironmentId) }) if err != nil { if err == v2es.ErrExperimentAlreadyExists { @@ -372,7 +372,7 @@ func (s *experimentService) CreateExperiment( "Failed to create experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -461,7 +461,7 @@ func (s *experimentService) UpdateExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -487,7 +487,7 @@ func (s *experimentService) UpdateExperiment( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { experimentStorage := v2es.NewExperimentStorage(tx) - experiment, err := experimentStorage.GetExperiment(ctx, req.Id, req.EnvironmentNamespace) + experiment, err := experimentStorage.GetExperiment(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -495,7 +495,7 @@ func (s *experimentService) UpdateExperiment( editor, experiment, s.publisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -506,12 +506,12 @@ func (s *experimentService) UpdateExperiment( "Failed to change period", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } - return experimentStorage.UpdateExperiment(ctx, experiment, req.EnvironmentNamespace) + return experimentStorage.UpdateExperiment(ctx, experiment, req.EnvironmentId) } if req.ChangeNameCommand != nil { if err = handler.Handle(ctx, req.ChangeNameCommand); err != nil { @@ -519,7 +519,7 @@ func (s *experimentService) UpdateExperiment( "Failed to change Name", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -531,13 +531,13 @@ func (s *experimentService) UpdateExperiment( "Failed to change Description", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } } - return experimentStorage.UpdateExperiment(ctx, experiment, req.EnvironmentNamespace) + return experimentStorage.UpdateExperiment(ctx, experiment, req.EnvironmentId) }) if err != nil { if err == v2es.ErrExperimentNotFound || err == v2es.ErrExperimentUnexpectedAffectedRows { @@ -554,7 +554,7 @@ func (s *experimentService) UpdateExperiment( "Failed to update experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -599,14 +599,14 @@ func (s *experimentService) StartExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := validateStartExperimentRequest(req, localizer); err != nil { return nil, err } - if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } return &proto.StartExperimentResponse{}, nil @@ -643,14 +643,14 @@ func (s *experimentService) FinishExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := validateFinishExperimentRequest(req, localizer); err != nil { return nil, err } - if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } return &proto.FinishExperimentResponse{}, nil @@ -687,14 +687,14 @@ func (s *experimentService) StopExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := validateStopExperimentRequest(req, localizer); err != nil { return nil, err } - if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } return &proto.StopExperimentResponse{}, nil @@ -731,7 +731,7 @@ func (s *experimentService) ArchiveExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -760,7 +760,7 @@ func (s *experimentService) ArchiveExperiment( editor, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ) if err != nil { @@ -768,7 +768,7 @@ func (s *experimentService) ArchiveExperiment( "Failed to archive experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -783,14 +783,14 @@ func (s *experimentService) DeleteExperiment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := validateDeleteExperimentRequest(req, localizer); err != nil { return nil, err } - if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.updateExperiment(ctx, editor, req.Command, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } return &proto.DeleteExperimentResponse{}, nil @@ -824,7 +824,7 @@ func (s *experimentService) updateExperiment( ctx context.Context, editor *eventproto.Editor, cmd command.Command, - id, environmentNamespace string, + id, environmentId string, localizer locale.Localizer, ) error { tx, err := s.mysqlClient.BeginTx(ctx) @@ -846,18 +846,18 @@ func (s *experimentService) updateExperiment( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { experimentStorage := v2es.NewExperimentStorage(tx) - experiment, err := experimentStorage.GetExperiment(ctx, id, environmentNamespace) + experiment, err := experimentStorage.GetExperiment(ctx, id, environmentId) if err != nil { s.logger.Error( "Failed to get experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } - handler, err := command.NewExperimentCommandHandler(editor, experiment, s.publisher, environmentNamespace) + handler, err := command.NewExperimentCommandHandler(editor, experiment, s.publisher, environmentId) if err != nil { return err } @@ -866,12 +866,12 @@ func (s *experimentService) updateExperiment( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } - return experimentStorage.UpdateExperiment(ctx, experiment, environmentNamespace) + return experimentStorage.UpdateExperiment(ctx, experiment, environmentId) }) if err != nil { if err == v2es.ErrExperimentNotFound || err == v2es.ErrExperimentUnexpectedAffectedRows { @@ -888,7 +888,7 @@ func (s *experimentService) updateExperiment( "Failed to update experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/experiment/api/experiment_test.go b/pkg/experiment/api/experiment_test.go index 3526ea22fb..b1fdb69afa 100644 --- a/pkg/experiment/api/experiment_test.go +++ b/pkg/experiment/api/experiment_test.go @@ -55,16 +55,16 @@ func TestGetExperimentMySQL(t *testing.T) { } patterns := []struct { - setup func(*experimentService) - id string - environmentNamespace string - expectedErr error + setup func(*experimentService) + id string + environmentId string + expectedErr error }{ { - setup: nil, - id: "", - environmentNamespace: "ns0", - expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), + setup: nil, + id: "", + environmentId: "ns0", + expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { setup: func(s *experimentService) { @@ -74,9 +74,9 @@ func TestGetExperimentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns0", - expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), + id: "id-0", + environmentId: "ns0", + expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, { setup: func(s *experimentService) { @@ -86,9 +86,9 @@ func TestGetExperimentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-1", - environmentNamespace: "ns0", - expectedErr: nil, + id: "id-1", + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -96,7 +96,7 @@ func TestGetExperimentMySQL(t *testing.T) { if p.setup != nil { p.setup(service) } - req := &experimentproto.GetExperimentRequest{Id: p.id, EnvironmentNamespace: p.environmentNamespace} + req := &experimentproto.GetExperimentRequest{Id: p.id, EnvironmentId: p.environmentId} _, err := service.GetExperiment(ctx, req) assert.Equal(t, p.expectedErr, err) } @@ -132,7 +132,7 @@ func TestListExperimentsMySQL(t *testing.T) { desc: "error: ErrPermissionDenied", orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), - req: &experimentproto.ListExperimentsRequest{FeatureId: "id-0", EnvironmentNamespace: "ns0"}, + req: &experimentproto.ListExperimentsRequest{FeatureId: "id-0", EnvironmentId: "ns0"}, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { @@ -153,7 +153,7 @@ func TestListExperimentsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &experimentproto.ListExperimentsRequest{FeatureId: "id-0", EnvironmentNamespace: "ns0"}, + req: &experimentproto.ListExperimentsRequest{FeatureId: "id-0", EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -198,7 +198,7 @@ func TestCreateExperimentMySQL(t *testing.T) { StartAt: 1, StopAt: 10, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -241,7 +241,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { StartAt: 1, StopAt: 10, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: nil, }, @@ -251,7 +251,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { FeatureId: "", GoalIds: []string{"gid"}, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: createError(statusFeatureIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "feature_id")), }, @@ -261,7 +261,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { FeatureId: "fid", GoalIds: nil, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, @@ -271,7 +271,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { FeatureId: "fid", GoalIds: []string{""}, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, @@ -281,7 +281,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { FeatureId: "fid", GoalIds: []string{"gid", ""}, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, @@ -293,7 +293,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { StartAt: 1, StopAt: 30*24*60*60 + 2, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: createError(statusPeriodTooLong, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "period")), }, @@ -305,7 +305,7 @@ func TestValidateCreateExperimentRequest(t *testing.T) { StartAt: 1, StopAt: 10, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: nil, }, @@ -342,7 +342,7 @@ func TestUpdateExperimentMySQL(t *testing.T) { { setup: nil, req: &experimentproto.UpdateExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -354,7 +354,7 @@ func TestUpdateExperimentMySQL(t *testing.T) { StartAt: time.Now().Unix(), StopAt: time.Now().AddDate(0, 0, 31).Unix(), }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusPeriodTooLong, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "period")), }, @@ -366,8 +366,8 @@ func TestUpdateExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.UpdateExperimentRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -379,9 +379,9 @@ func TestUpdateExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.UpdateExperimentRequest{ - Id: "id-1", - ChangeNameCommand: &experimentproto.ChangeExperimentNameCommand{Name: "test-name"}, - EnvironmentNamespace: "ns0", + Id: "id-1", + ChangeNameCommand: &experimentproto.ChangeExperimentNameCommand{Name: "test-name"}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -424,7 +424,7 @@ func TestStartExperimentMySQL(t *testing.T) { desc: "error id required", setup: nil, req: &experimentproto.StartExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -432,8 +432,8 @@ func TestStartExperimentMySQL(t *testing.T) { desc: "error no command", setup: nil, req: &experimentproto.StartExperimentRequest{ - Id: "eid", - EnvironmentNamespace: "ns0", + Id: "eid", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -446,9 +446,9 @@ func TestStartExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.StartExperimentRequest{ - Id: "noop", - Command: &experimentproto.StartExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "noop", + Command: &experimentproto.StartExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -461,9 +461,9 @@ func TestStartExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.StartExperimentRequest{ - Id: "eid", - Command: &experimentproto.StartExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "eid", + Command: &experimentproto.StartExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -508,7 +508,7 @@ func TestFinishExperimentMySQL(t *testing.T) { desc: "error id required", setup: nil, req: &experimentproto.FinishExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -516,8 +516,8 @@ func TestFinishExperimentMySQL(t *testing.T) { desc: "error no command", setup: nil, req: &experimentproto.FinishExperimentRequest{ - Id: "eid", - EnvironmentNamespace: "ns0", + Id: "eid", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -530,9 +530,9 @@ func TestFinishExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.FinishExperimentRequest{ - Id: "noop", - Command: &experimentproto.FinishExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "noop", + Command: &experimentproto.FinishExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -545,9 +545,9 @@ func TestFinishExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.FinishExperimentRequest{ - Id: "eid", - Command: &experimentproto.FinishExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "eid", + Command: &experimentproto.FinishExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -590,15 +590,15 @@ func TestStopExperimentMySQL(t *testing.T) { { setup: nil, req: &experimentproto.StopExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { setup: nil, req: &experimentproto.StopExperimentRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -610,9 +610,9 @@ func TestStopExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.StopExperimentRequest{ - Id: "id-0", - Command: &experimentproto.StopExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &experimentproto.StopExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -624,9 +624,9 @@ func TestStopExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.StopExperimentRequest{ - Id: "id-1", - Command: &experimentproto.StopExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &experimentproto.StopExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -667,15 +667,15 @@ func TestArchiveExperimentMySQL(t *testing.T) { { setup: nil, req: &experimentproto.ArchiveExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "experiment_id")), }, { setup: nil, req: &experimentproto.ArchiveExperimentRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -687,9 +687,9 @@ func TestArchiveExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.ArchiveExperimentRequest{ - Id: "id-0", - Command: &experimentproto.ArchiveExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &experimentproto.ArchiveExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -701,9 +701,9 @@ func TestArchiveExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.ArchiveExperimentRequest{ - Id: "id-1", - Command: &experimentproto.ArchiveExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &experimentproto.ArchiveExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -744,15 +744,15 @@ func TestDeleteExperimentMySQL(t *testing.T) { { setup: nil, req: &experimentproto.DeleteExperimentRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusExperimentIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { setup: nil, req: &experimentproto.DeleteExperimentRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -764,9 +764,9 @@ func TestDeleteExperimentMySQL(t *testing.T) { ).Return(v2es.ErrExperimentNotFound) }, req: &experimentproto.DeleteExperimentRequest{ - Id: "id-0", - Command: &experimentproto.DeleteExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &experimentproto.DeleteExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -778,9 +778,9 @@ func TestDeleteExperimentMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.DeleteExperimentRequest{ - Id: "id-1", - Command: &experimentproto.DeleteExperimentCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &experimentproto.DeleteExperimentCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, diff --git a/pkg/experiment/api/goal.go b/pkg/experiment/api/goal.go index db175d50f1..e5b6244cfd 100644 --- a/pkg/experiment/api/goal.go +++ b/pkg/experiment/api/goal.go @@ -39,7 +39,7 @@ func (s *experimentService) GetGoal(ctx context.Context, req *proto.GetGoalReque localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -53,7 +53,7 @@ func (s *experimentService) GetGoal(ctx context.Context, req *proto.GetGoalReque } return nil, dt.Err() } - goal, err := s.getGoalMySQL(ctx, req.Id, req.EnvironmentNamespace) + goal, err := s.getGoalMySQL(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2es.ErrGoalNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -79,16 +79,16 @@ func (s *experimentService) GetGoal(ctx context.Context, req *proto.GetGoalReque func (s *experimentService) getGoalMySQL( ctx context.Context, - goalID, environmentNamespace string, + goalID, environmentId string, ) (*domain.Goal, error) { goalStorage := v2es.NewGoalStorage(s.mysqlClient) - goal, err := goalStorage.GetGoal(ctx, goalID, environmentNamespace) + goal, err := goalStorage.GetGoal(ctx, goalID, environmentId) if err != nil { s.logger.Error( "Failed to get goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("goalId", goalID), )..., ) @@ -103,13 +103,13 @@ func (s *experimentService) ListGoals( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.Archived != nil { whereParts = append(whereParts, mysql.NewFilter("archived", "=", req.Archived.Value)) @@ -153,14 +153,14 @@ func (s *experimentService) ListGoals( limit, offset, isInUseStatus, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to list goals", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -217,7 +217,7 @@ func (s *experimentService) CreateGoal( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -230,7 +230,7 @@ func (s *experimentService) CreateGoal( "Failed to create a new goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -261,14 +261,14 @@ func (s *experimentService) CreateGoal( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { goalStorage := v2es.NewGoalStorage(tx) - handler, err := command.NewGoalCommandHandler(editor, goal, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewGoalCommandHandler(editor, goal, s.publisher, req.EnvironmentId) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - return goalStorage.CreateGoal(ctx, goal, req.EnvironmentNamespace) + return goalStorage.CreateGoal(ctx, goal, req.EnvironmentId) }) if err != nil { if err == v2es.ErrGoalAlreadyExists { @@ -285,7 +285,7 @@ func (s *experimentService) CreateGoal( "Failed to create goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -351,7 +351,7 @@ func (s *experimentService) UpdateGoal( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -385,7 +385,7 @@ func (s *experimentService) UpdateGoal( err = s.updateGoal( ctx, editor, - req.EnvironmentNamespace, + req.EnvironmentId, req.Id, commands, localizer, @@ -395,7 +395,7 @@ func (s *experimentService) UpdateGoal( "Failed to update goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -410,7 +410,7 @@ func (s *experimentService) ArchiveGoal( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -437,7 +437,7 @@ func (s *experimentService) ArchiveGoal( err = s.updateGoal( ctx, editor, - req.EnvironmentNamespace, + req.EnvironmentId, req.Id, []command.Command{req.Command}, localizer, @@ -447,7 +447,7 @@ func (s *experimentService) ArchiveGoal( "Failed to archive goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -462,7 +462,7 @@ func (s *experimentService) DeleteGoal( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -489,7 +489,7 @@ func (s *experimentService) DeleteGoal( err = s.updateGoal( ctx, editor, - req.EnvironmentNamespace, + req.EnvironmentId, req.Id, []command.Command{req.Command}, localizer, @@ -499,7 +499,7 @@ func (s *experimentService) DeleteGoal( "Failed to delete goal", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -510,7 +510,7 @@ func (s *experimentService) DeleteGoal( func (s *experimentService) updateGoal( ctx context.Context, editor *eventproto.Editor, - environmentNamespace, goalID string, + environmentId, goalID string, commands []command.Command, localizer locale.Localizer, ) error { @@ -533,11 +533,11 @@ func (s *experimentService) updateGoal( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { goalStorage := v2es.NewGoalStorage(tx) - goal, err := goalStorage.GetGoal(ctx, goalID, environmentNamespace) + goal, err := goalStorage.GetGoal(ctx, goalID, environmentId) if err != nil { return err } - handler, err := command.NewGoalCommandHandler(editor, goal, s.publisher, environmentNamespace) + handler, err := command.NewGoalCommandHandler(editor, goal, s.publisher, environmentId) if err != nil { return err } @@ -546,7 +546,7 @@ func (s *experimentService) updateGoal( return err } } - return goalStorage.UpdateGoal(ctx, goal, environmentNamespace) + return goalStorage.UpdateGoal(ctx, goal, environmentId) }) if err != nil { if err == v2es.ErrGoalNotFound || err == v2es.ErrGoalUnexpectedAffectedRows { diff --git a/pkg/experiment/api/goal_test.go b/pkg/experiment/api/goal_test.go index 07020a5593..2ac16177e6 100644 --- a/pkg/experiment/api/goal_test.go +++ b/pkg/experiment/api/goal_test.go @@ -54,20 +54,20 @@ func TestGetGoalMySQL(t *testing.T) { } patterns := []struct { - desc string - setup func(*experimentService) - orgRole *accountproto.AccountV2_Role_Organization - envRole *accountproto.AccountV2_Role_Environment - id string - environmentNamespace string - expectedErr error + desc string + setup func(*experimentService) + orgRole *accountproto.AccountV2_Role_Organization + envRole *accountproto.AccountV2_Role_Environment + id string + environmentId string + expectedErr error }{ { - desc: "error: ErrRequiredFieldTemplate", - setup: nil, - id: "", - environmentNamespace: "ns0", - expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), + desc: "error: ErrRequiredFieldTemplate", + setup: nil, + id: "", + environmentId: "ns0", + expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, { desc: "error: ErrNotFound", @@ -78,17 +78,17 @@ func TestGetGoalMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns0", - expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), + id: "id-0", + environmentId: "ns0", + expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, { - desc: "error: ErrPermissionDenied", - orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), - envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), - id: "id-1", - environmentNamespace: "ns0", - expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), + desc: "error: ErrPermissionDenied", + orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), + envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), + id: "id-1", + environmentId: "ns0", + expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { desc: "success", @@ -101,9 +101,9 @@ func TestGetGoalMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-1", - environmentNamespace: "ns0", - expectedErr: nil, + id: "id-1", + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -112,7 +112,7 @@ func TestGetGoalMySQL(t *testing.T) { if p.setup != nil { p.setup(service) } - req := &experimentproto.GetGoalRequest{Id: p.id, EnvironmentNamespace: p.environmentNamespace} + req := &experimentproto.GetGoalRequest{Id: p.id, EnvironmentId: p.environmentId} _, err := service.GetGoal(ctx, req) assert.Equal(t, p.expectedErr, err) }) @@ -150,7 +150,7 @@ func TestListGoalMySQL(t *testing.T) { desc: "error: ErrPermissionDenied", orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), - req: &experimentproto.ListGoalsRequest{EnvironmentNamespace: "ns0"}, + req: &experimentproto.ListGoalsRequest{EnvironmentId: "ns0"}, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, { @@ -171,7 +171,7 @@ func TestListGoalMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - req: &experimentproto.ListGoalsRequest{EnvironmentNamespace: "ns0"}, + req: &experimentproto.ListGoalsRequest{EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -213,32 +213,32 @@ func TestCreateGoalMySQL(t *testing.T) { { setup: nil, req: &experimentproto.CreateGoalRequest{ - Command: nil, - EnvironmentNamespace: "ns0", + Command: nil, + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, { setup: nil, req: &experimentproto.CreateGoalRequest{ - Command: &experimentproto.CreateGoalCommand{Id: ""}, - EnvironmentNamespace: "ns0", + Command: &experimentproto.CreateGoalCommand{Id: ""}, + EnvironmentId: "ns0", }, expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, { setup: nil, req: &experimentproto.CreateGoalRequest{ - Command: &experimentproto.CreateGoalCommand{Id: "bucketeer_goal_id?"}, - EnvironmentNamespace: "ns0", + Command: &experimentproto.CreateGoalCommand{Id: "bucketeer_goal_id?"}, + EnvironmentId: "ns0", }, expectedErr: createError(statusInvalidGoalID, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "goal_id")), }, { setup: nil, req: &experimentproto.CreateGoalRequest{ - Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2019", Name: ""}, - EnvironmentNamespace: "ns0", + Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2019", Name: ""}, + EnvironmentId: "ns0", }, expectedErr: createError(statusGoalNameRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "name")), }, @@ -250,8 +250,8 @@ func TestCreateGoalMySQL(t *testing.T) { ).Return(v2es.ErrGoalAlreadyExists) }, req: &experimentproto.CreateGoalRequest{ - Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2019", Name: "name-0"}, - EnvironmentNamespace: "ns0", + Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2019", Name: "name-0"}, + EnvironmentId: "ns0", }, expectedErr: createError(statusAlreadyExists, localizer.MustLocalize(locale.AlreadyExistsError)), }, @@ -263,8 +263,8 @@ func TestCreateGoalMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.CreateGoalRequest{ - Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2020", Name: "name-1"}, - EnvironmentNamespace: "ns0", + Command: &experimentproto.CreateGoalCommand{Id: "Bucketeer-id-2020", Name: "name-1"}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -305,15 +305,15 @@ func TestUpdateGoalMySQL(t *testing.T) { { setup: nil, req: &experimentproto.UpdateGoalRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, { setup: nil, req: &experimentproto.UpdateGoalRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -325,9 +325,9 @@ func TestUpdateGoalMySQL(t *testing.T) { ).Return(v2es.ErrGoalNotFound) }, req: &experimentproto.UpdateGoalRequest{ - Id: "id-0", - RenameCommand: &experimentproto.RenameGoalCommand{Name: "name-0"}, - EnvironmentNamespace: "ns0", + Id: "id-0", + RenameCommand: &experimentproto.RenameGoalCommand{Name: "name-0"}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -339,9 +339,9 @@ func TestUpdateGoalMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.UpdateGoalRequest{ - Id: "id-1", - RenameCommand: &experimentproto.RenameGoalCommand{Name: "name-1"}, - EnvironmentNamespace: "ns0", + Id: "id-1", + RenameCommand: &experimentproto.RenameGoalCommand{Name: "name-1"}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -382,15 +382,15 @@ func TestArchiveGoalMySQL(t *testing.T) { { setup: nil, req: &experimentproto.ArchiveGoalRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, { setup: nil, req: &experimentproto.ArchiveGoalRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -402,9 +402,9 @@ func TestArchiveGoalMySQL(t *testing.T) { ).Return(v2es.ErrGoalNotFound) }, req: &experimentproto.ArchiveGoalRequest{ - Id: "id-0", - Command: &experimentproto.ArchiveGoalCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &experimentproto.ArchiveGoalCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -416,9 +416,9 @@ func TestArchiveGoalMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.ArchiveGoalRequest{ - Id: "id-1", - Command: &experimentproto.ArchiveGoalCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &experimentproto.ArchiveGoalCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -459,15 +459,15 @@ func TestDeleteGoalMySQL(t *testing.T) { { setup: nil, req: &experimentproto.DeleteGoalRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusGoalIDRequired, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "goal_id")), }, { setup: nil, req: &experimentproto.DeleteGoalRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusNoCommand, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "command")), }, @@ -479,9 +479,9 @@ func TestDeleteGoalMySQL(t *testing.T) { ).Return(v2es.ErrGoalNotFound) }, req: &experimentproto.DeleteGoalRequest{ - Id: "id-0", - Command: &experimentproto.DeleteGoalCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &experimentproto.DeleteGoalCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -493,9 +493,9 @@ func TestDeleteGoalMySQL(t *testing.T) { ).Return(nil) }, req: &experimentproto.DeleteGoalRequest{ - Id: "id-1", - Command: &experimentproto.DeleteGoalCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &experimentproto.DeleteGoalCommand{}, + EnvironmentId: "ns0", }, expectedErr: nil, }, diff --git a/pkg/experiment/command/experiment.go b/pkg/experiment/command/experiment.go index 16207be3f2..da9b0e128c 100644 --- a/pkg/experiment/command/experiment.go +++ b/pkg/experiment/command/experiment.go @@ -28,29 +28,29 @@ import ( ) type experimentCommandHandler struct { - editor *eventproto.Editor - experiment *domain.Experiment - previousExperiment *domain.Experiment - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + experiment *domain.Experiment + previousExperiment *domain.Experiment + publisher publisher.Publisher + environmentId string } func NewExperimentCommandHandler( editor *eventproto.Editor, experiment *domain.Experiment, p publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.Experiment{} if err := copier.Copy(prev, experiment); err != nil { return nil, err } return &experimentCommandHandler{ - editor: editor, - experiment: experiment, - previousExperiment: prev, - publisher: p, - environmentNamespace: environmentNamespace, + editor: editor, + experiment: experiment, + previousExperiment: prev, + publisher: p, + environmentId: environmentId, }, nil } @@ -172,7 +172,7 @@ func (h *experimentCommandHandler) send(ctx context.Context, eventType eventprot h.experiment.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.experiment.Experiment, prev, ) diff --git a/pkg/experiment/command/goal.go b/pkg/experiment/command/goal.go index 5b63956698..d4b9293c81 100644 --- a/pkg/experiment/command/goal.go +++ b/pkg/experiment/command/goal.go @@ -28,29 +28,29 @@ import ( ) type goalCommandHandler struct { - editor *eventproto.Editor - goal *domain.Goal - previousGoal *domain.Goal - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + goal *domain.Goal + previousGoal *domain.Goal + publisher publisher.Publisher + environmentId string } func NewGoalCommandHandler( editor *eventproto.Editor, goal *domain.Goal, p publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.Goal{} if err := copier.Copy(prev, goal); err != nil { return nil, err } return &goalCommandHandler{ - editor: editor, - goal: goal, - previousGoal: prev, - publisher: p, - environmentNamespace: environmentNamespace, + editor: editor, + goal: goal, + previousGoal: prev, + publisher: p, + environmentId: environmentId, }, nil } @@ -131,7 +131,7 @@ func (h *goalCommandHandler) send(ctx context.Context, eventType eventproto.Even h.goal.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.goal.Goal, prev, ) diff --git a/pkg/experiment/storage/v2/experiment.go b/pkg/experiment/storage/v2/experiment.go index 464e36dfd3..52caafca45 100644 --- a/pkg/experiment/storage/v2/experiment.go +++ b/pkg/experiment/storage/v2/experiment.go @@ -32,9 +32,9 @@ var ( ) type ExperimentStorage interface { - CreateExperiment(ctx context.Context, e *domain.Experiment, environmentNamespace string) error - UpdateExperiment(ctx context.Context, e *domain.Experiment, environmentNamespace string) error - GetExperiment(ctx context.Context, id, environmentNamespace string) (*domain.Experiment, error) + CreateExperiment(ctx context.Context, e *domain.Experiment, environmentId string) error + UpdateExperiment(ctx context.Context, e *domain.Experiment, environmentId string) error + GetExperiment(ctx context.Context, id, environmentId string) (*domain.Experiment, error) ListExperiments( ctx context.Context, whereParts []mysql.WherePart, @@ -54,7 +54,7 @@ func NewExperimentStorage(qe mysql.QueryExecer) ExperimentStorage { func (s *experimentStorage) CreateExperiment( ctx context.Context, e *domain.Experiment, - environmentNamespace string, + environmentId string, ) error { query := ` INSERT INTO experiment ( @@ -77,7 +77,7 @@ func (s *experimentStorage) CreateExperiment( base_variation_id, status, maintainer, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? @@ -105,7 +105,7 @@ func (s *experimentStorage) CreateExperiment( e.BaseVariationId, int32(e.Status), e.Maintainer, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -119,7 +119,7 @@ func (s *experimentStorage) CreateExperiment( func (s *experimentStorage) UpdateExperiment( ctx context.Context, e *domain.Experiment, - environmentNamespace string, + environmentId string, ) error { query := ` UPDATE @@ -145,7 +145,7 @@ func (s *experimentStorage) UpdateExperiment( status = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` result, err := s.qe.ExecContext( ctx, @@ -169,7 +169,7 @@ func (s *experimentStorage) UpdateExperiment( e.Maintainer, int32(e.Status), e.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -186,7 +186,7 @@ func (s *experimentStorage) UpdateExperiment( func (s *experimentStorage) GetExperiment( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.Experiment, error) { experiment := proto.Experiment{} var status int32 @@ -215,13 +215,13 @@ func (s *experimentStorage) GetExperiment( experiment WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, id, - environmentNamespace, + environmentId, ).Scan( &experiment.Id, &experiment.GoalId, diff --git a/pkg/experiment/storage/v2/experiment_test.go b/pkg/experiment/storage/v2/experiment_test.go index 48b2021914..f7c6022af8 100644 --- a/pkg/experiment/storage/v2/experiment_test.go +++ b/pkg/experiment/storage/v2/experiment_test.go @@ -43,10 +43,10 @@ func TestCreateExperiment(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*experimentStorage) - input *domain.Experiment - environmentNamespace string - expectedErr error + setup func(*experimentStorage) + input *domain.Experiment + environmentId string + expectedErr error }{ { setup: func(s *experimentStorage) { @@ -57,8 +57,8 @@ func TestCreateExperiment(t *testing.T) { input: &domain.Experiment{ Experiment: &proto.Experiment{Id: "id-0"}, }, - environmentNamespace: "ns0", - expectedErr: ErrExperimentAlreadyExists, + environmentId: "ns0", + expectedErr: ErrExperimentAlreadyExists, }, { setup: func(s *experimentStorage) { @@ -69,8 +69,8 @@ func TestCreateExperiment(t *testing.T) { input: &domain.Experiment{ Experiment: &proto.Experiment{Id: "id-1"}, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -80,7 +80,7 @@ func TestCreateExperiment(t *testing.T) { if p.setup != nil { p.setup(db) } - err := db.CreateExperiment(ctx, p.input, p.environmentNamespace) + err := db.CreateExperiment(ctx, p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -91,10 +91,10 @@ func TestUpdateExperiment(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*experimentStorage) - input *domain.Experiment - environmentNamespace string - expectedErr error + setup func(*experimentStorage) + input *domain.Experiment + environmentId string + expectedErr error }{ { setup: func(s *experimentStorage) { @@ -107,8 +107,8 @@ func TestUpdateExperiment(t *testing.T) { input: &domain.Experiment{ Experiment: &proto.Experiment{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: ErrExperimentUnexpectedAffectedRows, + environmentId: "ns", + expectedErr: ErrExperimentUnexpectedAffectedRows, }, { setup: func(s *experimentStorage) { @@ -121,8 +121,8 @@ func TestUpdateExperiment(t *testing.T) { input: &domain.Experiment{ Experiment: &proto.Experiment{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: nil, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -130,7 +130,7 @@ func TestUpdateExperiment(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdateExperiment(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdateExperiment(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -141,11 +141,11 @@ func TestGetExperiment(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*experimentStorage) - input string - environmentNamespace string - expected *domain.Experiment - expectedErr error + setup func(*experimentStorage) + input string + environmentId string + expected *domain.Experiment + expectedErr error }{ { setup: func(s *experimentStorage) { @@ -155,10 +155,10 @@ func TestGetExperiment(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "", - environmentNamespace: "ns0", - expected: nil, - expectedErr: ErrExperimentNotFound, + input: "", + environmentId: "ns0", + expected: nil, + expectedErr: ErrExperimentNotFound, }, { setup: func(s *experimentStorage) { @@ -168,8 +168,8 @@ func TestGetExperiment(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "id-0", - environmentNamespace: "ns0", + input: "id-0", + environmentId: "ns0", expected: &domain.Experiment{ Experiment: &proto.Experiment{Id: "id-0"}, }, @@ -181,7 +181,7 @@ func TestGetExperiment(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetExperiment(context.Background(), p.input, p.environmentNamespace) + _, err := storage.GetExperiment(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } diff --git a/pkg/experiment/storage/v2/goal.go b/pkg/experiment/storage/v2/goal.go index a2324462f7..46310a829a 100644 --- a/pkg/experiment/storage/v2/goal.go +++ b/pkg/experiment/storage/v2/goal.go @@ -32,16 +32,16 @@ var ( ) type GoalStorage interface { - CreateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error - UpdateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error - GetGoal(ctx context.Context, id, environmentNamespace string) (*domain.Goal, error) + CreateGoal(ctx context.Context, g *domain.Goal, environmentId string) error + UpdateGoal(ctx context.Context, g *domain.Goal, environmentId string) error + GetGoal(ctx context.Context, id, environmentId string) (*domain.Goal, error) ListGoals( ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, - environmentNamespace string, + environmentId string, ) ([]*proto.Goal, int, int64, error) } @@ -53,7 +53,7 @@ func NewGoalStorage(qe mysql.QueryExecer) GoalStorage { return &goalStorage{qe: qe} } -func (s *goalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error { +func (s *goalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmentId string) error { query := ` INSERT INTO goal ( id, @@ -63,7 +63,7 @@ func (s *goalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmen deleted, created_at, updated_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) @@ -78,7 +78,7 @@ func (s *goalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmen g.Deleted, g.CreatedAt, g.UpdatedAt, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -89,7 +89,7 @@ func (s *goalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmen return nil } -func (s *goalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error { +func (s *goalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmentId string) error { query := ` UPDATE goal @@ -102,7 +102,7 @@ func (s *goalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmen updated_at = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` result, err := s.qe.ExecContext( ctx, @@ -114,7 +114,7 @@ func (s *goalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmen g.CreatedAt, g.UpdatedAt, g.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -129,7 +129,7 @@ func (s *goalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmen return nil } -func (s *goalStorage) GetGoal(ctx context.Context, id, environmentNamespace string) (*domain.Goal, error) { +func (s *goalStorage) GetGoal(ctx context.Context, id, environmentId string) (*domain.Goal, error) { goal := proto.Goal{} query := ` SELECT @@ -147,7 +147,7 @@ func (s *goalStorage) GetGoal(ctx context.Context, id, environmentNamespace stri FROM experiment WHERE - environment_namespace = ? AND + environment_id = ? AND goal_ids LIKE concat("%", goal.id, "%") ) > 0 THEN TRUE ELSE FALSE @@ -156,14 +156,14 @@ func (s *goalStorage) GetGoal(ctx context.Context, id, environmentNamespace stri goal WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, - environmentNamespace, + environmentId, id, - environmentNamespace, + environmentId, ).Scan( &goal.Id, &goal.Name, @@ -189,11 +189,11 @@ func (s *goalStorage) ListGoals( orders []*mysql.Order, limit, offset int, isInUseStatus *bool, - environmentNamespace string, + environmentId string, ) ([]*proto.Goal, int, int64, error) { whereSQL, whereArgs := mysql.ConstructWhereSQLString(whereParts) prepareArgs := make([]interface{}, 0, len(whereArgs)+1) - prepareArgs = append(prepareArgs, environmentNamespace) + prepareArgs = append(prepareArgs, environmentId) prepareArgs = append(prepareArgs, whereArgs...) orderBySQL := mysql.ConstructOrderBySQLString(orders) limitOffsetSQL := mysql.ConstructLimitOffsetSQLString(limit, offset) @@ -221,7 +221,7 @@ func (s *goalStorage) ListGoals( FROM experiment WHERE - environment_namespace = ? AND + environment_id = ? AND goal_ids LIKE concat("%%", goal.id, "%%") ) > 0 THEN TRUE ELSE FALSE @@ -277,7 +277,7 @@ func (s *goalStorage) ListGoals( FROM experiment WHERE - environment_namespace = ? AND + environment_id = ? AND goal_ids LIKE concat("%%", goal.id, "%%") ) %s END diff --git a/pkg/experiment/storage/v2/goal_test.go b/pkg/experiment/storage/v2/goal_test.go index 651b5f584c..c4c3b6366e 100644 --- a/pkg/experiment/storage/v2/goal_test.go +++ b/pkg/experiment/storage/v2/goal_test.go @@ -43,10 +43,10 @@ func TestCreateGoal(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*goalStorage) - input *domain.Goal - environmentNamespace string - expectedErr error + setup func(*goalStorage) + input *domain.Goal + environmentId string + expectedErr error }{ { setup: func(s *goalStorage) { @@ -57,8 +57,8 @@ func TestCreateGoal(t *testing.T) { input: &domain.Goal{ Goal: &proto.Goal{Id: "id-0"}, }, - environmentNamespace: "ns0", - expectedErr: ErrGoalAlreadyExists, + environmentId: "ns0", + expectedErr: ErrGoalAlreadyExists, }, { setup: func(s *goalStorage) { @@ -69,8 +69,8 @@ func TestCreateGoal(t *testing.T) { input: &domain.Goal{ Goal: &proto.Goal{Id: "id-1"}, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } for _, p := range patterns { @@ -80,7 +80,7 @@ func TestCreateGoal(t *testing.T) { if p.setup != nil { p.setup(db) } - err := db.CreateGoal(ctx, p.input, p.environmentNamespace) + err := db.CreateGoal(ctx, p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -91,10 +91,10 @@ func TestUpdateGoal(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*goalStorage) - input *domain.Goal - environmentNamespace string - expectedErr error + setup func(*goalStorage) + input *domain.Goal + environmentId string + expectedErr error }{ { setup: func(s *goalStorage) { @@ -107,8 +107,8 @@ func TestUpdateGoal(t *testing.T) { input: &domain.Goal{ Goal: &proto.Goal{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: ErrGoalUnexpectedAffectedRows, + environmentId: "ns", + expectedErr: ErrGoalUnexpectedAffectedRows, }, { setup: func(s *goalStorage) { @@ -121,8 +121,8 @@ func TestUpdateGoal(t *testing.T) { input: &domain.Goal{ Goal: &proto.Goal{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: nil, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -130,7 +130,7 @@ func TestUpdateGoal(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdateGoal(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdateGoal(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -141,11 +141,11 @@ func TestGetGoal(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*goalStorage) - input string - environmentNamespace string - expected *domain.Goal - expectedErr error + setup func(*goalStorage) + input string + environmentId string + expected *domain.Goal + expectedErr error }{ { setup: func(s *goalStorage) { @@ -155,10 +155,10 @@ func TestGetGoal(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "", - environmentNamespace: "ns0", - expected: nil, - expectedErr: ErrGoalNotFound, + input: "", + environmentId: "ns0", + expected: nil, + expectedErr: ErrGoalNotFound, }, { setup: func(s *goalStorage) { @@ -168,8 +168,8 @@ func TestGetGoal(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: "id-0", - environmentNamespace: "ns0", + input: "id-0", + environmentId: "ns0", expected: &domain.Goal{ Goal: &proto.Goal{Id: "id-0"}, }, @@ -181,7 +181,7 @@ func TestGetGoal(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetGoal(context.Background(), p.input, p.environmentNamespace) + _, err := storage.GetGoal(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) } } @@ -191,16 +191,16 @@ func TestListGoals(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - setup func(*goalStorage) - whereParts []mysql.WherePart - orders []*mysql.Order - limit int - offset int - isInUseStatus *bool - environmentNamespace string - expected []*proto.Goal - expectedCursor int - expectedErr error + setup func(*goalStorage) + whereParts []mysql.WherePart + orders []*mysql.Order + limit int + offset int + isInUseStatus *bool + environmentId string + expected []*proto.Goal + expectedCursor int + expectedErr error }{ { setup: func(s *goalStorage) { @@ -208,15 +208,15 @@ func TestListGoals(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, errors.New("error")) }, - whereParts: nil, - orders: nil, - limit: 0, - offset: 0, - isInUseStatus: nil, - environmentNamespace: "", - expected: nil, - expectedCursor: 0, - expectedErr: errors.New("error"), + whereParts: nil, + orders: nil, + limit: 0, + offset: 0, + isInUseStatus: nil, + environmentId: "", + expected: nil, + expectedCursor: 0, + expectedErr: errors.New("error"), }, { setup: func(s *goalStorage) { @@ -239,13 +239,13 @@ func TestListGoals(t *testing.T) { orders: []*mysql.Order{ mysql.NewOrder("id", mysql.OrderDirectionAsc), }, - limit: 10, - offset: 5, - isInUseStatus: nil, - environmentNamespace: "ns0", - expected: []*proto.Goal{}, - expectedCursor: 5, - expectedErr: nil, + limit: 10, + offset: 5, + isInUseStatus: nil, + environmentId: "ns0", + expected: []*proto.Goal{}, + expectedCursor: 5, + expectedErr: nil, }, } for _, p := range patterns { @@ -260,7 +260,7 @@ func TestListGoals(t *testing.T) { p.limit, p.offset, p.isInUseStatus, - p.environmentNamespace, + p.environmentId, ) assert.Equal(t, p.expected, goals) assert.Equal(t, p.expectedCursor, cursor) diff --git a/pkg/experiment/storage/v2/mock/experiment.go b/pkg/experiment/storage/v2/mock/experiment.go index 5a84a6adfb..f18c2a203e 100644 --- a/pkg/experiment/storage/v2/mock/experiment.go +++ b/pkg/experiment/storage/v2/mock/experiment.go @@ -44,32 +44,32 @@ func (m *MockExperimentStorage) EXPECT() *MockExperimentStorageMockRecorder { } // CreateExperiment mocks base method. -func (m *MockExperimentStorage) CreateExperiment(ctx context.Context, e *domain.Experiment, environmentNamespace string) error { +func (m *MockExperimentStorage) CreateExperiment(ctx context.Context, e *domain.Experiment, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateExperiment", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "CreateExperiment", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateExperiment indicates an expected call of CreateExperiment. -func (mr *MockExperimentStorageMockRecorder) CreateExperiment(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockExperimentStorageMockRecorder) CreateExperiment(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).CreateExperiment), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).CreateExperiment), ctx, e, environmentId) } // GetExperiment mocks base method. -func (m *MockExperimentStorage) GetExperiment(ctx context.Context, id, environmentNamespace string) (*domain.Experiment, error) { +func (m *MockExperimentStorage) GetExperiment(ctx context.Context, id, environmentId string) (*domain.Experiment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetExperiment", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetExperiment", ctx, id, environmentId) ret0, _ := ret[0].(*domain.Experiment) ret1, _ := ret[1].(error) return ret0, ret1 } // GetExperiment indicates an expected call of GetExperiment. -func (mr *MockExperimentStorageMockRecorder) GetExperiment(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockExperimentStorageMockRecorder) GetExperiment(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).GetExperiment), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).GetExperiment), ctx, id, environmentId) } // ListExperiments mocks base method. @@ -90,15 +90,15 @@ func (mr *MockExperimentStorageMockRecorder) ListExperiments(ctx, whereParts, or } // UpdateExperiment mocks base method. -func (m *MockExperimentStorage) UpdateExperiment(ctx context.Context, e *domain.Experiment, environmentNamespace string) error { +func (m *MockExperimentStorage) UpdateExperiment(ctx context.Context, e *domain.Experiment, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateExperiment", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateExperiment", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateExperiment indicates an expected call of UpdateExperiment. -func (mr *MockExperimentStorageMockRecorder) UpdateExperiment(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockExperimentStorageMockRecorder) UpdateExperiment(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).UpdateExperiment), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateExperiment", reflect.TypeOf((*MockExperimentStorage)(nil).UpdateExperiment), ctx, e, environmentId) } diff --git a/pkg/experiment/storage/v2/mock/goal.go b/pkg/experiment/storage/v2/mock/goal.go index 2fa4278749..e9af872231 100644 --- a/pkg/experiment/storage/v2/mock/goal.go +++ b/pkg/experiment/storage/v2/mock/goal.go @@ -44,38 +44,38 @@ func (m *MockGoalStorage) EXPECT() *MockGoalStorageMockRecorder { } // CreateGoal mocks base method. -func (m *MockGoalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error { +func (m *MockGoalStorage) CreateGoal(ctx context.Context, g *domain.Goal, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateGoal", ctx, g, environmentNamespace) + ret := m.ctrl.Call(m, "CreateGoal", ctx, g, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateGoal indicates an expected call of CreateGoal. -func (mr *MockGoalStorageMockRecorder) CreateGoal(ctx, g, environmentNamespace any) *gomock.Call { +func (mr *MockGoalStorageMockRecorder) CreateGoal(ctx, g, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateGoal", reflect.TypeOf((*MockGoalStorage)(nil).CreateGoal), ctx, g, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateGoal", reflect.TypeOf((*MockGoalStorage)(nil).CreateGoal), ctx, g, environmentId) } // GetGoal mocks base method. -func (m *MockGoalStorage) GetGoal(ctx context.Context, id, environmentNamespace string) (*domain.Goal, error) { +func (m *MockGoalStorage) GetGoal(ctx context.Context, id, environmentId string) (*domain.Goal, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetGoal", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetGoal", ctx, id, environmentId) ret0, _ := ret[0].(*domain.Goal) ret1, _ := ret[1].(error) return ret0, ret1 } // GetGoal indicates an expected call of GetGoal. -func (mr *MockGoalStorageMockRecorder) GetGoal(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockGoalStorageMockRecorder) GetGoal(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGoal", reflect.TypeOf((*MockGoalStorage)(nil).GetGoal), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGoal", reflect.TypeOf((*MockGoalStorage)(nil).GetGoal), ctx, id, environmentId) } // ListGoals mocks base method. -func (m *MockGoalStorage) ListGoals(ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, environmentNamespace string) ([]*experiment.Goal, int, int64, error) { +func (m *MockGoalStorage) ListGoals(ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, environmentId string) ([]*experiment.Goal, int, int64, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListGoals", ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace) + ret := m.ctrl.Call(m, "ListGoals", ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId) ret0, _ := ret[0].([]*experiment.Goal) ret1, _ := ret[1].(int) ret2, _ := ret[2].(int64) @@ -84,21 +84,21 @@ func (m *MockGoalStorage) ListGoals(ctx context.Context, whereParts []mysql.Wher } // ListGoals indicates an expected call of ListGoals. -func (mr *MockGoalStorageMockRecorder) ListGoals(ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace any) *gomock.Call { +func (mr *MockGoalStorageMockRecorder) ListGoals(ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListGoals", reflect.TypeOf((*MockGoalStorage)(nil).ListGoals), ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListGoals", reflect.TypeOf((*MockGoalStorage)(nil).ListGoals), ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId) } // UpdateGoal mocks base method. -func (m *MockGoalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmentNamespace string) error { +func (m *MockGoalStorage) UpdateGoal(ctx context.Context, g *domain.Goal, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateGoal", ctx, g, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateGoal", ctx, g, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateGoal indicates an expected call of UpdateGoal. -func (mr *MockGoalStorageMockRecorder) UpdateGoal(ctx, g, environmentNamespace any) *gomock.Call { +func (mr *MockGoalStorageMockRecorder) UpdateGoal(ctx, g, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateGoal", reflect.TypeOf((*MockGoalStorage)(nil).UpdateGoal), ctx, g, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateGoal", reflect.TypeOf((*MockGoalStorage)(nil).UpdateGoal), ctx, g, environmentId) } diff --git a/pkg/experimentcalculator/experimentcalc/experiment_calculator.go b/pkg/experimentcalculator/experimentcalc/experiment_calculator.go index 8e98149562..e44b699488 100644 --- a/pkg/experimentcalculator/experimentcalc/experiment_calculator.go +++ b/pkg/experimentcalculator/experimentcalc/experiment_calculator.go @@ -95,7 +95,7 @@ func (e ExperimentCalculator) Run(ctx context.Context, request *domain.Experimen if calculationErr != nil { e.logger.Error("ExperimentCalculator failed to calculate experiment result", log.FieldsFromImcomingContext(ctx).AddFields( - zap.String("environmentNamespace", request.EnvironmentId), + zap.String("environmentId", request.EnvironmentId), zap.Any("experiment", request.Experiment), zap.Error(calculationErr), )..., @@ -108,7 +108,7 @@ func (e ExperimentCalculator) Run(ctx context.Context, request *domain.Experimen }); err != nil { e.logger.Error("ExperimentCalculator failed to update experiment result", log.FieldsFromImcomingContext(ctx).AddFields( - zap.String("environmentNamespace", request.EnvironmentId), + zap.String("environmentId", request.EnvironmentId), zap.Any("experiment", request.Experiment), zap.Error(err), )..., @@ -117,7 +117,7 @@ func (e ExperimentCalculator) Run(ctx context.Context, request *domain.Experimen } e.logger.Info("ExperimentCalculator calculated successfully", log.FieldsFromImcomingContext(ctx).AddFields( - zap.String("environmentNamespace", request.EnvironmentId), + zap.String("environmentId", request.EnvironmentId), zap.Any("experiment", request.Experiment), zap.Duration("elapsedTime", time.Since(startTime)), )..., @@ -151,12 +151,12 @@ func (e ExperimentCalculator) createExperimentResult( } for _, timestamp := range endAts { evalVc, evalErr := e.getEvaluationCount(ctx, &eventcounter.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: envNamespace, - StartAt: experiment.StartAt, - EndAt: timestamp, - FeatureId: experiment.FeatureId, - FeatureVersion: experiment.FeatureVersion, - VariationIds: variationIDs, + EnvironmentId: envNamespace, + StartAt: experiment.StartAt, + EndAt: timestamp, + FeatureId: experiment.FeatureId, + FeatureVersion: experiment.FeatureVersion, + VariationIds: variationIDs, }) if evalErr != nil { e.logger.Error("ExperimentCalculator failed to get evaluation count", @@ -169,13 +169,13 @@ func (e ExperimentCalculator) createExperimentResult( return nil, errFailedToGetEvalVariationCount } goalVc, goalErr := e.getGoalCount(ctx, &eventcounter.GetExperimentGoalCountRequest{ - EnvironmentNamespace: envNamespace, - StartAt: experiment.StartAt, - EndAt: timestamp, - GoalId: goalID, - FeatureId: experiment.FeatureId, - FeatureVersion: experiment.FeatureVersion, - VariationIds: variationIDs, + EnvironmentId: envNamespace, + StartAt: experiment.StartAt, + EndAt: timestamp, + GoalId: goalID, + FeatureId: experiment.FeatureId, + FeatureVersion: experiment.FeatureVersion, + VariationIds: variationIDs, }) if goalErr != nil { e.logger.Error("ExperimentCalculator failed to get goal count", diff --git a/pkg/experimentcalculator/storage/v2/experiment_result.go b/pkg/experimentcalculator/storage/v2/experiment_result.go index 04624be6a3..a146b28266 100644 --- a/pkg/experimentcalculator/storage/v2/experiment_result.go +++ b/pkg/experimentcalculator/storage/v2/experiment_result.go @@ -29,7 +29,7 @@ var ( ) type ExperimentResultStorage interface { - UpdateExperimentResult(ctx context.Context, environmentNamespace string, + UpdateExperimentResult(ctx context.Context, environmentId string, experimentResult *domain.ExperimentResult) error } @@ -43,7 +43,7 @@ func NewExperimentResultStorage(qe mysql.QueryExecer) ExperimentResultStorage { func (e experimentResultStorage) UpdateExperimentResult( ctx context.Context, - environmentNamespace string, + environmentId string, experimentResult *domain.ExperimentResult, ) error { if _, err := e.qe.ExecContext( @@ -53,7 +53,7 @@ func (e experimentResultStorage) UpdateExperimentResult( experimentResult.ExperimentId, experimentResult.UpdatedAt, mysql.JSONObject{Val: experimentResult}, - environmentNamespace, + environmentId, ); err != nil { return err } diff --git a/pkg/experimentcalculator/storage/v2/sql/update_experiment_result.sql b/pkg/experimentcalculator/storage/v2/sql/update_experiment_result.sql index 6800273e4f..c8116634fe 100644 --- a/pkg/experimentcalculator/storage/v2/sql/update_experiment_result.sql +++ b/pkg/experimentcalculator/storage/v2/sql/update_experiment_result.sql @@ -1,5 +1,5 @@ INSERT INTO experiment_result - (id, experiment_id, updated_at, data, environment_namespace) + (id, experiment_id, updated_at, data, environment_id) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE experiment_id = VALUES(experiment_id), diff --git a/pkg/feature/api/api.go b/pkg/feature/api/api.go index 1c83ad6f63..34a20dfe95 100644 --- a/pkg/feature/api/api.go +++ b/pkg/feature/api/api.go @@ -119,17 +119,17 @@ func (s *FeatureService) Register(server *grpc.Server) { func (s *FeatureService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -143,7 +143,7 @@ func (s *FeatureService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -159,7 +159,7 @@ func (s *FeatureService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -175,7 +175,7 @@ func (s *FeatureService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -194,14 +194,14 @@ func (s *FeatureService) checkEnvironmentRole( func (s *FeatureService) reportInternalServerError( ctx context.Context, err error, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) error { s.logger.Error( "Internal server error", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/feature/api/api_test.go b/pkg/feature/api/api_test.go index a8c5e0c459..eca8759751 100644 --- a/pkg/feature/api/api_test.go +++ b/pkg/feature/api/api_test.go @@ -44,9 +44,9 @@ import ( ) const ( - environmentNamespace = "test" - tag = "tag" - userID = "user-id" + environmentId = "test" + tag = "tag" + userID = "user-id" ) var ( diff --git a/pkg/feature/api/feature.go b/pkg/feature/api/feature.go index 7d1ec2ff10..f48b2d1418 100644 --- a/pkg/feature/api/feature.go +++ b/pkg/feature/api/feature.go @@ -62,7 +62,7 @@ func (s *FeatureService) GetFeature( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -70,7 +70,7 @@ func (s *FeatureService) GetFeature( return nil, err } featureStorage := v2fs.NewFeatureStorage(s.mysqlClient) - feature, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentNamespace) + feature, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2fs.ErrFeatureNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -87,7 +87,7 @@ func (s *FeatureService) GetFeature( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -102,7 +102,7 @@ func (s *FeatureService) GetFeature( if err := s.setLastUsedInfosToFeatureByChunk( ctx, []*featureproto.Feature{feature.Feature}, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ); err != nil { return nil, err @@ -117,7 +117,7 @@ func (s *FeatureService) GetFeatures( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -125,7 +125,7 @@ func (s *FeatureService) GetFeatures( return nil, err } whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } ids := make([]interface{}, 0, len(req.Ids)) for _, id := range req.Ids { @@ -147,7 +147,7 @@ func (s *FeatureService) GetFeatures( "Failed to get feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -169,7 +169,7 @@ func (s *FeatureService) ListFeatures( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -189,7 +189,7 @@ func (s *FeatureService) ListFeatures( req.SearchKeyword, req.OrderBy, req.OrderDirection, - req.EnvironmentNamespace, + req.EnvironmentId, ) } else { features, cursor, totalCount, err = s.listFeaturesFilteredByExperiment( @@ -205,7 +205,7 @@ func (s *FeatureService) ListFeatures( req.OrderBy, req.OrderDirection, req.HasExperiment.Value, - req.EnvironmentNamespace, + req.EnvironmentId, ) } if err != nil { @@ -230,12 +230,12 @@ func (s *FeatureService) listFeatures( searchKeyword string, orderBy featureproto.ListFeaturesRequest_OrderBy, orderDirection featureproto.ListFeaturesRequest_OrderDirection, - environmentNamespace string, + environmentId string, ) ([]*featureproto.Feature, string, int64, error) { localizer := locale.NewLocalizer(ctx) whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } tagValues := make([]interface{}, 0, len(tags)) for _, tag := range tags { @@ -278,7 +278,7 @@ func (s *FeatureService) listFeatures( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return nil, "", 0, err @@ -311,12 +311,12 @@ func (s *FeatureService) listFeatures( "Failed to list features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return nil, "", 0, err } - if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, environmentNamespace, localizer); err != nil { + if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, environmentId, localizer); err != nil { return nil, "", 0, err } return features, strconv.Itoa(nextCursor), totalCount, nil @@ -335,13 +335,13 @@ func (s *FeatureService) listFeaturesFilteredByExperiment( orderBy featureproto.ListFeaturesRequest_OrderBy, orderDirection featureproto.ListFeaturesRequest_OrderDirection, hasExperiment bool, - environmentNamespace string, + environmentId string, ) ([]*featureproto.Feature, string, int64, error) { localizer := locale.NewLocalizer(ctx) whereParts := []mysql.WherePart{ mysql.NewFilter("feature.deleted", "=", false), mysql.NewFilter("experiment.deleted", "=", false), - mysql.NewFilter("feature.environment_namespace", "=", environmentNamespace), + mysql.NewFilter("feature.environment_id", "=", environmentId), mysql.NewNullFilter("experiment.id", !hasExperiment), } tagValues := make([]interface{}, 0, len(tags)) @@ -388,7 +388,7 @@ func (s *FeatureService) listFeaturesFilteredByExperiment( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return nil, "", 0, err @@ -421,12 +421,12 @@ func (s *FeatureService) listFeaturesFilteredByExperiment( "Failed to list features filtered by experiment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return nil, "", 0, err } - if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, environmentNamespace, localizer); err != nil { + if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, environmentId, localizer); err != nil { return nil, "", 0, err } return features, strconv.Itoa(nextCursor), totalCount, nil @@ -474,7 +474,7 @@ func (s *FeatureService) ListEnabledFeatures( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -482,7 +482,7 @@ func (s *FeatureService) ListEnabledFeatures( mysql.NewFilter("archived", "=", false), mysql.NewFilter("enabled", "=", true), mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } tagValues := make([]interface{}, 0, len(req.Tags)) for _, tag := range req.Tags { @@ -523,12 +523,12 @@ func (s *FeatureService) ListEnabledFeatures( "Failed to list enabled features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, req.EnvironmentNamespace, localizer); err != nil { + if err = s.setLastUsedInfosToFeatureByChunk(ctx, features, req.EnvironmentId, localizer); err != nil { return nil, err } return &featureproto.ListEnabledFeaturesResponse{ @@ -544,7 +544,7 @@ func (s *FeatureService) CreateFeature( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -584,22 +584,22 @@ func (s *FeatureService) CreateFeature( return nil, dt.Err() } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { - if err := s.upsertTags(ctx, tx, req.Command.Tags, req.EnvironmentNamespace); err != nil { + if err := s.upsertTags(ctx, tx, req.Command.Tags, req.EnvironmentId); err != nil { return err } featureStorage := v2fs.NewFeatureStorage(tx) - if err := featureStorage.CreateFeature(ctx, feature, req.EnvironmentNamespace); err != nil { + if err := featureStorage.CreateFeature(ctx, feature, req.EnvironmentId); err != nil { s.logger.Error( "Failed to store feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } - handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentNamespace, "") + handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentId, "") if err != nil { return err } @@ -608,7 +608,7 @@ func (s *FeatureService) CreateFeature( "Failed to create feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -630,7 +630,7 @@ func (s *FeatureService) CreateFeature( "Failed to create feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -647,7 +647,7 @@ func (s *FeatureService) CreateFeature( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -713,7 +713,7 @@ func (s *FeatureService) UpdateFeature( featureStorage := v2fs.NewFeatureStorage(tx) whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentId), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } features, _, _, err := featureStorage.ListFeatures( ctx, @@ -853,7 +853,7 @@ func (s *FeatureService) UpdateFeatureDetails( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -867,10 +867,10 @@ func (s *FeatureService) UpdateFeatureDetails( } return nil, dt.Err() } - if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } var handler *command.FeatureCommandHandler = command.NewEmptyFeatureCommandHandler() @@ -893,18 +893,18 @@ func (s *FeatureService) UpdateFeatureDetails( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { featureStorage := v2fs.NewFeatureStorage(tx) - feature, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentNamespace) + feature, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentId) if err != nil { s.logger.Error( "Failed to get feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } - handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentNamespace, req.Comment) + handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentId, req.Comment) if err != nil { return err } @@ -914,7 +914,7 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to increment feature version", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -926,7 +926,7 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to rename feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -939,7 +939,7 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to change feature description", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -953,7 +953,7 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to add tag to feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -963,7 +963,7 @@ func (s *FeatureService) UpdateFeatureDetails( for _, c := range req.AddTagCommands { tags = append(tags, c.Tag) } - if err := s.upsertTags(ctx, tx, tags, req.EnvironmentNamespace); err != nil { + if err := s.upsertTags(ctx, tx, tags, req.EnvironmentId); err != nil { return err } } @@ -975,20 +975,20 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to remove tag from feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } } } - err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentNamespace) + err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentId) if err != nil { s.logger.Error( "Failed to update feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1003,7 +1003,7 @@ func (s *FeatureService) UpdateFeatureDetails( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1021,15 +1021,15 @@ func (s *FeatureService) UpdateFeatureDetails( func (s *FeatureService) existsRunningExperiment( ctx context.Context, - featureID, environmentNamespace string, + featureID, environmentId string, ) (bool, error) { - experiments, err := s.listExperiments(ctx, environmentNamespace, featureID) + experiments, err := s.listExperiments(ctx, environmentId, featureID) if err != nil { s.logger.Error( "Failed to list experiments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return false, err @@ -1050,15 +1050,15 @@ func containsRunningExperiment(experiments []*experimentproto.Experiment) bool { func (s *FeatureService) existsRunningProgressiveRollout( ctx context.Context, - featureID, environmentNamespace string, + featureID, environmentId string, ) (bool, error) { - progressiveRollouts, err := s.listProgressiveRollouts(ctx, featureID, environmentNamespace) + progressiveRollouts, err := s.listProgressiveRollouts(ctx, featureID, environmentId) if err != nil { s.logger.Error( "Failed to list progressiveRollouts", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return false, err @@ -1080,7 +1080,7 @@ func containsRunningProgressiveRollout(progressiveRollouts []*autoopsproto.Progr func (s *FeatureService) listProgressiveRollouts( ctx context.Context, - featureID, environmentNamespace string, + featureID, environmentId string, ) ([]*autoopsproto.ProgressiveRollout, error) { progressiveRollouts := make([]*autoopsproto.ProgressiveRollout, 0) cursor := "" @@ -1088,10 +1088,10 @@ func (s *FeatureService) listProgressiveRollouts( resp, err := s.autoOpsClient.ListProgressiveRollouts( ctx, &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentNamespace, - PageSize: listRequestSize, - Cursor: cursor, - FeatureIds: []string{featureID}, + EnvironmentId: environmentId, + PageSize: listRequestSize, + Cursor: cursor, + FeatureIds: []string{featureID}, }, ) if err != nil { @@ -1118,18 +1118,18 @@ func (s *FeatureService) EnableFeature( } editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } if err := s.updateFeature( ctx, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, localizer, editor, @@ -1139,7 +1139,7 @@ func (s *FeatureService) EnableFeature( "Failed to enable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -1160,18 +1160,18 @@ func (s *FeatureService) DisableFeature( } editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } if err := s.updateFeature( ctx, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, localizer, editor, @@ -1181,7 +1181,7 @@ func (s *FeatureService) DisableFeature( "Failed to disable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -1201,7 +1201,7 @@ func (s *FeatureService) ArchiveFeature( whereParts := []mysql.WherePart{ mysql.NewFilter("archived", "=", false), mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } featureStorage := v2fs.NewFeatureStorage(s.mysqlClient) features, _, _, err := featureStorage.ListFeatures( @@ -1216,7 +1216,7 @@ func (s *FeatureService) ArchiveFeature( "Failed to list feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -1233,7 +1233,7 @@ func (s *FeatureService) ArchiveFeature( "Feature not found", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -1258,18 +1258,18 @@ func (s *FeatureService) ArchiveFeature( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } if err := s.updateFeature( ctx, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, localizer, editor, @@ -1279,7 +1279,7 @@ func (s *FeatureService) ArchiveFeature( "Failed to archive feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -1298,18 +1298,18 @@ func (s *FeatureService) UnarchiveFeature( } editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } if err := s.updateFeature( ctx, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, localizer, editor, @@ -1319,7 +1319,7 @@ func (s *FeatureService) UnarchiveFeature( "Failed to unarchive feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -1338,18 +1338,18 @@ func (s *FeatureService) DeleteFeature( } editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } if err := s.updateFeature( ctx, req.Command, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, localizer, editor, @@ -1359,7 +1359,7 @@ func (s *FeatureService) DeleteFeature( "Failed to delete feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -1371,7 +1371,7 @@ func (s *FeatureService) DeleteFeature( func (s *FeatureService) updateFeature( ctx context.Context, cmd command.Command, - id, environmentNamespace, comment string, + id, environmentId, comment string, localizer locale.Localizer, editor *eventproto.Editor, ) error { @@ -1415,18 +1415,18 @@ func (s *FeatureService) updateFeature( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { featureStorage := v2fs.NewFeatureStorage(tx) - feature, err := featureStorage.GetFeature(ctx, id, environmentNamespace) + feature, err := featureStorage.GetFeature(ctx, id, environmentId) if err != nil { s.logger.Error( "Failed to get feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } - handler, err = command.NewFeatureCommandHandler(editor, feature, environmentNamespace, comment) + handler, err = command.NewFeatureCommandHandler(editor, feature, environmentId, comment) if err != nil { return err } @@ -1436,7 +1436,7 @@ func (s *FeatureService) updateFeature( "Failed to increment feature version", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err @@ -1444,7 +1444,7 @@ func (s *FeatureService) updateFeature( // We must stop the progressive rollout if it contains a `DisableFeatureCommand` switch cmd.(type) { case *featureproto.DisableFeatureCommand: - if err := s.stopProgressiveRollout(ctx, tx, environmentNamespace, feature.Id); err != nil { + if err := s.stopProgressiveRollout(ctx, tx, environmentId, feature.Id); err != nil { return err } } @@ -1453,17 +1453,17 @@ func (s *FeatureService) updateFeature( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } - if err := featureStorage.UpdateFeature(ctx, feature, environmentNamespace); err != nil { + if err := featureStorage.UpdateFeature(ctx, feature, environmentId); err != nil { s.logger.Error( "Failed to update feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err @@ -1478,7 +1478,7 @@ func (s *FeatureService) updateFeature( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1544,7 +1544,7 @@ func (s *FeatureService) UpdateFeatureVariations( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -1558,10 +1558,10 @@ func (s *FeatureService) UpdateFeatureVariations( } return nil, dt.Err() } - if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } commands := make([]command.Command, 0, len(req.Commands)) @@ -1572,7 +1572,7 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to unmarshal command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -1599,7 +1599,7 @@ func (s *FeatureService) UpdateFeatureVariations( } whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { featureStorage := v2fs.NewFeatureStorage(tx) @@ -1615,7 +1615,7 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to list feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1626,7 +1626,7 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to find feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1636,7 +1636,7 @@ func (s *FeatureService) UpdateFeatureVariations( if err := s.validateFeatureVariationsCommand( ctx, features, - req.EnvironmentNamespace, + req.EnvironmentId, f, cmd, localizer, @@ -1645,13 +1645,13 @@ func (s *FeatureService) UpdateFeatureVariations( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } } - handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentNamespace, req.Comment) + handler, err = command.NewFeatureCommandHandler(editor, feature, req.EnvironmentId, req.Comment) if err != nil { return err } @@ -1661,7 +1661,7 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to increment feature version", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1674,19 +1674,19 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } } - err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentNamespace) + err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentId) if err != nil { s.logger.Error( "Failed to update feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1701,7 +1701,7 @@ func (s *FeatureService) UpdateFeatureVariations( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1732,14 +1732,14 @@ func (s *FeatureService) UpdateFeatureTargeting( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } if err := validateUpdateFeatureTargetingRequest(req, localizer); err != nil { return nil, err } - if err := s.validateEnvironmentSettings(ctx, req.EnvironmentNamespace, req.Comment, localizer); err != nil { + if err := s.validateEnvironmentSettings(ctx, req.EnvironmentId, req.Comment, localizer); err != nil { return nil, err } commands := make([]command.Command, 0, len(req.Commands)) @@ -1750,14 +1750,14 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to unmarshal command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } commands = append(commands, cmd) } - if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.validateFeatureStatus(ctx, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } // TODO: clean this up. @@ -1787,7 +1787,7 @@ func (s *FeatureService) UpdateFeatureTargeting( err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } featureStorage := v2fs.NewFeatureStorage(tx) features, _, _, err := featureStorage.ListFeatures( @@ -1802,7 +1802,7 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to list feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1813,7 +1813,7 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to find feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1822,7 +1822,7 @@ func (s *FeatureService) UpdateFeatureTargeting( if err := s.validateFeatureTargetingCommand( ctx, req.From, - req.EnvironmentNamespace, + req.EnvironmentId, features, f, cmd, @@ -1832,7 +1832,7 @@ func (s *FeatureService) UpdateFeatureTargeting( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1842,7 +1842,7 @@ func (s *FeatureService) UpdateFeatureTargeting( handler, err = command.NewFeatureCommandHandler( editor, feature, - req.EnvironmentNamespace, + req.EnvironmentId, req.Comment, ) if err != nil { @@ -1854,7 +1854,7 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to increment feature version", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1863,7 +1863,7 @@ func (s *FeatureService) UpdateFeatureTargeting( // We must stop the progressive rollout if it contains a `DisableFeatureCommand` switch cmd.(type) { case *featureproto.DisableFeatureCommand: - if err := s.stopProgressiveRollout(ctx, tx, req.EnvironmentNamespace, feature.Id); err != nil { + if err := s.stopProgressiveRollout(ctx, tx, req.EnvironmentId, feature.Id); err != nil { return err } } @@ -1874,19 +1874,19 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } } - err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentNamespace) + err = featureStorage.UpdateFeature(ctx, feature, req.EnvironmentId) if err != nil { s.logger.Error( "Failed to update feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -1901,7 +1901,7 @@ func (s *FeatureService) UpdateFeatureTargeting( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1920,11 +1920,11 @@ func (s *FeatureService) UpdateFeatureTargeting( func (s *FeatureService) stopProgressiveRollout( ctx context.Context, tx mysql.Transaction, - environmentNamespace, featureID string) error { + EnvironmentId, featureID string) error { storage := v2ao.NewProgressiveRolloutStorage(tx) ids := convToInterfaceSlice([]string{featureID}) whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", EnvironmentId), mysql.NewInFilter("feature_id", ids), } list, _, _, err := storage.ListProgressiveRollouts(ctx, whereParts, nil, 0, 0) @@ -1937,7 +1937,7 @@ func (s *FeatureService) stopProgressiveRollout( if err := r.Stop(autoopsproto.ProgressiveRollout_USER); err != nil { return err } - if err := storage.UpdateProgressiveRollout(ctx, r, environmentNamespace); err != nil { + if err := storage.UpdateProgressiveRollout(ctx, r, EnvironmentId); err != nil { return err } } @@ -1975,7 +1975,7 @@ func (s *FeatureService) evaluateFeatures( ctx context.Context, features []*featureproto.Feature, user *userproto.User, - environmentNamespace string, + EnvironmentId string, tag string, localizer locale.Localizer, ) (*featureproto.UserEvaluations, error) { @@ -1986,13 +1986,13 @@ func (s *FeatureService) evaluateFeatures( mapIDs[id] = struct{}{} } } - mapSegmentUsers, err := s.listSegmentUsers(ctx, mapIDs, environmentNamespace) + mapSegmentUsers, err := s.listSegmentUsers(ctx, mapIDs, EnvironmentId) if err != nil { s.logger.Error( "Failed to list segments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), zap.String("userId", user.Id), zap.String("tag", tag), )..., @@ -2005,7 +2005,7 @@ func (s *FeatureService) evaluateFeatures( "Failed to evaluate", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), zap.String("userId", user.Id), zap.String("tag", tag), )..., @@ -2024,9 +2024,9 @@ func (s *FeatureService) evaluateFeatures( func (s *FeatureService) getFeatures( ctx context.Context, - environmentNamespace string, + EnvironmentId string, ) ([]*featureproto.Feature, error) { - features, err := s.featuresCache.Get(environmentNamespace) + features, err := s.featuresCache.Get(EnvironmentId) if err == nil { return features.Features, nil } @@ -2034,7 +2034,7 @@ func (s *FeatureService) getFeatures( "No cached data for Features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), )..., ) fs, _, _, err := s.listFeatures( @@ -2049,14 +2049,14 @@ func (s *FeatureService) getFeatures( "", featureproto.ListFeaturesRequest_DEFAULT, featureproto.ListFeaturesRequest_ASC, - environmentNamespace, + EnvironmentId, ) if err != nil { s.logger.Error( "Failed to retrive features from storage", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), )..., ) return nil, err @@ -2067,7 +2067,7 @@ func (s *FeatureService) getFeatures( func (s *FeatureService) listSegmentUsers( ctx context.Context, mapSegmentIDs map[string]struct{}, - environmentNamespace string, + EnvironmentId string, ) (map[string][]*featureproto.SegmentUser, error) { if len(mapSegmentIDs) == 0 { return nil, nil @@ -2075,9 +2075,9 @@ func (s *FeatureService) listSegmentUsers( users := make(map[string][]*featureproto.SegmentUser) for segmentID := range mapSegmentIDs { s, err, _ := s.flightgroup.Do( - s.segmentFlightID(environmentNamespace, segmentID), + s.segmentFlightID(EnvironmentId, segmentID), func() (interface{}, error) { - return s.getSegmentUsers(ctx, segmentID, environmentNamespace) + return s.getSegmentUsers(ctx, segmentID, EnvironmentId) }, ) if err != nil { @@ -2089,15 +2089,15 @@ func (s *FeatureService) listSegmentUsers( return users, nil } -func (s *FeatureService) segmentFlightID(environmentNamespace, segmentID string) string { - return fmt.Sprintf("%s:%s", environmentNamespace, segmentID) +func (s *FeatureService) segmentFlightID(EnvironmentId, segmentID string) string { + return fmt.Sprintf("%s:%s", EnvironmentId, segmentID) } func (s *FeatureService) getSegmentUsers( ctx context.Context, - segmentID, environmentNamespace string, + segmentID, EnvironmentId string, ) ([]*featureproto.SegmentUser, error) { - segmentUsers, err := s.segmentUsersCache.Get(segmentID, environmentNamespace) + segmentUsers, err := s.segmentUsersCache.Get(segmentID, EnvironmentId) if err == nil { return segmentUsers.Users, nil } @@ -2105,13 +2105,13 @@ func (s *FeatureService) getSegmentUsers( "No cached data for SegmentUsers", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), zap.String("segmentId", segmentID), )..., ) req := &featureproto.ListSegmentUsersRequest{ - SegmentId: segmentID, - EnvironmentNamespace: environmentNamespace, + SegmentId: segmentID, + EnvironmentId: EnvironmentId, } res, err := s.ListSegmentUsers(ctx, req) if err != nil { @@ -2119,7 +2119,7 @@ func (s *FeatureService) getSegmentUsers( "Failed to retrieve segment users from storage", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), zap.String("segmentId", segmentID), )..., ) @@ -2131,7 +2131,7 @@ func (s *FeatureService) getSegmentUsers( func (s *FeatureService) setLastUsedInfosToFeatureByChunk( ctx context.Context, features []*featureproto.Feature, - environmentNamespace string, + EnvironmentId string, localizer locale.Localizer, ) error { for i := 0; i < len(features); i += getMultiChunkSize { @@ -2139,7 +2139,7 @@ func (s *FeatureService) setLastUsedInfosToFeatureByChunk( if end > len(features) { end = len(features) } - if err := s.setLastUsedInfosToFeature(ctx, features[i:end], environmentNamespace, localizer); err != nil { + if err := s.setLastUsedInfosToFeature(ctx, features[i:end], EnvironmentId, localizer); err != nil { return err } } @@ -2149,7 +2149,7 @@ func (s *FeatureService) setLastUsedInfosToFeatureByChunk( func (s *FeatureService) setLastUsedInfosToFeature( ctx context.Context, features []*featureproto.Feature, - environmentNamespace string, + EnvironmentId string, localizer locale.Localizer, ) error { ids := make([]string, 0, len(features)) @@ -2157,13 +2157,13 @@ func (s *FeatureService) setLastUsedInfosToFeature( ids = append(ids, domain.FeatureLastUsedInfoID(f.Id, f.Version)) } storage := v2fs.NewFeatureLastUsedInfoStorage(s.mysqlClient) - fluiList, err := storage.GetFeatureLastUsedInfos(ctx, ids, environmentNamespace) + fluiList, err := storage.GetFeatureLastUsedInfos(ctx, ids, EnvironmentId) if err != nil { s.logger.Error( "Failed to get feature last used infos", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2193,7 +2193,7 @@ func (s *FeatureService) EvaluateFeatures( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -2202,15 +2202,15 @@ func (s *FeatureService) EvaluateFeatures( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } fs, err, _ := s.flightgroup.Do( - req.EnvironmentNamespace, + req.EnvironmentId, func() (interface{}, error) { - return s.getFeatures(ctx, req.EnvironmentNamespace) + return s.getFeatures(ctx, req.EnvironmentId) }, ) if err != nil { @@ -2218,7 +2218,7 @@ func (s *FeatureService) EvaluateFeatures( "Failed to list features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2237,7 +2237,7 @@ func (s *FeatureService) EvaluateFeatures( "Failed to get target features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2249,13 +2249,13 @@ func (s *FeatureService) EvaluateFeatures( } return nil, dt.Err() } - userEvaluations, err := s.evaluateFeatures(ctx, features, req.User, req.EnvironmentNamespace, req.Tag, localizer) + userEvaluations, err := s.evaluateFeatures(ctx, features, req.User, req.EnvironmentId, req.Tag, localizer) if err != nil { s.logger.Error( "Failed to evaluate features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2275,7 +2275,7 @@ func (s *FeatureService) EvaluateFeatures( "Failed to find evaluation", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2331,16 +2331,16 @@ func (*FeatureService) findEvaluation( func (s *FeatureService) listExperiments( ctx context.Context, - environmentNamespace, featureID string, + EnvironmentId, featureID string, ) ([]*experimentproto.Experiment, error) { experiments := []*experimentproto.Experiment{} cursor := "" for { resp, err := s.experimentClient.ListExperiments(ctx, &experimentproto.ListExperimentsRequest{ - FeatureId: featureID, - PageSize: listRequestSize, - Cursor: cursor, - EnvironmentNamespace: environmentNamespace, + FeatureId: featureID, + PageSize: listRequestSize, + Cursor: cursor, + EnvironmentId: EnvironmentId, }) if err != nil { return nil, err @@ -2364,13 +2364,13 @@ func (s *FeatureService) CloneFeature( } editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.Command.EnvironmentNamespace, localizer, + req.Command.EnvironmentId, localizer, ) if err != nil { return nil, err } featureStorage := v2fs.NewFeatureStorage(s.mysqlClient) - f, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentNamespace) + f, err := featureStorage.GetFeature(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2fs.ErrFeatureNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -2387,7 +2387,7 @@ func (s *FeatureService) CloneFeature( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2425,17 +2425,17 @@ func (s *FeatureService) CloneFeature( return nil, dt.Err() } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { - if err := featureStorage.CreateFeature(ctx, feature, req.Command.EnvironmentNamespace); err != nil { + if err := featureStorage.CreateFeature(ctx, feature, req.Command.EnvironmentId); err != nil { s.logger.Error( "Failed to store feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.Command.EnvironmentNamespace), + zap.String("environmentId", req.Command.EnvironmentId), )..., ) return err } - handler, err = command.NewFeatureCommandHandler(editor, feature, req.Command.EnvironmentNamespace, "") + handler, err = command.NewFeatureCommandHandler(editor, feature, req.Command.EnvironmentId, "") if err != nil { return err } @@ -2444,7 +2444,7 @@ func (s *FeatureService) CloneFeature( "Failed to clone feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNameSpace", req.Command.EnvironmentNamespace), + zap.String("environmentId", req.Command.EnvironmentId), )..., ) return err @@ -2466,7 +2466,7 @@ func (s *FeatureService) CloneFeature( "Failed to clone feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.Command.EnvironmentNamespace), + zap.String("environmentId", req.Command.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -2483,7 +2483,7 @@ func (s *FeatureService) CloneFeature( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNameSpace", req.Command.EnvironmentNamespace), + zap.String("environmentId", req.Command.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/feature/api/feature_test.go b/pkg/feature/api/feature_test.go index 7d85e3e88f..5566ffd570 100644 --- a/pkg/feature/api/feature_test.go +++ b/pkg/feature/api/feature_test.go @@ -140,8 +140,8 @@ func TestGetFeatureMySQL(t *testing.T) { "accept-language": []string{"ja"}, }) req := &featureproto.GetFeatureRequest{ - EnvironmentNamespace: "ns0", - Id: p.input, + EnvironmentId: "ns0", + Id: p.input, } localizer := locale.NewLocalizer(ctx) @@ -246,8 +246,8 @@ func TestGetFeaturesMySQL(t *testing.T) { p.setup(fs) } req := &featureproto.GetFeaturesRequest{ - EnvironmentNamespace: "ns0", - Ids: p.input, + EnvironmentId: "ns0", + Ids: p.input, } ctx := p.context ctx = metadata.NewIncomingContext(ctx, metadata.MD{ @@ -267,23 +267,23 @@ func TestListFeaturesMySQL(t *testing.T) { defer mockController.Finish() patterns := []struct { - desc string - service *FeatureService - context context.Context - setup func(*FeatureService) - orderBy featureproto.ListFeaturesRequest_OrderBy - hasExperiment bool - environmentNamespace string - getExpectedErr func(localizer locale.Localizer) error + desc string + service *FeatureService + context context.Context + setup func(*FeatureService) + orderBy featureproto.ListFeaturesRequest_OrderBy + hasExperiment bool + environmentId string + getExpectedErr func(localizer locale.Localizer) error }{ { - desc: "error: invalid order by", - service: createFeatureService(mockController), - context: createContextWithToken(), - setup: nil, - orderBy: featureproto.ListFeaturesRequest_OrderBy(999), - hasExperiment: false, - environmentNamespace: "ns0", + desc: "error: invalid order by", + service: createFeatureService(mockController), + context: createContextWithToken(), + setup: nil, + orderBy: featureproto.ListFeaturesRequest_OrderBy(999), + hasExperiment: false, + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusInvalidOrderBy, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "order_by"), localizer) }, @@ -306,10 +306,10 @@ func TestListFeaturesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - orderBy: featureproto.ListFeaturesRequest_DEFAULT, - hasExperiment: false, - environmentNamespace: "ns0", - getExpectedErr: func(localizer locale.Localizer) error { return nil }, + orderBy: featureproto.ListFeaturesRequest_DEFAULT, + hasExperiment: false, + environmentId: "ns0", + getExpectedErr: func(localizer locale.Localizer) error { return nil }, }, { desc: "success has Experiment", @@ -329,9 +329,9 @@ func TestListFeaturesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - orderBy: featureproto.ListFeaturesRequest_DEFAULT, - hasExperiment: true, - environmentNamespace: "ns0", + orderBy: featureproto.ListFeaturesRequest_DEFAULT, + hasExperiment: true, + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -354,19 +354,19 @@ func TestListFeaturesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - orderBy: featureproto.ListFeaturesRequest_DEFAULT, - hasExperiment: false, - environmentNamespace: "ns0", - getExpectedErr: func(localizer locale.Localizer) error { return nil }, + orderBy: featureproto.ListFeaturesRequest_DEFAULT, + hasExperiment: false, + environmentId: "ns0", + getExpectedErr: func(localizer locale.Localizer) error { return nil }, }, { - desc: "errPermissionDenied", - service: createFeatureServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), - context: createContextWithTokenRoleUnassigned(), - setup: func(s *FeatureService) {}, - orderBy: featureproto.ListFeaturesRequest_DEFAULT, - hasExperiment: false, - environmentNamespace: "ns0", + desc: "errPermissionDenied", + service: createFeatureServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), + context: createContextWithTokenRoleUnassigned(), + setup: func(s *FeatureService) {}, + orderBy: featureproto.ListFeaturesRequest_DEFAULT, + hasExperiment: false, + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) }, @@ -379,9 +379,9 @@ func TestListFeaturesMySQL(t *testing.T) { p.setup(service) } req := &featureproto.ListFeaturesRequest{ - OrderBy: p.orderBy, - EnvironmentNamespace: "ns0", - HasExperiment: &wrappers.BoolValue{Value: p.hasExperiment}, + OrderBy: p.orderBy, + EnvironmentId: "ns0", + HasExperiment: &wrappers.BoolValue{Value: p.hasExperiment}, } ctx := p.context ctx = metadata.NewIncomingContext(ctx, metadata.MD{ @@ -422,7 +422,7 @@ func TestCreateFeatureMySQL(t *testing.T) { variations []*featureproto.Variation tags []string defaultOnVariationIndex, defaultOffVariationIndex *wrappers.Int32Value - environmentNamespace string + environmentId string expected error }{ { @@ -434,7 +434,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: nil, defaultOnVariationIndex: nil, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { @@ -446,7 +446,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: nil, defaultOnVariationIndex: nil, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusInvalidID, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "id")), }, { @@ -458,7 +458,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: nil, defaultOnVariationIndex: nil, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusMissingName, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "name")), }, { @@ -470,18 +470,18 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: nil, defaultOnVariationIndex: nil, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusMissingFeatureVariations, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "variations")), }, { - setup: nil, - id: "Bucketeer-id-2019", - name: "name", - description: "error: statusMissingFeatureTags", - variations: variations, - tags: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingFeatureTags, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "tags")), + setup: nil, + id: "Bucketeer-id-2019", + name: "name", + description: "error: statusMissingFeatureTags", + variations: variations, + tags: nil, + environmentId: "ns0", + expected: createError(statusMissingFeatureTags, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "tags")), }, { setup: nil, @@ -492,7 +492,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: tags, defaultOnVariationIndex: nil, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusMissingDefaultOnVariation, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "default_on_variation")), }, { @@ -504,7 +504,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: tags, defaultOnVariationIndex: &wrappers.Int32Value{Value: int32(0)}, defaultOffVariationIndex: nil, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusMissingDefaultOffVariation, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "default_off_variation")), }, { @@ -521,7 +521,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: tags, defaultOnVariationIndex: &wrappers.Int32Value{Value: int32(0)}, defaultOffVariationIndex: &wrappers.Int32Value{Value: int32(1)}, - environmentNamespace: "ns0", + environmentId: "ns0", expected: createError(statusAlreadyExists, localizer.MustLocalize(locale.AlreadyExistsError)), }, { @@ -539,7 +539,7 @@ func TestCreateFeatureMySQL(t *testing.T) { tags: tags, defaultOnVariationIndex: &wrappers.Int32Value{Value: int32(0)}, defaultOffVariationIndex: &wrappers.Int32Value{Value: int32(1)}, - environmentNamespace: "ns0", + environmentId: "ns0", expected: nil, }, } @@ -559,7 +559,7 @@ func TestCreateFeatureMySQL(t *testing.T) { DefaultOnVariationIndex: p.defaultOnVariationIndex, DefaultOffVariationIndex: p.defaultOffVariationIndex, }, - EnvironmentNamespace: p.environmentNamespace, + EnvironmentId: p.environmentId, } actual, err := service.CreateFeature(ctx, req) if p.expected == nil { @@ -580,10 +580,10 @@ func TestSetFeatureToLastUsedInfosByChunk(t *testing.T) { }) localizer := locale.NewLocalizer(ctx) patterns := []struct { - setup func(*FeatureService) - input []*featureproto.Feature - environmentNamespace string - expected error + setup func(*FeatureService) + input []*featureproto.Feature + environmentId string + expected error }{ { setup: func(s *FeatureService) { @@ -601,14 +601,14 @@ func TestSetFeatureToLastUsedInfosByChunk(t *testing.T) { Version: 1, }, }, - environmentNamespace: "ns0", - expected: nil, + environmentId: "ns0", + expected: nil, }, } for _, p := range patterns { fs := createFeatureServiceNew(mockController) p.setup(fs) - err := fs.setLastUsedInfosToFeatureByChunk(context.Background(), p.input, p.environmentNamespace, localizer) + err := fs.setLastUsedInfosToFeatureByChunk(context.Background(), p.input, p.environmentId, localizer) assert.Equal(t, p.expected, err) } } @@ -715,7 +715,7 @@ func TestEvaluateFeatures(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, errors.New("error")) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusInternal, localizer.MustLocalize(locale.InternalServerError), localizer) @@ -832,7 +832,7 @@ func TestEvaluateFeatures(t *testing.T) { }, }, nil) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "user-id-1"}, EnvironmentNamespace: "ns0", Tag: "ios"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "user-id-1"}, EnvironmentId: "ns0", Tag: "ios"}, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ Evaluations: []*featureproto.Evaluation{ @@ -960,7 +960,7 @@ func TestEvaluateFeatures(t *testing.T) { }, }, nil) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "user-id-1"}, EnvironmentNamespace: "ns0", Tag: "web"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "user-id-1"}, EnvironmentId: "ns0", Tag: "web"}, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ Evaluations: []*featureproto.Evaluation{}, @@ -990,7 +990,7 @@ func TestEvaluateFeatures(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ Evaluations: []*featureproto.Evaluation{}, @@ -1055,7 +1055,7 @@ func TestEvaluateFeatures(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, errors.New("error")) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusInternal, localizer.MustLocalize(locale.InternalServerError), localizer) @@ -1120,7 +1120,7 @@ func TestEvaluateFeatures(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ Evaluations: []*featureproto.Evaluation{ @@ -1157,7 +1157,7 @@ func TestEvaluateFeatures(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ Evaluations: []*featureproto.Evaluation{}, @@ -1172,7 +1172,7 @@ func TestEvaluateFeatures(t *testing.T) { context: createContextWithTokenRoleUnassigned(), service: createFeatureServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *FeatureService) {}, - input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentNamespace: "ns0", Tag: "android"}, + input: &featureproto.EvaluateFeaturesRequest{User: &userproto.User{Id: "test-id"}, EnvironmentId: "ns0", Tag: "android"}, expected: nil, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) @@ -1326,10 +1326,10 @@ func TestEvaluateSingleFeature(t *testing.T) { ).Return(rows, nil) }, input: &featureproto.EvaluateFeaturesRequest{ - User: &userproto.User{Id: "user-id"}, - EnvironmentNamespace: "ns0", - Tag: "android", - FeatureId: "fid-2", + User: &userproto.User{Id: "user-id"}, + EnvironmentId: "ns0", + Tag: "android", + FeatureId: "fid-2", }, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ @@ -1410,10 +1410,10 @@ func TestEvaluateSingleFeature(t *testing.T) { }}, nil) }, input: &featureproto.EvaluateFeaturesRequest{ - User: &userproto.User{Id: "user-id"}, - EnvironmentNamespace: "ns0", - Tag: "android", - FeatureId: "fid-1", + User: &userproto.User{Id: "user-id"}, + EnvironmentId: "ns0", + Tag: "android", + FeatureId: "fid-1", }, expected: &featureproto.EvaluateFeaturesResponse{ UserEvaluations: &featureproto.UserEvaluations{ @@ -1520,7 +1520,7 @@ func TestListEnabledFeaturesMySQL(t *testing.T) { "accept-language": []string{"ja"}, }) req := &featureproto.ListEnabledFeaturesRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", } localizer := locale.NewLocalizer(ctx) @@ -1700,9 +1700,9 @@ func TestPermissionDenied(t *testing.T) { _, err := fs.CloneFeature(ctx, &featureproto.CloneFeatureRequest{ Id: "id", Command: &featureproto.CloneFeatureCommand{ - EnvironmentNamespace: "ns1", + EnvironmentId: "ns1", }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }) return err }, @@ -1744,7 +1744,7 @@ func TestEnableFeatureMySQL(t *testing.T) { desc: "error: statusMissingID", setup: nil, req: &featureproto.EnableFeatureRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -1752,8 +1752,8 @@ func TestEnableFeatureMySQL(t *testing.T) { desc: "error: statusMissingCommand", setup: nil, req: &featureproto.EnableFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, @@ -1772,9 +1772,9 @@ func TestEnableFeatureMySQL(t *testing.T) { ) }, req: &featureproto.EnableFeatureRequest{ - Id: "id-0", - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -1801,10 +1801,10 @@ func TestEnableFeatureMySQL(t *testing.T) { ) }, req: &featureproto.EnableFeatureRequest{ - Id: "id-1", - Command: &featureproto.EnableFeatureCommand{}, - Comment: "test comment", - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &featureproto.EnableFeatureCommand{}, + Comment: "test comment", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -1850,7 +1850,7 @@ func TestDisableFeatureMySQL(t *testing.T) { desc: "error: statusMissingID", setup: nil, req: &featureproto.DisableFeatureRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -1858,8 +1858,8 @@ func TestDisableFeatureMySQL(t *testing.T) { desc: "error: statusMissingCommand", setup: nil, req: &featureproto.DisableFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, @@ -1878,9 +1878,9 @@ func TestDisableFeatureMySQL(t *testing.T) { ) }, req: &featureproto.DisableFeatureRequest{ - Id: "id-0", - Command: &featureproto.DisableFeatureCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &featureproto.DisableFeatureCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -1907,10 +1907,10 @@ func TestDisableFeatureMySQL(t *testing.T) { ) }, req: &featureproto.DisableFeatureRequest{ - Id: "id-1", - Command: &featureproto.DisableFeatureCommand{}, - Comment: "test comment", - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &featureproto.DisableFeatureCommand{}, + Comment: "test comment", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -1950,22 +1950,22 @@ func TestValidateArchiveFeature(t *testing.T) { }{ { req: &featureproto.ArchiveFeatureRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { req: &featureproto.ArchiveFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, { req: &featureproto.ArchiveFeatureRequest{ - Id: "fID-0", - EnvironmentNamespace: "ns0", - Command: &featureproto.ArchiveFeatureCommand{}, + Id: "fID-0", + EnvironmentId: "ns0", + Command: &featureproto.ArchiveFeatureCommand{}, }, expectedErr: nil, }, @@ -2005,7 +2005,7 @@ func TestUnarchiveFeatureMySQL(t *testing.T) { desc: "error: statusMissingID", setup: nil, req: &featureproto.UnarchiveFeatureRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -2013,8 +2013,8 @@ func TestUnarchiveFeatureMySQL(t *testing.T) { desc: "error: statusMissingCommand", setup: nil, req: &featureproto.UnarchiveFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, @@ -2033,9 +2033,9 @@ func TestUnarchiveFeatureMySQL(t *testing.T) { ) }, req: &featureproto.UnarchiveFeatureRequest{ - Id: "id-0", - Command: &featureproto.UnarchiveFeatureCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &featureproto.UnarchiveFeatureCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -2062,10 +2062,10 @@ func TestUnarchiveFeatureMySQL(t *testing.T) { ) }, req: &featureproto.UnarchiveFeatureRequest{ - Id: "id-1", - Command: &featureproto.UnarchiveFeatureCommand{}, - Comment: "test comment", - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &featureproto.UnarchiveFeatureCommand{}, + Comment: "test comment", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -2111,7 +2111,7 @@ func TestDeleteFeatureMySQL(t *testing.T) { desc: "error: statusMissingID", setup: nil, req: &featureproto.DeleteFeatureRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, @@ -2119,8 +2119,8 @@ func TestDeleteFeatureMySQL(t *testing.T) { desc: "error: statusMissingCommand", setup: nil, req: &featureproto.DeleteFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, @@ -2139,9 +2139,9 @@ func TestDeleteFeatureMySQL(t *testing.T) { ) }, req: &featureproto.DeleteFeatureRequest{ - Id: "id-0", - Command: &featureproto.DeleteFeatureCommand{}, - EnvironmentNamespace: "ns0", + Id: "id-0", + Command: &featureproto.DeleteFeatureCommand{}, + EnvironmentId: "ns0", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -2168,10 +2168,10 @@ func TestDeleteFeatureMySQL(t *testing.T) { ) }, req: &featureproto.DeleteFeatureRequest{ - Id: "id-1", - Command: &featureproto.DeleteFeatureCommand{}, - Comment: "test comment", - EnvironmentNamespace: "ns0", + Id: "id-1", + Command: &featureproto.DeleteFeatureCommand{}, + Comment: "test comment", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -2225,8 +2225,8 @@ func TestCloneFeatureMySQL(t *testing.T) { desc: "error: statusMissingCommand", setup: nil, req: &featureproto.CloneFeatureRequest{ - Id: "id-0", - EnvironmentNamespace: "ns0", + Id: "id-0", + EnvironmentId: "ns0", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, @@ -2236,9 +2236,9 @@ func TestCloneFeatureMySQL(t *testing.T) { req: &featureproto.CloneFeatureRequest{ Id: "id-0", Command: &featureproto.CloneFeatureCommand{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusIncorrectDestinationEnvironment, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "environment")), }, @@ -2258,9 +2258,9 @@ func TestCloneFeatureMySQL(t *testing.T) { req: &featureproto.CloneFeatureRequest{ Id: "id-0", Command: &featureproto.CloneFeatureCommand{ - EnvironmentNamespace: "ns1", + EnvironmentId: "ns1", }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusAlreadyExists, localizer.MustLocalize(locale.AlreadyExistsError)), }, @@ -2281,9 +2281,9 @@ func TestCloneFeatureMySQL(t *testing.T) { req: &featureproto.CloneFeatureRequest{ Id: "id-0", Command: &featureproto.CloneFeatureCommand{ - EnvironmentNamespace: "ns1", + EnvironmentId: "ns1", }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: nil, }, @@ -3147,10 +3147,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(nil, errors.New("internal")) }, @@ -3167,10 +3167,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3193,10 +3193,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3216,10 +3216,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3253,10 +3253,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3290,10 +3290,10 @@ func TestChangeDefaultStrategy(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{f.Id}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{f.Id}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3393,10 +3393,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(nil, errors.New("internal")) }, @@ -3419,10 +3419,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(nil, errors.New("internal")) }, @@ -3445,10 +3445,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3477,10 +3477,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3519,10 +3519,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3588,10 +3588,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ @@ -3650,10 +3650,10 @@ func TestValidateFeatureVariationsCommand(t *testing.T) { fs.autoOpsClient.(*acmock.MockClient).EXPECT().ListProgressiveRollouts( gomock.Any(), &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: environmentID, - PageSize: listRequestSize, - Cursor: "", - FeatureIds: []string{fID0}, + EnvironmentId: environmentID, + PageSize: listRequestSize, + Cursor: "", + FeatureIds: []string{fID0}, }, ).Return(&aoproto.ListProgressiveRolloutsResponse{ ProgressiveRollouts: []*aoproto.ProgressiveRollout{ diff --git a/pkg/feature/api/flag_trigger.go b/pkg/feature/api/flag_trigger.go index c1b768f659..9531214069 100644 --- a/pkg/feature/api/flag_trigger.go +++ b/pkg/feature/api/flag_trigger.go @@ -55,7 +55,7 @@ func (s *FeatureService) CreateFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -66,13 +66,13 @@ func (s *FeatureService) CreateFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err } flagTrigger, err := domain.NewFlagTrigger( - request.EnvironmentNamespace, + request.EnvironmentId, request.CreateFlagTriggerCommand, ) if err != nil { @@ -88,7 +88,7 @@ func (s *FeatureService) CreateFlagTrigger( "Failed to begin transaction", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) } @@ -98,7 +98,7 @@ func (s *FeatureService) CreateFlagTrigger( editor, flagTrigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -115,7 +115,7 @@ func (s *FeatureService) CreateFlagTrigger( "Failed to create flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -158,7 +158,7 @@ func (s *FeatureService) UpdateFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -169,7 +169,7 @@ func (s *FeatureService) UpdateFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err @@ -180,7 +180,7 @@ func (s *FeatureService) UpdateFlagTrigger( "Failed to begin transaction", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) } @@ -189,14 +189,14 @@ func (s *FeatureService) UpdateFlagTrigger( flagTrigger, err := storage.GetFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to get flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -205,7 +205,7 @@ func (s *FeatureService) UpdateFlagTrigger( editor, flagTrigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -225,7 +225,7 @@ func (s *FeatureService) UpdateFlagTrigger( "Failed to update flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -263,7 +263,7 @@ func (s *FeatureService) EnableFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -274,7 +274,7 @@ func (s *FeatureService) EnableFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err @@ -285,7 +285,7 @@ func (s *FeatureService) EnableFlagTrigger( "Failed to begin transaction", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) } @@ -294,14 +294,14 @@ func (s *FeatureService) EnableFlagTrigger( flagTrigger, err := storage.GetFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to get flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -310,7 +310,7 @@ func (s *FeatureService) EnableFlagTrigger( editor, flagTrigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -330,7 +330,7 @@ func (s *FeatureService) EnableFlagTrigger( "Failed to enable flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -368,7 +368,7 @@ func (s *FeatureService) DisableFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -379,7 +379,7 @@ func (s *FeatureService) DisableFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err @@ -390,7 +390,7 @@ func (s *FeatureService) DisableFlagTrigger( "Failed to begin transaction", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) } @@ -399,14 +399,14 @@ func (s *FeatureService) DisableFlagTrigger( flagTrigger, err := storage.GetFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to get flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -415,7 +415,7 @@ func (s *FeatureService) DisableFlagTrigger( editor, flagTrigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -432,7 +432,7 @@ func (s *FeatureService) DisableFlagTrigger( "Failed to disable flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -470,7 +470,7 @@ func (s *FeatureService) ResetFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -481,13 +481,13 @@ func (s *FeatureService) ResetFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err } trigger, err := v2fs.NewFlagTriggerStorage(s.mysqlClient). - GetFlagTrigger(ctx, request.Id, request.EnvironmentNamespace) + GetFlagTrigger(ctx, request.Id, request.EnvironmentId) if err != nil { if errors.Is(err, v2fs.ErrFlagTriggerNotFound) { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -514,7 +514,7 @@ func (s *FeatureService) ResetFlagTrigger( editor, trigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -572,7 +572,7 @@ func (s *FeatureService) DeleteFlagTrigger( editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - request.EnvironmentNamespace, + request.EnvironmentId, localizer, ) if err != nil { @@ -583,7 +583,7 @@ func (s *FeatureService) DeleteFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err @@ -601,14 +601,14 @@ func (s *FeatureService) DeleteFlagTrigger( flagTrigger, err := storage.GetFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to get flag trigger", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return err @@ -617,7 +617,7 @@ func (s *FeatureService) DeleteFlagTrigger( editor, flagTrigger, s.domainPublisher, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { return err @@ -632,7 +632,7 @@ func (s *FeatureService) DeleteFlagTrigger( if err := storage.DeleteFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ); err != nil { s.logger.Error( "Failed to delete flag trigger", @@ -672,7 +672,7 @@ func (s *FeatureService) GetFlagTrigger( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - request.EnvironmentNamespace, + request.EnvironmentId, localizer) if err != nil { return nil, err @@ -682,7 +682,7 @@ func (s *FeatureService) GetFlagTrigger( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", request.EnvironmentNamespace), + zap.String("environmentId", request.EnvironmentId), )..., ) return nil, err @@ -690,7 +690,7 @@ func (s *FeatureService) GetFlagTrigger( trigger, err := s.flagTriggerStorage.GetFlagTrigger( ctx, request.Id, - request.EnvironmentNamespace, + request.EnvironmentId, ) if err != nil { if errors.Is(err, v2fs.ErrFlagTriggerNotFound) { @@ -720,7 +720,7 @@ func (s *FeatureService) ListFlagTriggers( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - request.EnvironmentNamespace, + request.EnvironmentId, localizer) if err != nil { return nil, err @@ -734,7 +734,7 @@ func (s *FeatureService) ListFlagTriggers( } whereParts := []mysql.WherePart{ mysql.NewFilter("feature_id", "=", request.FeatureId), - mysql.NewFilter("environment_namespace", "=", request.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", request.EnvironmentId), } orders, err := s.newListFlagTriggerOrders(request.OrderBy, request.OrderDirection, localizer) if err != nil { @@ -866,7 +866,7 @@ func (s *FeatureService) FlagTriggerWebhook( if err != nil { return nil, err } - feature, err := s.featureStorage.GetFeature(ctx, trigger.FeatureId, trigger.EnvironmentNamespace) + feature, err := s.featureStorage.GetFeature(ctx, trigger.FeatureId, trigger.EnvironmentId) if err != nil { if errors.Is(err, v2fs.ErrFeatureNotFound) { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -883,7 +883,7 @@ func (s *FeatureService) FlagTriggerWebhook( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", trigger.FeatureId), - zap.String("environmentNamespace", trigger.EnvironmentNamespace), + zap.String("environmentId", trigger.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -898,7 +898,7 @@ func (s *FeatureService) FlagTriggerWebhook( if trigger.GetAction() == featureproto.FlagTrigger_Action_ON { // check if feature is already enabled if !feature.GetEnabled() { - err := s.enableFeature(ctx, trigger.GetFeatureId(), trigger.GetEnvironmentNamespace(), localizer) + err := s.enableFeature(ctx, trigger.GetFeatureId(), trigger.GetEnvironmentId(), localizer) if err != nil { dt, err := statusTriggerEnableFailed.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -913,7 +913,7 @@ func (s *FeatureService) FlagTriggerWebhook( } else if trigger.GetAction() == featureproto.FlagTrigger_Action_OFF { // check if feature is already disabled if feature.GetEnabled() { - err := s.disableFeature(ctx, trigger.GetFeatureId(), trigger.GetEnvironmentNamespace(), localizer) + err := s.disableFeature(ctx, trigger.GetFeatureId(), trigger.GetEnvironmentId(), localizer) if err != nil { dt, err := statusTriggerDisableFailed.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -973,7 +973,7 @@ func (s *FeatureService) updateTriggerUsageInfo( editor, flagTrigger, s.domainPublisher, - flagTrigger.EnvironmentNamespace, + flagTrigger.EnvironmentId, ) if err != nil { return err @@ -1011,14 +1011,14 @@ func (s *FeatureService) updateTriggerUsageInfo( func (s *FeatureService) enableFeature( ctx context.Context, - featureId, environmentNamespace string, + featureId, environmentId string, localizer locale.Localizer, ) error { if err := s.updateFeature( ctx, &featureproto.EnableFeatureCommand{}, featureId, - environmentNamespace, + environmentId, "", localizer, webhookEditor, @@ -1028,7 +1028,7 @@ func (s *FeatureService) enableFeature( "Failed to enable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) } @@ -1039,14 +1039,14 @@ func (s *FeatureService) enableFeature( func (s *FeatureService) disableFeature( ctx context.Context, - featureId, environmentNamespace string, + featureId, environmentId string, localizer locale.Localizer, ) error { if err := s.updateFeature( ctx, &featureproto.DisableFeatureCommand{}, featureId, - environmentNamespace, + environmentId, "", localizer, webhookEditor, @@ -1056,7 +1056,7 @@ func (s *FeatureService) disableFeature( "Failed to disable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) } diff --git a/pkg/feature/api/flag_trigger_test.go b/pkg/feature/api/flag_trigger_test.go index 8e69004f01..fc45005a9b 100644 --- a/pkg/feature/api/flag_trigger_test.go +++ b/pkg/feature/api/flag_trigger_test.go @@ -67,7 +67,7 @@ func TestCreateFlagTrigger(t *testing.T) { desc: "Error Invalid Argument", setup: nil, input: &proto.CreateFlagTriggerRequest{ - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "create_flag_trigger_command")), }, @@ -80,7 +80,7 @@ func TestCreateFlagTrigger(t *testing.T) { ).Return(errors.New("error")) }, input: &proto.CreateFlagTriggerRequest{ - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", CreateFlagTriggerCommand: &proto.CreateFlagTriggerCommand{ FeatureId: "id-1", Type: proto.FlagTrigger_Type_WEBHOOK, @@ -98,7 +98,7 @@ func TestCreateFlagTrigger(t *testing.T) { ).Return(nil) }, input: &proto.CreateFlagTriggerRequest{ - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", CreateFlagTriggerCommand: &proto.CreateFlagTriggerCommand{ FeatureId: "id-1", Type: proto.FlagTrigger_Type_WEBHOOK, @@ -133,7 +133,7 @@ func TestGetFlagTrigger(t *testing.T) { defer mockController.Finish() baseId := "1" - baseEnvironmentNamespace := "ns0" + baseEnvironmentId := "ns0" patterns := []struct { desc string @@ -168,7 +168,7 @@ func TestGetFlagTrigger(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, v2fs.ErrFlagTriggerNotFound) }, - input: &proto.GetFlagTriggerRequest{Id: "1", EnvironmentNamespace: "namespace"}, + input: &proto.GetFlagTriggerRequest{Id: "1", EnvironmentId: "namespace"}, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusNotFound, localizer.MustLocalize(locale.NotFoundError), localizer) }, @@ -185,22 +185,22 @@ func TestGetFlagTrigger(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(&domain.FlagTrigger{ FlagTrigger: &proto.FlagTrigger{ - Id: baseId, - FeatureId: "featureId", - EnvironmentNamespace: baseEnvironmentNamespace, - Type: proto.FlagTrigger_Type_WEBHOOK, - Action: proto.FlagTrigger_Action_ON, - Description: "base", - TriggerCount: 100, - LastTriggeredAt: 500, - Token: "test-token", - Disabled: false, - CreatedAt: 200, - UpdatedAt: 300, + Id: baseId, + FeatureId: "featureId", + EnvironmentId: baseEnvironmentId, + Type: proto.FlagTrigger_Type_WEBHOOK, + Action: proto.FlagTrigger_Action_ON, + Description: "base", + TriggerCount: 100, + LastTriggeredAt: 500, + Token: "test-token", + Disabled: false, + CreatedAt: 200, + UpdatedAt: 300, }, }, nil) }, - input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentNamespace: baseEnvironmentNamespace}, + input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentId: baseEnvironmentId}, getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -217,22 +217,22 @@ func TestGetFlagTrigger(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(&domain.FlagTrigger{ FlagTrigger: &proto.FlagTrigger{ - Id: "1", - FeatureId: "featureId", - EnvironmentNamespace: "ns0", - Type: proto.FlagTrigger_Type_WEBHOOK, - Action: proto.FlagTrigger_Action_ON, - Description: "base", - TriggerCount: 100, - LastTriggeredAt: 500, - Token: "test-token", - Disabled: false, - CreatedAt: 200, - UpdatedAt: 300, + Id: "1", + FeatureId: "featureId", + EnvironmentId: "ns0", + Type: proto.FlagTrigger_Type_WEBHOOK, + Action: proto.FlagTrigger_Action_ON, + Description: "base", + TriggerCount: 100, + LastTriggeredAt: 500, + Token: "test-token", + Disabled: false, + CreatedAt: 200, + UpdatedAt: 300, }, }, nil) }, - input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentNamespace: baseEnvironmentNamespace}, + input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentId: baseEnvironmentId}, getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -245,7 +245,7 @@ func TestGetFlagTrigger(t *testing.T) { ), service: createFeatureServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *FeatureService) {}, - input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentNamespace: baseEnvironmentNamespace}, + input: &proto.GetFlagTriggerRequest{Id: baseId, EnvironmentId: baseEnvironmentId}, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) }, @@ -298,8 +298,8 @@ func TestUpdateFlagTrigger(t *testing.T) { desc: "Error Invalid Argument", setup: func(s *FeatureService) {}, input: &proto.UpdateFlagTriggerRequest{ - Id: "id", - EnvironmentNamespace: "namespace", + Id: "id", + EnvironmentId: "namespace", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "change_flag_trigger_description_command")), }, @@ -312,8 +312,8 @@ func TestUpdateFlagTrigger(t *testing.T) { ).Return(errors.New("error")) }, input: &proto.UpdateFlagTriggerRequest{ - Id: "id", - EnvironmentNamespace: "namespace", + Id: "id", + EnvironmentId: "namespace", ChangeFlagTriggerDescriptionCommand: &proto.ChangeFlagTriggerDescriptionCommand{ Description: "description", }, @@ -329,8 +329,8 @@ func TestUpdateFlagTrigger(t *testing.T) { ).Return(nil) }, input: &proto.UpdateFlagTriggerRequest{ - Id: "id", - EnvironmentNamespace: "namespace", + Id: "id", + EnvironmentId: "namespace", ChangeFlagTriggerDescriptionCommand: &proto.ChangeFlagTriggerDescriptionCommand{ Description: "description", }, @@ -382,8 +382,8 @@ func TestEnableFlagTrigger(t *testing.T) { desc: "Error Invalid Argument", setup: func(s *FeatureService) {}, input: &proto.EnableFlagTriggerRequest{ - Id: "id", - EnvironmentNamespace: "namespace", + Id: "id", + EnvironmentId: "namespace", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError)), }, @@ -397,7 +397,7 @@ func TestEnableFlagTrigger(t *testing.T) { }, input: &proto.EnableFlagTriggerRequest{ Id: "id", - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", EnableFlagTriggerCommand: &proto.EnableFlagTriggerCommand{}, }, expectedErr: createError(statusInternal, localizer.MustLocalizeWithTemplate(locale.InternalServerError)), @@ -412,7 +412,7 @@ func TestEnableFlagTrigger(t *testing.T) { }, input: &proto.EnableFlagTriggerRequest{ Id: "id", - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", EnableFlagTriggerCommand: &proto.EnableFlagTriggerCommand{}, }, expectedErr: nil, @@ -462,8 +462,8 @@ func TestDisableFlagTrigger(t *testing.T) { desc: "Error Invalid Argument", setup: func(s *FeatureService) {}, input: &proto.DisableFlagTriggerRequest{ - Id: "id", - EnvironmentNamespace: "namespace", + Id: "id", + EnvironmentId: "namespace", }, expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError)), }, @@ -477,7 +477,7 @@ func TestDisableFlagTrigger(t *testing.T) { }, input: &proto.DisableFlagTriggerRequest{ Id: "id", - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", DisableFlagTriggerCommand: &proto.DisableFlagTriggerCommand{}, }, expectedErr: createError(statusInternal, localizer.MustLocalizeWithTemplate(locale.InternalServerError)), @@ -492,7 +492,7 @@ func TestDisableFlagTrigger(t *testing.T) { }, input: &proto.DisableFlagTriggerRequest{ Id: "id", - EnvironmentNamespace: "namespace", + EnvironmentId: "namespace", DisableFlagTriggerCommand: &proto.DisableFlagTriggerCommand{}, }, expectedErr: nil, @@ -705,18 +705,18 @@ func TestFlagTriggerWebhook(t *testing.T) { } baseFlagTrigger := &proto.FlagTrigger{ - Id: "1", - FeatureId: "featureId", - EnvironmentNamespace: "namespace", - Type: proto.FlagTrigger_Type_WEBHOOK, - Action: proto.FlagTrigger_Action_ON, - Description: "base", - TriggerCount: 100, - LastTriggeredAt: 500, - Token: "test-token", - Disabled: false, - CreatedAt: 200, - UpdatedAt: 300, + Id: "1", + FeatureId: "featureId", + EnvironmentId: "namespace", + Type: proto.FlagTrigger_Type_WEBHOOK, + Action: proto.FlagTrigger_Action_ON, + Description: "base", + TriggerCount: 100, + LastTriggeredAt: 500, + Token: "test-token", + Disabled: false, + CreatedAt: 200, + UpdatedAt: 300, } patterns := []struct { @@ -875,7 +875,7 @@ func TestListFlagTriggers(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: &proto.ListFlagTriggersRequest{FeatureId: "1", PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &proto.ListFlagTriggersRequest{FeatureId: "1", PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, expected: &proto.ListFlagTriggersResponse{FlagTriggers: []*proto.ListFlagTriggersResponse_FlagTriggerWithUrl{}, Cursor: "0"}, getExpectedErr: func(localizer locale.Localizer) error { return nil @@ -889,7 +889,7 @@ func TestListFlagTriggers(t *testing.T) { ), service: createFeatureServiceWithGetAccountByEnvironmentMock(mockController, accountproto.AccountV2_Role_Organization_UNASSIGNED, accountproto.AccountV2_Role_Environment_UNASSIGNED), setup: func(s *FeatureService) {}, - input: &proto.ListFlagTriggersRequest{FeatureId: "1", PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &proto.ListFlagTriggersRequest{FeatureId: "1", PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) }, diff --git a/pkg/feature/api/segment.go b/pkg/feature/api/segment.go index 1a12621cd8..710c092f75 100644 --- a/pkg/feature/api/segment.go +++ b/pkg/feature/api/segment.go @@ -45,7 +45,7 @@ func (s *FeatureService) CreateSegment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -54,7 +54,7 @@ func (s *FeatureService) CreateSegment( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -65,7 +65,7 @@ func (s *FeatureService) CreateSegment( "Failed to create segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -96,12 +96,12 @@ func (s *FeatureService) CreateSegment( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentStorage := v2fs.NewSegmentStorage(tx) - if err := segmentStorage.CreateSegment(ctx, segment, req.EnvironmentNamespace); err != nil { + if err := segmentStorage.CreateSegment(ctx, segment, req.EnvironmentId); err != nil { s.logger.Error( "Failed to store segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -110,7 +110,7 @@ func (s *FeatureService) CreateSegment( editor, segment, s.domainPublisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -120,7 +120,7 @@ func (s *FeatureService) CreateSegment( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err @@ -142,7 +142,7 @@ func (s *FeatureService) CreateSegment( "Failed to create segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -166,7 +166,7 @@ func (s *FeatureService) DeleteSegment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -175,12 +175,12 @@ func (s *FeatureService) DeleteSegment( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err := s.checkSegmentInUse(ctx, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.checkSegmentInUse(ctx, req.Id, req.EnvironmentId, localizer); err != nil { return nil, err } if err := s.updateSegment( @@ -188,7 +188,7 @@ func (s *FeatureService) DeleteSegment( editor, []command.Command{req.Command}, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ); err != nil { return nil, err @@ -198,13 +198,13 @@ func (s *FeatureService) DeleteSegment( func (s *FeatureService) checkSegmentInUse( ctx context.Context, - segmentID, environmentNamespace string, + segmentID, environmentId string, localizer locale.Localizer, ) error { featureStorage := v2fs.NewFeatureStorage(s.mysqlClient) whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } features, _, _, err := featureStorage.ListFeatures( ctx, @@ -218,7 +218,7 @@ func (s *FeatureService) checkSegmentInUse( "Failed to list features", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -235,7 +235,7 @@ func (s *FeatureService) checkSegmentInUse( "Segment User in use", log.FieldsFromImcomingContext(ctx).AddFields( zap.String("segmentId", segmentID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusSegmentInUse.WithDetails(&errdetails.LocalizedMessage{ @@ -274,13 +274,13 @@ func (s *FeatureService) UpdateSegment( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { s.logger.Info( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -293,7 +293,7 @@ func (s *FeatureService) UpdateSegment( "Failed to unmarshal command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -312,12 +312,19 @@ func (s *FeatureService) UpdateSegment( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } - if err := s.updateSegment(ctx, editor, commands, req.Id, req.EnvironmentNamespace, localizer); err != nil { + if err := s.updateSegment( + ctx, + editor, + commands, + req.Id, + req.EnvironmentId, + localizer, + ); err != nil { return nil, err } return &featureproto.UpdateSegmentResponse{}, nil @@ -327,7 +334,7 @@ func (s *FeatureService) updateSegment( ctx context.Context, editor *eventproto.Editor, commands []command.Command, - segmentID, environmentNamespace string, + segmentID, environmentId string, localizer locale.Localizer, ) error { tx, err := s.mysqlClient.BeginTx(ctx) @@ -349,13 +356,13 @@ func (s *FeatureService) updateSegment( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentStorage := v2fs.NewSegmentStorage(tx) - segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentId) if err != nil { s.logger.Error( "Failed to get segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err @@ -364,7 +371,7 @@ func (s *FeatureService) updateSegment( editor, segment, s.domainPublisher, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -375,13 +382,13 @@ func (s *FeatureService) updateSegment( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } } - return segmentStorage.UpdateSegment(ctx, segment, environmentNamespace) + return segmentStorage.UpdateSegment(ctx, segment, environmentId) }) if err != nil { if err == v2fs.ErrSegmentNotFound || err == v2fs.ErrSegmentUnexpectedAffectedRows { @@ -398,7 +405,7 @@ func (s *FeatureService) updateSegment( "Failed to update segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -420,7 +427,7 @@ func (s *FeatureService) GetSegment( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -429,13 +436,13 @@ func (s *FeatureService) GetSegment( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } segmentStorage := v2fs.NewSegmentStorage(s.mysqlClient) - segment, featureIDs, err := segmentStorage.GetSegment(ctx, req.Id, req.EnvironmentNamespace) + segment, featureIDs, err := segmentStorage.GetSegment(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2fs.ErrSegmentNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -451,7 +458,7 @@ func (s *FeatureService) GetSegment( "Failed to get segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -471,13 +478,13 @@ func (s *FeatureService) GetSegment( map[string][]string{ segment.Id: featureIDs, }, - req.EnvironmentNamespace, + req.EnvironmentId, ); err != nil { s.logger.Error( "Failed to inject features into segments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -500,7 +507,7 @@ func (s *FeatureService) ListSegments( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -509,14 +516,14 @@ func (s *FeatureService) ListSegments( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.Status != nil { whereParts = append(whereParts, mysql.NewFilter("status", "=", req.Status.Value)) @@ -560,14 +567,14 @@ func (s *FeatureService) ListSegments( limit, offset, isInUseStatus, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { s.logger.Error( "Failed to list segments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -583,13 +590,13 @@ func (s *FeatureService) ListSegments( ctx, segments, featureIDsMap, - req.EnvironmentNamespace, + req.EnvironmentId, ); err != nil { s.logger.Error( "Failed to inject features into segments", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -643,11 +650,11 @@ func (s *FeatureService) injectFeaturesIntoSegments( ctx context.Context, segments []*featureproto.Segment, featureIDsMap map[string][]string, - environmentNameSpace string, + environmentId string, ) error { allFeatures, err := s.listAllFeatures( ctx, - environmentNameSpace, + environmentId, ) if err != nil { return err @@ -672,7 +679,7 @@ func (s *FeatureService) injectFeaturesIntoSegments( func (s *FeatureService) listAllFeatures( ctx context.Context, - environmentNameSpace string, + environmentId string, ) (map[string]*featureproto.Feature, error) { fs, _, _, err := s.listFeatures( ctx, @@ -686,7 +693,7 @@ func (s *FeatureService) listAllFeatures( "", featureproto.ListFeaturesRequest_DEFAULT, featureproto.ListFeaturesRequest_ASC, - environmentNameSpace, + environmentId, ) if err != nil { return nil, err diff --git a/pkg/feature/api/segment_test.go b/pkg/feature/api/segment_test.go index 8474a5adc6..7668a696c9 100644 --- a/pkg/feature/api/segment_test.go +++ b/pkg/feature/api/segment_test.go @@ -59,16 +59,16 @@ func TestCreateSegmentMySQL(t *testing.T) { } testcases := []struct { - setup func(*FeatureService) - cmd *featureproto.CreateSegmentCommand - environmentNamespace string - expected error + setup func(*FeatureService) + cmd *featureproto.CreateSegmentCommand + environmentId string + expected error }{ { - setup: nil, - cmd: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), + setup: nil, + cmd: nil, + environmentId: "ns0", + expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, { setup: nil, @@ -76,8 +76,8 @@ func TestCreateSegmentMySQL(t *testing.T) { Name: "", Description: "description", }, - environmentNamespace: "ns0", - expected: createError(statusMissingName, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "name")), + environmentId: "ns0", + expected: createError(statusMissingName, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "name")), }, { setup: func(s *FeatureService) { @@ -90,8 +90,8 @@ func TestCreateSegmentMySQL(t *testing.T) { Name: "name", Description: "description", }, - environmentNamespace: "ns0", - expected: nil, + environmentId: "ns0", + expected: nil, }, } for _, tc := range testcases { @@ -100,7 +100,7 @@ func TestCreateSegmentMySQL(t *testing.T) { tc.setup(service) } ctx = setToken(ctx) - req := &featureproto.CreateSegmentRequest{Command: tc.cmd, EnvironmentNamespace: tc.environmentNamespace} + req := &featureproto.CreateSegmentRequest{Command: tc.cmd, EnvironmentId: tc.environmentId} _, err := service.CreateSegment(ctx, req) assert.Equal(t, tc.expected, err) } @@ -127,25 +127,25 @@ func TestDeleteSegmentMySQL(t *testing.T) { } testcases := []struct { - setup func(*FeatureService) - id string - cmd *featureproto.DeleteSegmentCommand - environmentNamespace string - expected error + setup func(*FeatureService) + id string + cmd *featureproto.DeleteSegmentCommand + environmentId string + expected error }{ { - setup: nil, - id: "", - cmd: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), + setup: nil, + id: "", + cmd: nil, + environmentId: "ns0", + expected: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { - setup: nil, - id: "id", - cmd: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), + setup: nil, + id: "id", + cmd: nil, + environmentId: "ns0", + expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, { setup: func(s *FeatureService) { @@ -166,10 +166,10 @@ func TestDeleteSegmentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(v2fs.ErrSegmentNotFound) }, - id: "id", - cmd: &featureproto.DeleteSegmentCommand{}, - environmentNamespace: "ns0", - expected: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), + id: "id", + cmd: &featureproto.DeleteSegmentCommand{}, + environmentId: "ns0", + expected: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, { setup: func(s *FeatureService) { @@ -190,10 +190,10 @@ func TestDeleteSegmentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil) }, - id: "id", - cmd: &featureproto.DeleteSegmentCommand{}, - environmentNamespace: "ns0", - expected: nil, + id: "id", + cmd: &featureproto.DeleteSegmentCommand{}, + environmentId: "ns0", + expected: nil, }, } for _, tc := range testcases { @@ -203,9 +203,9 @@ func TestDeleteSegmentMySQL(t *testing.T) { } ctx = setToken(ctx) req := &featureproto.DeleteSegmentRequest{ - Id: tc.id, - Command: tc.cmd, - EnvironmentNamespace: tc.environmentNamespace, + Id: tc.id, + Command: tc.cmd, + EnvironmentId: tc.environmentId, } _, err := service.DeleteSegment(ctx, req) assert.Equal(t, tc.expected, err) @@ -235,25 +235,25 @@ func TestUpdateSegmentMySQL(t *testing.T) { changeSegmentNameCmd, err := ptypes.MarshalAny(&featureproto.ChangeSegmentNameCommand{Name: "name"}) require.NoError(t, err) testcases := []struct { - setup func(*FeatureService) - id string - cmds []*featureproto.Command - environmentNamespace string - expected error + setup func(*FeatureService) + id string + cmds []*featureproto.Command + environmentId string + expected error }{ { - setup: nil, - id: "", - cmds: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), + setup: nil, + id: "", + cmds: nil, + environmentId: "ns0", + expected: createError(statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id")), }, { - setup: nil, - id: "id", - cmds: nil, - environmentNamespace: "ns0", - expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), + setup: nil, + id: "id", + cmds: nil, + environmentId: "ns0", + expected: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, { setup: func(s *FeatureService) { @@ -266,8 +266,8 @@ func TestUpdateSegmentMySQL(t *testing.T) { cmds: []*featureproto.Command{ {Command: changeSegmentNameCmd}, }, - environmentNamespace: "ns0", - expected: nil, + environmentId: "ns0", + expected: nil, }, } for _, tc := range testcases { @@ -277,9 +277,9 @@ func TestUpdateSegmentMySQL(t *testing.T) { } ctx = setToken(ctx) req := &featureproto.UpdateSegmentRequest{ - Id: tc.id, - Commands: tc.cmds, - EnvironmentNamespace: tc.environmentNamespace, + Id: tc.id, + Commands: tc.cmds, + EnvironmentId: tc.environmentId, } _, err := service.UpdateSegment(ctx, req) assert.Equal(t, tc.expected, err) @@ -292,13 +292,13 @@ func TestGetSegmentMySQL(t *testing.T) { defer mockController.Finish() testcases := []struct { - desc string - setup func(*FeatureService) - service *FeatureService - context context.Context - id string - environmentNamespace string - getExpectedErr func(localizer locale.Localizer) error + desc string + setup func(*FeatureService) + service *FeatureService + context context.Context + id string + environmentId string + getExpectedErr func(localizer locale.Localizer) error }{ { desc: "error: missing id", @@ -307,9 +307,9 @@ func TestGetSegmentMySQL(t *testing.T) { createContextWithToken(), metadata.MD{"accept-language": []string{"ja"}}, ), - setup: nil, - id: "", - environmentNamespace: "ns0", + setup: nil, + id: "", + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusMissingID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "id"), localizer) }, @@ -328,8 +328,8 @@ func TestGetSegmentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id", - environmentNamespace: "ns0", + id: "id", + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusNotFound, localizer.MustLocalize(locale.NotFoundError), localizer) }, @@ -355,8 +355,8 @@ func TestGetSegmentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - id: "id", - environmentNamespace: "ns0", + id: "id", + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -382,8 +382,8 @@ func TestGetSegmentMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(rows, nil) }, - id: "id", - environmentNamespace: "ns0", + id: "id", + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -395,9 +395,9 @@ func TestGetSegmentMySQL(t *testing.T) { createContextWithTokenRoleUnassigned(), metadata.MD{"accept-language": []string{"ja"}}, ), - setup: func(s *FeatureService) {}, - id: "id", - environmentNamespace: "ns0", + setup: func(s *FeatureService) {}, + id: "id", + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) }, @@ -412,7 +412,7 @@ func TestGetSegmentMySQL(t *testing.T) { ctx := tc.context localizer := locale.NewLocalizer(ctx) - req := &featureproto.GetSegmentRequest{Id: tc.id, EnvironmentNamespace: tc.environmentNamespace} + req := &featureproto.GetSegmentRequest{Id: tc.id, EnvironmentId: tc.environmentId} _, err := service.GetSegment(ctx, req) assert.Equal(t, tc.getExpectedErr(localizer), err) }) @@ -425,13 +425,13 @@ func TestListSegmentsMySQL(t *testing.T) { defer mockController.Finish() testcases := []struct { - desc string - service *FeatureService - context context.Context - setup func(*FeatureService) - pageSize int64 - environmentNamespace string - getExpectedErr func(localizer locale.Localizer) error + desc string + service *FeatureService + context context.Context + setup func(*FeatureService) + pageSize int64 + environmentId string + getExpectedErr func(localizer locale.Localizer) error }{ { desc: "error: exceeded max page size per request", @@ -440,9 +440,9 @@ func TestListSegmentsMySQL(t *testing.T) { createContextWithTokenRoleUnassigned(), metadata.MD{"accept-language": []string{"ja"}}, ), - setup: nil, - pageSize: int64(maxPageSizePerRequest + 1), - environmentNamespace: "ns0", + setup: nil, + pageSize: int64(maxPageSizePerRequest + 1), + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusExceededMaxPageSizePerRequest, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "page_size"), localizer) }, @@ -468,8 +468,8 @@ func TestListSegmentsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row).Times(2) }, - pageSize: int64(maxPageSizePerRequest), - environmentNamespace: "ns0", + pageSize: int64(maxPageSizePerRequest), + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -495,8 +495,8 @@ func TestListSegmentsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row).Times(2) }, - pageSize: int64(maxPageSizePerRequest), - environmentNamespace: "ns0", + pageSize: int64(maxPageSizePerRequest), + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return nil }, @@ -508,9 +508,9 @@ func TestListSegmentsMySQL(t *testing.T) { createContextWithTokenRoleUnassigned(), metadata.MD{"accept-language": []string{"ja"}}, ), - setup: func(s *FeatureService) {}, - pageSize: int64(maxPageSizePerRequest), - environmentNamespace: "ns0", + setup: func(s *FeatureService) {}, + pageSize: int64(maxPageSizePerRequest), + environmentId: "ns0", getExpectedErr: func(localizer locale.Localizer) error { return createError(t, statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied), localizer) }, @@ -525,7 +525,7 @@ func TestListSegmentsMySQL(t *testing.T) { ctx := tc.context localizer := locale.NewLocalizer(ctx) - req := &featureproto.ListSegmentsRequest{PageSize: tc.pageSize, EnvironmentNamespace: tc.environmentNamespace} + req := &featureproto.ListSegmentsRequest{PageSize: tc.pageSize, EnvironmentId: tc.environmentId} _, err := service.ListSegments(ctx, req) assert.Equal(t, tc.getExpectedErr(localizer), err) }) diff --git a/pkg/feature/api/segment_user.go b/pkg/feature/api/segment_user.go index c39f0c32ca..b39f0d2eaa 100644 --- a/pkg/feature/api/segment_user.go +++ b/pkg/feature/api/segment_user.go @@ -45,7 +45,7 @@ func (s *FeatureService) AddSegmentUser( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -54,7 +54,7 @@ func (s *FeatureService) AddSegmentUser( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -64,7 +64,7 @@ func (s *FeatureService) AddSegmentUser( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -77,7 +77,7 @@ func (s *FeatureService) AddSegmentUser( req.Command.State, false, req.Command, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ); err != nil { return nil, err @@ -92,7 +92,7 @@ func (s *FeatureService) DeleteSegmentUser( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -101,7 +101,7 @@ func (s *FeatureService) DeleteSegmentUser( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -111,7 +111,7 @@ func (s *FeatureService) DeleteSegmentUser( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -124,7 +124,7 @@ func (s *FeatureService) DeleteSegmentUser( req.Command.State, true, req.Command, - req.EnvironmentNamespace, + req.EnvironmentId, localizer, ); err != nil { return nil, err @@ -140,7 +140,7 @@ func (s *FeatureService) updateSegmentUser( state featureproto.SegmentUser_State, deleted bool, cmd command.Command, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) error { segmentUsers := make([]*featureproto.SegmentUser, 0, len(userIDs)) @@ -168,24 +168,24 @@ func (s *FeatureService) updateSegmentUser( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentStorage := v2fs.NewSegmentStorage(tx) - segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentId) if err != nil { s.logger.Error( "Failed to get segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } segmentUserStorage := v2fs.NewSegmentUserStorage(tx) - if err := segmentUserStorage.UpsertSegmentUsers(ctx, segmentUsers, environmentNamespace); err != nil { + if err := segmentUserStorage.UpsertSegmentUsers(ctx, segmentUsers, environmentId); err != nil { s.logger.Error( "Failed to store segment user", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err @@ -194,7 +194,7 @@ func (s *FeatureService) updateSegmentUser( editor, segment, s.domainPublisher, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -204,12 +204,12 @@ func (s *FeatureService) updateSegmentUser( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) return err } - if err := segmentStorage.UpdateSegment(ctx, segment, environmentNamespace); err != nil { + if err := segmentStorage.UpdateSegment(ctx, segment, environmentId); err != nil { return err } return nil @@ -229,7 +229,7 @@ func (s *FeatureService) updateSegmentUser( "Failed to upsert segment user", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -251,7 +251,7 @@ func (s *FeatureService) GetSegmentUser( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -260,14 +260,14 @@ func (s *FeatureService) GetSegmentUser( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } segmentUserStorage := v2fs.NewSegmentUserStorage(s.mysqlClient) id := domain.SegmentUserID(req.SegmentId, req.UserId, req.State) - user, err := segmentUserStorage.GetSegmentUser(ctx, id, req.EnvironmentNamespace) + user, err := segmentUserStorage.GetSegmentUser(ctx, id, req.EnvironmentId) if err != nil { if err == v2fs.ErrSegmentUserNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -283,7 +283,7 @@ func (s *FeatureService) GetSegmentUser( "Failed to get segment user", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -307,7 +307,7 @@ func (s *FeatureService) ListSegmentUsers( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -316,7 +316,7 @@ func (s *FeatureService) ListSegmentUsers( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -324,7 +324,7 @@ func (s *FeatureService) ListSegmentUsers( whereParts := []mysql.WherePart{ mysql.NewFilter("segment_id", "=", req.SegmentId), mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.State != nil { whereParts = append(whereParts, mysql.NewFilter("state", "=", req.State.GetValue())) @@ -361,7 +361,7 @@ func (s *FeatureService) ListSegmentUsers( "Failed to list segment users", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -386,7 +386,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -395,7 +395,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -405,7 +405,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -429,7 +429,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentStorage := v2fs.NewSegmentStorage(tx) - segment, _, err := segmentStorage.GetSegment(ctx, req.SegmentId, req.EnvironmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, req.SegmentId, req.EnvironmentId) if err != nil { return err } @@ -457,7 +457,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( editor, segment, s.domainPublisher, - req.EnvironmentNamespace, + req.EnvironmentId, ) if err != nil { return err @@ -467,18 +467,18 @@ func (s *FeatureService) BulkUploadSegmentUsers( "Failed to handle command", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return err } - if err := segmentStorage.UpdateSegment(ctx, segment, req.EnvironmentNamespace); err != nil { + if err := segmentStorage.UpdateSegment(ctx, segment, req.EnvironmentId); err != nil { return err } return s.publishBulkSegmentUsersReceivedEvent( ctx, editor, - req.EnvironmentNamespace, + req.EnvironmentId, req.SegmentId, req.Command.Data, req.Command.State, @@ -502,7 +502,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( "Failed to bulk upload segment users", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -520,7 +520,7 @@ func (s *FeatureService) BulkUploadSegmentUsers( func (s *FeatureService) publishBulkSegmentUsersReceivedEvent( ctx context.Context, editor *eventproto.Editor, - environmentNamespace string, + environmentId string, segmentID string, data []byte, state featureproto.SegmentUser_State, @@ -530,12 +530,12 @@ func (s *FeatureService) publishBulkSegmentUsersReceivedEvent( return err } e := &serviceeventproto.BulkSegmentUsersReceivedEvent{ - Id: id.String(), - EnvironmentNamespace: environmentNamespace, - SegmentId: segmentID, - Data: data, - State: state, - Editor: editor, + Id: id.String(), + EnvironmentId: environmentId, + SegmentId: segmentID, + Data: data, + State: state, + Editor: editor, } return s.segmentUsersPublisher.Publish(ctx, e) } @@ -547,7 +547,7 @@ func (s *FeatureService) BulkDownloadSegmentUsers( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -556,13 +556,13 @@ func (s *FeatureService) BulkDownloadSegmentUsers( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err } segmentStorage := v2fs.NewSegmentStorage(s.mysqlClient) - segment, _, err := segmentStorage.GetSegment(ctx, req.SegmentId, req.EnvironmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, req.SegmentId, req.EnvironmentId) if err != nil { if err == v2fs.ErrSegmentNotFound { dt, err := statusSegmentNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -578,7 +578,7 @@ func (s *FeatureService) BulkDownloadSegmentUsers( "Failed to get segment", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -604,7 +604,7 @@ func (s *FeatureService) BulkDownloadSegmentUsers( mysql.NewFilter("segment_id", "=", req.SegmentId), mysql.NewFilter("state", "=", int32(req.State)), mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } segmentUserStorage := v2fs.NewSegmentUserStorage(s.mysqlClient) users, _, err := segmentUserStorage.ListSegmentUsers( @@ -619,7 +619,7 @@ func (s *FeatureService) BulkDownloadSegmentUsers( "Failed to list segment users", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/feature/api/segment_user_test.go b/pkg/feature/api/segment_user_test.go index b59299c611..6f3689c042 100644 --- a/pkg/feature/api/segment_user_test.go +++ b/pkg/feature/api/segment_user_test.go @@ -54,52 +54,52 @@ func TestBulkUploadSegmentUsersMySQL(t *testing.T) { } testcases := []struct { - desc string - setup func(*FeatureService) - environmentNamespace string - segmentID string - cmd *featureproto.BulkUploadSegmentUsersCommand - expectedErr error + desc string + setup func(*FeatureService) + environmentId string + segmentID string + cmd *featureproto.BulkUploadSegmentUsersCommand + expectedErr error }{ { - desc: "ErrMissingSegmentID", - setup: nil, - environmentNamespace: "ns0", - segmentID: "", - cmd: nil, - expectedErr: createError(statusMissingSegmentID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "segment_id")), + desc: "ErrMissingSegmentID", + setup: nil, + environmentId: "ns0", + segmentID: "", + cmd: nil, + expectedErr: createError(statusMissingSegmentID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "segment_id")), }, { - desc: "ErrMissingCommand", - setup: nil, - environmentNamespace: "ns0", - segmentID: "id", - cmd: nil, - expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), + desc: "ErrMissingCommand", + setup: nil, + environmentId: "ns0", + segmentID: "id", + cmd: nil, + expectedErr: createError(statusMissingCommand, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "command")), }, { - desc: "ErrMissingSegmentUsersData", - setup: nil, - environmentNamespace: "ns0", - segmentID: "id", - cmd: &featureproto.BulkUploadSegmentUsersCommand{}, - expectedErr: createError(statusMissingSegmentUsersData, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "user_data")), + desc: "ErrMissingSegmentUsersData", + setup: nil, + environmentId: "ns0", + segmentID: "id", + cmd: &featureproto.BulkUploadSegmentUsersCommand{}, + expectedErr: createError(statusMissingSegmentUsersData, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "user_data")), }, { - desc: "ErrExceededMaxSegmentUsersDataSize", - setup: nil, - environmentNamespace: "ns0", - segmentID: "id", + desc: "ErrExceededMaxSegmentUsersDataSize", + setup: nil, + environmentId: "ns0", + segmentID: "id", cmd: &featureproto.BulkUploadSegmentUsersCommand{ Data: []byte(strings.Repeat("a", maxSegmentUsersDataSize+1)), }, expectedErr: createError(statusExceededMaxSegmentUsersDataSize, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "user_data_state")), }, { - desc: "ErrUnknownSegmentUserState", - setup: nil, - environmentNamespace: "ns0", - segmentID: "id", + desc: "ErrUnknownSegmentUserState", + setup: nil, + environmentId: "ns0", + segmentID: "id", cmd: &featureproto.BulkUploadSegmentUsersCommand{ Data: []byte("data"), State: featureproto.SegmentUser_State(99), @@ -114,8 +114,8 @@ func TestBulkUploadSegmentUsersMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(v2fs.ErrSegmentNotFound) }, - environmentNamespace: "ns0", - segmentID: "not_found_id", + environmentId: "ns0", + segmentID: "not_found_id", cmd: &featureproto.BulkUploadSegmentUsersCommand{ Data: []byte("data"), State: featureproto.SegmentUser_INCLUDED, @@ -130,8 +130,8 @@ func TestBulkUploadSegmentUsersMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(createError(statusSegmentUsersAlreadyUploading, localizer.MustLocalize(locale.SegmentUsersAlreadyUploading))) }, - environmentNamespace: "ns0", - segmentID: "id", + environmentId: "ns0", + segmentID: "id", cmd: &featureproto.BulkUploadSegmentUsersCommand{ Data: []byte("data"), State: featureproto.SegmentUser_INCLUDED, @@ -146,8 +146,8 @@ func TestBulkUploadSegmentUsersMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil) }, - environmentNamespace: "ns0", - segmentID: "id", + environmentId: "ns0", + segmentID: "id", cmd: &featureproto.BulkUploadSegmentUsersCommand{ Data: []byte("data"), State: featureproto.SegmentUser_INCLUDED, @@ -163,9 +163,9 @@ func TestBulkUploadSegmentUsersMySQL(t *testing.T) { tc.setup(service) } req := &featureproto.BulkUploadSegmentUsersRequest{ - EnvironmentNamespace: tc.environmentNamespace, - SegmentId: tc.segmentID, - Command: tc.cmd, + EnvironmentId: tc.environmentId, + SegmentId: tc.segmentID, + Command: tc.cmd, } ctx = setToken(ctx) _, err := service.BulkUploadSegmentUsers(ctx, req) @@ -195,28 +195,28 @@ func TestBulkDownloadSegmentUsersMySQL(t *testing.T) { } testcases := []struct { - desc string - setup func(*FeatureService) - environmentNamespace string - segmentID string - state featureproto.SegmentUser_State - expectedErr error + desc string + setup func(*FeatureService) + environmentId string + segmentID string + state featureproto.SegmentUser_State + expectedErr error }{ { - desc: "ErrMissingSegmentID", - setup: nil, - environmentNamespace: "ns0", - segmentID: "", - state: featureproto.SegmentUser_INCLUDED, - expectedErr: createError(statusMissingSegmentID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "segment_id")), + desc: "ErrMissingSegmentID", + setup: nil, + environmentId: "ns0", + segmentID: "", + state: featureproto.SegmentUser_INCLUDED, + expectedErr: createError(statusMissingSegmentID, localizer.MustLocalizeWithTemplate(locale.RequiredFieldTemplate, "segment_id")), }, { - desc: "ErrUnknownSegmentUserState", - setup: nil, - environmentNamespace: "ns0", - segmentID: "id", - state: featureproto.SegmentUser_State(99), - expectedErr: createError(statusUnknownSegmentUserState, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "user_state")), + desc: "ErrUnknownSegmentUserState", + setup: nil, + environmentId: "ns0", + segmentID: "id", + state: featureproto.SegmentUser_State(99), + expectedErr: createError(statusUnknownSegmentUserState, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "user_state")), }, { desc: "ErrSegmentNotFound", @@ -227,10 +227,10 @@ func TestBulkDownloadSegmentUsersMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - environmentNamespace: "ns0", - segmentID: "id", - state: featureproto.SegmentUser_INCLUDED, - expectedErr: createError(statusSegmentNotFound, localizer.MustLocalize(locale.NotFoundError)), + environmentId: "ns0", + segmentID: "id", + state: featureproto.SegmentUser_INCLUDED, + expectedErr: createError(statusSegmentNotFound, localizer.MustLocalize(locale.NotFoundError)), }, { desc: "ErrSegmentStatusNotSuceeded", @@ -241,10 +241,10 @@ func TestBulkDownloadSegmentUsersMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - environmentNamespace: "ns0", - segmentID: "id", - state: featureproto.SegmentUser_INCLUDED, - expectedErr: createError(statusSegmentStatusNotSuceeded, localizer.MustLocalize(locale.SegmentStatusNotSucceeded)), + environmentId: "ns0", + segmentID: "id", + state: featureproto.SegmentUser_INCLUDED, + expectedErr: createError(statusSegmentStatusNotSuceeded, localizer.MustLocalize(locale.SegmentStatusNotSucceeded)), }, } for _, tc := range testcases { @@ -255,9 +255,9 @@ func TestBulkDownloadSegmentUsersMySQL(t *testing.T) { } ctx = setToken(ctx) req := &featureproto.BulkDownloadSegmentUsersRequest{ - EnvironmentNamespace: tc.environmentNamespace, - SegmentId: tc.segmentID, - State: tc.state, + EnvironmentId: tc.environmentId, + SegmentId: tc.segmentID, + State: tc.state, } _, err := service.BulkDownloadSegmentUsers(ctx, req) assert.Equal(t, tc.expectedErr, err) diff --git a/pkg/feature/api/tag.go b/pkg/feature/api/tag.go index 2b9ddb725b..05655eeebc 100644 --- a/pkg/feature/api/tag.go +++ b/pkg/feature/api/tag.go @@ -38,12 +38,12 @@ func (s *FeatureService) ListTags( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.SearchKeyword != "" { whereParts = append(whereParts, mysql.NewSearchQuery([]string{"id"}, req.SearchKeyword)) @@ -54,7 +54,7 @@ func (s *FeatureService) ListTags( "Invalid argument", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, err @@ -88,10 +88,10 @@ func (s *FeatureService) ListTags( "Failed to list tags", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) - return nil, s.reportInternalServerError(ctx, err, req.EnvironmentNamespace, localizer) + return nil, s.reportInternalServerError(ctx, err, req.EnvironmentId, localizer) } return &featureproto.ListTagsResponse{ Tags: tags, @@ -135,7 +135,7 @@ func (s *FeatureService) upsertTags( ctx context.Context, tx mysql.Transaction, tags []string, - environmentNamespace string, + environment_id string, ) error { tagStorage := v2fs.NewTagStorage(tx) for _, tag := range tags { @@ -144,12 +144,12 @@ func (s *FeatureService) upsertTags( continue } t := domain.NewTag(trimed) - if err := tagStorage.UpsertTag(ctx, t, environmentNamespace); err != nil { + if err := tagStorage.UpsertTag(ctx, t, environment_id); err != nil { s.logger.Error( "Failed to store tag", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environment_id", environment_id), zap.String("tagID", tag), )..., ) diff --git a/pkg/feature/api/tag_test.go b/pkg/feature/api/tag_test.go index c1ee0f7fff..20056a346e 100644 --- a/pkg/feature/api/tag_test.go +++ b/pkg/feature/api/tag_test.go @@ -59,7 +59,7 @@ func TestListTagsMySQL(t *testing.T) { { desc: "errInvalidCursor", setup: nil, - input: &featureproto.ListTagsRequest{EnvironmentNamespace: environmentNamespace, Cursor: "foo"}, + input: &featureproto.ListTagsRequest{EnvironmentId: environmentId, Cursor: "foo"}, expected: nil, expectedErr: createError(localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "cursor"), statusInvalidCursor), }, @@ -70,7 +70,7 @@ func TestListTagsMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, errors.New("test")) }, - input: &featureproto.ListTagsRequest{EnvironmentNamespace: environmentNamespace}, + input: &featureproto.ListTagsRequest{EnvironmentId: environmentId}, expected: nil, expectedErr: createError(localizer.MustLocalize(locale.InternalServerError), statusInternal), }, @@ -91,9 +91,9 @@ func TestListTagsMySQL(t *testing.T) { ).Return(row) }, input: &featureproto.ListTagsRequest{ - PageSize: 2, - Cursor: "", - EnvironmentNamespace: environmentNamespace, + PageSize: 2, + Cursor: "", + EnvironmentId: environmentId, }, expected: &featureproto.ListTagsResponse{Tags: []*featureproto.Tag{}, Cursor: "0"}, expectedErr: nil, @@ -158,7 +158,7 @@ func TestUpsertTags(t *testing.T) { if p.setup != nil { p.setup(transaction) } - err := service.upsertTags(ctx, transaction, p.tags, environmentNamespace) + err := service.upsertTags(ctx, transaction, p.tags, environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/feature/api/validation.go b/pkg/feature/api/validation.go index 1244512e8b..1a942200f5 100644 --- a/pkg/feature/api/validation.go +++ b/pkg/feature/api/validation.go @@ -1048,7 +1048,7 @@ func validateCloneFeatureRequest(req *featureproto.CloneFeatureRequest, localize } return dt.Err() } - if req.Command.EnvironmentNamespace == req.EnvironmentNamespace { + if req.Command.EnvironmentId == req.EnvironmentId { dt, err := statusIncorrectDestinationEnvironment.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), Message: localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "environment"), @@ -1455,10 +1455,10 @@ func validateVariationID(fs []*featureproto.Feature, p *featureproto.Prerequisit func (s *FeatureService) validateFeatureStatus( ctx context.Context, - id, environmentNameSpace string, + id, environmentId string, localizer locale.Localizer, ) error { - runningExperimentExists, err := s.existsRunningExperiment(ctx, id, environmentNameSpace) + runningExperimentExists, err := s.existsRunningExperiment(ctx, id, environmentId) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -1484,11 +1484,11 @@ func (s *FeatureService) validateFeatureStatus( func (s *FeatureService) validateEnvironmentSettings( ctx context.Context, - environmentNamespace, updateComment string, + environmentId, updateComment string, localizer locale.Localizer, ) error { req := &envproto.GetEnvironmentV2Request{ - Id: environmentNamespace, + Id: environmentId, } resp, err := s.environmentClient.GetEnvironmentV2(ctx, req) if err != nil { diff --git a/pkg/feature/command/eventfactory.go b/pkg/feature/command/eventfactory.go index 52a3b7b0d7..4b3696dc6b 100644 --- a/pkg/feature/command/eventfactory.go +++ b/pkg/feature/command/eventfactory.go @@ -25,11 +25,11 @@ import ( ) type FeatureEventFactory struct { - editor *eventproto.Editor - feature *domain.Feature - previousFeature *domain.Feature - environmentNamespace string - comment string + editor *eventproto.Editor + feature *domain.Feature + previousFeature *domain.Feature + environmentId string + comment string } func (s *FeatureEventFactory) CreateEvent( @@ -46,7 +46,7 @@ func (s *FeatureEventFactory) CreateEvent( s.feature.Id, eventType, event, - s.environmentNamespace, + s.environmentId, s.feature.Feature, prev, domainevent.WithComment(s.comment), diff --git a/pkg/feature/command/feature.go b/pkg/feature/command/feature.go index 224ce1a36a..7772987ab2 100644 --- a/pkg/feature/command/feature.go +++ b/pkg/feature/command/feature.go @@ -35,7 +35,7 @@ type FeatureCommandHandler struct { func NewFeatureCommandHandler( editor *eventproto.Editor, feature *domain.Feature, - environmentNamespace string, + environmentId string, comment string, ) (*FeatureCommandHandler, error) { prev := &domain.Feature{} @@ -45,11 +45,11 @@ func NewFeatureCommandHandler( return &FeatureCommandHandler{ feature: feature, eventFactory: &FeatureEventFactory{ - editor: editor, - feature: feature, - previousFeature: prev, - environmentNamespace: environmentNamespace, - comment: comment, + editor: editor, + feature: feature, + previousFeature: prev, + environmentId: environmentId, + comment: comment, }, Events: []*eventproto.Event{}, }, nil diff --git a/pkg/feature/command/feature_test.go b/pkg/feature/command/feature_test.go index 0d86af557f..d78f1cbbd9 100644 --- a/pkg/feature/command/feature_test.go +++ b/pkg/feature/command/feature_test.go @@ -618,8 +618,8 @@ func makeEventFactory(t *testing.T, feature *domain.Feature) *FeatureEventFactor editor: &eventproto.Editor{ Email: "email", }, - feature: feature, - previousFeature: prev, - environmentNamespace: "ns0", + feature: feature, + previousFeature: prev, + environmentId: "ns0", } } diff --git a/pkg/feature/command/flag_trigger.go b/pkg/feature/command/flag_trigger.go index 360ea10249..e5bc567533 100644 --- a/pkg/feature/command/flag_trigger.go +++ b/pkg/feature/command/flag_trigger.go @@ -29,29 +29,29 @@ import ( ) type flagTriggerCommandHandler struct { - editor *eventproto.Editor - flagTrigger *domain.FlagTrigger - previousFlagTrigger *domain.FlagTrigger - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + flagTrigger *domain.FlagTrigger + previousFlagTrigger *domain.FlagTrigger + publisher publisher.Publisher + environmentID string } func NewFlagTriggerCommandHandler( editor *eventproto.Editor, flagTrigger *domain.FlagTrigger, publisher publisher.Publisher, - environmentNamespace string, + environmentID string, ) (Handler, error) { prev := &domain.FlagTrigger{} if err := copier.Copy(prev, flagTrigger); err != nil { return nil, err } return &flagTriggerCommandHandler{ - editor: editor, - flagTrigger: flagTrigger, - previousFlagTrigger: prev, - publisher: publisher, - environmentNamespace: environmentNamespace, + editor: editor, + flagTrigger: flagTrigger, + previousFlagTrigger: prev, + publisher: publisher, + environmentID: environmentID, }, nil } @@ -86,15 +86,15 @@ func (f *flagTriggerCommandHandler) create( return err } return f.send(ctx, eventproto.Event_FLAG_TRIGGER_CREATED, &eventproto.FlagTriggerCreatedEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, - Type: f.flagTrigger.Type, - Action: f.flagTrigger.Action, - Description: f.flagTrigger.Description, - CreatedAt: f.flagTrigger.CreatedAt, - UpdatedAt: f.flagTrigger.UpdatedAt, - Token: f.flagTrigger.Token, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, + Type: f.flagTrigger.Type, + Action: f.flagTrigger.Action, + Description: f.flagTrigger.Description, + CreatedAt: f.flagTrigger.CreatedAt, + UpdatedAt: f.flagTrigger.UpdatedAt, + Token: f.flagTrigger.Token, }) } @@ -106,10 +106,10 @@ func (f *flagTriggerCommandHandler) reset( return err } return f.send(ctx, eventproto.Event_FLAG_TRIGGER_RESET, &eventproto.FlagTriggerResetEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, - Token: f.flagTrigger.Token, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, + Token: f.flagTrigger.Token, }) } @@ -121,10 +121,10 @@ func (f *flagTriggerCommandHandler) changeDescription( return f.send(ctx, eventproto.Event_FLAG_TRIGGER_DESCRIPTION_CHANGED, &eventproto.FlagTriggerDescriptionChangedEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, - Description: f.flagTrigger.Description, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, + Description: f.flagTrigger.Description, }) } @@ -134,9 +134,9 @@ func (f *flagTriggerCommandHandler) disable( ) error { _ = f.flagTrigger.Disable() return f.send(ctx, eventproto.Event_FLAG_TRIGGER_DISABLED, &eventproto.FlagTriggerDisabledEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, }) } @@ -146,9 +146,9 @@ func (f *flagTriggerCommandHandler) enable( ) error { _ = f.flagTrigger.Enable() return f.send(ctx, eventproto.Event_FLAG_TRIGGER_ENABLED, &eventproto.FlagTriggerEnabledEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, }) } @@ -158,11 +158,11 @@ func (f *flagTriggerCommandHandler) updateUsage( ) error { _ = f.flagTrigger.UpdateTriggerUsage() return f.send(ctx, eventproto.Event_FLAG_TRIGGER_USAGE_UPDATED, &eventproto.FlagTriggerUsageUpdatedEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, - LastTriggeredAt: f.flagTrigger.LastTriggeredAt, - TriggerTimes: f.flagTrigger.TriggerCount, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, + LastTriggeredAt: f.flagTrigger.LastTriggeredAt, + TriggerTimes: f.flagTrigger.TriggerCount, }) } @@ -171,9 +171,9 @@ func (f *flagTriggerCommandHandler) delete( cmd *proto.DeleteFlagTriggerCommand, ) error { return f.send(ctx, eventproto.Event_FLAG_TRIGGER_DELETED, &eventproto.FlagTriggerDeletedEvent{ - Id: f.flagTrigger.Id, - FeatureId: f.flagTrigger.FeatureId, - EnvironmentNamespace: f.flagTrigger.EnvironmentNamespace, + Id: f.flagTrigger.Id, + FeatureId: f.flagTrigger.FeatureId, + EnvironmentId: f.flagTrigger.EnvironmentId, }) } @@ -192,7 +192,7 @@ func (f *flagTriggerCommandHandler) send( f.flagTrigger.Id, eventType, event, - f.environmentNamespace, + f.environmentID, f.flagTrigger.FlagTrigger, prev, ) diff --git a/pkg/feature/command/segment.go b/pkg/feature/command/segment.go index f04f4af664..3d7de5a656 100644 --- a/pkg/feature/command/segment.go +++ b/pkg/feature/command/segment.go @@ -29,29 +29,29 @@ import ( ) type segmentCommandHandler struct { - editor *eventproto.Editor - segment *domain.Segment - previousSegment *domain.Segment - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + segment *domain.Segment + previousSegment *domain.Segment + publisher publisher.Publisher + environmentId string } func NewSegmentCommandHandler( editor *eventproto.Editor, segment *domain.Segment, publisher publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.Segment{} if err := copier.Copy(prev, segment); err != nil { return nil, err } return &segmentCommandHandler{ - editor: editor, - segment: segment, - previousSegment: prev, - publisher: publisher, - environmentNamespace: environmentNamespace, + editor: editor, + segment: segment, + previousSegment: prev, + publisher: publisher, + environmentId: environmentId, }, nil } @@ -318,7 +318,7 @@ func (h *segmentCommandHandler) send(ctx context.Context, eventType eventproto.E h.segment.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.segment.Segment, prev, ) diff --git a/pkg/feature/domain/flag_trigger.go b/pkg/feature/domain/flag_trigger.go index 64c607d6db..0da7b0ba07 100644 --- a/pkg/feature/domain/flag_trigger.go +++ b/pkg/feature/domain/flag_trigger.go @@ -29,7 +29,7 @@ type FlagTrigger struct { } func NewFlagTrigger( - environmentNamespace string, + environmentId string, cmd *proto.CreateFlagTriggerCommand, ) (*FlagTrigger, error) { now := time.Now().Unix() @@ -38,15 +38,15 @@ func NewFlagTrigger( return nil, err } return &FlagTrigger{&proto.FlagTrigger{ - Id: triggerID.String(), - FeatureId: cmd.FeatureId, - EnvironmentNamespace: environmentNamespace, - Type: cmd.Type, - Action: cmd.Action, - Description: cmd.Description, - Disabled: false, - CreatedAt: now, - UpdatedAt: now, + Id: triggerID.String(), + FeatureId: cmd.FeatureId, + EnvironmentId: environmentId, + Type: cmd.Type, + Action: cmd.Action, + Description: cmd.Description, + Disabled: false, + CreatedAt: now, + UpdatedAt: now, }}, nil } diff --git a/pkg/feature/storage/feature_last_used_info.go b/pkg/feature/storage/feature_last_used_info.go index 9fa095cf00..d8bbd7469d 100644 --- a/pkg/feature/storage/feature_last_used_info.go +++ b/pkg/feature/storage/feature_last_used_info.go @@ -27,12 +27,12 @@ type FeatureLastUsedStorage interface { GetFeatureLastUsedInfos( ctx context.Context, ids []string, - environmentNamespace string, + environmentId string, ) ([]*domain.FeatureLastUsedInfo, error) UpsertFeatureLastUsedInfos( ctx context.Context, featureLastUsedInfos []*domain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error } @@ -40,7 +40,7 @@ type FeatureLastUsedLister interface { ListFeatureLastUsedInfo( ctx context.Context, pageSize int, - cursor, environmentNamespace string, + cursor, environmentId string, filters ...*storage.Filter, ) ([]*proto.FeatureLastUsedInfo, string, error) } @@ -58,12 +58,12 @@ func NewFeatureLastUsedInfoStorage(client storage.GetPutter) FeatureLastUsedStor func (s *featureLastUsedInfoStorage) GetFeatureLastUsedInfos( ctx context.Context, ids []string, - environmentNamespace string, + environmentId string, ) ([]*domain.FeatureLastUsedInfo, error) { keys := make([]*storage.Key, 0, len(ids)) featureLastUsedInfos := make([]*proto.FeatureLastUsedInfo, 0, len(keys)) for _, k := range ids { - keys = append(keys, s.newKey(k, environmentNamespace)) + keys = append(keys, s.newKey(k, environmentId)) featureLastUsedInfos = append(featureLastUsedInfos, &proto.FeatureLastUsedInfo{}) } err := s.client.GetMulti(ctx, keys, featureLastUsedInfos) @@ -98,19 +98,19 @@ func (s *featureLastUsedInfoStorage) GetFeatureLastUsedInfos( func (s *featureLastUsedInfoStorage) UpsertFeatureLastUsedInfos( ctx context.Context, featureLastUsedInfos []*domain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error { keys := make([]*storage.Key, 0, len(featureLastUsedInfos)) featureLastUsedInfoProtos := make([]*proto.FeatureLastUsedInfo, 0, len(featureLastUsedInfos)) for _, f := range featureLastUsedInfos { - keys = append(keys, storage.NewKey(f.ID(), featureLastUsedInfoKind, environmentNamespace)) + keys = append(keys, storage.NewKey(f.ID(), featureLastUsedInfoKind, environmentId)) featureLastUsedInfoProtos = append(featureLastUsedInfoProtos, f.FeatureLastUsedInfo) } return s.client.PutMulti(ctx, keys, featureLastUsedInfoProtos) } -func (s *featureLastUsedInfoStorage) newKey(featureLastUsedInfoKey, environmentNamespace string) *storage.Key { - return storage.NewKey(featureLastUsedInfoKey, featureLastUsedInfoKind, environmentNamespace) +func (s *featureLastUsedInfoStorage) newKey(featureLastUsedInfoKey, environmentId string) *storage.Key { + return storage.NewKey(featureLastUsedInfoKey, featureLastUsedInfoKind, environmentId) } type featureLastUsedInfoLister struct { @@ -124,15 +124,15 @@ func NewFeatureLastUsedInfoLister(client storage.Querier) FeatureLastUsedLister func (l *featureLastUsedInfoLister) ListFeatureLastUsedInfo( ctx context.Context, pageSize int, - cursor, environmentNamespace string, + cursor, environmentId string, filters ...*storage.Filter, ) ([]*proto.FeatureLastUsedInfo, string, error) { query := storage.Query{ - Kind: featureLastUsedInfoKind, - Limit: pageSize, - StartCursor: cursor, - Filters: filters, - EnvironmentNamespace: environmentNamespace, + Kind: featureLastUsedInfoKind, + Limit: pageSize, + StartCursor: cursor, + Filters: filters, + EnvironmentId: environmentId, } it, err := l.client.RunQuery(ctx, query) if err != nil { diff --git a/pkg/feature/storage/feature_last_used_info_test.go b/pkg/feature/storage/feature_last_used_info_test.go index 3da37fbf7d..fcf52e8d8f 100644 --- a/pkg/feature/storage/feature_last_used_info_test.go +++ b/pkg/feature/storage/feature_last_used_info_test.go @@ -35,20 +35,20 @@ func TestNewFeatureLastUsedStorage(t *testing.T) { func TestGetFeatureLastUsedInfos(t *testing.T) { t.Parallel() patterns := []struct { - input []string - environmentNamespace string - expected []*domain.FeatureLastUsedInfo - expectedErr error + input []string + environmentId string + expected []*domain.FeatureLastUsedInfo + expectedErr error }{ { - input: []string{}, - environmentNamespace: "ns0", - expected: []*domain.FeatureLastUsedInfo{}, - expectedErr: nil, + input: []string{}, + environmentId: "ns0", + expected: []*domain.FeatureLastUsedInfo{}, + expectedErr: nil, }, { - input: []string{"feature-id-1:1"}, - environmentNamespace: "ns0", + input: []string{"feature-id-1:1"}, + environmentId: "ns0", expected: []*domain.FeatureLastUsedInfo{ { FeatureLastUsedInfo: &proto.FeatureLastUsedInfo{ @@ -66,7 +66,7 @@ func TestGetFeatureLastUsedInfos(t *testing.T) { "feature-id-1:1", "feature-id-2:1", }, - environmentNamespace: "ns0", + environmentId: "ns0", expected: []*domain.FeatureLastUsedInfo{ { FeatureLastUsedInfo: &proto.FeatureLastUsedInfo{ @@ -113,7 +113,7 @@ func TestGetFeatureLastUsedInfos(t *testing.T) { for _, p := range patterns { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - actual, err := db.GetFeatureLastUsedInfos(ctx, p.input, p.environmentNamespace) + actual, err := db.GetFeatureLastUsedInfos(ctx, p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) if err == nil && len(p.input) > 0 { for i, e := range p.expected { @@ -130,9 +130,9 @@ func TestGetFeatureLastUsedInfos(t *testing.T) { func TestUpsertFeatureLastUsedInfo(t *testing.T) { t.Parallel() patterns := []struct { - data []*domain.FeatureLastUsedInfo - environmentNamespace string - expectedErr error + data []*domain.FeatureLastUsedInfo + environmentId string + expectedErr error }{ // insert { @@ -146,8 +146,8 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { }, }, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, // multi insert { @@ -169,8 +169,8 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { }, }, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, // update { @@ -184,8 +184,8 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { }, }, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, // insert & update { @@ -207,8 +207,8 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { }, }, }, - environmentNamespace: "ns0", - expectedErr: nil, + environmentId: "ns0", + expectedErr: nil, }, } client := storagetesting.NewInMemoryStorage() @@ -236,7 +236,7 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { for _, p := range patterns { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() - err := db.UpsertFeatureLastUsedInfos(ctx, p.data, p.environmentNamespace) + err := db.UpsertFeatureLastUsedInfos(ctx, p.data, p.environmentId) assert.NoError(t, err) actual := make([]*proto.FeatureLastUsedInfo, len(p.data)) for i := range actual { @@ -244,7 +244,7 @@ func TestUpsertFeatureLastUsedInfo(t *testing.T) { } keys := make([]*storage.Key, 0, len(p.data)) for _, d := range p.data { - keys = append(keys, storage.NewKey(d.ID(), featureLastUsedInfoKind, p.environmentNamespace)) + keys = append(keys, storage.NewKey(d.ID(), featureLastUsedInfoKind, p.environmentId)) } err = client.GetMulti(ctx, keys, actual) assert.NoError(t, err) diff --git a/pkg/feature/storage/mock/feature_last_used_info.go b/pkg/feature/storage/mock/feature_last_used_info.go index 95f8b9ff21..44a1cd7736 100644 --- a/pkg/feature/storage/mock/feature_last_used_info.go +++ b/pkg/feature/storage/mock/feature_last_used_info.go @@ -44,32 +44,32 @@ func (m *MockFeatureLastUsedStorage) EXPECT() *MockFeatureLastUsedStorageMockRec } // GetFeatureLastUsedInfos mocks base method. -func (m *MockFeatureLastUsedStorage) GetFeatureLastUsedInfos(ctx context.Context, ids []string, environmentNamespace string) ([]*domain.FeatureLastUsedInfo, error) { +func (m *MockFeatureLastUsedStorage) GetFeatureLastUsedInfos(ctx context.Context, ids []string, environmentId string) ([]*domain.FeatureLastUsedInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetFeatureLastUsedInfos", ctx, ids, environmentNamespace) + ret := m.ctrl.Call(m, "GetFeatureLastUsedInfos", ctx, ids, environmentId) ret0, _ := ret[0].([]*domain.FeatureLastUsedInfo) ret1, _ := ret[1].(error) return ret0, ret1 } // GetFeatureLastUsedInfos indicates an expected call of GetFeatureLastUsedInfos. -func (mr *MockFeatureLastUsedStorageMockRecorder) GetFeatureLastUsedInfos(ctx, ids, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureLastUsedStorageMockRecorder) GetFeatureLastUsedInfos(ctx, ids, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedStorage)(nil).GetFeatureLastUsedInfos), ctx, ids, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedStorage)(nil).GetFeatureLastUsedInfos), ctx, ids, environmentId) } // UpsertFeatureLastUsedInfos mocks base method. -func (m *MockFeatureLastUsedStorage) UpsertFeatureLastUsedInfos(ctx context.Context, featureLastUsedInfos []*domain.FeatureLastUsedInfo, environmentNamespace string) error { +func (m *MockFeatureLastUsedStorage) UpsertFeatureLastUsedInfos(ctx context.Context, featureLastUsedInfos []*domain.FeatureLastUsedInfo, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertFeatureLastUsedInfos", ctx, featureLastUsedInfos, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertFeatureLastUsedInfos", ctx, featureLastUsedInfos, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertFeatureLastUsedInfos indicates an expected call of UpsertFeatureLastUsedInfos. -func (mr *MockFeatureLastUsedStorageMockRecorder) UpsertFeatureLastUsedInfos(ctx, featureLastUsedInfos, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureLastUsedStorageMockRecorder) UpsertFeatureLastUsedInfos(ctx, featureLastUsedInfos, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedStorage)(nil).UpsertFeatureLastUsedInfos), ctx, featureLastUsedInfos, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedStorage)(nil).UpsertFeatureLastUsedInfos), ctx, featureLastUsedInfos, environmentId) } // MockFeatureLastUsedLister is a mock of FeatureLastUsedLister interface. @@ -96,9 +96,9 @@ func (m *MockFeatureLastUsedLister) EXPECT() *MockFeatureLastUsedListerMockRecor } // ListFeatureLastUsedInfo mocks base method. -func (m *MockFeatureLastUsedLister) ListFeatureLastUsedInfo(ctx context.Context, pageSize int, cursor, environmentNamespace string, filters ...*storage.Filter) ([]*feature.FeatureLastUsedInfo, string, error) { +func (m *MockFeatureLastUsedLister) ListFeatureLastUsedInfo(ctx context.Context, pageSize int, cursor, environmentId string, filters ...*storage.Filter) ([]*feature.FeatureLastUsedInfo, string, error) { m.ctrl.T.Helper() - varargs := []any{ctx, pageSize, cursor, environmentNamespace} + varargs := []any{ctx, pageSize, cursor, environmentId} for _, a := range filters { varargs = append(varargs, a) } @@ -110,8 +110,8 @@ func (m *MockFeatureLastUsedLister) ListFeatureLastUsedInfo(ctx context.Context, } // ListFeatureLastUsedInfo indicates an expected call of ListFeatureLastUsedInfo. -func (mr *MockFeatureLastUsedListerMockRecorder) ListFeatureLastUsedInfo(ctx, pageSize, cursor, environmentNamespace any, filters ...any) *gomock.Call { +func (mr *MockFeatureLastUsedListerMockRecorder) ListFeatureLastUsedInfo(ctx, pageSize, cursor, environmentId any, filters ...any) *gomock.Call { mr.mock.ctrl.T.Helper() - varargs := append([]any{ctx, pageSize, cursor, environmentNamespace}, filters...) + varargs := append([]any{ctx, pageSize, cursor, environmentId}, filters...) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListFeatureLastUsedInfo", reflect.TypeOf((*MockFeatureLastUsedLister)(nil).ListFeatureLastUsedInfo), varargs...) } diff --git a/pkg/feature/storage/v2/feature.go b/pkg/feature/storage/v2/feature.go index f876520959..a68330d1f1 100644 --- a/pkg/feature/storage/v2/feature.go +++ b/pkg/feature/storage/v2/feature.go @@ -32,9 +32,9 @@ var ( ) type FeatureStorage interface { - CreateFeature(ctx context.Context, feature *domain.Feature, environmentNamespace string) error - UpdateFeature(ctx context.Context, feature *domain.Feature, environmentNamespace string) error - GetFeature(ctx context.Context, key, environmentNamespace string) (*domain.Feature, error) + CreateFeature(ctx context.Context, feature *domain.Feature, environmentId string) error + UpdateFeature(ctx context.Context, feature *domain.Feature, environmentId string) error + GetFeature(ctx context.Context, key, environmentId string) (*domain.Feature, error) ListFeatures( ctx context.Context, whereParts []mysql.WherePart, @@ -60,7 +60,7 @@ func NewFeatureStorage(qe mysql.QueryExecer) FeatureStorage { func (s *featureStorage) CreateFeature( ctx context.Context, feature *domain.Feature, - environmentNamespace string, + environmentId string, ) error { query := ` INSERT INTO feature ( @@ -85,7 +85,7 @@ func (s *featureStorage) CreateFeature( maintainer, sampling_seed, prerequisites, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, @@ -116,7 +116,7 @@ func (s *featureStorage) CreateFeature( feature.Maintainer, feature.SamplingSeed, mysql.JSONObject{Val: feature.Prerequisites}, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -130,7 +130,7 @@ func (s *featureStorage) CreateFeature( func (s *featureStorage) UpdateFeature( ctx context.Context, feature *domain.Feature, - environmentNamespace string, + environmentId string, ) error { query := ` UPDATE @@ -158,7 +158,7 @@ func (s *featureStorage) UpdateFeature( prerequisites = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` result, err := s.qe.ExecContext( ctx, @@ -184,7 +184,7 @@ func (s *featureStorage) UpdateFeature( feature.SamplingSeed, mysql.JSONObject{Val: feature.Prerequisites}, feature.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -201,7 +201,7 @@ func (s *featureStorage) UpdateFeature( func (s *featureStorage) GetFeature( ctx context.Context, - key, environmentNamespace string, + key, environmentId string, ) (*domain.Feature, error) { feature := proto.Feature{} query := ` @@ -231,13 +231,13 @@ func (s *featureStorage) GetFeature( feature WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, key, - environmentNamespace, + environmentId, ).Scan( &feature.Id, &feature.Name, @@ -401,7 +401,7 @@ func (s *featureStorage) ListFeaturesFilteredByExperiment( experiment ON feature.id = experiment.feature_id AND - feature.environment_namespace = experiment.environment_namespace + feature.environment_id = experiment.environment_id %s %s %s `, whereSQL, orderBySQL, limitOffsetSQL, ) @@ -455,8 +455,8 @@ func (s *featureStorage) ListFeaturesFilteredByExperiment( experiment ON feature.id = experiment.feature_id AND - feature.environment_namespace = experiment.environment_namespace - %s + feature.environment_id = experiment.environment_id + %s `, whereSQL, ) err = s.qe.QueryRowContext(ctx, countQuery, whereArgs...).Scan(&totalCount) diff --git a/pkg/feature/storage/v2/feature_last_used_info.go b/pkg/feature/storage/v2/feature_last_used_info.go index 362d49e79e..0ec0b02eeb 100644 --- a/pkg/feature/storage/v2/feature_last_used_info.go +++ b/pkg/feature/storage/v2/feature_last_used_info.go @@ -28,12 +28,12 @@ type FeatureLastUsedInfoStorage interface { GetFeatureLastUsedInfos( ctx context.Context, ids []string, - environmentNamespace string, + environmentId string, ) ([]*domain.FeatureLastUsedInfo, error) UpsertFeatureLastUsedInfo( ctx context.Context, featureLastUsedInfos *domain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error } @@ -48,7 +48,7 @@ func NewFeatureLastUsedInfoStorage(qe mysql.QueryExecer) FeatureLastUsedInfoStor func (s *featureLastUsedInfoStorage) GetFeatureLastUsedInfos( ctx context.Context, ids []string, - environmentNamespace string, + environmentId string, ) ([]*domain.FeatureLastUsedInfo, error) { inFilterIDs := make([]interface{}, 0, len(ids)) for _, id := range ids { @@ -56,7 +56,7 @@ func (s *featureLastUsedInfoStorage) GetFeatureLastUsedInfos( } whereParts := []mysql.WherePart{ mysql.NewInFilter("id", inFilterIDs), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } whereSQL, whereArgs := mysql.ConstructWhereSQLString(whereParts) query := fmt.Sprintf(` @@ -114,7 +114,7 @@ func (s *featureLastUsedInfoStorage) GetFeatureLastUsedInfos( func (s *featureLastUsedInfoStorage) UpsertFeatureLastUsedInfo( ctx context.Context, flui *domain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error { query := ` INSERT INTO feature_last_used_info ( @@ -125,7 +125,7 @@ func (s *featureLastUsedInfoStorage) UpsertFeatureLastUsedInfo( client_oldest_version, client_latest_version, created_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE @@ -145,7 +145,7 @@ func (s *featureLastUsedInfoStorage) UpsertFeatureLastUsedInfo( flui.ClientOldestVersion, flui.ClientLatestVersion, flui.CreatedAt, - environmentNamespace, + environmentId, ) if err != nil { return err diff --git a/pkg/feature/storage/v2/flag_trigger.go b/pkg/feature/storage/v2/flag_trigger.go index a328ff82b9..3fbebb8394 100644 --- a/pkg/feature/storage/v2/flag_trigger.go +++ b/pkg/feature/storage/v2/flag_trigger.go @@ -53,8 +53,8 @@ var ( type FlagTriggerStorage interface { CreateFlagTrigger(ctx context.Context, flagTrigger *domain.FlagTrigger) error UpdateFlagTrigger(ctx context.Context, flagTrigger *domain.FlagTrigger) error - DeleteFlagTrigger(ctx context.Context, id, environmentNamespace string) error - GetFlagTrigger(ctx context.Context, id, environmentNamespace string) (*domain.FlagTrigger, error) + DeleteFlagTrigger(ctx context.Context, id, environmentId string) error + GetFlagTrigger(ctx context.Context, id, environmentId string) (*domain.FlagTrigger, error) GetFlagTriggerByToken(ctx context.Context, token string) (*domain.FlagTrigger, error) ListFlagTriggers( ctx context.Context, @@ -81,7 +81,7 @@ func (f flagTriggerStorage) CreateFlagTrigger( _, err := f.qe.ExecContext(ctx, insertFlagTriggerSQL, flagTrigger.Id, flagTrigger.FeatureId, - flagTrigger.EnvironmentNamespace, + flagTrigger.EnvironmentId, flagTrigger.Type, flagTrigger.Action, flagTrigger.Description, @@ -114,7 +114,7 @@ func (f flagTriggerStorage) UpdateFlagTrigger(ctx context.Context, flagTrigger * flagTrigger.CreatedAt, flagTrigger.UpdatedAt, flagTrigger.Id, - flagTrigger.EnvironmentNamespace, + flagTrigger.EnvironmentId, ) if err != nil { return err @@ -131,11 +131,11 @@ func (f flagTriggerStorage) UpdateFlagTrigger(ctx context.Context, flagTrigger * func (f flagTriggerStorage) DeleteFlagTrigger( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) error { result, err := f.qe.ExecContext(ctx, deleteFlagTriggerSQL, id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -152,18 +152,18 @@ func (f flagTriggerStorage) DeleteFlagTrigger( func (f flagTriggerStorage) GetFlagTrigger( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.FlagTrigger, error) { trigger := proto.FlagTrigger{} err := f.qe.QueryRowContext( ctx, getFlagTriggerSQL, id, - environmentNamespace, + environmentId, ).Scan( &trigger.Id, &trigger.FeatureId, - &trigger.EnvironmentNamespace, + &trigger.EnvironmentId, &trigger.Type, &trigger.Action, &trigger.Description, @@ -195,7 +195,7 @@ func (f flagTriggerStorage) GetFlagTriggerByToken( ).Scan( &trigger.Id, &trigger.FeatureId, - &trigger.EnvironmentNamespace, + &trigger.EnvironmentId, &trigger.Type, &trigger.Action, &trigger.Description, diff --git a/pkg/feature/storage/v2/mock/feature.go b/pkg/feature/storage/v2/mock/feature.go index 52442f246b..96094b421f 100644 --- a/pkg/feature/storage/v2/mock/feature.go +++ b/pkg/feature/storage/v2/mock/feature.go @@ -44,32 +44,32 @@ func (m *MockFeatureStorage) EXPECT() *MockFeatureStorageMockRecorder { } // CreateFeature mocks base method. -func (m *MockFeatureStorage) CreateFeature(ctx context.Context, feature *domain.Feature, environmentNamespace string) error { +func (m *MockFeatureStorage) CreateFeature(ctx context.Context, feature *domain.Feature, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateFeature", ctx, feature, environmentNamespace) + ret := m.ctrl.Call(m, "CreateFeature", ctx, feature, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateFeature indicates an expected call of CreateFeature. -func (mr *MockFeatureStorageMockRecorder) CreateFeature(ctx, feature, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureStorageMockRecorder) CreateFeature(ctx, feature, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateFeature", reflect.TypeOf((*MockFeatureStorage)(nil).CreateFeature), ctx, feature, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateFeature", reflect.TypeOf((*MockFeatureStorage)(nil).CreateFeature), ctx, feature, environmentId) } // GetFeature mocks base method. -func (m *MockFeatureStorage) GetFeature(ctx context.Context, key, environmentNamespace string) (*domain.Feature, error) { +func (m *MockFeatureStorage) GetFeature(ctx context.Context, key, environmentId string) (*domain.Feature, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetFeature", ctx, key, environmentNamespace) + ret := m.ctrl.Call(m, "GetFeature", ctx, key, environmentId) ret0, _ := ret[0].(*domain.Feature) ret1, _ := ret[1].(error) return ret0, ret1 } // GetFeature indicates an expected call of GetFeature. -func (mr *MockFeatureStorageMockRecorder) GetFeature(ctx, key, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureStorageMockRecorder) GetFeature(ctx, key, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeature", reflect.TypeOf((*MockFeatureStorage)(nil).GetFeature), ctx, key, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeature", reflect.TypeOf((*MockFeatureStorage)(nil).GetFeature), ctx, key, environmentId) } // ListFeatures mocks base method. @@ -107,15 +107,15 @@ func (mr *MockFeatureStorageMockRecorder) ListFeaturesFilteredByExperiment(ctx, } // UpdateFeature mocks base method. -func (m *MockFeatureStorage) UpdateFeature(ctx context.Context, feature *domain.Feature, environmentNamespace string) error { +func (m *MockFeatureStorage) UpdateFeature(ctx context.Context, feature *domain.Feature, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateFeature", ctx, feature, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateFeature", ctx, feature, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateFeature indicates an expected call of UpdateFeature. -func (mr *MockFeatureStorageMockRecorder) UpdateFeature(ctx, feature, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureStorageMockRecorder) UpdateFeature(ctx, feature, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateFeature", reflect.TypeOf((*MockFeatureStorage)(nil).UpdateFeature), ctx, feature, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateFeature", reflect.TypeOf((*MockFeatureStorage)(nil).UpdateFeature), ctx, feature, environmentId) } diff --git a/pkg/feature/storage/v2/mock/feature_last_used_info.go b/pkg/feature/storage/v2/mock/feature_last_used_info.go index 20c11a2416..129cb4b7ad 100644 --- a/pkg/feature/storage/v2/mock/feature_last_used_info.go +++ b/pkg/feature/storage/v2/mock/feature_last_used_info.go @@ -42,30 +42,30 @@ func (m *MockFeatureLastUsedInfoStorage) EXPECT() *MockFeatureLastUsedInfoStorag } // GetFeatureLastUsedInfos mocks base method. -func (m *MockFeatureLastUsedInfoStorage) GetFeatureLastUsedInfos(ctx context.Context, ids []string, environmentNamespace string) ([]*domain.FeatureLastUsedInfo, error) { +func (m *MockFeatureLastUsedInfoStorage) GetFeatureLastUsedInfos(ctx context.Context, ids []string, environmentId string) ([]*domain.FeatureLastUsedInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetFeatureLastUsedInfos", ctx, ids, environmentNamespace) + ret := m.ctrl.Call(m, "GetFeatureLastUsedInfos", ctx, ids, environmentId) ret0, _ := ret[0].([]*domain.FeatureLastUsedInfo) ret1, _ := ret[1].(error) return ret0, ret1 } // GetFeatureLastUsedInfos indicates an expected call of GetFeatureLastUsedInfos. -func (mr *MockFeatureLastUsedInfoStorageMockRecorder) GetFeatureLastUsedInfos(ctx, ids, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureLastUsedInfoStorageMockRecorder) GetFeatureLastUsedInfos(ctx, ids, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedInfoStorage)(nil).GetFeatureLastUsedInfos), ctx, ids, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFeatureLastUsedInfos", reflect.TypeOf((*MockFeatureLastUsedInfoStorage)(nil).GetFeatureLastUsedInfos), ctx, ids, environmentId) } // UpsertFeatureLastUsedInfo mocks base method. -func (m *MockFeatureLastUsedInfoStorage) UpsertFeatureLastUsedInfo(ctx context.Context, featureLastUsedInfos *domain.FeatureLastUsedInfo, environmentNamespace string) error { +func (m *MockFeatureLastUsedInfoStorage) UpsertFeatureLastUsedInfo(ctx context.Context, featureLastUsedInfos *domain.FeatureLastUsedInfo, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertFeatureLastUsedInfo", ctx, featureLastUsedInfos, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertFeatureLastUsedInfo", ctx, featureLastUsedInfos, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertFeatureLastUsedInfo indicates an expected call of UpsertFeatureLastUsedInfo. -func (mr *MockFeatureLastUsedInfoStorageMockRecorder) UpsertFeatureLastUsedInfo(ctx, featureLastUsedInfos, environmentNamespace any) *gomock.Call { +func (mr *MockFeatureLastUsedInfoStorageMockRecorder) UpsertFeatureLastUsedInfo(ctx, featureLastUsedInfos, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertFeatureLastUsedInfo", reflect.TypeOf((*MockFeatureLastUsedInfoStorage)(nil).UpsertFeatureLastUsedInfo), ctx, featureLastUsedInfos, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertFeatureLastUsedInfo", reflect.TypeOf((*MockFeatureLastUsedInfoStorage)(nil).UpsertFeatureLastUsedInfo), ctx, featureLastUsedInfos, environmentId) } diff --git a/pkg/feature/storage/v2/mock/flag_trigger.go b/pkg/feature/storage/v2/mock/flag_trigger.go index b9e021ecf1..214e737cfa 100644 --- a/pkg/feature/storage/v2/mock/flag_trigger.go +++ b/pkg/feature/storage/v2/mock/flag_trigger.go @@ -58,32 +58,32 @@ func (mr *MockFlagTriggerStorageMockRecorder) CreateFlagTrigger(ctx, flagTrigger } // DeleteFlagTrigger mocks base method. -func (m *MockFlagTriggerStorage) DeleteFlagTrigger(ctx context.Context, id, environmentNamespace string) error { +func (m *MockFlagTriggerStorage) DeleteFlagTrigger(ctx context.Context, id, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteFlagTrigger", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "DeleteFlagTrigger", ctx, id, environmentId) ret0, _ := ret[0].(error) return ret0 } // DeleteFlagTrigger indicates an expected call of DeleteFlagTrigger. -func (mr *MockFlagTriggerStorageMockRecorder) DeleteFlagTrigger(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockFlagTriggerStorageMockRecorder) DeleteFlagTrigger(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteFlagTrigger", reflect.TypeOf((*MockFlagTriggerStorage)(nil).DeleteFlagTrigger), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteFlagTrigger", reflect.TypeOf((*MockFlagTriggerStorage)(nil).DeleteFlagTrigger), ctx, id, environmentId) } // GetFlagTrigger mocks base method. -func (m *MockFlagTriggerStorage) GetFlagTrigger(ctx context.Context, id, environmentNamespace string) (*domain.FlagTrigger, error) { +func (m *MockFlagTriggerStorage) GetFlagTrigger(ctx context.Context, id, environmentId string) (*domain.FlagTrigger, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetFlagTrigger", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetFlagTrigger", ctx, id, environmentId) ret0, _ := ret[0].(*domain.FlagTrigger) ret1, _ := ret[1].(error) return ret0, ret1 } // GetFlagTrigger indicates an expected call of GetFlagTrigger. -func (mr *MockFlagTriggerStorageMockRecorder) GetFlagTrigger(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockFlagTriggerStorageMockRecorder) GetFlagTrigger(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFlagTrigger", reflect.TypeOf((*MockFlagTriggerStorage)(nil).GetFlagTrigger), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFlagTrigger", reflect.TypeOf((*MockFlagTriggerStorage)(nil).GetFlagTrigger), ctx, id, environmentId) } // GetFlagTriggerByToken mocks base method. diff --git a/pkg/feature/storage/v2/mock/segment.go b/pkg/feature/storage/v2/mock/segment.go index d3f8f72430..51c19a98f2 100644 --- a/pkg/feature/storage/v2/mock/segment.go +++ b/pkg/feature/storage/v2/mock/segment.go @@ -44,23 +44,23 @@ func (m *MockSegmentStorage) EXPECT() *MockSegmentStorageMockRecorder { } // CreateSegment mocks base method. -func (m *MockSegmentStorage) CreateSegment(ctx context.Context, segment *domain.Segment, environmentNamespace string) error { +func (m *MockSegmentStorage) CreateSegment(ctx context.Context, segment *domain.Segment, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateSegment", ctx, segment, environmentNamespace) + ret := m.ctrl.Call(m, "CreateSegment", ctx, segment, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateSegment indicates an expected call of CreateSegment. -func (mr *MockSegmentStorageMockRecorder) CreateSegment(ctx, segment, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentStorageMockRecorder) CreateSegment(ctx, segment, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSegment", reflect.TypeOf((*MockSegmentStorage)(nil).CreateSegment), ctx, segment, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSegment", reflect.TypeOf((*MockSegmentStorage)(nil).CreateSegment), ctx, segment, environmentId) } // GetSegment mocks base method. -func (m *MockSegmentStorage) GetSegment(ctx context.Context, id, environmentNamespace string) (*domain.Segment, []string, error) { +func (m *MockSegmentStorage) GetSegment(ctx context.Context, id, environmentId string) (*domain.Segment, []string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSegment", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetSegment", ctx, id, environmentId) ret0, _ := ret[0].(*domain.Segment) ret1, _ := ret[1].([]string) ret2, _ := ret[2].(error) @@ -68,15 +68,15 @@ func (m *MockSegmentStorage) GetSegment(ctx context.Context, id, environmentName } // GetSegment indicates an expected call of GetSegment. -func (mr *MockSegmentStorageMockRecorder) GetSegment(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentStorageMockRecorder) GetSegment(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSegment", reflect.TypeOf((*MockSegmentStorage)(nil).GetSegment), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSegment", reflect.TypeOf((*MockSegmentStorage)(nil).GetSegment), ctx, id, environmentId) } // ListSegments mocks base method. -func (m *MockSegmentStorage) ListSegments(ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, environmentNamespace string) ([]*feature.Segment, int, int64, map[string][]string, error) { +func (m *MockSegmentStorage) ListSegments(ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, environmentId string) ([]*feature.Segment, int, int64, map[string][]string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListSegments", ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace) + ret := m.ctrl.Call(m, "ListSegments", ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId) ret0, _ := ret[0].([]*feature.Segment) ret1, _ := ret[1].(int) ret2, _ := ret[2].(int64) @@ -86,21 +86,21 @@ func (m *MockSegmentStorage) ListSegments(ctx context.Context, whereParts []mysq } // ListSegments indicates an expected call of ListSegments. -func (mr *MockSegmentStorageMockRecorder) ListSegments(ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentStorageMockRecorder) ListSegments(ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSegments", reflect.TypeOf((*MockSegmentStorage)(nil).ListSegments), ctx, whereParts, orders, limit, offset, isInUseStatus, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSegments", reflect.TypeOf((*MockSegmentStorage)(nil).ListSegments), ctx, whereParts, orders, limit, offset, isInUseStatus, environmentId) } // UpdateSegment mocks base method. -func (m *MockSegmentStorage) UpdateSegment(ctx context.Context, segment *domain.Segment, environmentNamespace string) error { +func (m *MockSegmentStorage) UpdateSegment(ctx context.Context, segment *domain.Segment, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateSegment", ctx, segment, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateSegment", ctx, segment, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateSegment indicates an expected call of UpdateSegment. -func (mr *MockSegmentStorageMockRecorder) UpdateSegment(ctx, segment, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentStorageMockRecorder) UpdateSegment(ctx, segment, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSegment", reflect.TypeOf((*MockSegmentStorage)(nil).UpdateSegment), ctx, segment, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSegment", reflect.TypeOf((*MockSegmentStorage)(nil).UpdateSegment), ctx, segment, environmentId) } diff --git a/pkg/feature/storage/v2/mock/segment_user.go b/pkg/feature/storage/v2/mock/segment_user.go index 22d2999742..56ab37d5a7 100644 --- a/pkg/feature/storage/v2/mock/segment_user.go +++ b/pkg/feature/storage/v2/mock/segment_user.go @@ -44,18 +44,18 @@ func (m *MockSegmentUserStorage) EXPECT() *MockSegmentUserStorageMockRecorder { } // GetSegmentUser mocks base method. -func (m *MockSegmentUserStorage) GetSegmentUser(ctx context.Context, id, environmentNamespace string) (*domain.SegmentUser, error) { +func (m *MockSegmentUserStorage) GetSegmentUser(ctx context.Context, id, environmentId string) (*domain.SegmentUser, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSegmentUser", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetSegmentUser", ctx, id, environmentId) ret0, _ := ret[0].(*domain.SegmentUser) ret1, _ := ret[1].(error) return ret0, ret1 } // GetSegmentUser indicates an expected call of GetSegmentUser. -func (mr *MockSegmentUserStorageMockRecorder) GetSegmentUser(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentUserStorageMockRecorder) GetSegmentUser(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSegmentUser", reflect.TypeOf((*MockSegmentUserStorage)(nil).GetSegmentUser), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSegmentUser", reflect.TypeOf((*MockSegmentUserStorage)(nil).GetSegmentUser), ctx, id, environmentId) } // ListSegmentUsers mocks base method. @@ -75,15 +75,15 @@ func (mr *MockSegmentUserStorageMockRecorder) ListSegmentUsers(ctx, whereParts, } // UpsertSegmentUsers mocks base method. -func (m *MockSegmentUserStorage) UpsertSegmentUsers(ctx context.Context, users []*feature.SegmentUser, environmentNamespace string) error { +func (m *MockSegmentUserStorage) UpsertSegmentUsers(ctx context.Context, users []*feature.SegmentUser, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertSegmentUsers", ctx, users, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertSegmentUsers", ctx, users, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertSegmentUsers indicates an expected call of UpsertSegmentUsers. -func (mr *MockSegmentUserStorageMockRecorder) UpsertSegmentUsers(ctx, users, environmentNamespace any) *gomock.Call { +func (mr *MockSegmentUserStorageMockRecorder) UpsertSegmentUsers(ctx, users, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertSegmentUsers", reflect.TypeOf((*MockSegmentUserStorage)(nil).UpsertSegmentUsers), ctx, users, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertSegmentUsers", reflect.TypeOf((*MockSegmentUserStorage)(nil).UpsertSegmentUsers), ctx, users, environmentId) } diff --git a/pkg/feature/storage/v2/mock/tag.go b/pkg/feature/storage/v2/mock/tag.go index 1dcfd1217f..28c247eb9f 100644 --- a/pkg/feature/storage/v2/mock/tag.go +++ b/pkg/feature/storage/v2/mock/tag.go @@ -61,15 +61,15 @@ func (mr *MockTagStorageMockRecorder) ListTags(ctx, whereParts, orders, limit, o } // UpsertTag mocks base method. -func (m *MockTagStorage) UpsertTag(ctx context.Context, tag *domain.Tag, environmentNamespace string) error { +func (m *MockTagStorage) UpsertTag(ctx context.Context, tag *domain.Tag, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertTag", ctx, tag, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertTag", ctx, tag, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertTag indicates an expected call of UpsertTag. -func (mr *MockTagStorageMockRecorder) UpsertTag(ctx, tag, environmentNamespace any) *gomock.Call { +func (mr *MockTagStorageMockRecorder) UpsertTag(ctx, tag, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertTag", reflect.TypeOf((*MockTagStorage)(nil).UpsertTag), ctx, tag, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertTag", reflect.TypeOf((*MockTagStorage)(nil).UpsertTag), ctx, tag, environmentId) } diff --git a/pkg/feature/storage/v2/segment.go b/pkg/feature/storage/v2/segment.go index c9299d21bf..1c3cc29d02 100644 --- a/pkg/feature/storage/v2/segment.go +++ b/pkg/feature/storage/v2/segment.go @@ -34,16 +34,16 @@ var ( ) type SegmentStorage interface { - CreateSegment(ctx context.Context, segment *domain.Segment, environmentNamespace string) error - UpdateSegment(ctx context.Context, segment *domain.Segment, environmentNamespace string) error - GetSegment(ctx context.Context, id, environmentNamespace string) (*domain.Segment, []string, error) + CreateSegment(ctx context.Context, segment *domain.Segment, environmentId string) error + UpdateSegment(ctx context.Context, segment *domain.Segment, environmentId string) error + GetSegment(ctx context.Context, id, environmentId string) (*domain.Segment, []string, error) ListSegments( ctx context.Context, whereParts []mysql.WherePart, orders []*mysql.Order, limit, offset int, isInUseStatus *bool, - environmentNamespace string, + environmentId string, ) ([]*proto.Segment, int, int64, map[string][]string, error) } @@ -58,7 +58,7 @@ func NewSegmentStorage(qe mysql.QueryExecer) SegmentStorage { func (s *segmentStorage) CreateSegment( ctx context.Context, segment *domain.Segment, - environmentNamespace string, + environmentId string, ) error { query := ` INSERT INTO segment ( @@ -73,7 +73,7 @@ func (s *segmentStorage) CreateSegment( included_user_count, excluded_user_count, status, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? @@ -93,7 +93,7 @@ func (s *segmentStorage) CreateSegment( segment.IncludedUserCount, segment.ExcludedUserCount, int32(segment.Status), - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -107,7 +107,7 @@ func (s *segmentStorage) CreateSegment( func (s *segmentStorage) UpdateSegment( ctx context.Context, segment *domain.Segment, - environmentNamespace string, + environmentId string, ) error { query := ` UPDATE @@ -125,7 +125,7 @@ func (s *segmentStorage) UpdateSegment( status = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` result, err := s.qe.ExecContext( ctx, @@ -141,7 +141,7 @@ func (s *segmentStorage) UpdateSegment( segment.ExcludedUserCount, int32(segment.Status), segment.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -158,7 +158,7 @@ func (s *segmentStorage) UpdateSegment( func (s *segmentStorage) GetSegment( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.Segment, []string, error) { segment := proto.Segment{} var status int32 @@ -181,22 +181,22 @@ func (s *segmentStorage) GetSegment( FROM feature WHERE - environment_namespace = ? AND + environment_id = ? AND rules LIKE concat("%%", segment.id, "%%") ) AS feature_ids FROM segment WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` featureIDs := new(sql.NullString) err := s.qe.QueryRowContext( ctx, query, - environmentNamespace, + environmentId, id, - environmentNamespace, + environmentId, ).Scan( &segment.Id, &segment.Name, @@ -232,11 +232,11 @@ func (s *segmentStorage) ListSegments( orders []*mysql.Order, limit, offset int, isInUseStatus *bool, - environmentNamespace string, + environmentId string, ) ([]*proto.Segment, int, int64, map[string][]string, error) { whereSQL, whereArgs := mysql.ConstructWhereSQLString(whereParts) prepareArgs := make([]interface{}, 0, len(whereArgs)+1) - prepareArgs = append(prepareArgs, environmentNamespace) + prepareArgs = append(prepareArgs, environmentId) prepareArgs = append(prepareArgs, whereArgs...) orderBySQL := mysql.ConstructOrderBySQLString(orders) limitOffsetSQL := mysql.ConstructLimitOffsetSQLString(limit, offset) @@ -267,7 +267,7 @@ func (s *segmentStorage) ListSegments( FROM feature WHERE - environment_namespace = ? AND + environment_id = ? AND rules LIKE concat("%%", segment.id, "%%") ) AS feature_ids FROM @@ -335,7 +335,7 @@ func (s *segmentStorage) ListSegments( FROM feature WHERE - environment_namespace = ? AND + environment_id = ? AND rules LIKE concat("%%", segment.id, "%%") ) %s END diff --git a/pkg/feature/storage/v2/segment_user.go b/pkg/feature/storage/v2/segment_user.go index bd3aaf5798..5ce5ed6789 100644 --- a/pkg/feature/storage/v2/segment_user.go +++ b/pkg/feature/storage/v2/segment_user.go @@ -35,8 +35,8 @@ const ( ) type SegmentUserStorage interface { - UpsertSegmentUsers(ctx context.Context, users []*proto.SegmentUser, environmentNamespace string) error - GetSegmentUser(ctx context.Context, id, environmentNamespace string) (*domain.SegmentUser, error) + UpsertSegmentUsers(ctx context.Context, users []*proto.SegmentUser, environmentId string) error + GetSegmentUser(ctx context.Context, id, environmentId string) (*domain.SegmentUser, error) ListSegmentUsers( ctx context.Context, whereParts []mysql.WherePart, @@ -56,7 +56,7 @@ func NewSegmentUserStorage(qe mysql.QueryExecer) SegmentUserStorage { func (s *segmentUserStorage) UpsertSegmentUsers( ctx context.Context, users []*proto.SegmentUser, - environmentNamespace string, + environmentId string, ) error { // Upsert the users in batches for i := 0; i < len(users); i += batchSize { @@ -67,7 +67,7 @@ func (s *segmentUserStorage) UpsertSegmentUsers( if err := s.upsertSegmentUsers( ctx, users[i:j], - environmentNamespace, + environmentId, ); err != nil { return err } @@ -78,7 +78,7 @@ func (s *segmentUserStorage) UpsertSegmentUsers( func (s *segmentUserStorage) upsertSegmentUsers( ctx context.Context, users []*proto.SegmentUser, - environmentNamespace string, + environmentId string, ) error { var query strings.Builder query.WriteString(` @@ -88,7 +88,7 @@ func (s *segmentUserStorage) upsertSegmentUsers( user_id, state, deleted, - environment_namespace + environment_id ) VALUES `) args := []interface{}{} @@ -104,7 +104,7 @@ func (s *segmentUserStorage) upsertSegmentUsers( u.UserId, int32(u.State), u.Deleted, - environmentNamespace, + environmentId, ) } query.WriteString(` @@ -127,7 +127,7 @@ func (s *segmentUserStorage) upsertSegmentUsers( func (s *segmentUserStorage) GetSegmentUser( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.SegmentUser, error) { segmentUser := proto.SegmentUser{} var state int32 @@ -142,13 +142,13 @@ func (s *segmentUserStorage) GetSegmentUser( segment_user WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, id, - environmentNamespace, + environmentId, ).Scan( &segmentUser.Id, &segmentUser.SegmentId, diff --git a/pkg/feature/storage/v2/sql/flag_trigger/delete_flag_trigger.sql b/pkg/feature/storage/v2/sql/flag_trigger/delete_flag_trigger.sql index ed0e18d776..5aaeec10ac 100644 --- a/pkg/feature/storage/v2/sql/flag_trigger/delete_flag_trigger.sql +++ b/pkg/feature/storage/v2/sql/flag_trigger/delete_flag_trigger.sql @@ -1,4 +1,4 @@ DELETE FROM flag_trigger WHERE id = ? - AND environment_namespace = ? \ No newline at end of file + AND environment_id = ? \ No newline at end of file diff --git a/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger.sql b/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger.sql index 2dc983db36..18195c9f18 100644 --- a/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger.sql +++ b/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger.sql @@ -1,6 +1,6 @@ SELECT id, feature_id, - environment_namespace, + environment_id, type, `action`, description, @@ -12,4 +12,4 @@ SELECT id, updated_at from flag_trigger where id = ? - AND environment_namespace = ? \ No newline at end of file + AND environment_id = ? \ No newline at end of file diff --git a/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger_by_token.sql b/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger_by_token.sql index e6928c0773..bc03f22cd0 100644 --- a/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger_by_token.sql +++ b/pkg/feature/storage/v2/sql/flag_trigger/get_flag_trigger_by_token.sql @@ -1,6 +1,6 @@ SELECT id, feature_id, - environment_namespace, + environment_id, type, `action`, description, diff --git a/pkg/feature/storage/v2/sql/flag_trigger/insert_flag_trigger.sql b/pkg/feature/storage/v2/sql/flag_trigger/insert_flag_trigger.sql index a8346ae8a9..d7b388698c 100644 --- a/pkg/feature/storage/v2/sql/flag_trigger/insert_flag_trigger.sql +++ b/pkg/feature/storage/v2/sql/flag_trigger/insert_flag_trigger.sql @@ -1,6 +1,6 @@ INSERT INTO flag_trigger(id, feature_id, - environment_namespace, + environment_id, type, action, description, diff --git a/pkg/feature/storage/v2/sql/flag_trigger/update_flag_trigger.sql b/pkg/feature/storage/v2/sql/flag_trigger/update_flag_trigger.sql index 4040251751..510d9aded5 100644 --- a/pkg/feature/storage/v2/sql/flag_trigger/update_flag_trigger.sql +++ b/pkg/feature/storage/v2/sql/flag_trigger/update_flag_trigger.sql @@ -10,4 +10,4 @@ SET feature_id = ?, created_at = ?, updated_at = ? WHERE id = ? - AND environment_namespace = ? + AND environment_id = ? diff --git a/pkg/feature/storage/v2/tag.go b/pkg/feature/storage/v2/tag.go index 6e04e8b0b1..16d525e27b 100644 --- a/pkg/feature/storage/v2/tag.go +++ b/pkg/feature/storage/v2/tag.go @@ -31,7 +31,7 @@ var ( ) type TagStorage interface { - UpsertTag(ctx context.Context, tag *domain.Tag, environmentNamespace string) error + UpsertTag(ctx context.Context, tag *domain.Tag, environmentId string) error ListTags( ctx context.Context, whereParts []mysql.WherePart, @@ -51,7 +51,7 @@ func NewTagStorage(qe mysql.QueryExecer) TagStorage { func (s *tagStorage) UpsertTag( ctx context.Context, tag *domain.Tag, - environmentNamespace string, + environmentId string, ) error { // To get last tags, update `updated_at`. query := ` @@ -59,7 +59,7 @@ func (s *tagStorage) UpsertTag( id, created_at, updated_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE @@ -71,7 +71,7 @@ func (s *tagStorage) UpsertTag( tag.Id, tag.CreatedAt, tag.UpdatedAt, - environmentNamespace, + environmentId, ) if err != nil { return err diff --git a/pkg/notification/api/api.go b/pkg/notification/api/api.go index a8f2789860..1841a65537 100644 --- a/pkg/notification/api/api.go +++ b/pkg/notification/api/api.go @@ -133,17 +133,17 @@ func (s *NotificationService) checkSystemAdminRole( func (s *NotificationService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -157,7 +157,7 @@ func (s *NotificationService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -173,7 +173,7 @@ func (s *NotificationService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -189,7 +189,7 @@ func (s *NotificationService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/notification/api/subscription.go b/pkg/notification/api/subscription.go index 3637854c77..b779df4b5a 100644 --- a/pkg/notification/api/subscription.go +++ b/pkg/notification/api/subscription.go @@ -41,7 +41,7 @@ func (s *NotificationService) CreateSubscription( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -55,7 +55,7 @@ func (s *NotificationService) CreateSubscription( "Failed to create a new subscription", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.Any("sourceType", req.Command.SourceTypes), zap.Any("recipient", req.Command.Recipient), )..., @@ -89,10 +89,10 @@ func (s *NotificationService) CreateSubscription( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { subscriptionStorage := v2ss.NewSubscriptionStorage(tx) - if err := subscriptionStorage.CreateSubscription(ctx, subscription, req.EnvironmentNamespace); err != nil { + if err := subscriptionStorage.CreateSubscription(ctx, subscription, req.EnvironmentId); err != nil { return err } - handler, err = command.NewSubscriptionCommandHandler(editor, subscription, req.EnvironmentNamespace) + handler, err = command.NewSubscriptionCommandHandler(editor, subscription, req.EnvironmentId) if err != nil { return err } @@ -132,7 +132,7 @@ func (s *NotificationService) CreateSubscription( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -249,7 +249,7 @@ func (s *NotificationService) UpdateSubscription( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -258,13 +258,13 @@ func (s *NotificationService) UpdateSubscription( return nil, err } commands := s.createUpdateSubscriptionCommands(req) - if err := s.updateSubscription(ctx, commands, req.Id, req.EnvironmentNamespace, editor, localizer); err != nil { + if err := s.updateSubscription(ctx, commands, req.Id, req.EnvironmentId, editor, localizer); err != nil { if status.Code(err) == codes.Internal { s.logger.Error( "Failed to update feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -281,7 +281,7 @@ func (s *NotificationService) EnableSubscription( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -293,7 +293,7 @@ func (s *NotificationService) EnableSubscription( ctx, []command.Command{req.Command}, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, editor, localizer, ); err != nil { @@ -302,7 +302,7 @@ func (s *NotificationService) EnableSubscription( "Failed to enable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -345,7 +345,7 @@ func (s *NotificationService) DisableSubscription( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -357,7 +357,7 @@ func (s *NotificationService) DisableSubscription( ctx, []command.Command{req.Command}, req.Id, - req.EnvironmentNamespace, + req.EnvironmentId, editor, localizer, ); err != nil { @@ -366,7 +366,7 @@ func (s *NotificationService) DisableSubscription( "Failed to disable feature", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) } @@ -405,7 +405,7 @@ func (s *NotificationService) validateDisableSubscriptionRequest( func (s *NotificationService) updateSubscription( ctx context.Context, commands []command.Command, - id, environmentNamespace string, + id, environmentId string, editor *eventproto.Editor, localizer locale.Localizer, ) error { @@ -429,11 +429,11 @@ func (s *NotificationService) updateSubscription( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { subscriptionStorage := v2ss.NewSubscriptionStorage(tx) - subscription, err := subscriptionStorage.GetSubscription(ctx, id, environmentNamespace) + subscription, err := subscriptionStorage.GetSubscription(ctx, id, environmentId) if err != nil { return err } - handler, err = command.NewSubscriptionCommandHandler(editor, subscription, environmentNamespace) + handler, err = command.NewSubscriptionCommandHandler(editor, subscription, environmentId) if err != nil { return err } @@ -442,7 +442,7 @@ func (s *NotificationService) updateSubscription( return err } } - if err = subscriptionStorage.UpdateSubscription(ctx, subscription, environmentNamespace); err != nil { + if err = subscriptionStorage.UpdateSubscription(ctx, subscription, environmentId); err != nil { return err } return nil @@ -479,7 +479,7 @@ func (s *NotificationService) updateSubscription( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("id", id), )..., ) @@ -565,7 +565,7 @@ func (s *NotificationService) DeleteSubscription( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -593,18 +593,18 @@ func (s *NotificationService) DeleteSubscription( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { subscriptionStorage := v2ss.NewSubscriptionStorage(tx) - subscription, err := subscriptionStorage.GetSubscription(ctx, req.Id, req.EnvironmentNamespace) + subscription, err := subscriptionStorage.GetSubscription(ctx, req.Id, req.EnvironmentId) if err != nil { return err } - handler, err = command.NewSubscriptionCommandHandler(editor, subscription, req.EnvironmentNamespace) + handler, err = command.NewSubscriptionCommandHandler(editor, subscription, req.EnvironmentId) if err != nil { return err } if err := handler.Handle(ctx, req.Command); err != nil { return err } - if err = subscriptionStorage.DeleteSubscription(ctx, req.Id, req.EnvironmentNamespace); err != nil { + if err = subscriptionStorage.DeleteSubscription(ctx, req.Id, req.EnvironmentId); err != nil { return err } return nil @@ -641,7 +641,7 @@ func (s *NotificationService) DeleteSubscription( "Failed to publish events", log.FieldsFromImcomingContext(ctx).AddFields( zap.Any("errors", errs), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -707,7 +707,7 @@ func (s *NotificationService) GetSubscription( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -716,7 +716,7 @@ func (s *NotificationService) GetSubscription( return nil, err } subscriptionStorage := v2ss.NewSubscriptionStorage(s.mysqlClient) - subscription, err := subscriptionStorage.GetSubscription(ctx, req.Id, req.EnvironmentNamespace) + subscription, err := subscriptionStorage.GetSubscription(ctx, req.Id, req.EnvironmentId) if err != nil { if err == v2ss.ErrSubscriptionNotFound { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -768,13 +768,13 @@ func (s *NotificationService) ListSubscriptions( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err } var whereParts []mysql.WherePart - whereParts = append(whereParts, mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace)) + whereParts = append(whereParts, mysql.NewFilter("environment_id", "=", req.EnvironmentId)) sourceTypesValues := make([]interface{}, len(req.SourceTypes)) for i, st := range req.SourceTypes { sourceTypesValues[i] = int32(st) @@ -855,7 +855,7 @@ func (s *NotificationService) ListEnabledSubscriptions( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, + req.EnvironmentId, localizer) if err != nil { return nil, err @@ -863,7 +863,7 @@ func (s *NotificationService) ListEnabledSubscriptions( var whereParts []mysql.WherePart whereParts = append( whereParts, - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), mysql.NewFilter("disabled", "=", false), ) sourceTypesValues := make([]interface{}, len(req.SourceTypes)) diff --git a/pkg/notification/api/subscription_test.go b/pkg/notification/api/subscription_test.go index 2b8b4f047e..4e0446943b 100644 --- a/pkg/notification/api/subscription_test.go +++ b/pkg/notification/api/subscription_test.go @@ -599,7 +599,7 @@ func TestGetSubscriptionMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: &proto.GetSubscriptionRequest{Id: "key-0", EnvironmentNamespace: "ns0"}, + input: &proto.GetSubscriptionRequest{Id: "key-0", EnvironmentId: "ns0"}, expectedErr: nil, }, } @@ -662,7 +662,7 @@ func TestListSubscriptionsMySQL(t *testing.T) { proto.Subscription_DOMAIN_EVENT_ACCOUNT, proto.Subscription_DOMAIN_EVENT_SUBSCRIPTION, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -692,7 +692,7 @@ func TestListSubscriptionsMySQL(t *testing.T) { proto.Subscription_DOMAIN_EVENT_ACCOUNT, proto.Subscription_DOMAIN_EVENT_SUBSCRIPTION, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: &proto.ListSubscriptionsResponse{Subscriptions: []*proto.Subscription{}, Cursor: "0"}, expectedErr: nil, @@ -755,7 +755,7 @@ func TestListEnabledSubscriptionsMySQL(t *testing.T) { proto.Subscription_DOMAIN_EVENT_ACCOUNT, proto.Subscription_DOMAIN_EVENT_SUBSCRIPTION, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -785,7 +785,7 @@ func TestListEnabledSubscriptionsMySQL(t *testing.T) { proto.Subscription_DOMAIN_EVENT_ACCOUNT, proto.Subscription_DOMAIN_EVENT_SUBSCRIPTION, }, - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", }, expected: &proto.ListEnabledSubscriptionsResponse{Subscriptions: []*proto.Subscription{}, Cursor: "1"}, expectedErr: nil, diff --git a/pkg/notification/command/subscription.go b/pkg/notification/command/subscription.go index 91b5cca7da..d3e3ea15a2 100644 --- a/pkg/notification/command/subscription.go +++ b/pkg/notification/command/subscription.go @@ -30,14 +30,14 @@ type subscriptionCommandHandler struct { editor *eventproto.Editor subscription *domain.Subscription previousSubscription *domain.Subscription - environmentNamespace string + environmentId string events []*eventproto.Event } func NewSubscriptionCommandHandler( editor *eventproto.Editor, subscription *domain.Subscription, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.Subscription{} if err := copier.Copy(prev, subscription); err != nil { @@ -47,7 +47,7 @@ func NewSubscriptionCommandHandler( editor: editor, subscription: subscription, previousSubscription: prev, - environmentNamespace: environmentNamespace, + environmentId: environmentId, events: []*eventproto.Event{}, }, nil } @@ -155,7 +155,7 @@ func (h *subscriptionCommandHandler) createEvent( h.subscription.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.subscription.Subscription, prev, ) diff --git a/pkg/notification/sender/sender.go b/pkg/notification/sender/sender.go index 41a43d8e64..293e60941a 100644 --- a/pkg/notification/sender/sender.go +++ b/pkg/notification/sender/sender.go @@ -100,7 +100,7 @@ func (s *sender) Send(ctx context.Context, notificationEvent *senderproto.Notifi } else { subs, err := s.listEnabledSubscriptions( ctx, - notificationEvent.EnvironmentNamespace, + notificationEvent.EnvironmentId, notificationEvent.SourceType, ) if err != nil { @@ -118,13 +118,13 @@ func (s *sender) Send(ctx context.Context, notificationEvent *senderproto.Notifi subscription.Recipient.Language, ); err != nil { s.logger.Error("Failed to send notification", zap.Error(err), - zap.String("environmentNamespace", notificationEvent.EnvironmentNamespace), + zap.String("environmentId", notificationEvent.EnvironmentId), ) lastErr = err continue } s.logger.Info("Succeeded to send notification", - zap.String("environmentNamespace", notificationEvent.EnvironmentNamespace), + zap.String("environmentId", notificationEvent.EnvironmentId), ) } if lastErr != nil { @@ -151,17 +151,17 @@ func (s *sender) send( func (s *sender) listEnabledSubscriptions( ctx context.Context, - environmentNamespace string, + environmentId string, sourceType notificationproto.Subscription_SourceType) ([]*notificationproto.Subscription, error) { subscriptions := []*notificationproto.Subscription{} cursor := "" for { resp, err := s.notificationClient.ListEnabledSubscriptions(ctx, ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: environmentNamespace, - SourceTypes: []notificationproto.Subscription_SourceType{sourceType}, - PageSize: listRequestSize, - Cursor: cursor, + EnvironmentId: environmentId, + SourceTypes: []notificationproto.Subscription_SourceType{sourceType}, + PageSize: listRequestSize, + Cursor: cursor, }) if err != nil { return nil, err diff --git a/pkg/notification/sender/sender_test.go b/pkg/notification/sender/sender_test.go index 6be1833a06..679a3cf257 100644 --- a/pkg/notification/sender/sender_test.go +++ b/pkg/notification/sender/sender_test.go @@ -52,9 +52,9 @@ func TestHandle(t *testing.T) { nil, errors.New("test")) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -70,9 +70,9 @@ func TestHandle(t *testing.T) { ¬ificationproto.ListEnabledSubscriptionsResponse{}, nil) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -88,9 +88,9 @@ func TestHandle(t *testing.T) { ¬ificationproto.ListEnabledAdminSubscriptionsResponse{}, nil) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: storage.AdminEnvironmentNamespace, - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ENVIRONMENT, + Id: "id", + EnvironmentId: storage.AdminEnvironmentID, + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ENVIRONMENT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -109,9 +109,9 @@ func TestHandle(t *testing.T) { s.notifiers[0].(*nmock.MockNotifier).EXPECT().Notify(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("test")) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -130,9 +130,9 @@ func TestHandle(t *testing.T) { s.notifiers[0].(*nmock.MockNotifier).EXPECT().Notify(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -151,9 +151,9 @@ func TestHandle(t *testing.T) { s.notifiers[0].(*nmock.MockNotifier).EXPECT().Notify(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(2) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -172,9 +172,9 @@ func TestHandle(t *testing.T) { s.notifiers[0].(*nmock.MockNotifier).EXPECT().Notify(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: storage.AdminEnvironmentNamespace, - SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, + Id: "id", + EnvironmentId: storage.AdminEnvironmentID, + SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -193,9 +193,9 @@ func TestHandle(t *testing.T) { s.notifiers[0].(*nmock.MockNotifier).EXPECT().Notify(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(2) }, input: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: storage.AdminEnvironmentNamespace, - SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, + Id: "id", + EnvironmentId: storage.AdminEnvironmentID, + SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{}, @@ -234,10 +234,10 @@ func TestListEnabledSubscriptions(t *testing.T) { desc: "error", setup: func(t *testing.T, s *sender) { s.notificationClient.(*ncmock.MockClient).EXPECT().ListEnabledSubscriptions(gomock.Any(), ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: "ns0", - SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, - PageSize: listRequestSize, - Cursor: "", + EnvironmentId: "ns0", + SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, + PageSize: listRequestSize, + Cursor: "", }).Return(nil, errors.New("test")) }, input: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, @@ -248,10 +248,10 @@ func TestListEnabledSubscriptions(t *testing.T) { desc: "success: 0 entity", setup: func(t *testing.T, s *sender) { s.notificationClient.(*ncmock.MockClient).EXPECT().ListEnabledSubscriptions(gomock.Any(), ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: "ns0", - SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, - PageSize: listRequestSize, - Cursor: "", + EnvironmentId: "ns0", + SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, + PageSize: listRequestSize, + Cursor: "", }).Return( ¬ificationproto.ListEnabledSubscriptionsResponse{Subscriptions: []*notificationproto.Subscription{}}, nil) }, @@ -263,10 +263,10 @@ func TestListEnabledSubscriptions(t *testing.T) { desc: "success: 1 entity", setup: func(t *testing.T, s *sender) { s.notificationClient.(*ncmock.MockClient).EXPECT().ListEnabledSubscriptions(gomock.Any(), ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: "ns0", - SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, - PageSize: listRequestSize, - Cursor: "", + EnvironmentId: "ns0", + SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, + PageSize: listRequestSize, + Cursor: "", }).Return( ¬ificationproto.ListEnabledSubscriptionsResponse{Subscriptions: []*notificationproto.Subscription{ {Id: "sid0"}, @@ -281,16 +281,16 @@ func TestListEnabledSubscriptions(t *testing.T) { setup: func(t *testing.T, s *sender) { subs := createSubscriptions(t, listRequestSize+1) s.notificationClient.(*ncmock.MockClient).EXPECT().ListEnabledSubscriptions(gomock.Any(), ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: "ns0", - SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, - PageSize: listRequestSize, - Cursor: "", + EnvironmentId: "ns0", + SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, + PageSize: listRequestSize, + Cursor: "", }).Return(¬ificationproto.ListEnabledSubscriptionsResponse{Subscriptions: subs[:listRequestSize]}, nil) s.notificationClient.(*ncmock.MockClient).EXPECT().ListEnabledSubscriptions(gomock.Any(), ¬ificationproto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: "ns0", - SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, - PageSize: listRequestSize, - Cursor: "", + EnvironmentId: "ns0", + SourceTypes: []notificationproto.Subscription_SourceType{notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT}, + PageSize: listRequestSize, + Cursor: "", }).Return(¬ificationproto.ListEnabledSubscriptionsResponse{Subscriptions: subs[listRequestSize : listRequestSize+1]}, nil) }, input: notificationproto.Subscription_DOMAIN_EVENT_ACCOUNT, diff --git a/pkg/notification/storage/v2/mock/subscription.go b/pkg/notification/storage/v2/mock/subscription.go index b33e692734..0528b69711 100644 --- a/pkg/notification/storage/v2/mock/subscription.go +++ b/pkg/notification/storage/v2/mock/subscription.go @@ -44,46 +44,46 @@ func (m *MockSubscriptionStorage) EXPECT() *MockSubscriptionStorageMockRecorder } // CreateSubscription mocks base method. -func (m *MockSubscriptionStorage) CreateSubscription(ctx context.Context, e *domain.Subscription, environmentNamespace string) error { +func (m *MockSubscriptionStorage) CreateSubscription(ctx context.Context, e *domain.Subscription, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateSubscription", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "CreateSubscription", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreateSubscription indicates an expected call of CreateSubscription. -func (mr *MockSubscriptionStorageMockRecorder) CreateSubscription(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockSubscriptionStorageMockRecorder) CreateSubscription(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).CreateSubscription), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).CreateSubscription), ctx, e, environmentId) } // DeleteSubscription mocks base method. -func (m *MockSubscriptionStorage) DeleteSubscription(ctx context.Context, id, environmentNamespace string) error { +func (m *MockSubscriptionStorage) DeleteSubscription(ctx context.Context, id, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteSubscription", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "DeleteSubscription", ctx, id, environmentId) ret0, _ := ret[0].(error) return ret0 } // DeleteSubscription indicates an expected call of DeleteSubscription. -func (mr *MockSubscriptionStorageMockRecorder) DeleteSubscription(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockSubscriptionStorageMockRecorder) DeleteSubscription(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).DeleteSubscription), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).DeleteSubscription), ctx, id, environmentId) } // GetSubscription mocks base method. -func (m *MockSubscriptionStorage) GetSubscription(ctx context.Context, id, environmentNamespace string) (*domain.Subscription, error) { +func (m *MockSubscriptionStorage) GetSubscription(ctx context.Context, id, environmentId string) (*domain.Subscription, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSubscription", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetSubscription", ctx, id, environmentId) ret0, _ := ret[0].(*domain.Subscription) ret1, _ := ret[1].(error) return ret0, ret1 } // GetSubscription indicates an expected call of GetSubscription. -func (mr *MockSubscriptionStorageMockRecorder) GetSubscription(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockSubscriptionStorageMockRecorder) GetSubscription(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).GetSubscription), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).GetSubscription), ctx, id, environmentId) } // ListSubscriptions mocks base method. @@ -104,15 +104,15 @@ func (mr *MockSubscriptionStorageMockRecorder) ListSubscriptions(ctx, whereParts } // UpdateSubscription mocks base method. -func (m *MockSubscriptionStorage) UpdateSubscription(ctx context.Context, e *domain.Subscription, environmentNamespace string) error { +func (m *MockSubscriptionStorage) UpdateSubscription(ctx context.Context, e *domain.Subscription, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateSubscription", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "UpdateSubscription", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdateSubscription indicates an expected call of UpdateSubscription. -func (mr *MockSubscriptionStorageMockRecorder) UpdateSubscription(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockSubscriptionStorageMockRecorder) UpdateSubscription(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).UpdateSubscription), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSubscription", reflect.TypeOf((*MockSubscriptionStorage)(nil).UpdateSubscription), ctx, e, environmentId) } diff --git a/pkg/notification/storage/v2/sql/subscription/delete_subscription_v2.sql b/pkg/notification/storage/v2/sql/subscription/delete_subscription_v2.sql index eb1186e638..9f67bc0d6e 100644 --- a/pkg/notification/storage/v2/sql/subscription/delete_subscription_v2.sql +++ b/pkg/notification/storage/v2/sql/subscription/delete_subscription_v2.sql @@ -2,4 +2,4 @@ DELETE FROM subscription WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/notification/storage/v2/sql/subscription/insert_subscription_v2.sql b/pkg/notification/storage/v2/sql/subscription/insert_subscription_v2.sql index 74e8f1b3f6..702deae6bd 100644 --- a/pkg/notification/storage/v2/sql/subscription/insert_subscription_v2.sql +++ b/pkg/notification/storage/v2/sql/subscription/insert_subscription_v2.sql @@ -6,5 +6,5 @@ INSERT INTO subscription ( source_types, recipient, name, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) diff --git a/pkg/notification/storage/v2/sql/subscription/select_subscription_v2.sql b/pkg/notification/storage/v2/sql/subscription/select_subscription_v2.sql index 0ef627ba33..919354291d 100644 --- a/pkg/notification/storage/v2/sql/subscription/select_subscription_v2.sql +++ b/pkg/notification/storage/v2/sql/subscription/select_subscription_v2.sql @@ -10,4 +10,4 @@ FROM subscription WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/notification/storage/v2/sql/subscription/update_subscription_v2.sql b/pkg/notification/storage/v2/sql/subscription/update_subscription_v2.sql index b69d6efa90..606123e104 100644 --- a/pkg/notification/storage/v2/sql/subscription/update_subscription_v2.sql +++ b/pkg/notification/storage/v2/sql/subscription/update_subscription_v2.sql @@ -6,4 +6,4 @@ UPDATE subscription SET name = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? diff --git a/pkg/notification/storage/v2/subscription.go b/pkg/notification/storage/v2/subscription.go index 00e7bbfc68..c727aba30e 100644 --- a/pkg/notification/storage/v2/subscription.go +++ b/pkg/notification/storage/v2/subscription.go @@ -46,10 +46,10 @@ var ( ) type SubscriptionStorage interface { - CreateSubscription(ctx context.Context, e *domain.Subscription, environmentNamespace string) error - UpdateSubscription(ctx context.Context, e *domain.Subscription, environmentNamespace string) error - DeleteSubscription(ctx context.Context, id, environmentNamespace string) error - GetSubscription(ctx context.Context, id, environmentNamespace string) (*domain.Subscription, error) + CreateSubscription(ctx context.Context, e *domain.Subscription, environmentId string) error + UpdateSubscription(ctx context.Context, e *domain.Subscription, environmentId string) error + DeleteSubscription(ctx context.Context, id, environmentId string) error + GetSubscription(ctx context.Context, id, environmentId string) (*domain.Subscription, error) ListSubscriptions( ctx context.Context, whereParts []mysql.WherePart, @@ -69,7 +69,7 @@ func NewSubscriptionStorage(qe mysql.QueryExecer) SubscriptionStorage { func (s *subscriptionStorage) CreateSubscription( ctx context.Context, e *domain.Subscription, - environmentNamespace string, + environmentId string, ) error { _, err := s.qe.ExecContext( ctx, @@ -81,7 +81,7 @@ func (s *subscriptionStorage) CreateSubscription( mysql.JSONObject{Val: e.SourceTypes}, mysql.JSONObject{Val: e.Recipient}, e.Name, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -95,7 +95,7 @@ func (s *subscriptionStorage) CreateSubscription( func (s *subscriptionStorage) UpdateSubscription( ctx context.Context, e *domain.Subscription, - environmentNamespace string, + environmentId string, ) error { result, err := s.qe.ExecContext( ctx, @@ -106,7 +106,7 @@ func (s *subscriptionStorage) UpdateSubscription( mysql.JSONObject{Val: e.Recipient}, e.Name, e.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -123,13 +123,13 @@ func (s *subscriptionStorage) UpdateSubscription( func (s *subscriptionStorage) DeleteSubscription( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) error { result, err := s.qe.ExecContext( ctx, deleteSubscriptionV2SQLQuery, id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -146,14 +146,14 @@ func (s *subscriptionStorage) DeleteSubscription( func (s *subscriptionStorage) GetSubscription( ctx context.Context, - id, environmentNamespace string, + id, environmentId string, ) (*domain.Subscription, error) { subscription := proto.Subscription{} err := s.qe.QueryRowContext( ctx, selectSubscriptionV2SQLQuery, id, - environmentNamespace, + environmentId, ).Scan( &subscription.Id, &subscription.CreatedAt, diff --git a/pkg/notification/storage/v2/subscription_test.go b/pkg/notification/storage/v2/subscription_test.go index 64154cdf35..02d8001dce 100644 --- a/pkg/notification/storage/v2/subscription_test.go +++ b/pkg/notification/storage/v2/subscription_test.go @@ -47,11 +47,11 @@ func TestCreateSubscription(t *testing.T) { name := "name-0" envNamespace := "ns" patterns := []struct { - desc string - setup func(*subscriptionStorage) - input *domain.Subscription - environmentNamespace string - expectedErr error + desc string + setup func(*subscriptionStorage) + input *domain.Subscription + environmentId string + expectedErr error }{ { desc: "ErrSubscriptionAlreadyExists", @@ -63,8 +63,8 @@ func TestCreateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id}, }, - environmentNamespace: "ns", - expectedErr: ErrSubscriptionAlreadyExists, + environmentId: "ns", + expectedErr: ErrSubscriptionAlreadyExists, }, { desc: "Error", @@ -77,8 +77,8 @@ func TestCreateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id}, }, - environmentNamespace: "ns", - expectedErr: errors.New("error"), + environmentId: "ns", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -92,8 +92,8 @@ func TestCreateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id, CreatedAt: 1, UpdatedAt: 2, Disabled: false, SourceTypes: sourceTypes, Recipient: recipient, Name: name}, }, - environmentNamespace: envNamespace, - expectedErr: nil, + environmentId: envNamespace, + expectedErr: nil, }, } for _, p := range patterns { @@ -102,7 +102,7 @@ func TestCreateSubscription(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.CreateSubscription(context.Background(), p.input, p.environmentNamespace) + err := storage.CreateSubscription(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -119,11 +119,11 @@ func TestUpdateSubscription(t *testing.T) { name := "name-0" envNamespace := "ns" patterns := []struct { - desc string - setup func(*subscriptionStorage) - input *domain.Subscription - environmentNamespace string - expectedErr error + desc string + setup func(*subscriptionStorage) + input *domain.Subscription + environmentId string + expectedErr error }{ { desc: "ErrSubscriptionUnexpectedAffectedRows", @@ -137,8 +137,8 @@ func TestUpdateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id}, }, - environmentNamespace: envNamespace, - expectedErr: ErrSubscriptionUnexpectedAffectedRows, + environmentId: envNamespace, + expectedErr: ErrSubscriptionUnexpectedAffectedRows, }, { desc: "Error", @@ -151,8 +151,8 @@ func TestUpdateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id}, }, - environmentNamespace: envNamespace, - expectedErr: errors.New("error"), + environmentId: envNamespace, + expectedErr: errors.New("error"), }, { desc: "Success", @@ -168,8 +168,8 @@ func TestUpdateSubscription(t *testing.T) { input: &domain.Subscription{ Subscription: &proto.Subscription{Id: id, CreatedAt: 1, UpdatedAt: 2, Disabled: false, SourceTypes: sourceTypes, Recipient: recipient, Name: name}, }, - environmentNamespace: envNamespace, - expectedErr: nil, + environmentId: envNamespace, + expectedErr: nil, }, } for _, p := range patterns { @@ -178,7 +178,7 @@ func TestUpdateSubscription(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdateSubscription(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdateSubscription(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -192,11 +192,11 @@ func TestDeleteSubscription(t *testing.T) { id := "id-0" envNamespace := "ns" patterns := []struct { - desc string - setup func(*subscriptionStorage) - id string - environmentNamespace string - expectedErr error + desc string + setup func(*subscriptionStorage) + id string + environmentId string + expectedErr error }{ { desc: "ErrSubscriptionUnexpectedAffectedRows", @@ -207,9 +207,9 @@ func TestDeleteSubscription(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(result, nil) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: ErrSubscriptionUnexpectedAffectedRows, + id: id, + environmentId: envNamespace, + expectedErr: ErrSubscriptionUnexpectedAffectedRows, }, { desc: "Error", @@ -219,9 +219,9 @@ func TestDeleteSubscription(t *testing.T) { ).Return(nil, errors.New("error")) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: errors.New("error"), + id: id, + environmentId: envNamespace, + expectedErr: errors.New("error"), }, { desc: "Success", @@ -234,9 +234,9 @@ func TestDeleteSubscription(t *testing.T) { id, envNamespace, ).Return(result, nil) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: nil, + id: id, + environmentId: envNamespace, + expectedErr: nil, }, } for _, p := range patterns { @@ -245,7 +245,7 @@ func TestDeleteSubscription(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.DeleteSubscription(context.Background(), p.id, p.environmentNamespace) + err := storage.DeleteSubscription(context.Background(), p.id, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -259,11 +259,11 @@ func TestGetSubscription(t *testing.T) { id := "id-0" envNamespace := "ns" patterns := []struct { - desc string - setup func(*subscriptionStorage) - id string - environmentNamespace string - expectedErr error + desc string + setup func(*subscriptionStorage) + id string + environmentId string + expectedErr error }{ { desc: "ErrSubscriptionNotFound", @@ -274,9 +274,9 @@ func TestGetSubscription(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: ErrSubscriptionNotFound, + id: id, + environmentId: envNamespace, + expectedErr: ErrSubscriptionNotFound, }, { desc: "Error", @@ -288,9 +288,9 @@ func TestGetSubscription(t *testing.T) { ).Return(row) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: errors.New("error"), + id: id, + environmentId: envNamespace, + expectedErr: errors.New("error"), }, { desc: "Success", @@ -303,9 +303,9 @@ func TestGetSubscription(t *testing.T) { id, envNamespace, ).Return(row) }, - id: id, - environmentNamespace: envNamespace, - expectedErr: nil, + id: id, + environmentId: envNamespace, + expectedErr: nil, }, } for _, p := range patterns { @@ -314,7 +314,7 @@ func TestGetSubscription(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetSubscription(context.Background(), p.id, p.environmentNamespace) + _, err := storage.GetSubscription(context.Background(), p.id, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/opsevent/batch/executor/executor.go b/pkg/opsevent/batch/executor/executor.go index 821c4407f5..1772e55785 100644 --- a/pkg/opsevent/batch/executor/executor.go +++ b/pkg/opsevent/batch/executor/executor.go @@ -37,7 +37,7 @@ func WithLogger(l *zap.Logger) Option { } type AutoOpsExecutor interface { - Execute(ctx context.Context, environmentNamespace, ruleID, clauseId string) error + Execute(ctx context.Context, environmentId, ruleID, clauseId string) error } type autoOpsExecutor struct { @@ -58,22 +58,22 @@ func NewAutoOpsExecutor(autoOpsClient autoopsclient.Client, opts ...Option) Auto } } -func (e *autoOpsExecutor) Execute(ctx context.Context, environmentNamespace, ruleID, clauseId string) error { +func (e *autoOpsExecutor) Execute(ctx context.Context, environmentId, ruleID, clauseId string) error { resp, err := e.autoOpsClient.ExecuteAutoOps(ctx, &autoopsproto.ExecuteAutoOpsRequest{ - EnvironmentNamespace: environmentNamespace, + EnvironmentId: environmentId, Id: ruleID, ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ClauseId: clauseId}, }) if err != nil { e.logger.Error("Failed to execute auto ops", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("ruleID", ruleID), ) return err } if resp.AlreadyTriggered { e.logger.Debug("autoOpsRule has already triggered", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("ruleID", ruleID), ) } diff --git a/pkg/opsevent/batch/executor/mock/executor.go b/pkg/opsevent/batch/executor/mock/executor.go index 68dfae0b32..b7ee7df23e 100644 --- a/pkg/opsevent/batch/executor/mock/executor.go +++ b/pkg/opsevent/batch/executor/mock/executor.go @@ -40,15 +40,15 @@ func (m *MockAutoOpsExecutor) EXPECT() *MockAutoOpsExecutorMockRecorder { } // Execute mocks base method. -func (m *MockAutoOpsExecutor) Execute(ctx context.Context, environmentNamespace, ruleID, clauseId string) error { +func (m *MockAutoOpsExecutor) Execute(ctx context.Context, environmentId, ruleID, clauseId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Execute", ctx, environmentNamespace, ruleID, clauseId) + ret := m.ctrl.Call(m, "Execute", ctx, environmentId, ruleID, clauseId) ret0, _ := ret[0].(error) return ret0 } // Execute indicates an expected call of Execute. -func (mr *MockAutoOpsExecutorMockRecorder) Execute(ctx, environmentNamespace, ruleID, clauseId any) *gomock.Call { +func (mr *MockAutoOpsExecutorMockRecorder) Execute(ctx, environmentId, ruleID, clauseId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Execute", reflect.TypeOf((*MockAutoOpsExecutor)(nil).Execute), ctx, environmentNamespace, ruleID, clauseId) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Execute", reflect.TypeOf((*MockAutoOpsExecutor)(nil).Execute), ctx, environmentId, ruleID, clauseId) } diff --git a/pkg/opsevent/batch/executor/mock/progressive_rollout.go b/pkg/opsevent/batch/executor/mock/progressive_rollout.go index 4a28911e37..8f36cb5908 100644 --- a/pkg/opsevent/batch/executor/mock/progressive_rollout.go +++ b/pkg/opsevent/batch/executor/mock/progressive_rollout.go @@ -40,15 +40,15 @@ func (m *MockProgressiveRolloutExecutor) EXPECT() *MockProgressiveRolloutExecuto } // ExecuteProgressiveRollout mocks base method. -func (m *MockProgressiveRolloutExecutor) ExecuteProgressiveRollout(ctx context.Context, environmentNamespace, ruleID, scheduleID string) error { +func (m *MockProgressiveRolloutExecutor) ExecuteProgressiveRollout(ctx context.Context, environmentId, ruleID, scheduleID string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ExecuteProgressiveRollout", ctx, environmentNamespace, ruleID, scheduleID) + ret := m.ctrl.Call(m, "ExecuteProgressiveRollout", ctx, environmentId, ruleID, scheduleID) ret0, _ := ret[0].(error) return ret0 } // ExecuteProgressiveRollout indicates an expected call of ExecuteProgressiveRollout. -func (mr *MockProgressiveRolloutExecutorMockRecorder) ExecuteProgressiveRollout(ctx, environmentNamespace, ruleID, scheduleID any) *gomock.Call { +func (mr *MockProgressiveRolloutExecutorMockRecorder) ExecuteProgressiveRollout(ctx, environmentId, ruleID, scheduleID any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecuteProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutExecutor)(nil).ExecuteProgressiveRollout), ctx, environmentNamespace, ruleID, scheduleID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecuteProgressiveRollout", reflect.TypeOf((*MockProgressiveRolloutExecutor)(nil).ExecuteProgressiveRollout), ctx, environmentId, ruleID, scheduleID) } diff --git a/pkg/opsevent/batch/executor/progressive_rollout.go b/pkg/opsevent/batch/executor/progressive_rollout.go index 28e00367f7..6cd352489a 100644 --- a/pkg/opsevent/batch/executor/progressive_rollout.go +++ b/pkg/opsevent/batch/executor/progressive_rollout.go @@ -27,7 +27,7 @@ import ( type ProgressiveRolloutExecutor interface { ExecuteProgressiveRollout( ctx context.Context, - environmentNamespace, ruleID, scheduleID string, + environmentId, ruleID, scheduleID string, ) error } @@ -51,18 +51,18 @@ func NewProgressiveRolloutExecutor(autoOpsClient autoopsclient.Client, opts ...O func (e *progressiveRolloutExecutor) ExecuteProgressiveRollout( ctx context.Context, - environmentNamespace, progressiveRolloutID, scheduleID string, + environmentId, progressiveRolloutID, scheduleID string, ) error { _, err := e.autoOpsClient.ExecuteProgressiveRollout(ctx, &autoopsproto.ExecuteProgressiveRolloutRequest{ - EnvironmentNamespace: environmentNamespace, - Id: progressiveRolloutID, + EnvironmentId: environmentId, + Id: progressiveRolloutID, ChangeProgressiveRolloutTriggeredAtCommand: &autoopsproto.ChangeProgressiveRolloutScheduleTriggeredAtCommand{ ScheduleId: scheduleID, }, }) if err != nil { e.logger.Error("Failed to execute ProgressiveRollout", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("progressiveRolloutID", progressiveRolloutID), ) return err diff --git a/pkg/opsevent/storage/v2/mock/ops_count.go b/pkg/opsevent/storage/v2/mock/ops_count.go index ba8c78877a..e6fa5e6c3f 100644 --- a/pkg/opsevent/storage/v2/mock/ops_count.go +++ b/pkg/opsevent/storage/v2/mock/ops_count.go @@ -60,15 +60,15 @@ func (mr *MockOpsCountStorageMockRecorder) ListOpsCounts(ctx, whereParts, orders } // UpsertOpsCount mocks base method. -func (m *MockOpsCountStorage) UpsertOpsCount(ctx context.Context, environmentNamespace string, oc *domain.OpsCount) error { +func (m *MockOpsCountStorage) UpsertOpsCount(ctx context.Context, environmentId string, oc *domain.OpsCount) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertOpsCount", ctx, environmentNamespace, oc) + ret := m.ctrl.Call(m, "UpsertOpsCount", ctx, environmentId, oc) ret0, _ := ret[0].(error) return ret0 } // UpsertOpsCount indicates an expected call of UpsertOpsCount. -func (mr *MockOpsCountStorageMockRecorder) UpsertOpsCount(ctx, environmentNamespace, oc any) *gomock.Call { +func (mr *MockOpsCountStorageMockRecorder) UpsertOpsCount(ctx, environmentId, oc any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertOpsCount", reflect.TypeOf((*MockOpsCountStorage)(nil).UpsertOpsCount), ctx, environmentNamespace, oc) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertOpsCount", reflect.TypeOf((*MockOpsCountStorage)(nil).UpsertOpsCount), ctx, environmentId, oc) } diff --git a/pkg/opsevent/storage/v2/ops_count.go b/pkg/opsevent/storage/v2/ops_count.go index 9b00b5a79f..5dda6a501a 100644 --- a/pkg/opsevent/storage/v2/ops_count.go +++ b/pkg/opsevent/storage/v2/ops_count.go @@ -25,7 +25,7 @@ import ( ) type OpsCountStorage interface { - UpsertOpsCount(ctx context.Context, environmentNamespace string, oc *domain.OpsCount) error + UpsertOpsCount(ctx context.Context, environmentId string, oc *domain.OpsCount) error ListOpsCounts( ctx context.Context, whereParts []mysql.WherePart, @@ -42,7 +42,7 @@ func NewOpsCountStorage(qe mysql.QueryExecer) OpsCountStorage { return &opsCountStorage{qe: qe} } -func (s *opsCountStorage) UpsertOpsCount(ctx context.Context, environmentNamespace string, oc *domain.OpsCount) error { +func (s *opsCountStorage) UpsertOpsCount(ctx context.Context, environmentId string, oc *domain.OpsCount) error { query := ` INSERT INTO ops_count ( id, @@ -52,7 +52,7 @@ func (s *opsCountStorage) UpsertOpsCount(ctx context.Context, environmentNamespa ops_event_count, evaluation_count, feature_id, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE @@ -73,7 +73,7 @@ func (s *opsCountStorage) UpsertOpsCount(ctx context.Context, environmentNamespa oc.OpsEventCount, oc.EvaluationCount, oc.FeatureId, - environmentNamespace, + environmentId, ) if err != nil { return err diff --git a/pkg/opsevent/storage/v2/ops_count_test.go b/pkg/opsevent/storage/v2/ops_count_test.go index fa615390d8..e3bfe7ba80 100644 --- a/pkg/opsevent/storage/v2/ops_count_test.go +++ b/pkg/opsevent/storage/v2/ops_count_test.go @@ -42,10 +42,10 @@ func TestUpsertOpsCount(t *testing.T) { defer mockController.Finish() patterns := []struct { - setup func(*opsCountStorage) - input *domain.OpsCount - environmentNamespace string - expectedErr error + setup func(*opsCountStorage) + input *domain.OpsCount + environmentId string + expectedErr error }{ { setup: func(s *opsCountStorage) { @@ -54,9 +54,9 @@ func TestUpsertOpsCount(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(result, nil) }, - input: &domain.OpsCount{OpsCount: &proto.OpsCount{}}, - environmentNamespace: "ns", - expectedErr: nil, + input: &domain.OpsCount{OpsCount: &proto.OpsCount{}}, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -64,7 +64,7 @@ func TestUpsertOpsCount(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpsertOpsCount(context.Background(), p.environmentNamespace, p.input) + err := storage.UpsertOpsCount(context.Background(), p.environmentId, p.input) assert.Equal(t, p.expectedErr, err) } } diff --git a/pkg/push/api/api.go b/pkg/push/api/api.go index 969a66e064..eb4a760d37 100644 --- a/pkg/push/api/api.go +++ b/pkg/push/api/api.go @@ -106,7 +106,7 @@ func (s *PushService) CreatePush( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -127,7 +127,7 @@ func (s *PushService) CreatePush( "Failed to create a new push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.Strings("tags", req.Command.Tags), )..., ) @@ -140,7 +140,7 @@ func (s *PushService) CreatePush( } return nil, dt.Err() } - pushes, err := s.listAllPushes(ctx, req.EnvironmentNamespace, localizer) + pushes, err := s.listAllPushes(ctx, req.EnvironmentId, localizer) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -170,7 +170,7 @@ func (s *PushService) CreatePush( "Failed to validate tag existence", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.Strings("tags", req.Command.Tags), )..., ) @@ -202,10 +202,10 @@ func (s *PushService) CreatePush( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { pushStorage := v2ps.NewPushStorage(tx) - if err := pushStorage.CreatePush(ctx, push, req.EnvironmentNamespace); err != nil { + if err := pushStorage.CreatePush(ctx, push, req.EnvironmentId); err != nil { return err } - handler, err := command.NewPushCommandHandler(editor, push, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewPushCommandHandler(editor, push, s.publisher, req.EnvironmentId) if err != nil { return err } @@ -229,7 +229,7 @@ func (s *PushService) CreatePush( "Failed to create push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -270,7 +270,7 @@ func (s *PushService) createPushNoCommand( "Failed to create a new push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("name", req.Name), zap.Strings("tags", req.Tags), )..., @@ -284,7 +284,7 @@ func (s *PushService) createPushNoCommand( } return nil, dt.Err() } - pushes, err := s.listAllPushes(ctx, req.EnvironmentNamespace, localizer) + pushes, err := s.listAllPushes(ctx, req.EnvironmentId, localizer) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -314,7 +314,7 @@ func (s *PushService) createPushNoCommand( "Failed to validate tag existence", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("name", req.Name), zap.Strings("tags", req.Tags), )..., @@ -349,7 +349,7 @@ func (s *PushService) createPushNoCommand( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { pushStorage := v2ps.NewPushStorage(tx) - if err := pushStorage.CreatePush(ctx, push, req.EnvironmentNamespace); err != nil { + if err := pushStorage.CreatePush(ctx, push, req.EnvironmentId); err != nil { return err } prev := &domain.Push{} @@ -366,7 +366,7 @@ func (s *PushService) createPushNoCommand( Tags: push.Tags, Name: push.Name, }, - req.EnvironmentNamespace, + req.EnvironmentId, push, prev, ) @@ -394,7 +394,7 @@ func (s *PushService) createPushNoCommand( "Failed to create push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("name", req.Name), )..., ) @@ -491,7 +491,7 @@ func (s *PushService) UpdatePush( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -525,11 +525,11 @@ func (s *PushService) UpdatePush( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { pushStorage := v2ps.NewPushStorage(tx) - push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentNamespace) + push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentId) if err != nil { return err } - handler, err := command.NewPushCommandHandler(editor, push, s.publisher, req.EnvironmentNamespace) + handler, err := command.NewPushCommandHandler(editor, push, s.publisher, req.EnvironmentId) if err != nil { return err } @@ -539,7 +539,7 @@ func (s *PushService) UpdatePush( } } updatedPushPb = push.Push - return pushStorage.UpdatePush(ctx, push, req.EnvironmentNamespace) + return pushStorage.UpdatePush(ctx, push, req.EnvironmentId) }) if err != nil { switch { @@ -565,7 +565,7 @@ func (s *PushService) UpdatePush( "Failed to update push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -618,7 +618,7 @@ func (s *PushService) updatePushNoCommand( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { pushStorage := v2ps.NewPushStorage(tx) - push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentNamespace) + push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -636,7 +636,7 @@ func (s *PushService) updatePushNoCommand( Name: req.Name, Tags: req.Tags, }, - req.EnvironmentNamespace, + req.EnvironmentId, updated, push, ) @@ -648,7 +648,7 @@ func (s *PushService) updatePushNoCommand( } updatedPushPb = updated.Push - return pushStorage.UpdatePush(ctx, updated, req.EnvironmentNamespace) + return pushStorage.UpdatePush(ctx, updated, req.EnvironmentId) }) if err != nil { switch { @@ -674,7 +674,7 @@ func (s *PushService) updatePushNoCommand( "Failed to update push", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), )..., ) @@ -776,7 +776,7 @@ func (s *PushService) validateAddPushTagsCommand( } return dt.Err() } - pushes, err := s.listAllPushes(ctx, req.EnvironmentNamespace, localizer) + pushes, err := s.listAllPushes(ctx, req.EnvironmentId, localizer) if err != nil { dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ Locale: localizer.GetLocale(), @@ -803,7 +803,7 @@ func (s *PushService) validateAddPushTagsCommand( "Failed to validate tag existence", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), zap.String("id", req.Id), zap.Strings("tags", req.AddPushTagsCommand.Tags), )..., @@ -833,7 +833,7 @@ func (s *PushService) DeletePush( localizer := locale.NewLocalizer(ctx) editor, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_EDITOR, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } @@ -861,7 +861,7 @@ func (s *PushService) DeletePush( } err = s.mysqlClient.RunInTransaction(ctx, tx, func() error { pushStorage := v2ps.NewPushStorage(tx) - push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentNamespace) + push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentId) if err != nil { return err } @@ -880,7 +880,7 @@ func (s *PushService) DeletePush( Tags: push.Tags, Name: push.Name, }, - req.EnvironmentNamespace, + req.EnvironmentId, push, prev, ) @@ -890,7 +890,7 @@ func (s *PushService) DeletePush( if err = s.publisher.Publish(ctx, event); err != nil { return err } - return pushStorage.UpdatePush(ctx, push, req.EnvironmentNamespace) + return pushStorage.UpdatePush(ctx, push, req.EnvironmentId) }) if err != nil { switch { @@ -911,7 +911,7 @@ func (s *PushService) DeletePush( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -936,7 +936,7 @@ func (s *PushService) GetPush( } pushStorage := v2ps.NewPushStorage(s.mysqlClient) - push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentNamespace) + push, err := pushStorage.GetPush(ctx, req.Id, req.EnvironmentId) if err != nil { if errors.Is(err, v2ps.ErrPushNotFound) { dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{ @@ -951,7 +951,7 @@ func (s *PushService) GetPush( log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), zap.String("id", req.Id), - zap.String("environmentNamespace", req.EnvironmentNamespace), + zap.String("environmentId", req.EnvironmentId), )..., ) return nil, dt.Err() @@ -1127,18 +1127,18 @@ func (s *PushService) tagMap(pushes []*pushproto.Push) (map[string]struct{}, err func (s *PushService) listAllPushes( ctx context.Context, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) ([]*pushproto.Push, error) { whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } pushes, _, _, err := s.listPushes( ctx, mysql.QueryNoLimit, "", - environmentNamespace, + environmentId, whereParts, nil, localizer, @@ -1156,13 +1156,13 @@ func (s *PushService) ListPushes( localizer := locale.NewLocalizer(ctx) _, err := s.checkEnvironmentRole( ctx, accountproto.AccountV2_Role_Environment_VIEWER, - req.EnvironmentNamespace, localizer) + req.EnvironmentId, localizer) if err != nil { return nil, err } whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", req.EnvironmentNamespace), + mysql.NewFilter("environment_id", "=", req.EnvironmentId), } if req.SearchKeyword != "" { whereParts = append(whereParts, mysql.NewSearchQuery([]string{"name"}, req.SearchKeyword)) @@ -1179,7 +1179,7 @@ func (s *PushService) ListPushes( ctx, req.PageSize, req.Cursor, - req.EnvironmentNamespace, + req.EnvironmentId, whereParts, orders, localizer, @@ -1233,7 +1233,7 @@ func (s *PushService) listPushes( ctx context.Context, pageSize int64, cursor string, - environmentNamespace string, + environmentId string, whereParts []mysql.WherePart, orders []*mysql.Order, localizer locale.Localizer, @@ -1266,7 +1266,7 @@ func (s *PushService) listPushes( "Failed to list pushes", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ @@ -1284,17 +1284,17 @@ func (s *PushService) listPushes( func (s *PushService) checkEnvironmentRole( ctx context.Context, requiredRole accountproto.AccountV2_Role_Environment, - environmentNamespace string, + environmentId string, localizer locale.Localizer, ) (*eventproto.Editor, error) { editor, err := role.CheckEnvironmentRole( ctx, requiredRole, - environmentNamespace, + environmentId, func(email string) (*accountproto.AccountV2, error) { resp, err := s.accountClient.GetAccountV2ByEnvironmentID(ctx, &accountproto.GetAccountV2ByEnvironmentIDRequest{ Email: email, - EnvironmentId: environmentNamespace, + EnvironmentId: environmentId, }) if err != nil { return nil, err @@ -1308,7 +1308,7 @@ func (s *PushService) checkEnvironmentRole( "Unauthenticated", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusUnauthenticated.WithDetails(&errdetails.LocalizedMessage{ @@ -1324,7 +1324,7 @@ func (s *PushService) checkEnvironmentRole( "Permission denied", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{ @@ -1340,7 +1340,7 @@ func (s *PushService) checkEnvironmentRole( "Failed to check role", log.FieldsFromImcomingContext(ctx).AddFields( zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), )..., ) dt, err := statusInternal.WithDetails(&errdetails.LocalizedMessage{ diff --git a/pkg/push/api/api_test.go b/pkg/push/api/api_test.go index 2ec9290ca5..98023a74db 100644 --- a/pkg/push/api/api_test.go +++ b/pkg/push/api/api_test.go @@ -165,7 +165,7 @@ func TestCreatePushMySQL(t *testing.T) { ).Return(v2ps.ErrPushAlreadyExists) }, req: &pushproto.CreatePushRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", Command: &pushproto.CreatePushCommand{ FcmServiceAccount: fcmServiceAccountDummy, Tags: []string{"tag-0"}, @@ -195,7 +195,7 @@ func TestCreatePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.CreatePushRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", Command: &pushproto.CreatePushCommand{ FcmServiceAccount: fcmServiceAccountDummy, Tags: []string{"tag-0"}, @@ -288,10 +288,10 @@ func TestCreatePushNoCommandMySQL(t *testing.T) { ).Return(v2ps.ErrPushAlreadyExists) }, req: &pushproto.CreatePushRequest{ - EnvironmentNamespace: "ns0", - FcmServiceAccount: fcmServiceAccountDummy, - Tags: []string{"tag-0"}, - Name: "name-1", + EnvironmentId: "ns0", + FcmServiceAccount: fcmServiceAccountDummy, + Tags: []string{"tag-0"}, + Name: "name-1", }, expectedErr: createError(statusAlreadyExists, localizer.MustLocalize(locale.AlreadyExistsError)), }, @@ -316,10 +316,10 @@ func TestCreatePushNoCommandMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.CreatePushRequest{ - EnvironmentNamespace: "ns0", - FcmServiceAccount: fcmServiceAccountDummy, - Tags: []string{"tag-0"}, - Name: "name-1", + EnvironmentId: "ns0", + FcmServiceAccount: fcmServiceAccountDummy, + Tags: []string{"tag-0"}, + Name: "name-1", }, expectedErr: nil, }, @@ -436,9 +436,9 @@ func TestUpdatePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.UpdatePushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-0", - RenamePushCommand: &pushproto.RenamePushCommand{Name: "name-1"}, + EnvironmentId: "ns0", + Id: "key-0", + RenamePushCommand: &pushproto.RenamePushCommand{Name: "name-1"}, }, expectedErr: nil, }, @@ -451,7 +451,7 @@ func TestUpdatePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.UpdatePushRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", Id: "key-0", DeletePushTagsCommand: &pushproto.DeletePushTagsCommand{Tags: []string{"tag-0"}}, }, @@ -478,9 +478,9 @@ func TestUpdatePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.UpdatePushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-0", - AddPushTagsCommand: &pushproto.AddPushTagsCommand{Tags: []string{"tag-2"}}, + EnvironmentId: "ns0", + Id: "key-0", + AddPushTagsCommand: &pushproto.AddPushTagsCommand{Tags: []string{"tag-2"}}, }, expectedErr: nil, }, @@ -505,7 +505,7 @@ func TestUpdatePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.UpdatePushRequest{ - EnvironmentNamespace: "ns0", + EnvironmentId: "ns0", Id: "key-0", AddPushTagsCommand: &pushproto.AddPushTagsCommand{Tags: []string{"tag-2"}}, DeletePushTagsCommand: &pushproto.DeletePushTagsCommand{Tags: []string{"tag-0"}}, @@ -608,10 +608,10 @@ func TestUpdatePushNoCommandMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.UpdatePushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-0", - Name: wrapperspb.String("name-1"), - Tags: []string{"tag-0"}, + EnvironmentId: "ns0", + Id: "key-0", + Name: wrapperspb.String("name-1"), + Tags: []string{"tag-0"}, }, expectedErr: nil, }, @@ -752,9 +752,9 @@ func TestDeletePushMySQL(t *testing.T) { ).Return(v2ps.ErrPushNotFound) }, req: &pushproto.DeletePushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-1", - Command: &pushproto.DeletePushCommand{}, + EnvironmentId: "ns0", + Id: "key-1", + Command: &pushproto.DeletePushCommand{}, }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -767,9 +767,9 @@ func TestDeletePushMySQL(t *testing.T) { ).Return(nil) }, req: &pushproto.DeletePushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-0", - Command: &pushproto.DeletePushCommand{}, + EnvironmentId: "ns0", + Id: "key-0", + Command: &pushproto.DeletePushCommand{}, }, expectedErr: nil, }, @@ -819,7 +819,7 @@ func TestListPushesMySQL(t *testing.T) { orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_VIEWER), setup: nil, - input: &pushproto.ListPushesRequest{Cursor: "XXX", EnvironmentNamespace: "ns0"}, + input: &pushproto.ListPushesRequest{Cursor: "XXX", EnvironmentId: "ns0"}, expected: nil, expectedErr: createError(statusInvalidCursor, localizer.MustLocalizeWithTemplate(locale.InvalidArgumentError, "cursor")), }, @@ -830,7 +830,7 @@ func TestListPushesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(nil, errors.New("error")) }, - input: &pushproto.ListPushesRequest{EnvironmentNamespace: "ns0"}, + input: &pushproto.ListPushesRequest{EnvironmentId: "ns0"}, expected: nil, expectedErr: createError(statusInternal, localizer.MustLocalize(locale.InternalServerError)), }, @@ -838,7 +838,7 @@ func TestListPushesMySQL(t *testing.T) { desc: "err: ErrPermissionDenied", orgRole: toPtr(accountproto.AccountV2_Role_Organization_MEMBER), envRole: toPtr(accountproto.AccountV2_Role_Environment_UNASSIGNED), - input: &pushproto.ListPushesRequest{EnvironmentNamespace: "ns0"}, + input: &pushproto.ListPushesRequest{EnvironmentId: "ns0"}, expected: nil, expectedErr: createError(statusPermissionDenied, localizer.MustLocalize(locale.PermissionDenied)), }, @@ -860,7 +860,7 @@ func TestListPushesMySQL(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - input: &pushproto.ListPushesRequest{PageSize: 2, Cursor: "", EnvironmentNamespace: "ns0"}, + input: &pushproto.ListPushesRequest{PageSize: 2, Cursor: "", EnvironmentId: "ns0"}, expected: &pushproto.ListPushesResponse{Pushes: []*pushproto.Push{}, Cursor: "0"}, expectedErr: nil, }, @@ -919,8 +919,8 @@ func TestGetPushMySQL(t *testing.T) { ).Return(row) }, req: &pushproto.GetPushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-1", + EnvironmentId: "ns0", + Id: "key-1", }, expectedErr: createError(statusNotFound, localizer.MustLocalize(locale.NotFoundError)), }, @@ -934,8 +934,8 @@ func TestGetPushMySQL(t *testing.T) { ).Return(row) }, req: &pushproto.GetPushRequest{ - EnvironmentNamespace: "ns0", - Id: "key-1", + EnvironmentId: "ns0", + Id: "key-1", }, expectedErr: nil, }, diff --git a/pkg/push/command/push.go b/pkg/push/command/push.go index 7d70bc020a..d212c8f0e2 100644 --- a/pkg/push/command/push.go +++ b/pkg/push/command/push.go @@ -28,29 +28,29 @@ import ( ) type pushCommandHandler struct { - editor *eventproto.Editor - push *domain.Push - previousPush *domain.Push - publisher publisher.Publisher - environmentNamespace string + editor *eventproto.Editor + push *domain.Push + previousPush *domain.Push + publisher publisher.Publisher + environmentId string } func NewPushCommandHandler( editor *eventproto.Editor, push *domain.Push, p publisher.Publisher, - environmentNamespace string, + environmentId string, ) (Handler, error) { prev := &domain.Push{} if err := copier.Copy(prev, push); err != nil { return nil, err } return &pushCommandHandler{ - editor: editor, - push: push, - previousPush: prev, - publisher: p, - environmentNamespace: environmentNamespace, + editor: editor, + push: push, + previousPush: prev, + publisher: p, + environmentId: environmentId, }, nil } @@ -123,7 +123,7 @@ func (h *pushCommandHandler) send(ctx context.Context, eventType eventproto.Even h.push.Id, eventType, event, - h.environmentNamespace, + h.environmentId, h.push.Push, prev, ) diff --git a/pkg/push/storage/v2/mock/push.go b/pkg/push/storage/v2/mock/push.go index 77dbbf0d11..3c2c43092d 100644 --- a/pkg/push/storage/v2/mock/push.go +++ b/pkg/push/storage/v2/mock/push.go @@ -44,32 +44,32 @@ func (m *MockPushStorage) EXPECT() *MockPushStorageMockRecorder { } // CreatePush mocks base method. -func (m *MockPushStorage) CreatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error { +func (m *MockPushStorage) CreatePush(ctx context.Context, e *domain.Push, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreatePush", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "CreatePush", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // CreatePush indicates an expected call of CreatePush. -func (mr *MockPushStorageMockRecorder) CreatePush(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockPushStorageMockRecorder) CreatePush(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePush", reflect.TypeOf((*MockPushStorage)(nil).CreatePush), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePush", reflect.TypeOf((*MockPushStorage)(nil).CreatePush), ctx, e, environmentId) } // GetPush mocks base method. -func (m *MockPushStorage) GetPush(ctx context.Context, id, environmentNamespace string) (*domain.Push, error) { +func (m *MockPushStorage) GetPush(ctx context.Context, id, environmentId string) (*domain.Push, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPush", ctx, id, environmentNamespace) + ret := m.ctrl.Call(m, "GetPush", ctx, id, environmentId) ret0, _ := ret[0].(*domain.Push) ret1, _ := ret[1].(error) return ret0, ret1 } // GetPush indicates an expected call of GetPush. -func (mr *MockPushStorageMockRecorder) GetPush(ctx, id, environmentNamespace any) *gomock.Call { +func (mr *MockPushStorageMockRecorder) GetPush(ctx, id, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPush", reflect.TypeOf((*MockPushStorage)(nil).GetPush), ctx, id, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPush", reflect.TypeOf((*MockPushStorage)(nil).GetPush), ctx, id, environmentId) } // ListPushes mocks base method. @@ -90,15 +90,15 @@ func (mr *MockPushStorageMockRecorder) ListPushes(ctx, whereParts, orders, limit } // UpdatePush mocks base method. -func (m *MockPushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error { +func (m *MockPushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdatePush", ctx, e, environmentNamespace) + ret := m.ctrl.Call(m, "UpdatePush", ctx, e, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpdatePush indicates an expected call of UpdatePush. -func (mr *MockPushStorageMockRecorder) UpdatePush(ctx, e, environmentNamespace any) *gomock.Call { +func (mr *MockPushStorageMockRecorder) UpdatePush(ctx, e, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePush", reflect.TypeOf((*MockPushStorage)(nil).UpdatePush), ctx, e, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePush", reflect.TypeOf((*MockPushStorage)(nil).UpdatePush), ctx, e, environmentId) } diff --git a/pkg/push/storage/v2/push.go b/pkg/push/storage/v2/push.go index 7e3392f1e5..6997e2892c 100644 --- a/pkg/push/storage/v2/push.go +++ b/pkg/push/storage/v2/push.go @@ -32,9 +32,9 @@ var ( ) type PushStorage interface { - CreatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error - UpdatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error - GetPush(ctx context.Context, id, environmentNamespace string) (*domain.Push, error) + CreatePush(ctx context.Context, e *domain.Push, environmentId string) error + UpdatePush(ctx context.Context, e *domain.Push, environmentId string) error + GetPush(ctx context.Context, id, environmentId string) (*domain.Push, error) ListPushes( ctx context.Context, whereParts []mysql.WherePart, @@ -51,7 +51,7 @@ func NewPushStorage(qe mysql.QueryExecer) PushStorage { return &pushStorage{qe: qe} } -func (s *pushStorage) CreatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error { +func (s *pushStorage) CreatePush(ctx context.Context, e *domain.Push, environmentId string) error { query := ` INSERT INTO push ( id, @@ -61,7 +61,7 @@ func (s *pushStorage) CreatePush(ctx context.Context, e *domain.Push, environmen name, created_at, updated_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) @@ -76,7 +76,7 @@ func (s *pushStorage) CreatePush(ctx context.Context, e *domain.Push, environmen e.Name, e.CreatedAt, e.UpdatedAt, - environmentNamespace, + environmentId, ) if err != nil { if err == mysql.ErrDuplicateEntry { @@ -87,7 +87,7 @@ func (s *pushStorage) CreatePush(ctx context.Context, e *domain.Push, environmen return nil } -func (s *pushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmentNamespace string) error { +func (s *pushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmentId string) error { query := ` UPDATE push @@ -100,7 +100,7 @@ func (s *pushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmen updated_at = ? WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` result, err := s.qe.ExecContext( ctx, @@ -112,7 +112,7 @@ func (s *pushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmen e.CreatedAt, e.UpdatedAt, e.Id, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -127,7 +127,7 @@ func (s *pushStorage) UpdatePush(ctx context.Context, e *domain.Push, environmen return nil } -func (s *pushStorage) GetPush(ctx context.Context, id, environmentNamespace string) (*domain.Push, error) { +func (s *pushStorage) GetPush(ctx context.Context, id, environmentId string) (*domain.Push, error) { push := proto.Push{} query := ` SELECT @@ -142,13 +142,13 @@ func (s *pushStorage) GetPush(ctx context.Context, id, environmentNamespace stri push WHERE id = ? AND - environment_namespace = ? + environment_id = ? ` err := s.qe.QueryRowContext( ctx, query, id, - environmentNamespace, + environmentId, ).Scan( &push.Id, &push.FcmServiceAccount, diff --git a/pkg/push/storage/v2/push_test.go b/pkg/push/storage/v2/push_test.go index c0a237d6eb..dbc1bbab95 100644 --- a/pkg/push/storage/v2/push_test.go +++ b/pkg/push/storage/v2/push_test.go @@ -41,11 +41,11 @@ func TestCreatePush(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*pushStorage) - input *domain.Push - environmentNamespace string - expectedErr error + desc string + setup func(*pushStorage) + input *domain.Push + environmentId string + expectedErr error }{ { desc: "ErrPushAlreadyExists", @@ -57,8 +57,8 @@ func TestCreatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: ErrPushAlreadyExists, + environmentId: "ns", + expectedErr: ErrPushAlreadyExists, }, { desc: "Error", @@ -71,8 +71,8 @@ func TestCreatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: errors.New("error"), + environmentId: "ns", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -84,8 +84,8 @@ func TestCreatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: nil, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -94,7 +94,7 @@ func TestCreatePush(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.CreatePush(context.Background(), p.input, p.environmentNamespace) + err := storage.CreatePush(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -105,11 +105,11 @@ func TestUpdatePush(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*pushStorage) - input *domain.Push - environmentNamespace string - expectedErr error + desc string + setup func(*pushStorage) + input *domain.Push + environmentId string + expectedErr error }{ { desc: "ErrPushUnexpectedAffectedRows", @@ -123,8 +123,8 @@ func TestUpdatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: ErrPushUnexpectedAffectedRows, + environmentId: "ns", + expectedErr: ErrPushUnexpectedAffectedRows, }, { desc: "Error", @@ -137,8 +137,8 @@ func TestUpdatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: errors.New("error"), + environmentId: "ns", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -152,8 +152,8 @@ func TestUpdatePush(t *testing.T) { input: &domain.Push{ Push: &proto.Push{Id: "id-0"}, }, - environmentNamespace: "ns", - expectedErr: nil, + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -162,7 +162,7 @@ func TestUpdatePush(t *testing.T) { if p.setup != nil { p.setup(storage) } - err := storage.UpdatePush(context.Background(), p.input, p.environmentNamespace) + err := storage.UpdatePush(context.Background(), p.input, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } @@ -173,11 +173,11 @@ func TestGetPush(t *testing.T) { mockController := gomock.NewController(t) defer mockController.Finish() patterns := []struct { - desc string - setup func(*pushStorage) - id string - environmentNamespace string - expectedErr error + desc string + setup func(*pushStorage) + id string + environmentId string + expectedErr error }{ { desc: "ErrPushNotFound", @@ -188,9 +188,9 @@ func TestGetPush(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: ErrPushNotFound, + id: "id-0", + environmentId: "ns", + expectedErr: ErrPushNotFound, }, { desc: "Error", @@ -202,9 +202,9 @@ func TestGetPush(t *testing.T) { ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: errors.New("error"), + id: "id-0", + environmentId: "ns", + expectedErr: errors.New("error"), }, { desc: "Success", @@ -215,9 +215,9 @@ func TestGetPush(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any(), ).Return(row) }, - id: "id-0", - environmentNamespace: "ns", - expectedErr: nil, + id: "id-0", + environmentId: "ns", + expectedErr: nil, }, } for _, p := range patterns { @@ -226,7 +226,7 @@ func TestGetPush(t *testing.T) { if p.setup != nil { p.setup(storage) } - _, err := storage.GetPush(context.Background(), p.id, p.environmentNamespace) + _, err := storage.GetPush(context.Background(), p.id, p.environmentId) assert.Equal(t, p.expectedErr, err) }) } diff --git a/pkg/storage/mock/storage.go b/pkg/storage/mock/storage.go index 23c230371b..7d86c09825 100644 --- a/pkg/storage/mock/storage.go +++ b/pkg/storage/mock/storage.go @@ -745,33 +745,33 @@ func (mr *MockBucketMockRecorder) Delete(ctx, key any) *gomock.Call { } // Reader mocks base method. -func (m *MockBucket) Reader(ctx context.Context, environmentNamespace, filename string) (storage.Reader, error) { +func (m *MockBucket) Reader(ctx context.Context, environmentId, filename string) (storage.Reader, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Reader", ctx, environmentNamespace, filename) + ret := m.ctrl.Call(m, "Reader", ctx, environmentId, filename) ret0, _ := ret[0].(storage.Reader) ret1, _ := ret[1].(error) return ret0, ret1 } // Reader indicates an expected call of Reader. -func (mr *MockBucketMockRecorder) Reader(ctx, environmentNamespace, filename any) *gomock.Call { +func (mr *MockBucketMockRecorder) Reader(ctx, environmentId, filename any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reader", reflect.TypeOf((*MockBucket)(nil).Reader), ctx, environmentNamespace, filename) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reader", reflect.TypeOf((*MockBucket)(nil).Reader), ctx, environmentId, filename) } // Writer mocks base method. -func (m *MockBucket) Writer(ctx context.Context, environmentNamespace, filename string, CRC32C uint32) (storage.Writer, error) { +func (m *MockBucket) Writer(ctx context.Context, environmentId, filename string, CRC32C uint32) (storage.Writer, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Writer", ctx, environmentNamespace, filename, CRC32C) + ret := m.ctrl.Call(m, "Writer", ctx, environmentId, filename, CRC32C) ret0, _ := ret[0].(storage.Writer) ret1, _ := ret[1].(error) return ret0, ret1 } // Writer indicates an expected call of Writer. -func (mr *MockBucketMockRecorder) Writer(ctx, environmentNamespace, filename, CRC32C any) *gomock.Call { +func (mr *MockBucketMockRecorder) Writer(ctx, environmentId, filename, CRC32C any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Writer", reflect.TypeOf((*MockBucket)(nil).Writer), ctx, environmentNamespace, filename, CRC32C) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Writer", reflect.TypeOf((*MockBucket)(nil).Writer), ctx, environmentId, filename, CRC32C) } // MockObject is a mock of Object interface. @@ -812,31 +812,31 @@ func (mr *MockObjectMockRecorder) Delete(ctx, key any) *gomock.Call { } // Reader mocks base method. -func (m *MockObject) Reader(ctx context.Context, environmentNamespace, filename string) (storage.Reader, error) { +func (m *MockObject) Reader(ctx context.Context, environmentId, filename string) (storage.Reader, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Reader", ctx, environmentNamespace, filename) + ret := m.ctrl.Call(m, "Reader", ctx, environmentId, filename) ret0, _ := ret[0].(storage.Reader) ret1, _ := ret[1].(error) return ret0, ret1 } // Reader indicates an expected call of Reader. -func (mr *MockObjectMockRecorder) Reader(ctx, environmentNamespace, filename any) *gomock.Call { +func (mr *MockObjectMockRecorder) Reader(ctx, environmentId, filename any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reader", reflect.TypeOf((*MockObject)(nil).Reader), ctx, environmentNamespace, filename) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reader", reflect.TypeOf((*MockObject)(nil).Reader), ctx, environmentId, filename) } // Writer mocks base method. -func (m *MockObject) Writer(ctx context.Context, environmentNamespace, filename string, CRC32C uint32) (storage.Writer, error) { +func (m *MockObject) Writer(ctx context.Context, environmentId, filename string, CRC32C uint32) (storage.Writer, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Writer", ctx, environmentNamespace, filename, CRC32C) + ret := m.ctrl.Call(m, "Writer", ctx, environmentId, filename, CRC32C) ret0, _ := ret[0].(storage.Writer) ret1, _ := ret[1].(error) return ret0, ret1 } // Writer indicates an expected call of Writer. -func (mr *MockObjectMockRecorder) Writer(ctx, environmentNamespace, filename, CRC32C any) *gomock.Call { +func (mr *MockObjectMockRecorder) Writer(ctx, environmentId, filename, CRC32C any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Writer", reflect.TypeOf((*MockObject)(nil).Writer), ctx, environmentNamespace, filename, CRC32C) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Writer", reflect.TypeOf((*MockObject)(nil).Writer), ctx, environmentId, filename, CRC32C) } diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 75513cb5b9..88d134869e 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -24,6 +24,7 @@ import ( const ( AdminEnvironmentNamespace = "" + AdminEnvironmentID = "" OrderDirectionAsc OrderDirection = 0 OrderDirectionDesc OrderDirection = 1 @@ -75,11 +76,11 @@ type Key struct { Kind string // If it is empty string, query will be executed in admin namespace. // If not, query will be executed in namespace for target environment. - EnvironmentNamespace string + EnvironmentId string } -func NewKey(id, kind, environmentNamespace string) *Key { - return &Key{ID: id, Kind: kind, EnvironmentNamespace: environmentNamespace} +func NewKey(id, kind, environmentId string) *Key { + return &Key{ID: id, Kind: kind, EnvironmentId: environmentId} } type Iterator interface { @@ -110,7 +111,7 @@ type Query struct { Filters []*Filter // If it is empty string, query will be executed in admin namespace. // If not, query will be executed in namespace for target environment. - EnvironmentNamespace string + EnvironmentId string } type Filter struct { @@ -180,7 +181,7 @@ type Bucket interface { } type Object interface { - Writer(ctx context.Context, environmentNamespace, filename string, CRC32C uint32) (Writer, error) - Reader(ctx context.Context, environmentNamespace, filename string) (Reader, error) + Writer(ctx context.Context, environmentId, filename string, CRC32C uint32) (Writer, error) + Reader(ctx context.Context, environmentId, filename string) (Reader, error) Deleter } diff --git a/pkg/storage/testing/file.go b/pkg/storage/testing/file.go index d92b84219d..5fa58fab05 100644 --- a/pkg/storage/testing/file.go +++ b/pkg/storage/testing/file.go @@ -34,7 +34,7 @@ func (f *inMemoryStorageBucket) Delete(ctx context.Context, key *storage.Key) er func (f *inMemoryStorageBucket) Writer( ctx context.Context, - environmentNamespace, + environmentId, filename string, CRC32C uint32, ) (storage.Writer, error) { @@ -44,7 +44,7 @@ func (f *inMemoryStorageBucket) Writer( func (f *inMemoryStorageBucket) Reader( ctx context.Context, - environmentNamespace, + environmentId, filename string, ) (storage.Reader, error) { // TODO diff --git a/pkg/storage/testing/storage.go b/pkg/storage/testing/storage.go index a6571d9d9c..d09051c8ce 100644 --- a/pkg/storage/testing/storage.go +++ b/pkg/storage/testing/storage.go @@ -166,8 +166,8 @@ func (s *inMemoryStorage) Close() { } func (s *inMemoryStorage) key(key *storage.Key) string { - if key.EnvironmentNamespace == storage.AdminEnvironmentNamespace { + if key.EnvironmentId == storage.AdminEnvironmentID { return fmt.Sprintf("%s:%s", key.Kind, key.ID) } - return fmt.Sprintf("%s:%s:%s", key.EnvironmentNamespace, key.Kind, key.ID) + return fmt.Sprintf("%s:%s:%s", key.EnvironmentId, key.Kind, key.ID) } diff --git a/pkg/subscriber/processor/auditlog_persister.go b/pkg/subscriber/processor/auditlog_persister.go index e4edc8f0e8..49f470273b 100644 --- a/pkg/subscriber/processor/auditlog_persister.go +++ b/pkg/subscriber/processor/auditlog_persister.go @@ -140,10 +140,13 @@ func (a auditLogPersister) extractAuditLogs( continue } if event.IsAdminEvent { - adminAuditLogs = append(adminAuditLogs, domain.NewAuditLog(event, storage.AdminEnvironmentNamespace)) + adminAuditLogs = append(adminAuditLogs, domain.NewAuditLog( + event, + storage.AdminEnvironmentID, + )) adminMessages = append(adminMessages, msg) } else { - auditlogs = append(auditlogs, domain.NewAuditLog(event, event.EnvironmentNamespace)) + auditlogs = append(auditlogs, domain.NewAuditLog(event, event.EnvironmentId)) messages = append(messages, msg) } } diff --git a/pkg/subscriber/processor/domain_event_informer.go b/pkg/subscriber/processor/domain_event_informer.go index ee0f3c9642..4338257f91 100644 --- a/pkg/subscriber/processor/domain_event_informer.go +++ b/pkg/subscriber/processor/domain_event_informer.go @@ -95,7 +95,7 @@ func (d domainEventInformer) handleMessage(msg *puller.Message) { // https://github.com/bucketeer-io/bucketeer/blob/main/pkg/domainevent/domain/url.go#L36-L40 environmentURLCode := "" if !domainEvent.IsAdminEvent { - environment, err := d.getEnvironment(ctx, domainEvent.EnvironmentNamespace) + environment, err := d.getEnvironment(ctx, domainEvent.EnvironmentId) if err != nil { if code := gstatus.Code(err); code == gcodes.NotFound { subscriberHandledCounter.WithLabelValues(subscriberDomainEvent, codes.BadMessage.String()).Inc() @@ -145,9 +145,9 @@ func (d domainEventInformer) createNotificationEvent( return nil, err } ne := &senderproto.NotificationEvent{ - Id: id.String(), - EnvironmentNamespace: event.EnvironmentNamespace, - SourceType: st, + Id: id.String(), + EnvironmentId: event.EnvironmentId, + SourceType: st, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{ diff --git a/pkg/subscriber/processor/domain_event_test.go b/pkg/subscriber/processor/domain_event_test.go index 10a634ab7a..cb454181f4 100644 --- a/pkg/subscriber/processor/domain_event_test.go +++ b/pkg/subscriber/processor/domain_event_test.go @@ -44,20 +44,20 @@ func TestCreateNotificationEvent(t *testing.T) { { desc: "success: DomainEvent", input: &domaineventproto.Event{ - Id: "did", - EntityType: domaineventproto.Event_FEATURE, - EntityId: "fid", - Type: domaineventproto.Event_FEATURE_CREATED, - Editor: &domaineventproto.Editor{Email: "test@test.com"}, - EnvironmentNamespace: "ns0", - IsAdminEvent: false, + Id: "did", + EntityType: domaineventproto.Event_FEATURE, + EntityId: "fid", + Type: domaineventproto.Event_FEATURE_CREATED, + Editor: &domaineventproto.Editor{Email: "test@test.com"}, + EnvironmentId: "ns0", + IsAdminEvent: false, }, environmentName: envName, environmentURLCode: envURLCode, expected: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "ns0", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_FEATURE, + Id: "id", + EnvironmentId: "ns0", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_FEATURE, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{ @@ -76,20 +76,20 @@ func TestCreateNotificationEvent(t *testing.T) { { desc: "success: Admin DomainEvent", input: &domaineventproto.Event{ - Id: "did", - EntityType: domaineventproto.Event_PROJECT, - EntityId: "pid", - Type: domaineventproto.Event_PROJECT_CREATED, - Editor: &domaineventproto.Editor{Email: "test@test.com"}, - EnvironmentNamespace: "", - IsAdminEvent: true, + Id: "did", + EntityType: domaineventproto.Event_PROJECT, + EntityId: "pid", + Type: domaineventproto.Event_PROJECT_CREATED, + Editor: &domaineventproto.Editor{Email: "test@test.com"}, + EnvironmentId: "", + IsAdminEvent: true, }, environmentName: envName, environmentURLCode: envURLCode, expected: &senderproto.NotificationEvent{ - Id: "id", - EnvironmentNamespace: "", - SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, + Id: "id", + EnvironmentId: "", + SourceType: notificationproto.Subscription_DOMAIN_EVENT_PROJECT, Notification: &senderproto.Notification{ Type: senderproto.Notification_DomainEvent, DomainEventNotification: &senderproto.DomainEventNotification{ @@ -112,7 +112,7 @@ func TestCreateNotificationEvent(t *testing.T) { actual, err := i.createNotificationEvent(p.input, p.environmentName, p.environmentURLCode, p.input.IsAdminEvent) assert.Equal(t, p.expectedErr, err) if p.expected != nil { - assert.Equal(t, p.expected.EnvironmentNamespace, actual.EnvironmentNamespace) + assert.Equal(t, p.expected.EnvironmentId, actual.EnvironmentId) assert.Equal(t, p.expected.SourceType, actual.SourceType) assert.Equal(t, p.expected.IsAdminEvent, actual.IsAdminEvent) assert.Equal(t, p.expected.Notification.Type, actual.Notification.Type) diff --git a/pkg/subscriber/processor/evaluation_events_dwh.go b/pkg/subscriber/processor/evaluation_events_dwh.go index 9c75a6c17a..3820ef72bb 100644 --- a/pkg/subscriber/processor/evaluation_events_dwh.go +++ b/pkg/subscriber/processor/evaluation_events_dwh.go @@ -84,12 +84,12 @@ func (w *evalEvtWriter) Write( ) map[string]bool { var evalEvents []*epproto.EvaluationEvent fails := make(map[string]bool, len(envEvents)) - for environmentNamespace, events := range envEvents { - experiments, err := w.listExperiments(ctx, environmentNamespace) + for environmentId, events := range envEvents { + experiments, err := w.listExperiments(ctx, environmentId) if err != nil { w.logger.Error("failed to list experiments", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) subscriberHandledCounter.WithLabelValues(subscriberEvaluationEventDWH, codeFailedToListExperiments).Inc() // Make sure to retry all the events in the next pulling @@ -104,7 +104,7 @@ func (w *evalEvtWriter) Write( for id, event := range events { switch evt := event.(type) { case *eventproto.EvaluationEvent: - e, retriable, err := w.convToEvaluationEvent(ctx, evt, id, environmentNamespace, experiments) + e, retriable, err := w.convToEvaluationEvent(ctx, evt, id, environmentId, experiments) if err != nil { // If there is nothing to link, we don't report it as an error if errors.Is(err, ErrExperimentNotFound) { @@ -120,7 +120,7 @@ func (w *evalEvtWriter) Write( "Failed to convert to evaluation event", zap.Error(err), zap.String("id", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("evalEvent", evt), ) } @@ -133,7 +133,7 @@ func (w *evalEvtWriter) Write( w.logger.Error( "The event is an unexpected message type", zap.String("id", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("evalEvent", evt), ) fails[id] = false @@ -171,7 +171,7 @@ func (w *evalEvtWriter) Write( func (w *evalEvtWriter) convToEvaluationEvent( ctx context.Context, e *eventproto.EvaluationEvent, - id, environmentNamespace string, + id, environmentId string, experiments []*exproto.Experiment, ) (*epproto.EvaluationEvent, bool, error) { exp := w.existExperiment(experiments, e.FeatureId, e.FeatureVersion) @@ -199,17 +199,17 @@ func (w *evalEvtWriter) convToEvaluationEvent( tag = "none" } return &epproto.EvaluationEvent{ - Id: id, - FeatureId: e.FeatureId, - FeatureVersion: e.FeatureVersion, - UserData: string(ud), - UserId: e.UserId, - VariationId: e.VariationId, - Reason: e.Reason.Type.String(), - Tag: tag, - SourceId: e.SourceId.String(), - EnvironmentNamespace: environmentNamespace, - Timestamp: time.Unix(e.Timestamp, 0).UnixMicro(), + Id: id, + FeatureId: e.FeatureId, + FeatureVersion: e.FeatureVersion, + UserData: string(ud), + UserId: e.UserId, + VariationId: e.VariationId, + Reason: e.Reason.Type.String(), + Tag: tag, + SourceId: e.SourceId.String(), + EnvironmentId: environmentId, + Timestamp: time.Unix(e.Timestamp, 0).UnixMicro(), }, false, nil } @@ -228,20 +228,20 @@ func (w *evalEvtWriter) existExperiment( func (w *evalEvtWriter) listExperiments( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*exproto.Experiment, error) { exp, err, _ := w.flightgroup.Do( - fmt.Sprintf("%s:%s", environmentNamespace, "listExperiments"), + fmt.Sprintf("%s:%s", environmentId, "listExperiments"), func() (interface{}, error) { // Get the experiment cache - expList, err := w.cache.Get(environmentNamespace) + expList, err := w.cache.Get(environmentId) if err == nil { return expList.Experiments, nil } // Get the experiments from the DB resp, err := w.experimentClient.ListExperiments(ctx, &exproto.ListExperimentsRequest{ - PageSize: 0, - EnvironmentNamespace: environmentNamespace, + PageSize: 0, + EnvironmentId: environmentId, Statuses: []exproto.Experiment_Status{ exproto.Experiment_RUNNING, exproto.Experiment_STOPPED, diff --git a/pkg/subscriber/processor/evaluation_events_evaluation_count_event_persister.go b/pkg/subscriber/processor/evaluation_events_evaluation_count_event_persister.go index f95f61f717..cc6fc79bb0 100644 --- a/pkg/subscriber/processor/evaluation_events_evaluation_count_event_persister.go +++ b/pkg/subscriber/processor/evaluation_events_evaluation_count_event_persister.go @@ -161,15 +161,15 @@ func (p *evaluationCountEventPersister) Process(ctx context.Context, msgChan <-c func (p *evaluationCountEventPersister) incrementEnvEvents(envEvents environmentEventMap) map[string]bool { fails := make(map[string]bool, len(envEvents)) - for environmentNamespace, events := range envEvents { + for environmentId, events := range envEvents { for id, event := range events { // Increment the evaluation event count in the Redis - if err := p.incrementEvaluationCount(event, environmentNamespace); err != nil { + if err := p.incrementEvaluationCount(event, environmentId); err != nil { p.logger.Error( "Failed to increment the evaluation event in the Redis", zap.Error(err), zap.String("id", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) if errors.Is(err, ErrReasonNil) { fails[id] = false @@ -217,11 +217,11 @@ func (p *evaluationCountEventPersister) extractEvents(messages map[string]*pulle handleBadMessage(m, err) continue } - if innerEvents, ok := envEvents[event.EnvironmentNamespace]; ok { + if innerEvents, ok := envEvents[event.EnvironmentId]; ok { innerEvents[event.Id] = innerEvent continue } - envEvents[event.EnvironmentNamespace] = eventMap{event.Id: innerEvent} + envEvents[event.EnvironmentId] = eventMap{event.Id: innerEvent} } return envEvents } @@ -238,7 +238,7 @@ func getVariationID(reason *featureproto.Reason, vID string) (string, error) { func (p *evaluationCountEventPersister) incrementEvaluationCount( event proto.Message, - environmentNamespace string, + environmentId string, ) error { if e, ok := event.(*eventproto.EvaluationEvent); ok { vID, err := getVariationID(e.Reason, e.VariationId) @@ -247,11 +247,11 @@ func (p *evaluationCountEventPersister) incrementEvaluationCount( } // To avoid duplication when the request fails, we increment the event count in the end // because the user count is an unique count, and there is no problem adding the same event more than once - uckv2 := p.newEvaluationCountkeyV2(userCountKey, e.FeatureId, vID, environmentNamespace, e.Timestamp) + uckv2 := p.newEvaluationCountkeyV2(userCountKey, e.FeatureId, vID, environmentId, e.Timestamp) if err := p.countUser(uckv2, e.UserId); err != nil { return err } - eckv2 := p.newEvaluationCountkeyV2(eventCountKey, e.FeatureId, vID, environmentNamespace, e.Timestamp) + eckv2 := p.newEvaluationCountkeyV2(eventCountKey, e.FeatureId, vID, environmentId, e.Timestamp) if err := p.countEvent(eckv2); err != nil { return err } @@ -260,7 +260,7 @@ func (p *evaluationCountEventPersister) incrementEvaluationCount( } func (p *evaluationCountEventPersister) newEvaluationCountkeyV2( - kind, featureID, variationID, environmentNamespace string, + kind, featureID, variationID, environmentId string, timestamp int64, ) string { t := time.Unix(timestamp, 0) @@ -268,7 +268,7 @@ func (p *evaluationCountEventPersister) newEvaluationCountkeyV2( return cache.MakeKey( kind, fmt.Sprintf("%d:%s:%s", date.Unix(), featureID, variationID), - environmentNamespace, + environmentId, ) } @@ -289,13 +289,13 @@ func (p *evaluationCountEventPersister) countUser(key, userID string) error { } func (p *evaluationCountEventPersister) cacheLastUsedInfoPerEnv(envEvents environmentEventMap) { - for environmentNamespace, events := range envEvents { + for environmentId, events := range envEvents { for _, event := range events { - p.cacheEnvLastUsedInfo(event, environmentNamespace) + p.cacheEnvLastUsedInfo(event, environmentId) } p.logger.Debug("Cache has been updated", - zap.String("environmentNamespace", environmentNamespace), - zap.Int("cacheSize", len(p.envLastUsedCache[environmentNamespace])), + zap.String("environmentId", environmentId), + zap.Int("cacheSize", len(p.envLastUsedCache[environmentId])), zap.Int("eventSize", len(events)), ) } @@ -303,25 +303,25 @@ func (p *evaluationCountEventPersister) cacheLastUsedInfoPerEnv(envEvents enviro func (p *evaluationCountEventPersister) cacheEnvLastUsedInfo( event *eventproto.EvaluationEvent, - environmentNamespace string, + environmentId string, ) { p.mutex.Lock() defer p.mutex.Unlock() var clientVersion string if event.User == nil { p.logger.Warn("Failed to cache last used info. User is nil.", - zap.String("environmentNamespace", environmentNamespace)) + zap.String("environmentId", environmentId)) } else { clientVersion = event.User.Data[userDataAppVersion] } id := ftdomain.FeatureLastUsedInfoID(event.FeatureId, event.FeatureVersion) - if cache, ok := p.envLastUsedCache[environmentNamespace]; ok { + if cache, ok := p.envLastUsedCache[environmentId]; ok { if info, ok := cache[id]; ok { info.UsedAt(event.Timestamp) if err := info.SetClientVersion(clientVersion); err != nil { p.logger.Error("Failed to set client version", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("featureId", info.FeatureId), zap.Int32("featureVersion", info.Version), zap.String("clientVersion", clientVersion)) @@ -343,7 +343,7 @@ func (p *evaluationCountEventPersister) cacheEnvLastUsedInfo( event.Timestamp, clientVersion, ) - p.envLastUsedCache[environmentNamespace] = cache + p.envLastUsedCache[environmentId] = cache } // Write the feature flag last-used cache in the MySQL and reset the cache @@ -364,18 +364,18 @@ func (p *evaluationCountEventPersister) writeEnvLastUsedInfo() { p.mutex.Lock() defer p.mutex.Unlock() - for environmentNamespace, cache := range p.envLastUsedCache { + for environmentId, cache := range p.envLastUsedCache { info := make([]*ftdomain.FeatureLastUsedInfo, 0, len(cache)) for _, v := range cache { info = append(info, v) } - if err := p.upsertMultiFeatureLastUsedInfo(context.Background(), info, environmentNamespace); err != nil { + if err := p.upsertMultiFeatureLastUsedInfo(context.Background(), info, environmentId); err != nil { p.logger.Error("Failed to write feature last-used info", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace)) + zap.String("environmentId", environmentId)) continue } p.logger.Debug("Cache has been written", - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Int("cacheSize", len(info)), ) } @@ -386,7 +386,7 @@ func (p *evaluationCountEventPersister) writeEnvLastUsedInfo() { func (p *evaluationCountEventPersister) upsertMultiFeatureLastUsedInfo( ctx context.Context, featureLastUsedInfos []*ftdomain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error { ids := make([]string, 0, len(featureLastUsedInfos)) for _, f := range featureLastUsedInfos { @@ -394,7 +394,7 @@ func (p *evaluationCountEventPersister) upsertMultiFeatureLastUsedInfo( } storage := ftstorage.NewFeatureLastUsedInfoStorage(p.mysqlClient) updatedInfo := make([]*ftdomain.FeatureLastUsedInfo, 0, len(ids)) - currentInfo, err := storage.GetFeatureLastUsedInfos(ctx, ids, environmentNamespace) + currentInfo, err := storage.GetFeatureLastUsedInfos(ctx, ids, environmentId) if err != nil { return err } @@ -426,7 +426,7 @@ func (p *evaluationCountEventPersister) upsertMultiFeatureLastUsedInfo( } } for _, info := range updatedInfo { - if err := p.upsertFeatureLastUsedInfo(ctx, info, environmentNamespace); err != nil { + if err := p.upsertFeatureLastUsedInfo(ctx, info, environmentId); err != nil { return err } } @@ -436,13 +436,13 @@ func (p *evaluationCountEventPersister) upsertMultiFeatureLastUsedInfo( func (p *evaluationCountEventPersister) upsertFeatureLastUsedInfo( ctx context.Context, featureLastUsedInfo *ftdomain.FeatureLastUsedInfo, - environmentNamespace string, + environmentId string, ) error { storage := ftstorage.NewFeatureLastUsedInfoStorage(p.mysqlClient) if err := storage.UpsertFeatureLastUsedInfo( ctx, featureLastUsedInfo, - environmentNamespace, + environmentId, ); err != nil { return err } diff --git a/pkg/subscriber/processor/evaluation_events_ops.go b/pkg/subscriber/processor/evaluation_events_ops.go index a38150984e..75ea2019ec 100644 --- a/pkg/subscriber/processor/evaluation_events_ops.go +++ b/pkg/subscriber/processor/evaluation_events_ops.go @@ -63,12 +63,12 @@ func NewEvalUserCountUpdater( func (u *evalEvtUpdater) UpdateUserCounts(ctx context.Context, evt environmentEventOPSMap) map[string]bool { fails := map[string]bool{} - for environmentNamespace, events := range evt { - listAutoOpsRules, err := u.listAutoOpsRules(ctx, environmentNamespace) + for environmentId, events := range evt { + listAutoOpsRules, err := u.listAutoOpsRules(ctx, environmentId) if err != nil { u.logger.Error("failed to list auto ops rules", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) subscriberHandledCounter.WithLabelValues(subscriberEvaluationEventOPS, codeFailedToListAutoOpsRules).Inc() // Make sure to retry all the events in the next pulling @@ -83,7 +83,7 @@ func (u *evalEvtUpdater) UpdateUserCounts(ctx context.Context, evt environmentEv for id, event := range events { switch evt := event.(type) { case *eventproto.EvaluationEvent: - retriable, err := u.updateUserCount(ctx, environmentNamespace, evt, listAutoOpsRules) + retriable, err := u.updateUserCount(ctx, environmentId, evt, listAutoOpsRules) if err != nil { if errors.Is(err, ErrAutoOpsRuleNotFound) { // If there is nothing to link, we don't report it as an error @@ -95,7 +95,7 @@ func (u *evalEvtUpdater) UpdateUserCounts(ctx context.Context, evt environmentEv "Failed to persister evaluation event for auto ops", zap.Error(err), zap.String("eventId", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) } fails[id] = retriable @@ -106,7 +106,7 @@ func (u *evalEvtUpdater) UpdateUserCounts(ctx context.Context, evt environmentEv u.logger.Error( "Unexpected message type while trying to persister an evaluation event", zap.String("eventId", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) fails[id] = false } @@ -117,7 +117,7 @@ func (u *evalEvtUpdater) UpdateUserCounts(ctx context.Context, evt environmentEv func (u *evalEvtUpdater) updateUserCount( ctx context.Context, - environmentNamespace string, + environmentId string, event *eventproto.EvaluationEvent, listAutoOpsRules []*aoproto.AutoOpsRule, ) (bool, error) { @@ -137,7 +137,7 @@ func (u *evalEvtUpdater) updateUserCount( // Update the user count per rule for ruleID, clauseIDs := range linkedOpsRules { err := u.updateUserCountPerClause( - environmentNamespace, + environmentId, event.FeatureId, event.FeatureVersion, event.VariationId, @@ -154,13 +154,13 @@ func (u *evalEvtUpdater) updateUserCount( func (u *evalEvtUpdater) listAutoOpsRules( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*aoproto.AutoOpsRule, error) { exp, err, _ := u.flightgroup.Do( - fmt.Sprintf("%s:%s", environmentNamespace, "listAutoOpsRules"), + fmt.Sprintf("%s:%s", environmentId, "listAutoOpsRules"), func() (interface{}, error) { // Get the auto ops rules cache - aorList, err := u.autoOpsRulesCache.Get(environmentNamespace) + aorList, err := u.autoOpsRulesCache.Get(environmentId) if err == nil { return aorList.AutoOpsRules, nil } @@ -168,8 +168,8 @@ func (u *evalEvtUpdater) listAutoOpsRules( // because it will increase access to the DB, which also will increase the costs. // So we list all rules and use the singleflight implementation to share the response resp, err := u.autoOpsClient.ListAutoOpsRules(ctx, &aoproto.ListAutoOpsRulesRequest{ - EnvironmentNamespace: environmentNamespace, - PageSize: 0, + EnvironmentId: environmentId, + PageSize: 0, }) if err != nil { return nil, err @@ -220,7 +220,7 @@ func (u *evalEvtUpdater) linkOpsEventRateByVariationID( } func (u *evalEvtUpdater) updateUserCountPerClause( - environmentNamespace, + environmentId, featureID string, featureVersion int32, variationID, @@ -230,7 +230,7 @@ func (u *evalEvtUpdater) updateUserCountPerClause( ) error { for _, clauseID := range clauseIDs { key := u.newUserCountKey( - environmentNamespace, + environmentId, ruleID, clauseID, featureID, @@ -244,14 +244,14 @@ func (u *evalEvtUpdater) updateUserCountPerClause( u.logger.Debug( "User count updated successfully", zap.String("pfcountKey", key), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) } return nil } func (u *evalEvtUpdater) newUserCountKey( - environmentNamespace, + environmentId, ruleID, clauseID, featureID, variationID string, featureVersion int32, ) string { @@ -265,6 +265,6 @@ func (u *evalEvtUpdater) newUserCountKey( return cache.MakeKey( opsEvalKeyPrefix, key, - environmentNamespace, + environmentId, ) } diff --git a/pkg/subscriber/processor/events_dwh_persister.go b/pkg/subscriber/processor/events_dwh_persister.go index 3d89b045b1..73a6ce90e9 100644 --- a/pkg/subscriber/processor/events_dwh_persister.go +++ b/pkg/subscriber/processor/events_dwh_persister.go @@ -240,11 +240,11 @@ func (e *eventsDWHPersister) extractEvents(messages map[string]*puller.Message) handleBadMessage(m, err) continue } - if innerEvents, ok := envEvents[event.EnvironmentNamespace]; ok { + if innerEvents, ok := envEvents[event.EnvironmentId]; ok { innerEvents[event.Id] = innerEvent.Message continue } - envEvents[event.EnvironmentNamespace] = eventDWHMap{event.Id: innerEvent.Message} + envEvents[event.EnvironmentId] = eventDWHMap{event.Id: innerEvent.Message} } return envEvents } diff --git a/pkg/subscriber/processor/events_ops_persister.go b/pkg/subscriber/processor/events_ops_persister.go index df4c3995d4..b9efdaef0b 100644 --- a/pkg/subscriber/processor/events_ops_persister.go +++ b/pkg/subscriber/processor/events_ops_persister.go @@ -206,11 +206,11 @@ func (e eventsOPSPersister) extractEvents(messages map[string]*puller.Message) e handleBadMessage(m, err) continue } - if innerEvents, ok := envEvents[event.EnvironmentNamespace]; ok { + if innerEvents, ok := envEvents[event.EnvironmentId]; ok { innerEvents[event.Id] = innerEvent.Message continue } - envEvents[event.EnvironmentNamespace] = eventOPSMap{event.Id: innerEvent.Message} + envEvents[event.EnvironmentId] = eventOPSMap{event.Id: innerEvent.Message} } return envEvents } diff --git a/pkg/subscriber/processor/goal_events_dwh.go b/pkg/subscriber/processor/goal_events_dwh.go index 0a6241d0cf..3654e61e89 100644 --- a/pkg/subscriber/processor/goal_events_dwh.go +++ b/pkg/subscriber/processor/goal_events_dwh.go @@ -86,12 +86,12 @@ func (w *goalEvtWriter) Write( ) map[string]bool { var goalEvents []*epproto.GoalEvent fails := make(map[string]bool, len(envEvents)) - for environmentNamespace, events := range envEvents { - experiments, err := w.listExperiments(ctx, environmentNamespace) + for environmentId, events := range envEvents { + experiments, err := w.listExperiments(ctx, environmentId) if err != nil { w.logger.Error("failed to list experiments", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) subscriberHandledCounter.WithLabelValues(subscriberGoalEventDWH, codeFailedToListExperiments).Inc() // Make sure to retry all the events in the next pulling @@ -106,7 +106,7 @@ func (w *goalEvtWriter) Write( for id, event := range events { switch evt := event.(type) { case *eventproto.GoalEvent: - e, retriable, err := w.convToGoalEvents(ctx, evt, id, environmentNamespace, experiments) + e, retriable, err := w.convToGoalEvents(ctx, evt, id, environmentId, experiments) if err != nil { if errors.Is(err, ErrExperimentNotFound) { // If there is nothing to link, we don't report it as an error @@ -118,7 +118,7 @@ func (w *goalEvtWriter) Write( "Failed to convert to goal event", zap.Error(err), zap.String("id", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("goalEvent", evt), ) } @@ -131,7 +131,7 @@ func (w *goalEvtWriter) Write( w.logger.Error( "The event is an unexpected message type", zap.String("id", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("goalEvent", evt), ) fails[id] = false @@ -170,16 +170,16 @@ func (w *goalEvtWriter) Write( func (w *goalEvtWriter) convToGoalEvents( ctx context.Context, e *eventproto.GoalEvent, - id, environmentNamespace string, + id, environmentId string, experiments []*exproto.Experiment, ) ([]*epproto.GoalEvent, bool, error) { - evals, retriable, err := w.linkGoalEvent(ctx, e, environmentNamespace, e.Tag, experiments) + evals, retriable, err := w.linkGoalEvent(ctx, e, environmentId, e.Tag, experiments) if err != nil { return nil, retriable, err } events := make([]*epproto.GoalEvent, 0, len(evals)) for _, eval := range evals { - event, retriable, err := w.convToGoalEvent(ctx, e, eval, id, e.Tag, environmentNamespace) + event, retriable, err := w.convToGoalEvent(ctx, e, eval, id, e.Tag, environmentId) if err != nil { return nil, retriable, err } @@ -192,7 +192,7 @@ func (w *goalEvtWriter) convToGoalEvent( ctx context.Context, e *eventproto.GoalEvent, eval *featureproto.Evaluation, - id, tag, environmentNamespace string, + id, tag, environmentId string, ) (*epproto.GoalEvent, bool, error) { var ud []byte if e.User != nil { @@ -211,29 +211,29 @@ func (w *goalEvtWriter) convToGoalEvent( tag = "none" } return &epproto.GoalEvent{ - Id: id, - GoalId: e.GoalId, - Value: float32(e.Value), - UserData: string(ud), - UserId: e.UserId, - Tag: tag, - SourceId: e.SourceId.String(), - EnvironmentNamespace: environmentNamespace, - Timestamp: time.Unix(e.Timestamp, 0).UnixMicro(), - FeatureId: eval.FeatureId, - FeatureVersion: eval.FeatureVersion, - VariationId: eval.VariationId, - Reason: eval.Reason.Type.String(), + Id: id, + GoalId: e.GoalId, + Value: float32(e.Value), + UserData: string(ud), + UserId: e.UserId, + Tag: tag, + SourceId: e.SourceId.String(), + EnvironmentId: environmentId, + Timestamp: time.Unix(e.Timestamp, 0).UnixMicro(), + FeatureId: eval.FeatureId, + FeatureVersion: eval.FeatureVersion, + VariationId: eval.VariationId, + Reason: eval.Reason.Type.String(), }, false, nil } func (w *goalEvtWriter) linkGoalEvent( ctx context.Context, event *eventproto.GoalEvent, - environmentNamespace, tag string, + environmentId, tag string, experiments []*exproto.Experiment, ) ([]*featureproto.Evaluation, bool, error) { - evalExp, retriable, err := w.linkGoalEventByExperiment(ctx, event, environmentNamespace, tag, experiments) + evalExp, retriable, err := w.linkGoalEventByExperiment(ctx, event, environmentId, tag, experiments) if err != nil { return nil, retriable, err } @@ -244,7 +244,7 @@ func (w *goalEvtWriter) linkGoalEvent( func (w *goalEvtWriter) linkGoalEventByExperiment( ctx context.Context, event *eventproto.GoalEvent, - environmentNamespace, tag string, + environmentId, tag string, experiments []*exproto.Experiment, ) ([]*featureproto.Evaluation, bool, error) { // Find the experiment by goal ID @@ -278,7 +278,7 @@ func (w *goalEvtWriter) linkGoalEventByExperiment( ev, err := w.getUserEvaluation( ctx, event.User, - environmentNamespace, + environmentId, tag, exp.FeatureId, exp.FeatureVersion, @@ -287,14 +287,14 @@ func (w *goalEvtWriter) linkGoalEventByExperiment( if errors.Is(err, ErrEvaluationsAreEmpty) { w.logger.Error("evaluations are empty", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("goalEvent", event), ) return nil, false, err } w.logger.Error("failed to get user evaluation", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Any("goalEvent", event), ) return nil, true, err @@ -315,20 +315,20 @@ func (w *goalEvtWriter) findGoalID(id string, goalIDs []string) bool { func (w *goalEvtWriter) listExperiments( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*exproto.Experiment, error) { exp, err, _ := w.flightgroup.Do( - fmt.Sprintf("%s:%s", environmentNamespace, "listExperiments"), + fmt.Sprintf("%s:%s", environmentId, "listExperiments"), func() (interface{}, error) { // Get the experiment cache - expList, err := w.cache.Get(environmentNamespace) + expList, err := w.cache.Get(environmentId) if err == nil { return expList.Experiments, nil } // Get the experiments from the DB resp, err := w.experimentClient.ListExperiments(ctx, &exproto.ListExperimentsRequest{ - PageSize: 0, - EnvironmentNamespace: environmentNamespace, + PageSize: 0, + EnvironmentId: environmentId, Statuses: []exproto.Experiment_Status{ exproto.Experiment_RUNNING, exproto.Experiment_STOPPED, @@ -363,20 +363,20 @@ func (w *goalEvtWriter) listExperiments( func (w *goalEvtWriter) getUserEvaluation( ctx context.Context, user *userproto.User, - environmentNamespace, tag, featureID string, + environmentId, tag, featureID string, featureVersion int32, ) (*featureproto.Evaluation, error) { resp, err := w.featureClient.EvaluateFeatures(ctx, &featureproto.EvaluateFeaturesRequest{ - EnvironmentNamespace: environmentNamespace, - FeatureId: featureID, - Tag: tag, - User: user, + EnvironmentId: environmentId, + FeatureId: featureID, + Tag: tag, + User: user, }) if err != nil { w.logger.Error( "Failed to evaluate user", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("userId", user.Id), zap.String("featureId", featureID), zap.Int32("featureVersion", featureVersion), @@ -390,7 +390,7 @@ func (w *goalEvtWriter) getUserEvaluation( w.logger.Error( "Evaluations are empty", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.String("userId", user.Id), zap.String("featureId", featureID), zap.Int32("featureVersion", featureVersion), diff --git a/pkg/subscriber/processor/goal_events_ops.go b/pkg/subscriber/processor/goal_events_ops.go index 0ea5bd6a0e..951966dae2 100644 --- a/pkg/subscriber/processor/goal_events_ops.go +++ b/pkg/subscriber/processor/goal_events_ops.go @@ -70,12 +70,12 @@ func NewGoalUserCountUpdater( func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentEventOPSMap) map[string]bool { fails := map[string]bool{} - for environmentNamespace, events := range evt { - listAutoOpsRules, err := u.listAutoOpsRules(ctx, environmentNamespace) + for environmentId, events := range evt { + listAutoOpsRules, err := u.listAutoOpsRules(ctx, environmentId) if err != nil { u.logger.Error("failed to list auto ops rules", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) subscriberHandledCounter.WithLabelValues(subscriberGoalEventOPS, codeFailedToListAutoOpsRules).Inc() // Make sure to retry all the events in the next pulling @@ -90,7 +90,7 @@ func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentE for id, event := range events { switch evt := event.(type) { case *eventproto.GoalEvent: - retriable, err := u.updateUserCount(ctx, environmentNamespace, evt, listAutoOpsRules) + retriable, err := u.updateUserCount(ctx, environmentId, evt, listAutoOpsRules) if err != nil { if errors.Is(err, ErrAutoOpsRuleNotFound) { // If there is nothing to link, we don't report it as an error @@ -99,7 +99,7 @@ func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentE "There is no auto ops rules to link the goal event", zap.Error(err), zap.String("eventId", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) continue } @@ -108,7 +108,7 @@ func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentE "Failed to persister goal event for auto ops", zap.Error(err), zap.String("eventId", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) } fails[id] = retriable @@ -119,7 +119,7 @@ func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentE u.logger.Error( "Unexpected message type while trying to persister a goal event", zap.String("eventId", id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) fails[id] = false } @@ -130,7 +130,7 @@ func (u *evalGoalUpdater) UpdateUserCounts(ctx context.Context, evt environmentE func (u *evalGoalUpdater) updateUserCount( ctx context.Context, - environmentNamespace string, + environmentId string, event *eventproto.GoalEvent, listAutoOpsRules []*aoproto.AutoOpsRule, ) (bool, error) { @@ -142,8 +142,8 @@ func (u *evalGoalUpdater) updateUserCount( featureIDs := u.getUniqueFeatureIDs(linkedRules) // Get the latest feature version resp, err := u.featureClient.GetFeatures(ctx, &featureproto.GetFeaturesRequest{ - EnvironmentNamespace: environmentNamespace, - Ids: featureIDs, + EnvironmentId: environmentId, + Ids: featureIDs, }) if err != nil { subscriberHandledCounter.WithLabelValues(subscriberGoalEventOPS, codeFailedToGetFeatures).Inc() @@ -162,14 +162,14 @@ func (u *evalGoalUpdater) updateUserCount( "Failed to find the feature version", zap.Error(ErrFeatureVersionNotFound), zap.String("featureId", r.featureID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) subscriberHandledCounter.WithLabelValues(subscriberGoalEventOPS, codeFailedToFindFeatureVersion).Inc() return false, err } // Update the user count per clause err = u.updateUserCountPerClause( - environmentNamespace, + environmentId, r.featureID, fVersion, event.UserId, @@ -184,13 +184,13 @@ func (u *evalGoalUpdater) updateUserCount( func (u *evalGoalUpdater) listAutoOpsRules( ctx context.Context, - environmentNamespace string, + environmentId string, ) ([]*aoproto.AutoOpsRule, error) { exp, err, _ := u.flightgroup.Do( - fmt.Sprintf("%s:%s", environmentNamespace, "listAutoOpsRules"), + fmt.Sprintf("%s:%s", environmentId, "listAutoOpsRules"), func() (interface{}, error) { // Get the auto ops rules cache - aorList, err := u.autoOpsRulesCache.Get(environmentNamespace) + aorList, err := u.autoOpsRulesCache.Get(environmentId) if err == nil { return aorList.AutoOpsRules, nil } @@ -198,8 +198,8 @@ func (u *evalGoalUpdater) listAutoOpsRules( // because it will increase access to the DB, which also will increase the costs. // So we list all rules and use the singleflight implementation to share the response resp, err := u.autoOpsClient.ListAutoOpsRules(ctx, &aoproto.ListAutoOpsRulesRequest{ - EnvironmentNamespace: environmentNamespace, - PageSize: 0, + EnvironmentId: environmentId, + PageSize: 0, }) if err != nil { return nil, err @@ -272,7 +272,7 @@ func (u *evalGoalUpdater) getFeatureVersion( } func (u *evalGoalUpdater) updateUserCountPerClause( - environmentNamespace, + environmentId, featureID string, featureVersion int32, userID string, @@ -280,7 +280,7 @@ func (u *evalGoalUpdater) updateUserCountPerClause( ) error { for id, clause := range rule.clauses { key := u.newUserCountKey( - environmentNamespace, + environmentId, rule.ruleID, id, featureID, @@ -294,14 +294,14 @@ func (u *evalGoalUpdater) updateUserCountPerClause( u.logger.Debug( "User count updated successfully", zap.String("pfcountKey", key), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) } return nil } func (u *evalGoalUpdater) newUserCountKey( - environmentNamespace, + environmentId, ruleID, clauseID, featureID, variationID string, featureVersion int32, ) string { @@ -315,6 +315,6 @@ func (u *evalGoalUpdater) newUserCountKey( return cache.MakeKey( opsGoalKeyPrefix, key, - environmentNamespace, + environmentId, ) } diff --git a/pkg/subscriber/processor/push_sender.go b/pkg/subscriber/processor/push_sender.go index 623d438958..292b52f253 100644 --- a/pkg/subscriber/processor/push_sender.go +++ b/pkg/subscriber/processor/push_sender.go @@ -120,7 +120,7 @@ func (p pushSender) handle(msg *puller.Message) { p.logger.Warn("Message contains an empty FeatureID", zap.Any("event", event)) return } - if err := p.send(featureID, event.EnvironmentNamespace); err != nil { + if err := p.send(featureID, event.EnvironmentId); err != nil { msg.Ack() subscriberHandledCounter.WithLabelValues(subscriberPushSender, codes.NonRepeatableError.String()).Inc() return @@ -129,34 +129,34 @@ func (p pushSender) handle(msg *puller.Message) { subscriberHandledCounter.WithLabelValues(subscriberPushSender, codes.OK.String()).Inc() } -func (p pushSender) send(featureID, environmentNamespace string) error { +func (p pushSender) send(featureID, environmentId string) error { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() resp, err := p.featureClient.GetFeature(ctx, &featureproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: environmentNamespace, + Id: featureID, + EnvironmentId: environmentId, }) if err != nil { p.logger.Error("Failed to get feature flag", zap.Error(err), zap.String("featureId", featureID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) return err } - pushes, err := p.listPushes(ctx, environmentNamespace) + pushes, err := p.listPushes(ctx, environmentId) if err != nil { p.logger.Error("Failed to list pushes", zap.Error(err), zap.String("featureId", featureID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) return err } if len(pushes) == 0 { p.logger.Info("No pushes", zap.String("featureId", featureID), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) return nil } @@ -184,7 +184,7 @@ func (p pushSender) send(featureID, environmentNamespace string) error { zap.String("tag", tag), zap.String("topic", topic), zap.String("pushId", d.Push.Id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) lastErr = err continue @@ -194,7 +194,7 @@ func (p pushSender) send(featureID, environmentNamespace string) error { zap.String("tag", tag), zap.String("topic", topic), zap.String("pushId", d.Push.Id), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), ) } } @@ -275,10 +275,10 @@ func (p pushSender) getFCMCredentials(ctx context.Context, fcmServiceAccount str // listPushes list all the pushes // Because the `ListPushes` API removes the FCM service account from the response // due to security reasons, we list the pushes directly from the storage interface -func (p pushSender) listPushes(ctx context.Context, environmentNamespace string) ([]*pushproto.Push, error) { +func (p pushSender) listPushes(ctx context.Context, environmentId string) ([]*pushproto.Push, error) { whereParts := []mysql.WherePart{ mysql.NewFilter("deleted", "=", false), - mysql.NewFilter("environment_namespace", "=", environmentNamespace), + mysql.NewFilter("environment_id", "=", environmentId), } storage := pushstorage.NewPushStorage(p.mysqlClient) pushes, _, _, err := storage.ListPushes( diff --git a/pkg/subscriber/processor/segment_user_persister.go b/pkg/subscriber/processor/segment_user_persister.go index b521377bdc..bb391b6d81 100644 --- a/pkg/subscriber/processor/segment_user_persister.go +++ b/pkg/subscriber/processor/segment_user_persister.go @@ -159,14 +159,14 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string msg.Ack() p.logger.Error( "invalid state", - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), zap.Int32("state", int32(event.State)), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.BadMessage.String()).Inc() if err := p.updateSegmentStatus( ctx, event.Editor, - event.EnvironmentNamespace, + event.EnvironmentId, event.SegmentId, 0, event.State, @@ -175,7 +175,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Error( "failed to update segment status", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) } continue @@ -187,7 +187,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Warn( "segment not found", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.NonRepeatableError.String()).Inc() case errors.Is(err, ErrSegmentInUse): @@ -195,7 +195,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Warn( "segment is in use", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.NonRepeatableError.String()).Inc() case errors.Is(err, ErrSegmentExceededMaxUserIDLength): @@ -203,13 +203,13 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Warn( "exceeded max user id length", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.NonRepeatableError.String()).Inc() if err := p.updateSegmentStatus( ctx, event.Editor, - event.EnvironmentNamespace, + event.EnvironmentId, event.SegmentId, 0, event.State, @@ -218,7 +218,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Error( "failed to update segment status", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) } default: @@ -227,7 +227,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Error( "failed to handle event", zap.Error(err), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.RepeatableError.String()).Inc() } @@ -237,7 +237,7 @@ func (p *segmentUserPersister) handleChunk(ctx context.Context, chunk map[string p.logger.Debug( "suceeded to persist segment users", zap.String("msgID", msg.ID), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), zap.String("segmentId", event.SegmentId), ) subscriberHandledCounter.WithLabelValues(subscriberSegmentUser, codes.OK.String()).Inc() @@ -266,19 +266,19 @@ func validateSegmentUserState(state featureproto.SegmentUser_State) bool { func (p *segmentUserPersister) handleEvent( ctx context.Context, event *serviceevent.BulkSegmentUsersReceivedEvent) error { segmentStorage := v2fs.NewSegmentStorage(p.mysqlClient) - segment, _, err := segmentStorage.GetSegment(ctx, event.SegmentId, event.EnvironmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, event.SegmentId, event.EnvironmentId) if err != nil { return err } if segment.IsInUseStatus { return ErrSegmentInUse } - cnt, err := p.persistSegmentUsers(ctx, event.EnvironmentNamespace, event.SegmentId, event.Data, event.State) + cnt, err := p.persistSegmentUsers(ctx, event.EnvironmentId, event.SegmentId, event.Data, event.State) if err != nil { if err := p.updateSegmentStatus( ctx, event.Editor, - event.EnvironmentNamespace, + event.EnvironmentId, event.SegmentId, cnt, event.State, @@ -289,7 +289,7 @@ func (p *segmentUserPersister) handleEvent( zap.Error(err), zap.String("segmentId", event.SegmentId), zap.Int64("userCount", cnt), - zap.String("environmentNamespace", event.EnvironmentNamespace), + zap.String("environmentId", event.EnvironmentId), ) return err } @@ -298,7 +298,7 @@ func (p *segmentUserPersister) handleEvent( return p.updateSegmentStatus( ctx, event.Editor, - event.EnvironmentNamespace, + event.EnvironmentId, event.SegmentId, cnt, event.State, @@ -308,7 +308,7 @@ func (p *segmentUserPersister) handleEvent( func (p *segmentUserPersister) persistSegmentUsers( ctx context.Context, - environmentNamespace string, + environmentId string, segmentID string, data []byte, state featureproto.SegmentUser_State, @@ -345,7 +345,7 @@ func (p *segmentUserPersister) persistSegmentUsers( } err = p.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentUserStorage := v2fs.NewSegmentUserStorage(tx) - if err := segmentUserStorage.UpsertSegmentUsers(ctx, allSegmentUsers, environmentNamespace); err != nil { + if err := segmentUserStorage.UpsertSegmentUsers(ctx, allSegmentUsers, environmentId); err != nil { return err } return nil @@ -360,7 +360,7 @@ func (p *segmentUserPersister) persistSegmentUsers( func (p *segmentUserPersister) updateSegmentStatus( ctx context.Context, editor *domainproto.Editor, - environmentNamespace string, + environmentId string, segmentID string, cnt int64, state featureproto.SegmentUser_State, @@ -373,7 +373,7 @@ func (p *segmentUserPersister) updateSegmentStatus( } return p.mysqlClient.RunInTransaction(ctx, tx, func() error { segmentStorage := v2fs.NewSegmentStorage(tx) - segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentNamespace) + segment, _, err := segmentStorage.GetSegment(ctx, segmentID, environmentId) if err != nil { return err } @@ -382,14 +382,14 @@ func (p *segmentUserPersister) updateSegmentStatus( State: state, Count: cnt, } - handler, err := command.NewSegmentCommandHandler(editor, segment, p.domainPublisher, environmentNamespace) + handler, err := command.NewSegmentCommandHandler(editor, segment, p.domainPublisher, environmentId) if err != nil { return err } if err := handler.Handle(ctx, changeCmd); err != nil { return err } - return segmentStorage.UpdateSegment(ctx, segment, environmentNamespace) + return segmentStorage.UpdateSegment(ctx, segment, environmentId) }) } diff --git a/pkg/subscriber/processor/user_event_persister.go b/pkg/subscriber/processor/user_event_persister.go index 9879c3611e..26dfa9816d 100644 --- a/pkg/subscriber/processor/user_event_persister.go +++ b/pkg/subscriber/processor/user_event_persister.go @@ -135,28 +135,28 @@ func (p *userEventPersister) handleChunk(chunk map[string]*puller.Message) { continue } // Append events per environment - listEvents, ok := events[event.EnvironmentNamespace] + listEvents, ok := events[event.EnvironmentId] if ok { - events[event.EnvironmentNamespace] = append(listEvents, event) + events[event.EnvironmentId] = append(listEvents, event) } else { - events[event.EnvironmentNamespace] = []*eventproto.UserEvent{event} + events[event.EnvironmentId] = []*eventproto.UserEvent{event} } // Append PubSub messages per environment - listMessages, ok := messages[event.EnvironmentNamespace] + listMessages, ok := messages[event.EnvironmentId] if ok { - messages[event.EnvironmentNamespace] = append(listMessages, msg) + messages[event.EnvironmentId] = append(listMessages, msg) } else { - messages[event.EnvironmentNamespace] = []*puller.Message{msg} + messages[event.EnvironmentId] = []*puller.Message{msg} } } // Upsert events - for environmentNamespace, events := range events { + for environmentId, events := range events { // Upsert events per environment - err := p.upsertMAUs(ctx, events, environmentNamespace) + err := p.upsertMAUs(ctx, events, environmentId) if err != nil { - p.nackMessages(messages[environmentNamespace]) + p.nackMessages(messages[environmentId]) } else { - p.ackMessages(messages[environmentNamespace]) + p.ackMessages(messages[environmentId]) } } } @@ -219,13 +219,13 @@ func (p *userEventPersister) ackMessages(messages []*puller.Message) { func (p *userEventPersister) upsertMAUs( ctx context.Context, events []*eventproto.UserEvent, - environmentNamespace string, + environmentId string, ) error { s := ustorage.NewMysqlMAUStorage(p.mysqlClient) - if err := s.UpsertMAUs(ctx, events, environmentNamespace); err != nil { + if err := s.UpsertMAUs(ctx, events, environmentId); err != nil { p.logger.Error("Failed to upsert user events", zap.Error(err), - zap.String("environmentNamespace", environmentNamespace), + zap.String("environmentId", environmentId), zap.Int("size", len(events)), ) return err diff --git a/pkg/subscriber/processor/user_event_persister_test.go b/pkg/subscriber/processor/user_event_persister_test.go index 6cdd697e05..23f478209f 100644 --- a/pkg/subscriber/processor/user_event_persister_test.go +++ b/pkg/subscriber/processor/user_event_persister_test.go @@ -85,14 +85,14 @@ func TestUpsert(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() patterns := []struct { - desc, environmentNamespace string - setup func(persister *userEventPersister) - input []*eventproto.UserEvent - expected error + desc, environmentId string + setup func(persister *userEventPersister) + input []*eventproto.UserEvent + expected error }{ { - desc: "upsert mau error", - environmentNamespace: "env1", + desc: "upsert mau error", + environmentId: "env1", setup: func(p *userEventPersister) { p.mysqlClient.(*mysqlmock.MockClient).EXPECT().ExecContext( gomock.Any(), gomock.Any(), gomock.Any(), @@ -100,16 +100,16 @@ func TestUpsert(t *testing.T) { }, input: []*eventproto.UserEvent{ { - EnvironmentNamespace: "env1", - UserId: "id-1", - LastSeen: 3, + EnvironmentId: "env1", + UserId: "id-1", + LastSeen: 3, }, }, expected: errors.New("internal"), }, { - desc: "upsert success", - environmentNamespace: "env1", + desc: "upsert success", + environmentId: "env1", setup: func(p *userEventPersister) { p.mysqlClient.(*mysqlmock.MockClient).EXPECT().ExecContext( gomock.Any(), gomock.Any(), gomock.Any(), @@ -117,9 +117,9 @@ func TestUpsert(t *testing.T) { }, input: []*eventproto.UserEvent{ { - EnvironmentNamespace: "env1", - UserId: "id-1", - LastSeen: 3, + EnvironmentId: "env1", + UserId: "id-1", + LastSeen: 3, }, }, expected: nil, @@ -131,7 +131,7 @@ func TestUpsert(t *testing.T) { if p.setup != nil { p.setup(pst) } - err := pst.upsertMAUs(ctx, p.input, p.environmentNamespace) + err := pst.upsertMAUs(ctx, p.input, p.environmentId) assert.Equal(t, p.expected, err) }) } @@ -164,14 +164,14 @@ func TestHandleChunk(t *testing.T) { bMap := generatePullerMessages(t, 3, "env-2") patterns := []struct { - desc, environmentNamespace string - setup func(persister *userEventPersister) - input map[string]*puller.Message - expected error + desc, environmentId string + setup func(persister *userEventPersister) + input map[string]*puller.Message + expected error }{ { - desc: "upsert mau error", - environmentNamespace: "env1", + desc: "upsert mau error", + environmentId: "env1", setup: func(p *userEventPersister) { p.mysqlClient.(*mysqlmock.MockClient).EXPECT().ExecContext( gomock.Any(), gomock.Any(), gomock.Any(), @@ -181,8 +181,8 @@ func TestHandleChunk(t *testing.T) { expected: errors.New("internal"), }, { - desc: "upsert success", - environmentNamespace: "env1", + desc: "upsert success", + environmentId: "env1", setup: func(p *userEventPersister) { p.mysqlClient.(*mysqlmock.MockClient).EXPECT().ExecContext( gomock.Any(), gomock.Any(), gomock.Any(), @@ -206,12 +206,12 @@ func TestHandleChunk(t *testing.T) { func generatePullerMessages( t *testing.T, size int, - environmentNamespace string, + environmentId string, ) map[string]*puller.Message { t.Helper() messages := make(map[string]*puller.Message) for i := 0; i < size; i++ { - userEvent := generateUserEvent(t, environmentNamespace) + userEvent := generateUserEvent(t, environmentId) msg := generatePullerMessage(t, userEvent) messages[msg.ID] = msg } @@ -229,9 +229,9 @@ func generatePullerMessage(t *testing.T, userEvent *eventproto.UserEvent) *pulle t.Fatalf("Failed to generate UUID: %v", err) } ev := &ecproto.Event{ - Id: id.String(), - Event: ue, - EnvironmentNamespace: userEvent.EnvironmentNamespace, + Id: id.String(), + Event: ue, + EnvironmentId: userEvent.EnvironmentId, } data, err := proto.Marshal(ev) if err != nil { @@ -246,16 +246,16 @@ func generatePullerMessage(t *testing.T, userEvent *eventproto.UserEvent) *pulle return msg } -func generateUserEvent(t *testing.T, environmentNamespace string) *eventproto.UserEvent { +func generateUserEvent(t *testing.T, environmentId string) *eventproto.UserEvent { t.Helper() id, err := uuid.NewUUID() if err != nil { t.Fatalf("Failed to generate UUID: %v", err) } return &eventproto.UserEvent{ - EnvironmentNamespace: environmentNamespace, - UserId: fmt.Sprintf("user-id-%s", id), - LastSeen: time.Now().Unix(), + EnvironmentId: environmentId, + UserId: fmt.Sprintf("user-id-%s", id), + LastSeen: time.Now().Unix(), } } diff --git a/pkg/subscriber/storage/v2/mau.go b/pkg/subscriber/storage/v2/mau.go index bbdd48ac2e..d219741dbd 100644 --- a/pkg/subscriber/storage/v2/mau.go +++ b/pkg/subscriber/storage/v2/mau.go @@ -30,8 +30,8 @@ const ( ) type MAUStorage interface { - UpsertMAU(ctx context.Context, event *esproto.UserEvent, environmentNamespace string) error - UpsertMAUs(ctx context.Context, events []*esproto.UserEvent, environmentNamespace string) error + UpsertMAU(ctx context.Context, event *esproto.UserEvent, environmentId string) error + UpsertMAUs(ctx context.Context, events []*esproto.UserEvent, environmentId string) error } // mysqlMAUStorage is the temporal implementation. @@ -44,7 +44,7 @@ func NewMysqlMAUStorage(qe mysql.QueryExecer) MAUStorage { return &mysqlMAUStorage{qe: qe} } -func (s *mysqlMAUStorage) UpsertMAU(ctx context.Context, event *esproto.UserEvent, environmentNamespace string) error { +func (s *mysqlMAUStorage) UpsertMAU(ctx context.Context, event *esproto.UserEvent, environmentId string) error { query := ` INSERT INTO mau ( user_id, @@ -53,7 +53,7 @@ func (s *mysqlMAUStorage) UpsertMAU(ctx context.Context, event *esproto.UserEven event_count, created_at, updated_at, - environment_namespace + environment_id ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE @@ -71,7 +71,7 @@ func (s *mysqlMAUStorage) UpsertMAU(ctx context.Context, event *esproto.UserEven 1, event.LastSeen, event.LastSeen, - environmentNamespace, + environmentId, ) if err != nil { return err @@ -82,7 +82,7 @@ func (s *mysqlMAUStorage) UpsertMAU(ctx context.Context, event *esproto.UserEven func (s *mysqlMAUStorage) UpsertMAUs( ctx context.Context, events []*esproto.UserEvent, - environmentNamespace string, + environmentId string, ) error { // Upsert the events in batches for i := 0; i < len(events); i += batchSize { @@ -93,7 +93,7 @@ func (s *mysqlMAUStorage) UpsertMAUs( if err := s.upsertMAUs( ctx, events[i:j], - environmentNamespace, + environmentId, ); err != nil { return err } @@ -104,7 +104,7 @@ func (s *mysqlMAUStorage) UpsertMAUs( func (s *mysqlMAUStorage) upsertMAUs( ctx context.Context, users []*esproto.UserEvent, - environmentNamespace string, + environmentId string, ) error { var query strings.Builder query.WriteString(` @@ -115,7 +115,7 @@ func (s *mysqlMAUStorage) upsertMAUs( event_count, created_at, updated_at, - environment_namespace + environment_id ) VALUES `) args := []interface{}{} @@ -134,7 +134,7 @@ func (s *mysqlMAUStorage) upsertMAUs( 1, event.LastSeen, event.LastSeen, - environmentNamespace, + environmentId, ) } query.WriteString(` diff --git a/pkg/subscriber/storage/v2/mock/mau.go b/pkg/subscriber/storage/v2/mock/mau.go index d8eac479d0..74e5186c88 100644 --- a/pkg/subscriber/storage/v2/mock/mau.go +++ b/pkg/subscriber/storage/v2/mock/mau.go @@ -42,29 +42,29 @@ func (m *MockMAUStorage) EXPECT() *MockMAUStorageMockRecorder { } // UpsertMAU mocks base method. -func (m *MockMAUStorage) UpsertMAU(ctx context.Context, event *service.UserEvent, environmentNamespace string) error { +func (m *MockMAUStorage) UpsertMAU(ctx context.Context, event *service.UserEvent, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertMAU", ctx, event, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertMAU", ctx, event, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertMAU indicates an expected call of UpsertMAU. -func (mr *MockMAUStorageMockRecorder) UpsertMAU(ctx, event, environmentNamespace any) *gomock.Call { +func (mr *MockMAUStorageMockRecorder) UpsertMAU(ctx, event, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertMAU", reflect.TypeOf((*MockMAUStorage)(nil).UpsertMAU), ctx, event, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertMAU", reflect.TypeOf((*MockMAUStorage)(nil).UpsertMAU), ctx, event, environmentId) } // UpsertMAUs mocks base method. -func (m *MockMAUStorage) UpsertMAUs(ctx context.Context, events []*service.UserEvent, environmentNamespace string) error { +func (m *MockMAUStorage) UpsertMAUs(ctx context.Context, events []*service.UserEvent, environmentId string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpsertMAUs", ctx, events, environmentNamespace) + ret := m.ctrl.Call(m, "UpsertMAUs", ctx, events, environmentId) ret0, _ := ret[0].(error) return ret0 } // UpsertMAUs indicates an expected call of UpsertMAUs. -func (mr *MockMAUStorageMockRecorder) UpsertMAUs(ctx, events, environmentNamespace any) *gomock.Call { +func (mr *MockMAUStorageMockRecorder) UpsertMAUs(ctx, events, environmentId any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertMAUs", reflect.TypeOf((*MockMAUStorage)(nil).UpsertMAUs), ctx, events, environmentNamespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpsertMAUs", reflect.TypeOf((*MockMAUStorage)(nil).UpsertMAUs), ctx, events, environmentId) } diff --git a/pkg/subscriber/storage/v2/sql/count_auto_ops_rules.sql b/pkg/subscriber/storage/v2/sql/count_auto_ops_rules.sql index c41fe7bedc..ce4322321c 100644 --- a/pkg/subscriber/storage/v2/sql/count_auto_ops_rules.sql +++ b/pkg/subscriber/storage/v2/sql/count_auto_ops_rules.sql @@ -2,7 +2,7 @@ SELECT COUNT(*) FROM auto_ops_rule LEFT JOIN feature ON auto_ops_rule.feature_id = feature.id -AND auto_ops_rule.environment_namespace = feature.environment_namespace +AND auto_ops_rule.environment_id = feature.environment_id WHERE feature.archived = 0 AND auto_ops_rule.status IN (0, 1) -- 0: WAITING, 1: RUNNING AND auto_ops_rule.deleted = 0 diff --git a/proto/account/api_key.pb.go b/proto/account/api_key.pb.go index bf798fb389..8d66f22658 100644 --- a/proto/account/api_key.pb.go +++ b/proto/account/api_key.pb.go @@ -186,10 +186,8 @@ type EnvironmentAPIKey struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Deprecated: Do not use. - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - ApiKey *APIKey `protobuf:"bytes,2,opt,name=api_key,json=apiKey,proto3" json:"api_key"` - EnvironmentDisabled bool `protobuf:"varint,3,opt,name=environment_disabled,json=environmentDisabled,proto3" json:"environment_disabled"` + ApiKey *APIKey `protobuf:"bytes,2,opt,name=api_key,json=apiKey,proto3" json:"api_key"` + EnvironmentDisabled bool `protobuf:"varint,3,opt,name=environment_disabled,json=environmentDisabled,proto3" json:"environment_disabled"` // Deprecated: Do not use. ProjectId string `protobuf:"bytes,4,opt,name=project_id,json=projectId,proto3" json:"project_id"` Environment *environment.EnvironmentV2 `protobuf:"bytes,5,opt,name=environment,proto3" json:"environment"` @@ -228,14 +226,6 @@ func (*EnvironmentAPIKey) Descriptor() ([]byte, []int) { return file_proto_account_api_key_proto_rawDescGZIP(), []int{1} } -// Deprecated: Do not use. -func (x *EnvironmentAPIKey) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *EnvironmentAPIKey) GetApiKey() *APIKey { if x != nil { return x.ApiKey @@ -299,32 +289,28 @@ var file_proto_account_api_key_proto_rawDesc = []byte{ 0x43, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x05, 0x22, 0xc8, 0x02, + 0x43, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x05, 0x22, 0x95, 0x02, 0x0a, 0x11, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x50, 0x49, - 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x07, - 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x32, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, - 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x55, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x4b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, + 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, + 0x18, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x46, 0x0a, + 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/account/api_key.proto b/proto/account/api_key.proto index d72715fcb1..bba898c44b 100644 --- a/proto/account/api_key.proto +++ b/proto/account/api_key.proto @@ -37,7 +37,7 @@ message APIKey { } message EnvironmentAPIKey { - string environment_namespace = 1 [deprecated = true]; + reserved 1; APIKey api_key = 2; bool environment_disabled = 3; string project_id = 4 [deprecated = true]; diff --git a/proto/account/proto_descriptor.pb b/proto/account/proto_descriptor.pb index faec8b95e9..09be4e50a0 100644 Binary files a/proto/account/proto_descriptor.pb and b/proto/account/proto_descriptor.pb differ diff --git a/proto/account/service.pb.go b/proto/account/service.pb.go index 15d66311c0..629c203055 100644 --- a/proto/account/service.pb.go +++ b/proto/account/service.pb.go @@ -1624,8 +1624,8 @@ type CreateAPIKeyRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Command *CreateAPIKeyCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Command *CreateAPIKeyCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateAPIKeyRequest) Reset() { @@ -1667,9 +1667,9 @@ func (x *CreateAPIKeyRequest) GetCommand() *CreateAPIKeyCommand { return nil } -func (x *CreateAPIKeyRequest) GetEnvironmentNamespace() string { +func (x *CreateAPIKeyRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1726,9 +1726,9 @@ type ChangeAPIKeyNameRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *ChangeAPIKeyNameCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *ChangeAPIKeyNameCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ChangeAPIKeyNameRequest) Reset() { @@ -1777,9 +1777,9 @@ func (x *ChangeAPIKeyNameRequest) GetCommand() *ChangeAPIKeyNameCommand { return nil } -func (x *ChangeAPIKeyNameRequest) GetEnvironmentNamespace() string { +func (x *ChangeAPIKeyNameRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1827,9 +1827,9 @@ type EnableAPIKeyRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *EnableAPIKeyCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *EnableAPIKeyCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EnableAPIKeyRequest) Reset() { @@ -1878,9 +1878,9 @@ func (x *EnableAPIKeyRequest) GetCommand() *EnableAPIKeyCommand { return nil } -func (x *EnableAPIKeyRequest) GetEnvironmentNamespace() string { +func (x *EnableAPIKeyRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1928,9 +1928,9 @@ type DisableAPIKeyRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DisableAPIKeyCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DisableAPIKeyCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DisableAPIKeyRequest) Reset() { @@ -1979,9 +1979,9 @@ func (x *DisableAPIKeyRequest) GetCommand() *DisableAPIKeyCommand { return nil } -func (x *DisableAPIKeyRequest) GetEnvironmentNamespace() string { +func (x *DisableAPIKeyRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2029,8 +2029,8 @@ type GetAPIKeyRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetAPIKeyRequest) Reset() { @@ -2072,9 +2072,9 @@ func (x *GetAPIKeyRequest) GetId() string { return "" } -func (x *GetAPIKeyRequest) GetEnvironmentNamespace() string { +func (x *GetAPIKeyRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2131,13 +2131,13 @@ type ListAPIKeysRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OrderBy ListAPIKeysRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.account.ListAPIKeysRequest_OrderBy" json:"order_by"` - OrderDirection ListAPIKeysRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.account.ListAPIKeysRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - Disabled *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=disabled,proto3" json:"disabled"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListAPIKeysRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.account.ListAPIKeysRequest_OrderBy" json:"order_by"` + OrderDirection ListAPIKeysRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.account.ListAPIKeysRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + Disabled *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=disabled,proto3" json:"disabled"` + EnvironmentId string `protobuf:"bytes,8,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListAPIKeysRequest) Reset() { @@ -2186,13 +2186,6 @@ func (x *ListAPIKeysRequest) GetCursor() string { return "" } -func (x *ListAPIKeysRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListAPIKeysRequest) GetOrderBy() ListAPIKeysRequest_OrderBy { if x != nil { return x.OrderBy @@ -2221,6 +2214,13 @@ func (x *ListAPIKeysRequest) GetDisabled() *wrapperspb.BoolValue { return nil } +func (x *ListAPIKeysRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListAPIKeysResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3150,97 +3150,94 @@ var file_proto_account_service_proto_rawDesc = []byte{ 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x8c, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, + 0x22, 0x84, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x4a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, - 0x4b, 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x22, 0xa4, 0x01, 0x0a, 0x17, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x50, 0x49, 0x4b, - 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, + 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x4a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x22, 0x9c, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x50, + 0x49, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x44, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x50, 0x49, 0x4b, + 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x16, 0x0a, - 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, - 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x16, 0x0a, 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, + 0x0a, 0x14, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x57, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x4f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, - 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, - 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x22, 0xed, 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x50, 0x49, - 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x5d, 0x0a, 0x0f, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x50, - 0x49, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, - 0x01, 0x22, 0x84, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, + 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, + 0x22, 0x47, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, + 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x22, 0xe5, 0x03, 0x0a, 0x12, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, + 0x5d, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, + 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, + 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, + 0x04, 0x22, 0x84, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, diff --git a/proto/account/service.proto b/proto/account/service.proto index bacb265c07..a80b50ec97 100644 --- a/proto/account/service.proto +++ b/proto/account/service.proto @@ -185,7 +185,8 @@ message ListAccountsV2Response { message CreateAPIKeyRequest { CreateAPIKeyCommand command = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message CreateAPIKeyResponse { @@ -195,7 +196,8 @@ message CreateAPIKeyResponse { message ChangeAPIKeyNameRequest { string id = 1; ChangeAPIKeyNameCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message ChangeAPIKeyNameResponse {} @@ -203,7 +205,8 @@ message ChangeAPIKeyNameResponse {} message EnableAPIKeyRequest { string id = 1; EnableAPIKeyCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message EnableAPIKeyResponse {} @@ -211,14 +214,16 @@ message EnableAPIKeyResponse {} message DisableAPIKeyRequest { string id = 1; DisableAPIKeyCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message DisableAPIKeyResponse {} message GetAPIKeyRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetAPIKeyResponse { @@ -238,11 +243,12 @@ message ListAPIKeysRequest { } int64 page_size = 1; string cursor = 2; - string environment_namespace = 3; + reserved 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; google.protobuf.BoolValue disabled = 7; + string environment_id = 8; } message ListAPIKeysResponse { diff --git a/proto/auditlog/proto_descriptor.pb b/proto/auditlog/proto_descriptor.pb index 66ae588667..9cfd478fe7 100644 Binary files a/proto/auditlog/proto_descriptor.pb and b/proto/auditlog/proto_descriptor.pb differ diff --git a/proto/auditlog/service.pb.go b/proto/auditlog/service.pb.go index 66afec325c..86528ac586 100644 --- a/proto/auditlog/service.pb.go +++ b/proto/auditlog/service.pb.go @@ -320,15 +320,15 @@ type ListAuditLogsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OrderBy ListAuditLogsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.auditlog.ListAuditLogsRequest_OrderBy" json:"order_by"` - OrderDirection ListAuditLogsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.auditlog.ListAuditLogsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - From int64 `protobuf:"varint,7,opt,name=from,proto3" json:"from"` - To int64 `protobuf:"varint,8,opt,name=to,proto3" json:"to"` - EntityType *wrapperspb.Int32Value `protobuf:"bytes,9,opt,name=entity_type,json=entityType,proto3" json:"entity_type"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListAuditLogsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.auditlog.ListAuditLogsRequest_OrderBy" json:"order_by"` + OrderDirection ListAuditLogsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.auditlog.ListAuditLogsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + From int64 `protobuf:"varint,7,opt,name=from,proto3" json:"from"` + To int64 `protobuf:"varint,8,opt,name=to,proto3" json:"to"` + EntityType *wrapperspb.Int32Value `protobuf:"bytes,9,opt,name=entity_type,json=entityType,proto3" json:"entity_type"` + EnvironmentId string `protobuf:"bytes,10,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListAuditLogsRequest) Reset() { @@ -377,13 +377,6 @@ func (x *ListAuditLogsRequest) GetCursor() string { return "" } -func (x *ListAuditLogsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListAuditLogsRequest) GetOrderBy() ListAuditLogsRequest_OrderBy { if x != nil { return x.OrderBy @@ -426,6 +419,13 @@ func (x *ListAuditLogsRequest) GetEntityType() *wrapperspb.Int32Value { return nil } +func (x *ListAuditLogsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListAuditLogsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -660,15 +660,15 @@ type ListFeatureHistoryRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OrderBy ListFeatureHistoryRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.auditlog.ListFeatureHistoryRequest_OrderBy" json:"order_by"` - OrderDirection ListFeatureHistoryRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.auditlog.ListFeatureHistoryRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,7,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - From int64 `protobuf:"varint,8,opt,name=from,proto3" json:"from"` - To int64 `protobuf:"varint,9,opt,name=to,proto3" json:"to"` + FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListFeatureHistoryRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.auditlog.ListFeatureHistoryRequest_OrderBy" json:"order_by"` + OrderDirection ListFeatureHistoryRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.auditlog.ListFeatureHistoryRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,7,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + From int64 `protobuf:"varint,8,opt,name=from,proto3" json:"from"` + To int64 `protobuf:"varint,9,opt,name=to,proto3" json:"to"` + EnvironmentId string `protobuf:"bytes,10,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListFeatureHistoryRequest) Reset() { @@ -724,13 +724,6 @@ func (x *ListFeatureHistoryRequest) GetCursor() string { return "" } -func (x *ListFeatureHistoryRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListFeatureHistoryRequest) GetOrderBy() ListFeatureHistoryRequest_OrderBy { if x != nil { return x.OrderBy @@ -766,6 +759,13 @@ func (x *ListFeatureHistoryRequest) GetTo() int64 { return 0 } +func (x *ListFeatureHistoryRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListFeatureHistoryResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -839,119 +839,118 @@ var file_proto_auditlog_service_proto_rawDesc = []byte{ 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x84, 0x04, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, + 0x6f, 0x22, 0xfc, 0x03, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, - 0x79, 0x12, 0x60, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, - 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, - 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x3c, - 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x07, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, - 0x50, 0x10, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x22, 0x8d, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x41, 0x75, 0x64, 0x69, - 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xde, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x08, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, - 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, 0x69, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x65, 0x0a, - 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, - 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, - 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, - 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, - 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, - 0x4d, 0x50, 0x10, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x75, 0x64, 0x69, - 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, - 0x67, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf4, - 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x65, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, - 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4b, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, + 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x60, 0x0a, 0x0f, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x08, 0x20, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x22, 0x25, 0x0a, 0x07, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x01, - 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, - 0x41, 0x53, 0x43, 0x10, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x25, + 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, + 0x41, 0x4d, 0x50, 0x10, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x8d, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x75, + 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, + 0x6c, 0x6f, 0x67, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x09, 0x61, 0x75, + 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0xde, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, + 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x65, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, + 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x3c, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, + 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x01, 0x22, 0x23, 0x0a, 0x0e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, + 0x01, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, + 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, + 0x6f, 0x67, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xec, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, + 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x65, 0x0a, 0x0f, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x61, 0x75, 0x64, 0x69, 0x74, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, + 0x74, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x25, 0x0a, 0x0e, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0x25, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, + 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, + 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, + 0x44, 0x45, 0x53, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x01, 0x4a, + 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, diff --git a/proto/auditlog/service.proto b/proto/auditlog/service.proto index 7137e8bc7e..281a4b16f2 100644 --- a/proto/auditlog/service.proto +++ b/proto/auditlog/service.proto @@ -32,13 +32,14 @@ message ListAuditLogsRequest { } int64 page_size = 1; string cursor = 2; - string environment_namespace = 3; + reserved 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; int64 from = 7; int64 to = 8; google.protobuf.Int32Value entity_type = 9; + string environment_id = 10; } message ListAuditLogsResponse { @@ -84,12 +85,13 @@ message ListFeatureHistoryRequest { string feature_id = 1; int64 page_size = 2; string cursor = 3; - string environment_namespace = 4; + reserved 4; OrderBy order_by = 5; OrderDirection order_direction = 6; string search_keyword = 7; int64 from = 8; int64 to = 9; + string environment_id = 10; } message ListFeatureHistoryResponse { diff --git a/proto/autoops/proto_descriptor.pb b/proto/autoops/proto_descriptor.pb index d72280e0de..39664a1488 100644 Binary files a/proto/autoops/proto_descriptor.pb and b/proto/autoops/proto_descriptor.pb differ diff --git a/proto/autoops/service.pb.go b/proto/autoops/service.pb.go index 289b763db7..9fd599e4f7 100644 --- a/proto/autoops/service.pb.go +++ b/proto/autoops/service.pb.go @@ -138,8 +138,8 @@ type GetAutoOpsRuleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetAutoOpsRuleRequest) Reset() { @@ -174,16 +174,16 @@ func (*GetAutoOpsRuleRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{0} } -func (x *GetAutoOpsRuleRequest) GetEnvironmentNamespace() string { +func (x *GetAutoOpsRuleRequest) GetId() string { if x != nil { - return x.EnvironmentNamespace + return x.Id } return "" } -func (x *GetAutoOpsRuleRequest) GetId() string { +func (x *GetAutoOpsRuleRequest) GetEnvironmentId() string { if x != nil { - return x.Id + return x.EnvironmentId } return "" } @@ -240,8 +240,8 @@ type CreateAutoOpsRuleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Command *CreateAutoOpsRuleCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Command *CreateAutoOpsRuleCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateAutoOpsRuleRequest) Reset() { @@ -276,18 +276,18 @@ func (*CreateAutoOpsRuleRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{2} } -func (x *CreateAutoOpsRuleRequest) GetEnvironmentNamespace() string { +func (x *CreateAutoOpsRuleRequest) GetCommand() *CreateAutoOpsRuleCommand { if x != nil { - return x.EnvironmentNamespace + return x.Command } - return "" + return nil } -func (x *CreateAutoOpsRuleRequest) GetCommand() *CreateAutoOpsRuleCommand { +func (x *CreateAutoOpsRuleRequest) GetEnvironmentId() string { if x != nil { - return x.Command + return x.EnvironmentId } - return nil + return "" } type CreateAutoOpsRuleResponse struct { @@ -333,10 +333,10 @@ type ListAutoOpsRulesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - FeatureIds []string `protobuf:"bytes,4,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + FeatureIds []string `protobuf:"bytes,4,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListAutoOpsRulesRequest) Reset() { @@ -371,13 +371,6 @@ func (*ListAutoOpsRulesRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{4} } -func (x *ListAutoOpsRulesRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListAutoOpsRulesRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -399,6 +392,13 @@ func (x *ListAutoOpsRulesRequest) GetFeatureIds() []string { return nil } +func (x *ListAutoOpsRulesRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListAutoOpsRulesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -459,9 +459,9 @@ type StopAutoOpsRuleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *StopAutoOpsRuleCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *StopAutoOpsRuleCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *StopAutoOpsRuleRequest) Reset() { @@ -496,13 +496,6 @@ func (*StopAutoOpsRuleRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{6} } -func (x *StopAutoOpsRuleRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *StopAutoOpsRuleRequest) GetId() string { if x != nil { return x.Id @@ -517,6 +510,13 @@ func (x *StopAutoOpsRuleRequest) GetCommand() *StopAutoOpsRuleCommand { return nil } +func (x *StopAutoOpsRuleRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type StopAutoOpsRuleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -560,9 +560,9 @@ type DeleteAutoOpsRuleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *DeleteAutoOpsRuleCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *DeleteAutoOpsRuleCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteAutoOpsRuleRequest) Reset() { @@ -597,13 +597,6 @@ func (*DeleteAutoOpsRuleRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{8} } -func (x *DeleteAutoOpsRuleRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *DeleteAutoOpsRuleRequest) GetId() string { if x != nil { return x.Id @@ -618,6 +611,13 @@ func (x *DeleteAutoOpsRuleRequest) GetCommand() *DeleteAutoOpsRuleCommand { return nil } +func (x *DeleteAutoOpsRuleRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type DeleteAutoOpsRuleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -661,13 +661,13 @@ type UpdateAutoOpsRuleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` AddOpsEventRateClauseCommands []*AddOpsEventRateClauseCommand `protobuf:"bytes,4,rep,name=add_ops_event_rate_clause_commands,json=addOpsEventRateClauseCommands,proto3" json:"add_ops_event_rate_clause_commands"` ChangeOpsEventRateClauseCommands []*ChangeOpsEventRateClauseCommand `protobuf:"bytes,5,rep,name=change_ops_event_rate_clause_commands,json=changeOpsEventRateClauseCommands,proto3" json:"change_ops_event_rate_clause_commands"` DeleteClauseCommands []*DeleteClauseCommand `protobuf:"bytes,6,rep,name=delete_clause_commands,json=deleteClauseCommands,proto3" json:"delete_clause_commands"` AddDatetimeClauseCommands []*AddDatetimeClauseCommand `protobuf:"bytes,7,rep,name=add_datetime_clause_commands,json=addDatetimeClauseCommands,proto3" json:"add_datetime_clause_commands"` ChangeDatetimeClauseCommands []*ChangeDatetimeClauseCommand `protobuf:"bytes,8,rep,name=change_datetime_clause_commands,json=changeDatetimeClauseCommands,proto3" json:"change_datetime_clause_commands"` + EnvironmentId string `protobuf:"bytes,9,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateAutoOpsRuleRequest) Reset() { @@ -702,13 +702,6 @@ func (*UpdateAutoOpsRuleRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{10} } -func (x *UpdateAutoOpsRuleRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UpdateAutoOpsRuleRequest) GetId() string { if x != nil { return x.Id @@ -751,6 +744,13 @@ func (x *UpdateAutoOpsRuleRequest) GetChangeDatetimeClauseCommands() []*ChangeDa return nil } +func (x *UpdateAutoOpsRuleRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type UpdateAutoOpsRuleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -794,9 +794,9 @@ type ExecuteAutoOpsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` ExecuteAutoOpsRuleCommand *ExecuteAutoOpsRuleCommand `protobuf:"bytes,4,opt,name=execute_auto_ops_rule_command,json=executeAutoOpsRuleCommand,proto3" json:"execute_auto_ops_rule_command"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ExecuteAutoOpsRequest) Reset() { @@ -831,13 +831,6 @@ func (*ExecuteAutoOpsRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{12} } -func (x *ExecuteAutoOpsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ExecuteAutoOpsRequest) GetId() string { if x != nil { return x.Id @@ -852,6 +845,13 @@ func (x *ExecuteAutoOpsRequest) GetExecuteAutoOpsRuleCommand() *ExecuteAutoOpsRu return nil } +func (x *ExecuteAutoOpsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ExecuteAutoOpsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -904,11 +904,11 @@ type ListOpsCountsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - AutoOpsRuleIds []string `protobuf:"bytes,4,rep,name=auto_ops_rule_ids,json=autoOpsRuleIds,proto3" json:"auto_ops_rule_ids"` - FeatureIds []string `protobuf:"bytes,5,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + AutoOpsRuleIds []string `protobuf:"bytes,4,rep,name=auto_ops_rule_ids,json=autoOpsRuleIds,proto3" json:"auto_ops_rule_ids"` + FeatureIds []string `protobuf:"bytes,5,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListOpsCountsRequest) Reset() { @@ -943,13 +943,6 @@ func (*ListOpsCountsRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{14} } -func (x *ListOpsCountsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListOpsCountsRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -978,6 +971,13 @@ func (x *ListOpsCountsRequest) GetFeatureIds() []string { return nil } +func (x *ListOpsCountsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListOpsCountsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1038,8 +1038,8 @@ type CreateProgressiveRolloutRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Command *CreateProgressiveRolloutCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Command *CreateProgressiveRolloutCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateProgressiveRolloutRequest) Reset() { @@ -1074,18 +1074,18 @@ func (*CreateProgressiveRolloutRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{16} } -func (x *CreateProgressiveRolloutRequest) GetEnvironmentNamespace() string { +func (x *CreateProgressiveRolloutRequest) GetCommand() *CreateProgressiveRolloutCommand { if x != nil { - return x.EnvironmentNamespace + return x.Command } - return "" + return nil } -func (x *CreateProgressiveRolloutRequest) GetCommand() *CreateProgressiveRolloutCommand { +func (x *CreateProgressiveRolloutRequest) GetEnvironmentId() string { if x != nil { - return x.Command + return x.EnvironmentId } - return nil + return "" } type CreateProgressiveRolloutResponse struct { @@ -1131,8 +1131,8 @@ type GetProgressiveRolloutRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetProgressiveRolloutRequest) Reset() { @@ -1167,16 +1167,16 @@ func (*GetProgressiveRolloutRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{18} } -func (x *GetProgressiveRolloutRequest) GetEnvironmentNamespace() string { +func (x *GetProgressiveRolloutRequest) GetId() string { if x != nil { - return x.EnvironmentNamespace + return x.Id } return "" } -func (x *GetProgressiveRolloutRequest) GetId() string { +func (x *GetProgressiveRolloutRequest) GetEnvironmentId() string { if x != nil { - return x.Id + return x.EnvironmentId } return "" } @@ -1233,9 +1233,9 @@ type StopProgressiveRolloutRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *StopProgressiveRolloutCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *StopProgressiveRolloutCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *StopProgressiveRolloutRequest) Reset() { @@ -1270,13 +1270,6 @@ func (*StopProgressiveRolloutRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{20} } -func (x *StopProgressiveRolloutRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *StopProgressiveRolloutRequest) GetId() string { if x != nil { return x.Id @@ -1291,6 +1284,13 @@ func (x *StopProgressiveRolloutRequest) GetCommand() *StopProgressiveRolloutComm return nil } +func (x *StopProgressiveRolloutRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type StopProgressiveRolloutResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1334,9 +1334,9 @@ type DeleteProgressiveRolloutRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *DeleteProgressiveRolloutCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *DeleteProgressiveRolloutCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteProgressiveRolloutRequest) Reset() { @@ -1371,13 +1371,6 @@ func (*DeleteProgressiveRolloutRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{22} } -func (x *DeleteProgressiveRolloutRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *DeleteProgressiveRolloutRequest) GetId() string { if x != nil { return x.Id @@ -1392,6 +1385,13 @@ func (x *DeleteProgressiveRolloutRequest) GetCommand() *DeleteProgressiveRollout return nil } +func (x *DeleteProgressiveRolloutRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type DeleteProgressiveRolloutResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1435,14 +1435,14 @@ type ListProgressiveRolloutsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - FeatureIds []string `protobuf:"bytes,4,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` - OrderBy ListProgressiveRolloutsRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.autoops.ListProgressiveRolloutsRequest_OrderBy" json:"order_by"` - OrderDirection ListProgressiveRolloutsRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.autoops.ListProgressiveRolloutsRequest_OrderDirection" json:"order_direction"` - Status *ProgressiveRollout_Status `protobuf:"varint,7,opt,name=status,proto3,enum=bucketeer.autoops.ProgressiveRollout_Status,oneof" json:"status"` - Type *ProgressiveRollout_Type `protobuf:"varint,8,opt,name=type,proto3,enum=bucketeer.autoops.ProgressiveRollout_Type,oneof" json:"type"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + FeatureIds []string `protobuf:"bytes,4,rep,name=feature_ids,json=featureIds,proto3" json:"feature_ids"` + OrderBy ListProgressiveRolloutsRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.autoops.ListProgressiveRolloutsRequest_OrderBy" json:"order_by"` + OrderDirection ListProgressiveRolloutsRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.autoops.ListProgressiveRolloutsRequest_OrderDirection" json:"order_direction"` + Status *ProgressiveRollout_Status `protobuf:"varint,7,opt,name=status,proto3,enum=bucketeer.autoops.ProgressiveRollout_Status,oneof" json:"status"` + Type *ProgressiveRollout_Type `protobuf:"varint,8,opt,name=type,proto3,enum=bucketeer.autoops.ProgressiveRollout_Type,oneof" json:"type"` + EnvironmentId string `protobuf:"bytes,9,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListProgressiveRolloutsRequest) Reset() { @@ -1477,13 +1477,6 @@ func (*ListProgressiveRolloutsRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{24} } -func (x *ListProgressiveRolloutsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListProgressiveRolloutsRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -1533,6 +1526,13 @@ func (x *ListProgressiveRolloutsRequest) GetType() ProgressiveRollout_Type { return ProgressiveRollout_MANUAL_SCHEDULE } +func (x *ListProgressiveRolloutsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListProgressiveRolloutsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1601,9 +1601,9 @@ type ExecuteProgressiveRolloutRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` ChangeProgressiveRolloutTriggeredAtCommand *ChangeProgressiveRolloutScheduleTriggeredAtCommand `protobuf:"bytes,3,opt,name=change_progressive_rollout_triggered_at_command,json=changeProgressiveRolloutTriggeredAtCommand,proto3" json:"change_progressive_rollout_triggered_at_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ExecuteProgressiveRolloutRequest) Reset() { @@ -1638,13 +1638,6 @@ func (*ExecuteProgressiveRolloutRequest) Descriptor() ([]byte, []int) { return file_proto_autoops_service_proto_rawDescGZIP(), []int{26} } -func (x *ExecuteProgressiveRolloutRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ExecuteProgressiveRolloutRequest) GetId() string { if x != nil { return x.Id @@ -1659,6 +1652,13 @@ func (x *ExecuteProgressiveRolloutRequest) GetChangeProgressiveRolloutTriggeredA return nil } +func (x *ExecuteProgressiveRolloutRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ExecuteProgressiveRolloutResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1711,276 +1711,269 @@ var file_proto_autoops_service_proto_rawDesc = []byte{ 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, - 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5c, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, - 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x42, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, - 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, - 0x52, 0x75, 0x6c, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x75, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x54, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x5c, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x6f, + 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, + 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, + 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x8e, 0x01, 0x0a, + 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x17, 0x4c, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, - 0x73, 0x22, 0x78, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, - 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, - 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xa2, 0x01, 0x0a, 0x16, - 0x53, 0x74, 0x6f, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, - 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x78, 0x0a, 0x18, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, + 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, + 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x61, + 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x75, 0x74, 0x6f, + 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, + 0x6f, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, + 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x18, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x45, 0x0a, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, - 0x70, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, - 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xaa, 0x05, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, - 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x7a, 0x0a, 0x22, 0x61, 0x64, 0x64, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, - 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x1d, 0x61, 0x64, 0x64, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, - 0x83, 0x01, 0x0a, 0x25, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, - 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x1b, 0x0a, 0x19, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa2, 0x05, 0x0a, 0x18, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x7a, 0x0a, 0x22, 0x61, 0x64, 0x64, 0x5f, 0x6f, 0x70, + 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, + 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x73, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x5c, 0x0a, 0x16, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x14, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x12, 0x6c, 0x0a, 0x1c, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x64, - 0x64, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x19, 0x61, 0x64, 0x64, 0x44, 0x61, 0x74, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x12, 0x75, 0x0a, 0x1f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, + 0x61, 0x6e, 0x64, 0x52, 0x1d, 0x61, 0x64, 0x64, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6f, 0x70, + 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, + 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x73, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, + 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x5c, 0x0a, 0x16, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x52, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x6c, 0x0a, 0x1c, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, + 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x19, 0x61, 0x64, 0x64, 0x44, 0x61, + 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x12, 0x75, 0x0a, 0x1f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, + 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, + 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x1c, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x1c, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1b, + 0x75, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x15, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x6e, 0x0a, 0x1d, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, - 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, - 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, - 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x19, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, - 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x22, 0x45, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x6c, - 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x22, 0xcc, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x61, 0x75, - 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, - 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x64, 0x73, 0x22, 0x6b, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x6e, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, + 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, + 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x19, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x45, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x74, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, + 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x22, + 0xc4, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x29, 0x0a, + 0x11, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x4f, 0x70, + 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x6b, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x0a, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6e, 0x74, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, - 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x77, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, + 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x22, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x77, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x22, 0xb0, 0x01, 0x0a, + 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x22, 0xa8, 0x01, 0x0a, 0x1d, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, - 0x20, 0x0a, 0x1e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, + 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4a, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, + 0x6f, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x74, 0x6f, 0x70, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x1f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, + 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, + 0x70, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x22, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, - 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xed, 0x04, 0x0a, + 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe5, 0x04, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x73, 0x12, 0x54, 0x0a, 0x08, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, - 0x12, 0x69, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, - 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, + 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x64, 0x73, 0x12, 0x54, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x22, 0x36, 0x0a, 0x07, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, - 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, - 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, - 0x54, 0x10, 0x02, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb4, 0x01, 0x0a, - 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x58, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, - 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, - 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, - 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x94, 0x02, 0x0a, 0x20, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, + 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x69, 0x0a, 0x0f, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x43, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, + 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, + 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, + 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, + 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, + 0x5f, 0x41, 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, + 0x5f, 0x41, 0x54, 0x10, 0x02, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x22, 0xb4, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0xaa, 0x01, - 0x0a, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x5f, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, - 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x2a, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, - 0x64, 0x41, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x23, 0x0a, 0x21, 0x45, 0x78, + 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8c, 0x02, 0x0a, 0x20, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0xaa, 0x01, 0x0a, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x5f, + 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, + 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x52, 0x2a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x23, 0x0a, 0x21, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x98, 0x0d, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, diff --git a/proto/autoops/service.proto b/proto/autoops/service.proto index 76edc6b096..90c19fb29f 100644 --- a/proto/autoops/service.proto +++ b/proto/autoops/service.proto @@ -23,8 +23,9 @@ import "proto/autoops/ops_count.proto"; import "proto/autoops/progressive_rollout.proto"; message GetAutoOpsRuleRequest { - string environment_namespace = 1; + reserved 1; string id = 2; + string environment_id = 3; } message GetAutoOpsRuleResponse { @@ -32,17 +33,19 @@ message GetAutoOpsRuleResponse { } message CreateAutoOpsRuleRequest { - string environment_namespace = 1; + reserved 1; CreateAutoOpsRuleCommand command = 2; + string environment_id = 3; } message CreateAutoOpsRuleResponse {} message ListAutoOpsRulesRequest { - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; repeated string feature_ids = 4; + string environment_id = 5; } message ListAutoOpsRulesResponse { @@ -51,23 +54,25 @@ message ListAutoOpsRulesResponse { } message StopAutoOpsRuleRequest { - string environment_namespace = 1; + reserved 1; string id = 2; StopAutoOpsRuleCommand command = 3; + string environment_id = 4; } message StopAutoOpsRuleResponse {} message DeleteAutoOpsRuleRequest { - string environment_namespace = 1; + reserved 1; string id = 2; DeleteAutoOpsRuleCommand command = 3; + string environment_id = 4; } message DeleteAutoOpsRuleResponse {} message UpdateAutoOpsRuleRequest { - string environment_namespace = 1; + reserved 1; string id = 2; // ChangeAutoOpsRuleOpsTypeCommand change_auto_ops_rule_ops_type_command = 3 // [deprecated = true]; @@ -78,17 +83,19 @@ message UpdateAutoOpsRuleRequest { repeated DeleteClauseCommand delete_clause_commands = 6; repeated AddDatetimeClauseCommand add_datetime_clause_commands = 7; repeated ChangeDatetimeClauseCommand change_datetime_clause_commands = 8; + string environment_id = 9; } message UpdateAutoOpsRuleResponse {} message ExecuteAutoOpsRequest { - string environment_namespace = 1; + reserved 1; string id = 2; // ChangeAutoOpsRuleTriggeredAtCommand // change_auto_ops_rule_triggered_at_command = 3 [deprecated = true]; reserved 3; ExecuteAutoOpsRuleCommand execute_auto_ops_rule_command = 4; + string environment_id = 5; } message ExecuteAutoOpsResponse { @@ -96,11 +103,12 @@ message ExecuteAutoOpsResponse { } message ListOpsCountsRequest { - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; repeated string auto_ops_rule_ids = 4; repeated string feature_ids = 5; + string environment_id = 6; } message ListOpsCountsResponse { @@ -109,15 +117,17 @@ message ListOpsCountsResponse { } message CreateProgressiveRolloutRequest { - string environment_namespace = 1; + reserved 1; CreateProgressiveRolloutCommand command = 2; + string environment_id = 3; } message CreateProgressiveRolloutResponse {} message GetProgressiveRolloutRequest { - string environment_namespace = 1; + reserved 1; string id = 2; + string environment_id = 3; } message GetProgressiveRolloutResponse { @@ -125,17 +135,19 @@ message GetProgressiveRolloutResponse { } message StopProgressiveRolloutRequest { - string environment_namespace = 1; + reserved 1; string id = 2; StopProgressiveRolloutCommand command = 3; + string environment_id = 4; } message StopProgressiveRolloutResponse {} message DeleteProgressiveRolloutRequest { - string environment_namespace = 1; + reserved 1; string id = 2; DeleteProgressiveRolloutCommand command = 3; + string environment_id = 4; } message DeleteProgressiveRolloutResponse {} @@ -150,7 +162,7 @@ message ListProgressiveRolloutsRequest { ASC = 0; DESC = 1; } - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; repeated string feature_ids = 4; @@ -158,6 +170,7 @@ message ListProgressiveRolloutsRequest { OrderDirection order_direction = 6; optional ProgressiveRollout.Status status = 7; optional ProgressiveRollout.Type type = 8; + string environment_id = 9; } message ListProgressiveRolloutsResponse { @@ -167,10 +180,11 @@ message ListProgressiveRolloutsResponse { } message ExecuteProgressiveRolloutRequest { - string environment_namespace = 1; + reserved 1; string id = 2; ChangeProgressiveRolloutScheduleTriggeredAtCommand change_progressive_rollout_triggered_at_command = 3; + string environment_id = 4; } message ExecuteProgressiveRolloutResponse {} diff --git a/proto/event/client/event.pb.go b/proto/event/client/event.pb.go index d90a85792b..2dd8ef1913 100644 --- a/proto/event/client/event.pb.go +++ b/proto/event/client/event.pb.go @@ -166,9 +166,10 @@ type Event struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Event *anypb.Any `protobuf:"bytes,2,opt,name=event,proto3" json:"event"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` // SDK doens't need to set this field. It's set by gateway service. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Event *anypb.Any `protobuf:"bytes,2,opt,name=event,proto3" json:"event"` + // service. + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *Event) Reset() { @@ -217,9 +218,9 @@ func (x *Event) GetEvent() *anypb.Any { return nil } -func (x *Event) GetEnvironmentNamespace() string { +func (x *Event) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1845,415 +1846,415 @@ var file_proto_event_client_event_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x78, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x92, 0x04, 0x0a, 0x0f, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, - 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x09, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0b, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, - 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x92, 0x04, 0x0a, 0x0f, 0x45, 0x76, 0x61, + 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, + 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, + 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x3d, 0x0a, + 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x03, + 0x0a, 0x09, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0b, 0x65, + 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x0b, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, + 0x61, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, + 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x02, 0x0a, + 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x02, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, - 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf6, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xd6, 0x01, + 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x69, + 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, + 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xb9, 0x02, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x6e, + 0x63, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, + 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, + 0x70, 0x69, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x5c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x44, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, - 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xd6, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, + 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xee, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xb9, - 0x02, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x4c, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, + 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x1d, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x36, 0x0a, 0x1e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x3a, 0x02, + 0x18, 0x01, 0x22, 0xf1, 0x01, 0x0a, 0x20, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x5c, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe7, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, - 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, + 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, - 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xee, 0x01, 0x0a, 0x10, 0x53, - 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, - 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x69, 0x7a, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x1d, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x3a, 0x02, - 0x18, 0x01, 0x22, 0x36, 0x0a, 0x1e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xf1, 0x01, 0x0a, 0x20, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, - 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x5c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xeb, 0x01, 0x0a, 0x1d, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, + 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2e, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe7, - 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe5, + 0x01, 0x0a, 0x1a, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, + 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, + 0x69, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x6f, 0x72, + 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe3, 0x01, 0x0a, 0x19, 0x4e, 0x6f, 0x74, 0x46, 0x6f, + 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, + 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, + 0x1d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x6f, 0x4c, 0x61, 0x72, 0x67, 0x65, + 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, - 0x70, 0x69, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x61, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x1d, 0x55, 0x6e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, - 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, - 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x70, 0x69, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x6f, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x45, 0x78, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, + 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf9, 0x01, 0x0a, 0x24, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, + 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x60, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe5, 0x01, 0x0a, 0x1a, 0x46, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x64, 0x65, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, - 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe3, - 0x01, 0x0a, 0x19, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, - 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, - 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x74, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x1d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x54, 0x6f, 0x6f, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xef, 0x01, 0x0a, 0x1f, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, + 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, + 0x12, 0x5b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x43, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x23, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, + 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, - 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x6f, - 0x4c, 0x61, 0x72, 0x67, 0x65, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xf9, 0x01, 0x0a, 0x24, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, - 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, - 0x64, 0x12, 0x60, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x48, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xef, - 0x01, 0x0a, 0x1f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, - 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, + 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe3, 0x01, 0x0a, 0x19, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, + 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, + 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, + 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xf7, 0x01, 0x0a, 0x23, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x5f, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, - 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x54, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe3, - 0x01, 0x0a, 0x19, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, - 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, - 0x49, 0x64, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x22, 0xe9, 0x01, 0x0a, 0x1c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x64, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, - 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9, 0x01, 0x0a, 0x1c, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x64, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x64, 0x6b, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, + 0x18, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, - 0x58, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x53, 0x64, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x18, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x34, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x49, 0x64, - 0x52, 0x05, 0x61, 0x70, 0x69, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x73, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x5c, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x70, - 0x0a, 0x08, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4e, 0x44, 0x52, 0x4f, - 0x49, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4f, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x03, 0x57, 0x45, 0x42, 0x10, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4f, - 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, 0x41, - 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x07, 0x22, 0x04, 0x08, 0x04, 0x10, 0x04, - 0x2a, 0x9b, 0x01, 0x0a, 0x05, 0x41, 0x70, 0x69, 0x49, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x47, - 0x45, 0x54, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, - 0x13, 0x0a, 0x0f, 0x47, 0x45, 0x54, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x55, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x54, - 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x10, 0x04, - 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x55, 0x53, 0x45, 0x52, 0x53, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x44, 0x4b, 0x5f, 0x47, - 0x45, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x64, 0x42, 0x36, - 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc5, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x70, 0x0a, 0x08, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, + 0x49, 0x4f, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x03, 0x57, 0x45, 0x42, 0x10, 0x03, 0x1a, 0x02, + 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4f, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, + 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, + 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, + 0x10, 0x07, 0x22, 0x04, 0x08, 0x04, 0x10, 0x04, 0x2a, 0x9b, 0x01, 0x0a, 0x05, 0x41, 0x70, 0x69, + 0x49, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x55, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x47, 0x45, 0x54, 0x5f, 0x45, + 0x56, 0x41, 0x4c, 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, + 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x10, + 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x54, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x54, 0x5f, + 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x53, 0x10, 0x05, 0x12, + 0x15, 0x0a, 0x11, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x64, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, + 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/event/client/event.proto b/proto/event/client/event.proto index 33eb6d47af..87aa6f1a41 100644 --- a/proto/event/client/event.proto +++ b/proto/event/client/event.proto @@ -27,8 +27,9 @@ import "proto/user/user.proto"; message Event { string id = 1; google.protobuf.Any event = 2; - string environment_namespace = - 3; // SDK doens't need to set this field. It's set by gateway service. + reserved 3; // SDK doens't need to set this field. It's set by gateway + // service. + string environment_id = 4; } message EvaluationEvent { diff --git a/proto/event/domain/event.pb.go b/proto/event/domain/event.pb.go index 9011c9cb05..528cbf45c1 100644 --- a/proto/event/domain/event.pb.go +++ b/proto/event/domain/event.pb.go @@ -686,19 +686,19 @@ type Event struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp"` - EntityType Event_EntityType `protobuf:"varint,3,opt,name=entity_type,json=entityType,proto3,enum=bucketeer.event.domain.Event_EntityType" json:"entity_type"` - EntityId string `protobuf:"bytes,4,opt,name=entity_id,json=entityId,proto3" json:"entity_id"` - Type Event_Type `protobuf:"varint,5,opt,name=type,proto3,enum=bucketeer.event.domain.Event_Type" json:"type"` - Editor *Editor `protobuf:"bytes,6,opt,name=editor,proto3" json:"editor"` - Data *anypb.Any `protobuf:"bytes,7,opt,name=data,proto3" json:"data"` - EnvironmentNamespace string `protobuf:"bytes,8,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - IsAdminEvent bool `protobuf:"varint,9,opt,name=is_admin_event,json=isAdminEvent,proto3" json:"is_admin_event"` // if true, it's stored in AdminDomainEvent table + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp"` + EntityType Event_EntityType `protobuf:"varint,3,opt,name=entity_type,json=entityType,proto3,enum=bucketeer.event.domain.Event_EntityType" json:"entity_type"` + EntityId string `protobuf:"bytes,4,opt,name=entity_id,json=entityId,proto3" json:"entity_id"` + Type Event_Type `protobuf:"varint,5,opt,name=type,proto3,enum=bucketeer.event.domain.Event_Type" json:"type"` + Editor *Editor `protobuf:"bytes,6,opt,name=editor,proto3" json:"editor"` + Data *anypb.Any `protobuf:"bytes,7,opt,name=data,proto3" json:"data"` + IsAdminEvent bool `protobuf:"varint,9,opt,name=is_admin_event,json=isAdminEvent,proto3" json:"is_admin_event"` // if true, it's stored in AdminDomainEvent table // and AdminAuditLog table. Options *Options `protobuf:"bytes,10,opt,name=options,proto3" json:"options"` // optional EntityData string `protobuf:"bytes,11,opt,name=entity_data,json=entityData,proto3" json:"entity_data"` // JSON string of the entity data PreviousEntityData string `protobuf:"bytes,12,opt,name=previous_entity_data,json=previousEntityData,proto3" json:"previous_entity_data"` // JSON string of the previous entity data + EnvironmentId string `protobuf:"bytes,13,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *Event) Reset() { @@ -782,13 +782,6 @@ func (x *Event) GetData() *anypb.Any { return nil } -func (x *Event) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *Event) GetIsAdminEvent() bool { if x != nil { return x.IsAdminEvent @@ -817,6 +810,13 @@ func (x *Event) GetPreviousEntityData() string { return "" } +func (x *Event) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type Editor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -9912,15 +9912,15 @@ type FlagTriggerCreatedEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Type feature.FlagTrigger_Type `protobuf:"varint,4,opt,name=type,proto3,enum=bucketeer.feature.FlagTrigger_Type" json:"type"` - Action feature.FlagTrigger_Action `protobuf:"varint,5,opt,name=action,proto3,enum=bucketeer.feature.FlagTrigger_Action" json:"action"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description"` - Token string `protobuf:"bytes,7,opt,name=token,proto3" json:"token"` - CreatedAt int64 `protobuf:"varint,8,opt,name=created_at,json=createdAt,proto3" json:"created_at"` - UpdatedAt int64 `protobuf:"varint,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + Type feature.FlagTrigger_Type `protobuf:"varint,4,opt,name=type,proto3,enum=bucketeer.feature.FlagTrigger_Type" json:"type"` + Action feature.FlagTrigger_Action `protobuf:"varint,5,opt,name=action,proto3,enum=bucketeer.feature.FlagTrigger_Action" json:"action"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description"` + Token string `protobuf:"bytes,7,opt,name=token,proto3" json:"token"` + CreatedAt int64 `protobuf:"varint,8,opt,name=created_at,json=createdAt,proto3" json:"created_at"` + UpdatedAt int64 `protobuf:"varint,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at"` + EnvironmentId string `protobuf:"bytes,10,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerCreatedEvent) Reset() { @@ -9969,13 +9969,6 @@ func (x *FlagTriggerCreatedEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerCreatedEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *FlagTriggerCreatedEvent) GetType() feature.FlagTrigger_Type { if x != nil { return x.Type @@ -10018,15 +10011,22 @@ func (x *FlagTriggerCreatedEvent) GetUpdatedAt() int64 { return 0 } +func (x *FlagTriggerCreatedEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type FlagTriggerResetEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerResetEvent) Reset() { @@ -10075,16 +10075,16 @@ func (x *FlagTriggerResetEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerResetEvent) GetEnvironmentNamespace() string { +func (x *FlagTriggerResetEvent) GetToken() string { if x != nil { - return x.EnvironmentNamespace + return x.Token } return "" } -func (x *FlagTriggerResetEvent) GetToken() string { +func (x *FlagTriggerResetEvent) GetEnvironmentId() string { if x != nil { - return x.Token + return x.EnvironmentId } return "" } @@ -10094,10 +10094,10 @@ type FlagTriggerDescriptionChangedEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerDescriptionChangedEvent) Reset() { @@ -10146,16 +10146,16 @@ func (x *FlagTriggerDescriptionChangedEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerDescriptionChangedEvent) GetEnvironmentNamespace() string { +func (x *FlagTriggerDescriptionChangedEvent) GetDescription() string { if x != nil { - return x.EnvironmentNamespace + return x.Description } return "" } -func (x *FlagTriggerDescriptionChangedEvent) GetDescription() string { +func (x *FlagTriggerDescriptionChangedEvent) GetEnvironmentId() string { if x != nil { - return x.Description + return x.EnvironmentId } return "" } @@ -10165,9 +10165,9 @@ type FlagTriggerDisabledEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerDisabledEvent) Reset() { @@ -10216,9 +10216,9 @@ func (x *FlagTriggerDisabledEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerDisabledEvent) GetEnvironmentNamespace() string { +func (x *FlagTriggerDisabledEvent) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -10228,9 +10228,9 @@ type FlagTriggerEnabledEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerEnabledEvent) Reset() { @@ -10279,9 +10279,9 @@ func (x *FlagTriggerEnabledEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerEnabledEvent) GetEnvironmentNamespace() string { +func (x *FlagTriggerEnabledEvent) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -10291,9 +10291,9 @@ type FlagTriggerDeletedEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerDeletedEvent) Reset() { @@ -10342,9 +10342,9 @@ func (x *FlagTriggerDeletedEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerDeletedEvent) GetEnvironmentNamespace() string { +func (x *FlagTriggerDeletedEvent) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -10354,11 +10354,11 @@ type FlagTriggerUsageUpdatedEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - LastTriggeredAt int64 `protobuf:"varint,4,opt,name=last_triggered_at,json=lastTriggeredAt,proto3" json:"last_triggered_at"` - TriggerTimes int32 `protobuf:"varint,5,opt,name=trigger_times,json=triggerTimes,proto3" json:"trigger_times"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + LastTriggeredAt int64 `protobuf:"varint,4,opt,name=last_triggered_at,json=lastTriggeredAt,proto3" json:"last_triggered_at"` + TriggerTimes int32 `protobuf:"varint,5,opt,name=trigger_times,json=triggerTimes,proto3" json:"trigger_times"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTriggerUsageUpdatedEvent) Reset() { @@ -10407,13 +10407,6 @@ func (x *FlagTriggerUsageUpdatedEvent) GetFeatureId() string { return "" } -func (x *FlagTriggerUsageUpdatedEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *FlagTriggerUsageUpdatedEvent) GetLastTriggeredAt() int64 { if x != nil { return x.LastTriggeredAt @@ -10428,6 +10421,13 @@ func (x *FlagTriggerUsageUpdatedEvent) GetTriggerTimes() int32 { return 0 } +func (x *FlagTriggerUsageUpdatedEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type AccountV2FirstNameChangedEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -10637,7 +10637,7 @@ var file_proto_event_domain_event_proto_rawDesc = []byte{ 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xf7, 0x2d, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x22, 0xef, 0x2d, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x49, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, @@ -10656,1230 +10656,1192 @@ var file_proto_event_domain_event_proto_rawDesc = []byte{ 0x6e, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x47, 0x4f, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, - 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x43, 0x43, - 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x50, 0x49, 0x4b, 0x45, 0x59, - 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, - 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x06, - 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, - 0x54, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x55, 0x53, 0x48, 0x10, 0x09, 0x12, - 0x10, 0x0a, 0x0c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, - 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0c, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x10, 0x0e, 0x12, - 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x0f, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, - 0x52, 0x10, 0x10, 0x22, 0x04, 0x08, 0x0d, 0x10, 0x0d, 0x22, 0xbe, 0x27, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, - 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x14, - 0x0a, 0x10, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x45, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, - 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x45, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4d, - 0x4f, 0x56, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, - 0x45, 0x5f, 0x4f, 0x46, 0x46, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x41, 0x52, - 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, - 0x10, 0x0d, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x0f, 0x12, - 0x1a, 0x0a, 0x16, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x10, 0x12, 0x16, 0x0a, 0x12, 0x46, - 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, - 0x44, 0x10, 0x11, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x44, 0x10, 0x12, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, - 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x13, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, - 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x14, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x55, 0x4c, 0x45, 0x5f, - 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x15, - 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x5f, 0x53, - 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, - 0x16, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, - 0x54, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x44, 0x10, 0x17, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, - 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, - 0x10, 0x18, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x19, 0x12, - 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, - 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x1a, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x41, 0x55, 0x53, - 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, - 0x1b, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x1c, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x45, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x1d, 0x12, 0x17, - 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x52, 0x45, - 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x1e, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x45, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, - 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x45, 0x41, 0x54, - 0x55, 0x52, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x20, 0x12, 0x12, - 0x0a, 0x0e, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x44, - 0x10, 0x21, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, - 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x23, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x41, - 0x4d, 0x50, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x45, - 0x54, 0x10, 0x22, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x52, 0x45, 0x52, 0x45, 0x51, 0x55, 0x49, 0x53, - 0x49, 0x54, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x24, 0x12, 0x18, 0x0a, 0x14, 0x50, - 0x52, 0x45, 0x52, 0x45, 0x51, 0x55, 0x49, 0x53, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, - 0x56, 0x45, 0x44, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x45, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x53, 0x49, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x26, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x45, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x53, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x27, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, - 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x28, 0x12, - 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, - 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, - 0x44, 0x10, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x53, 0x43, - 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, - 0x66, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x67, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x41, 0x52, 0x43, 0x48, - 0x49, 0x56, 0x45, 0x44, 0x10, 0x68, 0x12, 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, - 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc8, 0x01, 0x12, - 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xc9, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x45, 0x58, 0x50, 0x45, - 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xca, 0x01, 0x12, 0x1f, 0x0a, 0x1a, 0x45, 0x58, - 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x5f, 0x41, 0x54, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xcb, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x45, - 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0xcc, 0x01, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x44, 0x10, 0xcd, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, - 0xce, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x44, 0x10, 0xcf, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, 0x45, 0x52, - 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0xd0, 0x01, - 0x12, 0x18, 0x0a, 0x13, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, - 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0xd1, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x45, 0x58, - 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, - 0x44, 0x10, 0xd2, 0x01, 0x12, 0x18, 0x0a, 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xac, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1d, - 0x0a, 0x14, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xad, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x18, 0x0a, - 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, - 0x10, 0xae, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x19, 0x0a, 0x10, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xaf, 0x02, 0x1a, 0x02, - 0x08, 0x01, 0x12, 0x18, 0x0a, 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xb0, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x17, 0x0a, 0x12, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x10, 0xb1, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, - 0x5f, 0x56, 0x32, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, - 0x10, 0xb2, 0x02, 0x12, 0x28, 0x0a, 0x23, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, - 0x32, 0x5f, 0x41, 0x56, 0x41, 0x54, 0x41, 0x52, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x55, - 0x52, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xb3, 0x02, 0x12, 0x29, 0x0a, - 0x24, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4f, 0x52, 0x47, 0x41, - 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xb4, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x41, 0x43, 0x43, 0x4f, - 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, - 0x10, 0xb5, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, - 0x32, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb6, 0x02, 0x12, 0x18, 0x0a, 0x13, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, - 0x4c, 0x45, 0x44, 0x10, 0xb7, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, - 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xb8, 0x02, 0x12, - 0x25, 0x0a, 0x20, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, - 0x54, 0x45, 0x52, 0x10, 0xb9, 0x02, 0x12, 0x2a, 0x0a, 0x25, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, - 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, - 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4e, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, - 0xba, 0x02, 0x12, 0x2b, 0x0a, 0x26, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, - 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x51, - 0x55, 0x45, 0x52, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbb, 0x02, 0x12, - 0x2d, 0x0a, 0x28, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x53, 0x45, - 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x46, 0x41, - 0x55, 0x4c, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbc, 0x02, 0x12, 0x25, - 0x0a, 0x20, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x53, 0x45, 0x41, - 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0xbd, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, - 0x5f, 0x56, 0x32, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbe, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x41, 0x43, 0x43, - 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, - 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbf, 0x02, 0x12, 0x20, 0x0a, 0x1b, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x55, - 0x41, 0x47, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xc0, 0x02, 0x12, 0x17, - 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x10, 0xc1, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x41, 0x50, 0x49, 0x4b, 0x45, - 0x59, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x90, 0x03, 0x12, 0x18, 0x0a, 0x13, - 0x41, 0x50, 0x49, 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x44, 0x10, 0x91, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x41, 0x50, 0x49, 0x4b, 0x45, 0x59, - 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x92, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x41, - 0x50, 0x49, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x93, - 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x10, 0xf4, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x47, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xf5, 0x03, 0x12, 0x19, 0x0a, - 0x14, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xf6, 0x03, 0x12, 0x20, 0x0a, 0x1b, 0x53, 0x45, 0x47, 0x4d, - 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xf7, 0x03, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x45, - 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, - 0x10, 0xf8, 0x03, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xf9, 0x03, 0x12, 0x1e, - 0x0a, 0x19, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, - 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xfa, 0x03, 0x12, 0x20, - 0x0a, 0x1b, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, - 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xfb, 0x03, - 0x12, 0x25, 0x0a, 0x20, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, - 0x53, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfc, 0x03, 0x12, 0x24, 0x0a, 0x1f, 0x53, 0x45, 0x47, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, - 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfd, 0x03, 0x12, 0x1f, 0x0a, - 0x1a, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, - 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xfe, 0x03, 0x12, 0x21, - 0x0a, 0x1c, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, - 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0xff, - 0x03, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x45, - 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x81, 0x04, 0x12, 0x1e, 0x0a, 0x19, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x42, 0x55, 0x4c, 0x4b, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x53, 0x10, 0x82, 0x04, 0x12, 0x2d, 0x0a, 0x28, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x42, 0x55, 0x4c, 0x4b, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x44, 0x10, 0x83, 0x04, 0x12, 0x18, 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, - 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xd8, 0x04, 0x12, 0x18, - 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, - 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xd9, 0x04, 0x12, 0x24, 0x0a, 0x1f, 0x45, 0x4e, 0x56, 0x49, - 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xda, 0x04, 0x12, 0x18, - 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xdb, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x45, 0x4e, 0x56, 0x49, - 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x10, 0xdc, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, - 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, - 0xdd, 0x04, 0x12, 0x27, 0x0a, 0x22, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, - 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xde, 0x04, 0x12, 0x1c, 0x0a, 0x17, 0x45, - 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x41, 0x52, - 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0xdf, 0x04, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x4e, 0x56, - 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x55, 0x4e, 0x41, 0x52, - 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0xe0, 0x04, 0x12, 0x2b, 0x0a, 0x26, 0x45, 0x4e, 0x56, - 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x44, 0x10, 0xe1, 0x04, 0x12, 0x1e, 0x0a, 0x15, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, - 0xbc, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1e, 0x0a, 0x15, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, - 0xbe, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1f, 0x0a, 0x16, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, - 0x10, 0xbf, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, 0x4f, 0x4f, - 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, - 0xa0, 0x06, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, - 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xa1, 0x06, 0x12, 0x22, 0x0a, - 0x1d, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x4f, 0x50, - 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa2, - 0x06, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, + 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x14, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x93, 0x02, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x4f, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x45, + 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, + 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x50, 0x49, 0x4b, + 0x45, 0x59, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x10, + 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, + 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, + 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x55, 0x53, 0x48, 0x10, + 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, + 0x4e, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x50, + 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0c, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x10, + 0x0e, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x10, 0x0f, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, + 0x47, 0x45, 0x52, 0x10, 0x10, 0x22, 0x04, 0x08, 0x0d, 0x10, 0x0d, 0x22, 0xbe, 0x27, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x46, + 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x14, 0x0a, 0x10, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, + 0x42, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x46, + 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, + 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x45, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, + 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x45, 0x41, 0x54, + 0x55, 0x52, 0x45, 0x5f, 0x4f, 0x46, 0x46, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x1b, 0x0a, 0x17, 0x56, + 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x41, 0x52, 0x49, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x44, 0x10, 0x0d, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, + 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x41, 0x52, 0x49, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, + 0x0f, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, + 0x53, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x10, 0x12, 0x16, 0x0a, + 0x12, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x41, 0x44, + 0x44, 0x45, 0x44, 0x10, 0x11, 0x12, 0x21, 0x0a, 0x1d, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x12, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x45, 0x41, 0x54, + 0x55, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x13, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, + 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x14, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0xa3, 0x06, 0x12, 0x2a, 0x0a, 0x21, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x41, 0x54, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa4, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, - 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xa5, - 0x06, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, - 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x44, 0x10, 0xa6, 0x06, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, - 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xa7, - 0x06, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x43, 0x4c, - 0x41, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa8, 0x06, 0x12, - 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, - 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xa9, 0x06, 0x12, 0x24, 0x0a, 0x1f, 0x41, 0x55, - 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x4f, 0x50, 0x53, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xaa, 0x06, - 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, - 0x10, 0x84, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x45, 0x44, 0x10, 0x85, 0x07, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x54, - 0x41, 0x47, 0x53, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x86, 0x07, 0x12, 0x16, 0x0a, 0x11, - 0x50, 0x55, 0x53, 0x48, 0x5f, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x87, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x52, 0x45, 0x4e, - 0x41, 0x4d, 0x45, 0x44, 0x10, 0x88, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x89, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, - 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, - 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xe9, 0x07, - 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xea, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x53, - 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x41, - 0x42, 0x4c, 0x45, 0x44, 0x10, 0xeb, 0x07, 0x12, 0x23, 0x0a, 0x1e, 0x53, 0x55, 0x42, 0x53, 0x43, - 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xec, 0x07, 0x12, 0x25, 0x0a, 0x20, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0xed, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xee, 0x07, 0x12, 0x1f, - 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcc, 0x08, 0x12, - 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, - 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xcd, 0x08, - 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, - 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xce, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, - 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, - 0x10, 0xcf, 0x08, 0x12, 0x29, 0x0a, 0x24, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, - 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xd0, 0x08, 0x12, 0x2b, - 0x0a, 0x26, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xd2, 0x08, 0x12, 0x14, 0x0a, 0x0f, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, - 0xb0, 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x45, + 0x10, 0x15, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, + 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, + 0x44, 0x10, 0x16, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, + 0x4f, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x44, 0x10, 0x17, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, + 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x44, 0x10, 0x18, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, + 0x19, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x1a, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x41, + 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, + 0x44, 0x10, 0x1b, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, + 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x1c, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x45, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x1d, + 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x5f, + 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x1e, 0x12, 0x1f, 0x0a, 0x1b, 0x46, 0x45, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x43, + 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x45, + 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x20, + 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x4e, + 0x45, 0x44, 0x10, 0x21, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, + 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x23, 0x12, 0x17, 0x0a, 0x13, + 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x5f, 0x52, 0x45, + 0x53, 0x45, 0x54, 0x10, 0x22, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x52, 0x45, 0x52, 0x45, 0x51, 0x55, + 0x49, 0x53, 0x49, 0x54, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x24, 0x12, 0x18, 0x0a, + 0x14, 0x50, 0x52, 0x45, 0x52, 0x45, 0x51, 0x55, 0x49, 0x53, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x45, 0x52, 0x45, + 0x51, 0x55, 0x49, 0x53, 0x49, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x26, 0x12, 0x1f, 0x0a, 0x1b, 0x46, + 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x53, 0x5f, 0x4f, 0x52, 0x44, + 0x45, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x27, 0x12, 0x13, 0x0a, 0x0f, + 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, + 0x28, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x4e, 0x41, + 0x4d, 0x45, 0x44, 0x10, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x44, 0x10, 0xb1, 0x09, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb2, 0x09, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb3, - 0x09, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x52, 0x49, - 0x41, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xb4, 0x09, 0x12, 0x1c, 0x0a, - 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x43, - 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0xb5, 0x09, 0x12, 0x14, 0x0a, 0x0f, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xb6, - 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, - 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, - 0x10, 0xf8, 0x0a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, - 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0xf9, 0x0a, 0x12, 0x36, 0x0a, 0x31, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, - 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x53, 0x43, 0x48, - 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x5f, - 0x41, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfa, 0x0a, 0x12, 0x20, 0x0a, - 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, - 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xfb, 0x0a, 0x12, - 0x19, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xdc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x52, - 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xdd, 0x0b, 0x12, 0x25, 0x0a, 0x20, 0x4f, 0x52, - 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, - 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xde, - 0x0b, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xdf, 0x0b, 0x12, 0x1a, 0x0a, 0x15, - 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, - 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xe0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x52, 0x47, 0x41, - 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, - 0x44, 0x10, 0xe1, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, - 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x54, - 0x45, 0x44, 0x10, 0xe3, 0x0b, 0x12, 0x25, 0x0a, 0x20, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x45, 0x4d, 0x41, 0x49, - 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xe4, 0x0b, 0x12, 0x19, 0x0a, 0x14, - 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x10, 0xc1, 0x0c, 0x12, 0x17, 0x0a, 0x12, 0x46, 0x4c, 0x41, 0x47, 0x5f, - 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0xc2, 0x0c, - 0x12, 0x25, 0x0a, 0x20, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, - 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x44, 0x10, 0xc3, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x46, 0x4c, 0x41, 0x47, 0x5f, - 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, - 0x10, 0xc4, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, - 0x47, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xc5, 0x0c, 0x12, 0x19, - 0x0a, 0x14, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x44, - 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xc6, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x46, 0x4c, 0x41, - 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc7, 0x0c, 0x22, 0x06, 0x08, 0x94, 0x0a, 0x10, - 0x94, 0x0a, 0x22, 0x06, 0x08, 0x95, 0x0a, 0x10, 0x95, 0x0a, 0x22, 0x06, 0x08, 0x96, 0x0a, 0x10, - 0x96, 0x0a, 0x22, 0x06, 0x08, 0x97, 0x0a, 0x10, 0x97, 0x0a, 0x22, 0x06, 0x08, 0x98, 0x0a, 0x10, - 0x98, 0x0a, 0x22, 0x06, 0x08, 0x99, 0x0a, 0x10, 0x99, 0x0a, 0x22, 0x3f, 0x0a, 0x06, 0x45, 0x64, - 0x69, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, - 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x44, 0x0a, 0x07, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xf3, 0x04, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x58, 0x0a, 0x1a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x6e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5a, 0x0a, 0x1b, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x45, 0x0a, 0x0d, - 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x73, 0x69, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, - 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, - 0x25, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x44, 0x10, 0x66, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x45, 0x44, 0x10, 0x67, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x41, 0x52, + 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x68, 0x12, 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, 0x45, + 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc8, + 0x01, 0x12, 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xc9, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x45, 0x58, + 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x41, + 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xca, 0x01, 0x12, 0x1f, 0x0a, 0x1a, + 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x5f, + 0x41, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xcb, 0x01, 0x12, 0x17, 0x0a, + 0x12, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x45, 0x44, 0x10, 0xcc, 0x01, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, + 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x44, 0x10, 0xcd, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, + 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, + 0x44, 0x10, 0xce, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xcf, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x45, 0x58, 0x50, + 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, + 0xd0, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, + 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0xd1, 0x01, 0x12, 0x18, 0x0a, 0x13, + 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, + 0x56, 0x45, 0x44, 0x10, 0xd2, 0x01, 0x12, 0x18, 0x0a, 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, + 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xac, 0x02, 0x1a, 0x02, 0x08, 0x01, + 0x12, 0x1d, 0x0a, 0x14, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xad, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, + 0x18, 0x0a, 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0xae, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x19, 0x0a, 0x10, 0x41, 0x43, 0x43, + 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xaf, 0x02, + 0x1a, 0x02, 0x08, 0x01, 0x12, 0x18, 0x0a, 0x0f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xb0, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x17, + 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x10, 0xb1, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x41, 0x43, 0x43, 0x4f, 0x55, + 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x44, 0x10, 0xb2, 0x02, 0x12, 0x28, 0x0a, 0x23, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, + 0x5f, 0x56, 0x32, 0x5f, 0x41, 0x56, 0x41, 0x54, 0x41, 0x52, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, + 0x5f, 0x55, 0x52, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xb3, 0x02, 0x12, + 0x29, 0x0a, 0x24, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4f, 0x52, + 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xb4, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x41, 0x43, + 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, + 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x44, 0x10, 0xb5, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, + 0x5f, 0x56, 0x32, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb6, 0x02, 0x12, 0x18, + 0x0a, 0x13, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x49, 0x53, + 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb7, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xb8, + 0x02, 0x12, 0x25, 0x0a, 0x20, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, + 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0xb9, 0x02, 0x12, 0x2a, 0x0a, 0x25, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, + 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4e, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, + 0x44, 0x10, 0xba, 0x02, 0x12, 0x2b, 0x0a, 0x26, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, + 0x56, 0x32, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, + 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbb, + 0x02, 0x12, 0x2d, 0x0a, 0x28, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, + 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbc, 0x02, + 0x12, 0x25, 0x0a, 0x20, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x53, + 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x44, 0x10, 0xbd, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x41, 0x43, 0x43, 0x4f, 0x55, + 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbe, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x41, + 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, + 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xbf, 0x02, 0x12, 0x20, + 0x0a, 0x1b, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x4c, 0x41, 0x4e, + 0x47, 0x55, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xc0, 0x02, + 0x12, 0x17, 0x0a, 0x12, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc1, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x41, 0x50, 0x49, + 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x90, 0x03, 0x12, 0x18, + 0x0a, 0x13, 0x41, 0x50, 0x49, 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x48, + 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x91, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x41, 0x50, 0x49, 0x4b, + 0x45, 0x59, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x92, 0x03, 0x12, 0x14, 0x0a, + 0x0f, 0x41, 0x50, 0x49, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0x93, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, + 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xf4, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x47, + 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xf5, 0x03, 0x12, + 0x19, 0x0a, 0x14, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xf6, 0x03, 0x12, 0x20, 0x0a, 0x1b, 0x53, 0x45, + 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xf7, 0x03, 0x12, 0x17, 0x0a, 0x12, + 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x41, 0x44, 0x44, + 0x45, 0x44, 0x10, 0xf8, 0x03, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, + 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xf9, 0x03, + 0x12, 0x1e, 0x0a, 0x19, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, + 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xfa, 0x03, + 0x12, 0x20, 0x0a, 0x1b, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4c, 0x45, + 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0xfb, 0x03, 0x12, 0x25, 0x0a, 0x20, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, + 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfc, 0x03, 0x12, 0x24, 0x0a, 0x1f, 0x53, 0x45, 0x47, + 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, + 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfd, 0x03, 0x12, + 0x1f, 0x0a, 0x1a, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, + 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xfe, 0x03, + 0x12, 0x21, 0x0a, 0x1c, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x55, + 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, + 0x10, 0xff, 0x03, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, + 0x53, 0x45, 0x52, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x19, 0x0a, 0x14, + 0x53, 0x45, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x44, 0x10, 0x81, 0x04, 0x12, 0x1e, 0x0a, 0x19, 0x53, 0x45, 0x47, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x42, 0x55, 0x4c, 0x4b, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x55, + 0x53, 0x45, 0x52, 0x53, 0x10, 0x82, 0x04, 0x12, 0x2d, 0x0a, 0x28, 0x53, 0x45, 0x47, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x42, 0x55, 0x4c, 0x4b, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x55, + 0x53, 0x45, 0x52, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x44, 0x10, 0x83, 0x04, 0x12, 0x18, 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, + 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xd8, 0x04, + 0x12, 0x18, 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, + 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xd9, 0x04, 0x12, 0x24, 0x0a, 0x1f, 0x45, 0x4e, + 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, + 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xda, 0x04, + 0x12, 0x18, 0x0a, 0x13, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xdb, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x45, 0x4e, + 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x10, 0xdc, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x45, 0x4e, 0x56, 0x49, 0x52, + 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, + 0x44, 0x10, 0xdd, 0x04, 0x12, 0x27, 0x0a, 0x22, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, + 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xde, 0x04, 0x12, 0x1c, 0x0a, + 0x17, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, + 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0xdf, 0x04, 0x12, 0x1e, 0x0a, 0x19, 0x45, + 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x55, 0x4e, + 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0xe0, 0x04, 0x12, 0x2b, 0x0a, 0x26, 0x45, + 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, + 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, + 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xe1, 0x04, 0x12, 0x1e, 0x0a, 0x15, 0x41, 0x44, 0x4d, 0x49, + 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0xbc, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1e, 0x0a, 0x15, 0x41, 0x44, 0x4d, 0x49, + 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, + 0x44, 0x10, 0xbe, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1f, 0x0a, 0x16, 0x41, 0x44, 0x4d, 0x49, + 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0xbf, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, + 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0xa0, 0x06, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, + 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xa1, 0x06, 0x12, + 0x22, 0x0a, 0x1d, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, + 0x4f, 0x50, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, + 0x10, 0xa2, 0x06, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, + 0x55, 0x4c, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x44, 0x10, 0xa3, 0x06, 0x12, 0x2a, 0x0a, 0x21, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, + 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x5f, + 0x41, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa4, 0x06, 0x1a, 0x02, 0x08, + 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, + 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, + 0x10, 0xa5, 0x06, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x5f, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa6, 0x06, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x41, 0x54, 0x45, 0x54, + 0x49, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, + 0x10, 0xa7, 0x06, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, + 0x43, 0x4c, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xa8, + 0x06, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, + 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xa9, 0x06, 0x12, 0x24, 0x0a, 0x1f, + 0x41, 0x55, 0x54, 0x4f, 0x4f, 0x50, 0x53, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x4f, 0x50, 0x53, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, + 0xaa, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, + 0x45, 0x44, 0x10, 0x84, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x85, 0x07, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x55, 0x53, 0x48, + 0x5f, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x86, 0x07, 0x12, 0x16, + 0x0a, 0x11, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x45, 0x44, 0x10, 0x87, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x52, + 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0x88, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x55, 0x53, + 0x48, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x89, 0x07, 0x12, 0x19, 0x0a, 0x14, + 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, + 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0xe9, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xea, 0x07, 0x12, 0x1a, 0x0a, + 0x15, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, + 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xeb, 0x07, 0x12, 0x23, 0x0a, 0x1e, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xec, 0x07, 0x12, 0x25, + 0x0a, 0x20, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x44, 0x10, 0xed, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, + 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xee, 0x07, + 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, + 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcc, + 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, + 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0xcd, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, + 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0xce, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0xcf, 0x08, 0x12, 0x29, 0x0a, 0x24, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, + 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0xd0, 0x08, + 0x12, 0x2b, 0x0a, 0x26, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, + 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1f, 0x0a, + 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x10, 0xd2, 0x08, 0x12, 0x14, + 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0xb0, 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x44, 0x10, 0xb1, 0x09, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xb2, 0x09, 0x12, 0x15, 0x0a, 0x10, + 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0xb3, 0x09, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, + 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xb4, 0x09, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x41, 0x4c, + 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0xb5, 0x09, 0x12, 0x14, 0x0a, + 0x0f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, + 0x10, 0xb6, 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, + 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, + 0x45, 0x44, 0x10, 0xf8, 0x0a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x44, 0x10, 0xf9, 0x0a, 0x12, 0x36, 0x0a, 0x31, 0x50, 0x52, 0x4f, 0x47, 0x52, + 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x53, + 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, + 0x44, 0x5f, 0x41, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xfa, 0x0a, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x56, 0x45, 0x5f, 0x52, + 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0xfb, + 0x0a, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xdc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, + 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xdd, 0x0b, 0x12, 0x25, 0x0a, 0x20, + 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x53, + 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, + 0x10, 0xde, 0x0b, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xdf, 0x0b, 0x12, 0x1a, + 0x0a, 0x15, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, + 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xe0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x52, + 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, + 0x56, 0x45, 0x44, 0x10, 0xe1, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, + 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, + 0x44, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, + 0x52, 0x54, 0x45, 0x44, 0x10, 0xe3, 0x0b, 0x12, 0x25, 0x0a, 0x20, 0x4f, 0x52, 0x47, 0x41, 0x4e, + 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x45, 0x4d, + 0x41, 0x49, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xe4, 0x0b, 0x12, 0x19, + 0x0a, 0x14, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, + 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc1, 0x0c, 0x12, 0x17, 0x0a, 0x12, 0x46, 0x4c, 0x41, + 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, + 0xc2, 0x0c, 0x12, 0x25, 0x0a, 0x20, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, + 0x45, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0xc3, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x46, 0x4c, 0x41, + 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0xc4, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, + 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xc5, 0x0c, + 0x12, 0x19, 0x0a, 0x14, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xc6, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x46, + 0x4c, 0x41, 0x47, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x41, 0x47, + 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0xc7, 0x0c, 0x22, 0x06, 0x08, 0x94, + 0x0a, 0x10, 0x94, 0x0a, 0x22, 0x06, 0x08, 0x95, 0x0a, 0x10, 0x95, 0x0a, 0x22, 0x06, 0x08, 0x96, + 0x0a, 0x10, 0x96, 0x0a, 0x22, 0x06, 0x08, 0x97, 0x0a, 0x10, 0x97, 0x0a, 0x22, 0x06, 0x08, 0x98, + 0x0a, 0x10, 0x98, 0x0a, 0x22, 0x06, 0x08, 0x99, 0x0a, 0x10, 0x99, 0x0a, 0x4a, 0x04, 0x08, 0x08, + 0x10, 0x09, 0x22, 0x3f, 0x0a, 0x06, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x22, 0x44, 0x0a, 0x07, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, + 0x65, 0x77, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf3, 0x04, 0x0a, 0x13, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0a, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x1a, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x4f, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x5a, 0x0a, 0x1b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6f, + 0x66, 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x66, + 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x4f, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x72, + 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, + 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x22, + 0x66, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, + 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0x25, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, - 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x16, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x25, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x1b, 0x45, 0x76, 0x61, 0x6c, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x1d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x39, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x56, 0x0a, 0x1f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x4f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, - 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x68, - 0x0a, 0x1a, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x1c, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, + 0x0a, 0x16, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x1a, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, - 0x0a, 0x19, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x73, - 0x0a, 0x20, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x25, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x2d, 0x0a, 0x1b, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, + 0x0a, 0x1d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x64, 0x65, + 0x6c, 0x61, 0x79, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x39, 0x0a, 0x13, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1e, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x56, + 0x0a, 0x1f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x68, 0x0a, 0x1a, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x51, 0x0a, 0x1c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x1a, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x19, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x73, 0x0a, 0x20, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x17, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x19, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x54, 0x0a, 0x15, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, + 0x91, 0x01, 0x0a, 0x1e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x17, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x22, 0x5e, 0x0a, 0x19, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x22, 0x54, 0x0a, 0x15, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x75, 0x6c, 0x65, - 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, - 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x22, 0x59, 0x0a, 0x1d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x75, + 0x6c, 0x65, 0x73, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x22, 0x42, + 0x0a, 0x17, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, + 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, + 0x78, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x3c, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x9c, 0x01, + 0x0a, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x08, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x81, 0x01, 0x0a, + 0x14, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, + 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x22, 0x60, 0x0a, 0x16, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x59, 0x0a, 0x1d, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, - 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x22, 0x42, 0x0a, 0x17, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x69, - 0x78, 0x65, 0x64, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x9c, 0x01, 0x0a, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, - 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x79, 0x22, 0x81, 0x01, 0x0a, 0x14, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x52, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x16, 0x52, 0x75, 0x6c, 0x65, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x22, 0xa4, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, - 0x61, 0x75, 0x73, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x75, 0x0a, 0x15, 0x43, 0x6c, 0x61, 0x75, 0x73, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x77, - 0x0a, 0x17, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6d, 0x0a, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, - 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x38, 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x54, 0x61, 0x67, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, - 0x22, 0x3a, 0x0a, 0x16, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x4a, 0x0a, 0x1e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb5, 0x04, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0f, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, - 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, - 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x72, 0x65, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, - 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, - 0x22, 0x44, 0x0a, 0x1d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x69, 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, 0x52, 0x65, 0x73, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, 0x22, 0xb0, 0x01, 0x0a, 0x10, 0x47, 0x6f, 0x61, 0x6c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x36, 0x0a, 0x10, 0x47, 0x6f, 0x61, - 0x6c, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x4f, 0x0a, 0x1b, 0x47, 0x6f, 0x61, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x6f, 0x61, 0x6c, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, 0x10, 0x47, 0x6f, 0x61, 0x6c, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xf3, 0x03, 0x0a, 0x16, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, - 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x07, - 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x70, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x6f, - 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x22, 0x47, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x22, 0x29, 0x0a, 0x17, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x75, 0x0a, 0x15, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x77, 0x0a, 0x17, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x6d, 0x0a, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x4a, 0x0a, 0x1d, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x22, 0x47, 0x0a, 0x1c, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x74, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, - 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, - 0x6f, 0x70, 0x41, 0x74, 0x22, 0x62, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x74, 0x22, 0x40, 0x0a, 0x1a, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x38, + 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x67, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x21, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xfe, 0x03, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x56, 0x32, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x72, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x55, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5b, 0x0a, - 0x11, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x59, 0x0a, 0x11, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x56, 0x32, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x10, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x56, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x45, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x4e, 0x61, 0x6d, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x23, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x56, 0x32, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, - 0x4c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x9a, 0x01, - 0x0a, 0x25, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x5b, 0x0a, - 0x11, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x25, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x59, 0x0a, 0x11, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x56, 0x32, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x10, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x2d, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2e, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, - 0x32, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2d, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, - 0x32, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x22, 0xd7, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x42, 0x0a, - 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x45, 0x0a, 0x1d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x0a, 0x16, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x58, 0x0a, 0x1f, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x2a, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc6, - 0x01, 0x0a, 0x12, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x74, 0x61, 0x67, 0x22, 0x4a, 0x0a, 0x1e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xb5, 0x04, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x6e, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, + 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, + 0x12, 0x2d, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, + 0x46, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x5f, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, + 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x22, 0x44, 0x0a, 0x1d, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, 0x22, 0xb0, + 0x01, 0x0a, 0x10, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x22, 0x36, 0x0a, 0x10, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, - 0x65, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4f, 0x0a, 0x1b, 0x47, 0x6f, 0x61, + 0x6c, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x6f, + 0x61, 0x6c, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x22, 0x0a, 0x10, 0x47, 0x6f, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xf3, 0x03, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, + 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, + 0x74, 0x6f, 0x70, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, + 0x11, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x16, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x41, 0x74, 0x22, 0x29, 0x0a, 0x17, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, 0x0a, + 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4a, 0x0a, 0x1d, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x41, 0x74, 0x22, 0x47, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x74, 0x22, 0x62, 0x0a, 0x1c, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x74, + 0x22, 0x40, 0x0a, 0x1a, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x21, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xfe, + 0x03, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, + 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x11, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x10, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, + 0x6c, 0x65, 0x12, 0x59, 0x0a, 0x11, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x10, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x3c, 0x0a, 0x16, 0x41, 0x50, 0x49, 0x4b, 0x65, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x12, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x25, 0x0a, 0x13, 0x41, - 0x50, 0x49, 0x4b, 0x65, 0x79, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x25, 0x0a, 0x13, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, + 0x56, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x27, + 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x56, 0x32, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x65, + 0x0a, 0x23, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x41, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x4c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x9a, 0x01, 0x0a, 0x25, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x56, 0x32, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x6f, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x5b, 0x0a, 0x11, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x10, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, + 0x6c, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x25, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x12, 0x59, 0x0a, 0x11, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x2e, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x10, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x2d, 0x0a, + 0x15, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2e, 0x0a, 0x16, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2d, 0x0a, 0x15, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xd7, 0x01, 0x0a, 0x18, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x42, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x1d, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x22, 0x58, 0x0a, 0x1f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x2a, 0x0a, 0x18, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3d, 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x12, 0x41, 0x50, 0x49, 0x4b, 0x65, + 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x32, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, + 0x3c, 0x0a, 0x16, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, + 0x12, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x25, 0x0a, 0x13, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x15, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x13, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3d, + 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, + 0x1e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x54, 0x0a, 0x15, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, + 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0x42, 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, - 0x42, 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, + 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, 0x1b, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, + 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, - 0x65, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x06, + 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, + 0x22, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x63, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x74, - 0x0a, 0x1d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, - 0x73, 0x65, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x22, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, - 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xb8, - 0x01, 0x0a, 0x21, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x89, 0x01, 0x0a, 0x1c, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x1e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x21, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, + 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, + 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, + 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x22, 0x89, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, + 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8b, 0x01, + 0x0a, 0x1e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x15, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x28, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf4, 0x01, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x17, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x56, 0x0a, 0x22, 0x45, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x17, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xb3, 0x01, + 0x0a, 0x1b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x28, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, + 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf4, 0x01, 0x0a, + 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x56, 0x0a, 0x22, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x17, 0x45, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x22, 0x9e, 0x02, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x56, 0x32, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x24, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9e, 0x02, 0x0a, 0x19, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, - 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x52, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6c, 0x64, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6c, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0xbb, 0x01, 0x0a, 0x24, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x32, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6f, - 0x6c, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, - 0x65, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, - 0x0a, 0x27, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x1c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xa9, 0x02, 0x0a, 0x17, 0x41, 0x75, - 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x63, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, - 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3f, - 0x0a, 0x0a, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, - 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, - 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x19, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, - 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0x19, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x57, 0x0a, 0x1e, 0x41, - 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x4f, 0x70, 0x73, 0x54, 0x79, 0x70, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, - 0x08, 0x6f, 0x70, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, - 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x73, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, - 0x75, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x63, 0x0a, 0x20, 0x41, 0x75, - 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x4f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, - 0x0a, 0x0a, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, - 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x95, 0x01, 0x0a, 0x1c, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x58, 0x0a, - 0x15, 0x6f, 0x70, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, - 0x2e, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x52, 0x12, 0x6f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x73, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, - 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x15, 0x6f, 0x70, 0x73, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x12, 0x6f, - 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, - 0x65, 0x22, 0x3c, 0x0a, 0x1d, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x6c, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x6c, + 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, + 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, 0x0a, 0x27, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, + 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x41, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x61, + 0x0a, 0x1c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x32, 0x55, + 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x22, 0xa9, 0x02, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, + 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, + 0x6f, 0x70, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, + 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, + 0x07, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, + 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6f, 0x70, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x19, 0x0a, + 0x17, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x6f, + 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x22, 0x57, 0x0a, 0x1e, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, + 0x6c, 0x65, 0x4f, 0x70, 0x73, 0x54, 0x79, 0x70, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x73, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x24, 0x0a, 0x22, + 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0x63, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, + 0x65, 0x4f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x41, + 0x75, 0x74, 0x6f, 0x4f, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6f, 0x70, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1c, 0x4f, 0x70, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x15, 0x6f, 0x70, 0x73, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x12, 0x6f, 0x70, 0x73, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, + 0x97, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x22, - 0x83, 0x01, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, - 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0f, 0x64, 0x61, 0x74, - 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, - 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, + 0x58, 0x0a, 0x15, 0x6f, 0x70, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, + 0x70, 0x73, 0x2e, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x12, 0x6f, 0x70, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x3c, 0x0a, 0x1d, 0x41, 0x75, 0x74, + 0x6f, 0x4f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, + 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x65, + 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x0e, 0x64, - 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x70, 0x0a, - 0x10, 0x50, 0x75, 0x73, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x63, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x66, 0x63, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, - 0x12, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x22, 0x28, 0x0a, 0x12, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x41, - 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x2a, 0x0a, - 0x14, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x26, 0x0a, 0x10, 0x50, 0x75, 0x73, - 0x68, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x58, 0x0a, - 0x10, 0x50, 0x75, 0x73, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x09, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1a, 0x0a, - 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x41, 0x64, 0x64, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x79, 0x0a, 0x23, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x09, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x7c, 0x0a, 0x26, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, + 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x85, 0x01, + 0x0a, 0x1a, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x0f, 0x64, 0x61, 0x74, + 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, + 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x22, 0x70, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x63, 0x6d, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x63, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x12, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x28, 0x0a, 0x12, 0x50, + 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x2a, 0x0a, 0x14, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x22, 0x26, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x50, 0x75, 0x73, + 0x68, 0x54, 0x61, 0x67, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, + 0xc3, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x0a, + 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, @@ -11887,253 +11849,287 @@ var file_proto_event_domain_event_proto_rawDesc = []byte{ 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x28, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8b, 0x02, 0x0a, 0x13, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x70, 0x65, 0x73, 0x22, 0x79, 0x0a, 0x23, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x2e, + 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc8, + 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x7c, 0x0a, + 0x26, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x41, 0x64, 0x64, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x28, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x1d, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x8b, 0x02, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x52, + 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, - 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, - 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x52, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x13, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, + 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, + 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x90, 0x02, 0x0a, + 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x22, + 0x2c, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5d, 0x0a, + 0x16, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x41, 0x64, 0x64, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0c, + 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0x68, 0x0a, 0x21, + 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0x39, 0x0a, 0x18, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x22, 0xfb, 0x01, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, + 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x90, 0x02, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, + 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, + 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, + 0xe5, 0x01, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, + 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, + 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, + 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, + 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, 0x52, 0x09, 0x73, + 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, + 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x22, 0x30, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x54, 0x0a, 0x31, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, + 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, + 0xa8, 0x02, 0x0a, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x57, 0x0a, 0x23, 0x4f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x74, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x75, 0x72, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x75, 0x72, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5d, 0x0a, 0x16, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x73, 0x69, 0x74, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x73, 0x69, 0x74, 0x65, 0x22, 0x68, 0x0a, 0x21, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x73, 0x69, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, - 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0x39, - 0x0a, 0x18, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x22, 0xfb, 0x01, 0x0a, 0x1e, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x74, - 0x6f, 0x70, 0x70, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, - 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x4e, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x6f, 0x70, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x70, 0x65, 0x64, 0x42, 0x79, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x22, - 0x30, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x52, 0x6f, - 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x54, 0x0a, 0x31, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x02, 0x0a, 0x18, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x72, 0x6c, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x72, 0x6c, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x22, 0x57, 0x0a, 0x23, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x22, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x22, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x22, 0x42, 0x0a, 0x1c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2a, 0x0a, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x42, 0x0a, 0x1c, 0x4f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2a, + 0x0a, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x19, 0x4f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x19, 0x4f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x1b, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x1f, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe3, 0x02, 0x0a, 0x17, 0x46, 0x6c, 0x61, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x19, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x2b, 0x0a, 0x19, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x1b, - 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x1f, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xeb, - 0x02, 0x0a, 0x17, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x37, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x91, 0x01, 0x0a, + 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, + 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x89, 0x01, 0x0a, 0x15, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0xaa, 0x01, 0x0a, 0x22, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7e, 0x0a, + 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa2, 0x01, 0x0a, 0x22, 0x46, 0x6c, 0x61, + 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x76, 0x0a, 0x18, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x7d, 0x0a, - 0x17, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x7d, 0x0a, 0x17, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x75, 0x0a, 0x17, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x75, 0x0a, 0x17, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x1c, - 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x55, 0x73, 0x61, 0x67, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x22, 0x55, 0x0a, 0x1e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x46, 0x69, + 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0xcb, 0x01, 0x0a, 0x1c, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x55, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, + 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, + 0x04, 0x22, 0x55, 0x0a, 0x1e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x56, 0x32, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, diff --git a/proto/event/domain/event.proto b/proto/event/domain/event.proto index f698058092..d1d78d4295 100644 --- a/proto/event/domain/event.proto +++ b/proto/event/domain/event.proto @@ -241,12 +241,13 @@ message Event { Type type = 5; Editor editor = 6; google.protobuf.Any data = 7; - string environment_namespace = 8; + reserved 8; bool is_admin_event = 9; // if true, it's stored in AdminDomainEvent table // and AdminAuditLog table. Options options = 10; // optional string entity_data = 11; // JSON string of the entity data string previous_entity_data = 12; // JSON string of the previous entity data + string environment_id = 13; } message Editor { @@ -1093,53 +1094,60 @@ message OrganizationTrialConvertedEvent { message FlagTriggerCreatedEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; bucketeer.feature.FlagTrigger.Type type = 4; bucketeer.feature.FlagTrigger.Action action = 5; string description = 6; string token = 7; int64 created_at = 8; int64 updated_at = 9; + string environment_id = 10; } message FlagTriggerResetEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; string token = 4; + string environment_id = 5; } message FlagTriggerDescriptionChangedEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; string description = 4; + string environment_id = 5; } message FlagTriggerDisabledEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message FlagTriggerEnabledEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message FlagTriggerDeletedEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message FlagTriggerUsageUpdatedEvent { string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; int64 last_triggered_at = 4; int32 trigger_times = 5; + string environment_id = 6; } message AccountV2FirstNameChangedEvent { diff --git a/proto/event/service/feature.pb.go b/proto/event/service/feature.pb.go index b06d777a51..a5d6fd26f1 100644 --- a/proto/event/service/feature.pb.go +++ b/proto/event/service/feature.pb.go @@ -43,9 +43,7 @@ type EvaluationRequestEvent struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp"` User *user.User `protobuf:"bytes,3,opt,name=user,proto3" json:"user"` - // true]; - EnvironmentNamespace string `protobuf:"bytes,5,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Tag string `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag"` + Tag string `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag"` } func (x *EvaluationRequestEvent) Reset() { @@ -101,13 +99,6 @@ func (x *EvaluationRequestEvent) GetUser() *user.User { return nil } -func (x *EvaluationRequestEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *EvaluationRequestEvent) GetTag() string { if x != nil { return x.Tag @@ -123,23 +114,20 @@ var file_proto_event_service_feature_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x15, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xbd, 0x01, 0x0a, 0x16, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, + 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x01, 0x0a, 0x16, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, - 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x4a, 0x04, 0x08, - 0x04, 0x10, 0x05, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, + 0x08, 0x05, 0x10, 0x06, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/event/service/feature.proto b/proto/event/service/feature.proto index fa0df6a0a9..858bf76e58 100644 --- a/proto/event/service/feature.proto +++ b/proto/event/service/feature.proto @@ -25,6 +25,6 @@ message EvaluationRequestEvent { bucketeer.user.User user = 3; reserved 4; // repeated bucketeer.feature.Feature features = 4 [deprecated = // true]; - string environment_namespace = 5; + reserved 5; string tag = 6; } diff --git a/proto/event/service/segment.pb.go b/proto/event/service/segment.pb.go index 4e66f6f710..b51ab2d980 100644 --- a/proto/event/service/segment.pb.go +++ b/proto/event/service/segment.pb.go @@ -41,12 +41,12 @@ type BulkSegmentUsersReceivedEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - SegmentId string `protobuf:"bytes,3,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` - Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` - State feature.SegmentUser_State `protobuf:"varint,5,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` - Editor *domain.Editor `protobuf:"bytes,6,opt,name=editor,proto3" json:"editor"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + SegmentId string `protobuf:"bytes,3,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` + State feature.SegmentUser_State `protobuf:"varint,5,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` + Editor *domain.Editor `protobuf:"bytes,6,opt,name=editor,proto3" json:"editor"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *BulkSegmentUsersReceivedEvent) Reset() { @@ -88,13 +88,6 @@ func (x *BulkSegmentUsersReceivedEvent) GetId() string { return "" } -func (x *BulkSegmentUsersReceivedEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *BulkSegmentUsersReceivedEvent) GetSegmentId() string { if x != nil { return x.SegmentId @@ -123,6 +116,13 @@ func (x *BulkSegmentUsersReceivedEvent) GetEditor() *domain.Editor { return nil } +func (x *BulkSegmentUsersReceivedEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + var File_proto_event_service_segment_proto protoreflect.FileDescriptor var file_proto_event_service_segment_proto_rawDesc = []byte{ @@ -133,28 +133,27 @@ var file_proto_event_service_segment_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x02, 0x0a, 0x1d, 0x42, 0x75, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x02, 0x0a, 0x1d, 0x42, 0x75, 0x6c, 0x6b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x36, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, - 0x06, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, - 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x65, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, + 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x42, + 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/event/service/segment.proto b/proto/event/service/segment.proto index 63279127e0..75b8e1d886 100644 --- a/proto/event/service/segment.proto +++ b/proto/event/service/segment.proto @@ -22,9 +22,10 @@ import "proto/event/domain/event.proto"; message BulkSegmentUsersReceivedEvent { string id = 1; - string environment_namespace = 2; + reserved 2; string segment_id = 3; bytes data = 4; bucketeer.feature.SegmentUser.State state = 5; bucketeer.event.domain.Editor editor = 6; + string environment_id = 7; } diff --git a/proto/event/service/user.pb.go b/proto/event/service/user.pb.go index 3547380353..a7fcf812b6 100644 --- a/proto/event/service/user.pb.go +++ b/proto/event/service/user.pb.go @@ -40,14 +40,13 @@ type UserEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - // true]; - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Tag string `protobuf:"bytes,5,opt,name=tag,proto3" json:"tag"` - UserId string `protobuf:"bytes,6,opt,name=user_id,json=userId,proto3" json:"user_id"` - LastSeen int64 `protobuf:"varint,7,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen"` - Data map[string]string `protobuf:"bytes,8,rep,name=data,proto3" json:"data" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SourceId client.SourceId `protobuf:"varint,9,opt,name=source_id,json=sourceId,proto3,enum=bucketeer.event.client.SourceId" json:"source_id"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Tag string `protobuf:"bytes,5,opt,name=tag,proto3" json:"tag"` + UserId string `protobuf:"bytes,6,opt,name=user_id,json=userId,proto3" json:"user_id"` + LastSeen int64 `protobuf:"varint,7,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen"` + Data map[string]string `protobuf:"bytes,8,rep,name=data,proto3" json:"data" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SourceId client.SourceId `protobuf:"varint,9,opt,name=source_id,json=sourceId,proto3,enum=bucketeer.event.client.SourceId" json:"source_id"` + EnvironmentId string `protobuf:"bytes,10,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UserEvent) Reset() { @@ -89,13 +88,6 @@ func (x *UserEvent) GetId() string { return "" } -func (x *UserEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UserEvent) GetTag() string { if x != nil { return x.Tag @@ -131,6 +123,13 @@ func (x *UserEvent) GetSourceId() client.SourceId { return client.SourceId_UNKNOWN } +func (x *UserEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + var File_proto_event_service_user_proto protoreflect.FileDescriptor var file_proto_event_service_user_proto_rawDesc = []byte{ @@ -139,33 +138,33 @@ var file_proto_event_service_user_proto_rawDesc = []byte{ 0x12, 0x17, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x02, 0x0a, 0x09, 0x55, 0x73, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x02, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, - 0x53, 0x65, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, - 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, + 0x40, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3d, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/proto/event/service/user.proto b/proto/event/service/user.proto index b93bcdd089..38c04324a2 100644 --- a/proto/event/service/user.proto +++ b/proto/event/service/user.proto @@ -24,10 +24,11 @@ message UserEvent { reserved 2; // bucketeer.user.User user = 2 [deprecated = true]; reserved 3; // repeated bucketeer.feature.Feature features = 3 [deprecated = // true]; - string environment_namespace = 4; + reserved 4; string tag = 5; string user_id = 6; int64 last_seen = 7; map data = 8; bucketeer.event.client.SourceId source_id = 9; + string environment_id = 10; } diff --git a/proto/eventcounter/proto_descriptor.pb b/proto/eventcounter/proto_descriptor.pb index 679e0de62e..1e94b0b272 100644 Binary files a/proto/eventcounter/proto_descriptor.pb and b/proto/eventcounter/proto_descriptor.pb differ diff --git a/proto/eventcounter/service.pb.go b/proto/eventcounter/service.pb.go index 077ae6ddcf..b94996030a 100644 --- a/proto/eventcounter/service.pb.go +++ b/proto/eventcounter/service.pb.go @@ -99,12 +99,12 @@ type GetExperimentEvaluationCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - StartAt int64 `protobuf:"varint,2,opt,name=start_at,json=startAt,proto3" json:"start_at"` - EndAt int64 `protobuf:"varint,3,opt,name=end_at,json=endAt,proto3" json:"end_at"` - FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - VariationIds []string `protobuf:"bytes,6,rep,name=variation_ids,json=variationIds,proto3" json:"variation_ids"` + StartAt int64 `protobuf:"varint,2,opt,name=start_at,json=startAt,proto3" json:"start_at"` + EndAt int64 `protobuf:"varint,3,opt,name=end_at,json=endAt,proto3" json:"end_at"` + FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + VariationIds []string `protobuf:"bytes,6,rep,name=variation_ids,json=variationIds,proto3" json:"variation_ids"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetExperimentEvaluationCountRequest) Reset() { @@ -139,13 +139,6 @@ func (*GetExperimentEvaluationCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{0} } -func (x *GetExperimentEvaluationCountRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GetExperimentEvaluationCountRequest) GetStartAt() int64 { if x != nil { return x.StartAt @@ -181,6 +174,13 @@ func (x *GetExperimentEvaluationCountRequest) GetVariationIds() []string { return nil } +func (x *GetExperimentEvaluationCountRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type GetExperimentEvaluationCountResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -249,9 +249,9 @@ type GetEvaluationTimeseriesCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - TimeRange GetEvaluationTimeseriesCountRequest_TimeRange `protobuf:"varint,3,opt,name=time_range,json=timeRange,proto3,enum=bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest_TimeRange" json:"time_range"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + TimeRange GetEvaluationTimeseriesCountRequest_TimeRange `protobuf:"varint,3,opt,name=time_range,json=timeRange,proto3,enum=bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest_TimeRange" json:"time_range"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetEvaluationTimeseriesCountRequest) Reset() { @@ -286,13 +286,6 @@ func (*GetEvaluationTimeseriesCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{2} } -func (x *GetEvaluationTimeseriesCountRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GetEvaluationTimeseriesCountRequest) GetFeatureId() string { if x != nil { return x.FeatureId @@ -307,6 +300,13 @@ func (x *GetEvaluationTimeseriesCountRequest) GetTimeRange() GetEvaluationTimese return GetEvaluationTimeseriesCountRequest_UNKNOWN } +func (x *GetEvaluationTimeseriesCountRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type GetEvaluationTimeseriesCountResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -367,8 +367,8 @@ type GetExperimentResultRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - ExperimentId string `protobuf:"bytes,2,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id"` + ExperimentId string `protobuf:"bytes,2,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetExperimentResultRequest) Reset() { @@ -403,16 +403,16 @@ func (*GetExperimentResultRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{4} } -func (x *GetExperimentResultRequest) GetEnvironmentNamespace() string { +func (x *GetExperimentResultRequest) GetExperimentId() string { if x != nil { - return x.EnvironmentNamespace + return x.ExperimentId } return "" } -func (x *GetExperimentResultRequest) GetExperimentId() string { +func (x *GetExperimentResultRequest) GetEnvironmentId() string { if x != nil { - return x.ExperimentId + return x.EnvironmentId } return "" } @@ -469,9 +469,9 @@ type ListExperimentResultsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListExperimentResultsRequest) Reset() { @@ -520,9 +520,9 @@ func (x *ListExperimentResultsRequest) GetFeatureVersion() *wrapperspb.Int32Valu return nil } -func (x *ListExperimentResultsRequest) GetEnvironmentNamespace() string { +func (x *ListExperimentResultsRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -579,13 +579,13 @@ type GetExperimentGoalCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - StartAt int64 `protobuf:"varint,2,opt,name=start_at,json=startAt,proto3" json:"start_at"` - EndAt int64 `protobuf:"varint,3,opt,name=end_at,json=endAt,proto3" json:"end_at"` - GoalId string `protobuf:"bytes,4,opt,name=goal_id,json=goalId,proto3" json:"goal_id"` - FeatureId string `protobuf:"bytes,5,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,6,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - VariationIds []string `protobuf:"bytes,7,rep,name=variation_ids,json=variationIds,proto3" json:"variation_ids"` + StartAt int64 `protobuf:"varint,2,opt,name=start_at,json=startAt,proto3" json:"start_at"` + EndAt int64 `protobuf:"varint,3,opt,name=end_at,json=endAt,proto3" json:"end_at"` + GoalId string `protobuf:"bytes,4,opt,name=goal_id,json=goalId,proto3" json:"goal_id"` + FeatureId string `protobuf:"bytes,5,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,6,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + VariationIds []string `protobuf:"bytes,7,rep,name=variation_ids,json=variationIds,proto3" json:"variation_ids"` + EnvironmentId string `protobuf:"bytes,8,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetExperimentGoalCountRequest) Reset() { @@ -620,13 +620,6 @@ func (*GetExperimentGoalCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{8} } -func (x *GetExperimentGoalCountRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GetExperimentGoalCountRequest) GetStartAt() int64 { if x != nil { return x.StartAt @@ -669,6 +662,13 @@ func (x *GetExperimentGoalCountRequest) GetVariationIds() []string { return nil } +func (x *GetExperimentGoalCountRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type GetExperimentGoalCountResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -729,12 +729,12 @@ type GetOpsEvaluationUserCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OpsRuleId string `protobuf:"bytes,2,opt,name=ops_rule_id,json=opsRuleId,proto3" json:"ops_rule_id"` - ClauseId string `protobuf:"bytes,3,opt,name=clause_id,json=clauseId,proto3" json:"clause_id"` - FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + OpsRuleId string `protobuf:"bytes,2,opt,name=ops_rule_id,json=opsRuleId,proto3" json:"ops_rule_id"` + ClauseId string `protobuf:"bytes,3,opt,name=clause_id,json=clauseId,proto3" json:"clause_id"` + FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetOpsEvaluationUserCountRequest) Reset() { @@ -769,13 +769,6 @@ func (*GetOpsEvaluationUserCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{10} } -func (x *GetOpsEvaluationUserCountRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GetOpsEvaluationUserCountRequest) GetOpsRuleId() string { if x != nil { return x.OpsRuleId @@ -811,6 +804,13 @@ func (x *GetOpsEvaluationUserCountRequest) GetVariationId() string { return "" } +func (x *GetOpsEvaluationUserCountRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type GetOpsEvaluationUserCountResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -879,12 +879,12 @@ type GetOpsGoalUserCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OpsRuleId string `protobuf:"bytes,2,opt,name=ops_rule_id,json=opsRuleId,proto3" json:"ops_rule_id"` - ClauseId string `protobuf:"bytes,3,opt,name=clause_id,json=clauseId,proto3" json:"clause_id"` - FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + OpsRuleId string `protobuf:"bytes,2,opt,name=ops_rule_id,json=opsRuleId,proto3" json:"ops_rule_id"` + ClauseId string `protobuf:"bytes,3,opt,name=clause_id,json=clauseId,proto3" json:"clause_id"` + FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,5,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetOpsGoalUserCountRequest) Reset() { @@ -919,13 +919,6 @@ func (*GetOpsGoalUserCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{12} } -func (x *GetOpsGoalUserCountRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GetOpsGoalUserCountRequest) GetOpsRuleId() string { if x != nil { return x.OpsRuleId @@ -961,6 +954,13 @@ func (x *GetOpsGoalUserCountRequest) GetVariationId() string { return "" } +func (x *GetOpsGoalUserCountRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type GetOpsGoalUserCountResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1029,8 +1029,8 @@ type GetMAUCountRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - YearMonth string `protobuf:"bytes,2,opt,name=year_month,json=yearMonth,proto3" json:"year_month"` + YearMonth string `protobuf:"bytes,2,opt,name=year_month,json=yearMonth,proto3" json:"year_month"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetMAUCountRequest) Reset() { @@ -1065,16 +1065,16 @@ func (*GetMAUCountRequest) Descriptor() ([]byte, []int) { return file_proto_eventcounter_service_proto_rawDescGZIP(), []int{14} } -func (x *GetMAUCountRequest) GetEnvironmentNamespace() string { +func (x *GetMAUCountRequest) GetYearMonth() string { if x != nil { - return x.EnvironmentNamespace + return x.YearMonth } return "" } -func (x *GetMAUCountRequest) GetYearMonth() string { +func (x *GetMAUCountRequest) GetEnvironmentId() string { if x != nil { - return x.YearMonth + return x.EnvironmentId } return "" } @@ -1243,55 +1243,54 @@ var file_proto_eventcounter_service_proto_rawDesc = []byte{ 0x65, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf9, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf1, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, 0x15, 0x0a, - 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, - 0x6e, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xc4, 0x02, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, - 0x64, 0x12, 0x64, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x47, - 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x63, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x57, 0x45, 0x4e, 0x54, 0x59, 0x5f, 0x46, 0x4f, 0x55, 0x52, - 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x56, 0x45, - 0x4e, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4f, 0x55, 0x52, - 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, - 0x48, 0x49, 0x52, 0x54, 0x59, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x04, 0x22, 0xc4, 0x01, 0x0a, + 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xc1, 0x01, 0x0a, 0x24, 0x47, 0x65, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xbc, 0x02, + 0x0a, 0x23, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x22, 0x63, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x54, + 0x57, 0x45, 0x4e, 0x54, 0x59, 0x5f, 0x46, 0x4f, 0x55, 0x52, 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x53, + 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x56, 0x45, 0x4e, 0x5f, 0x44, 0x41, 0x59, 0x53, + 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4f, 0x55, 0x52, 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x44, + 0x41, 0x59, 0x53, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x48, 0x49, 0x52, 0x54, 0x59, 0x5f, + 0x44, 0x41, 0x59, 0x53, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xc4, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, @@ -1304,33 +1303,32 @@ var file_proto_eventcounter_service_proto_rawDesc = []byte{ 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x22, 0x76, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6e, 0x74, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x1b, 0x47, - 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x11, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x10, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, - 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xe3, 0x01, 0x0a, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x74, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x55, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xb0, 0x01, 0x0a, 0x1c, 0x4c, 0x69, + 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xe3, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, @@ -1345,86 +1343,84 @@ var file_proto_eventcounter_service_proto_rawDesc = []byte{ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x8c, 0x02, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x38, 0x01, 0x22, 0x84, 0x02, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x41, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x67, - 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, - 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x51, 0x0a, - 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x0f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x22, 0xff, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x61, 0x6c, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x6f, 0x70, - 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, - 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0x76, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, + 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x8c, 0x01, 0x0a, 0x1e, 0x47, 0x65, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, + 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, + 0x4f, 0x70, 0x73, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, + 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, + 0x0b, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x76, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf9, 0x01, 0x0a, 0x1a, 0x47, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xf1, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, 0x47, 0x6f, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, - 0x0a, 0x0b, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, - 0x47, 0x6f, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x52, - 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, - 0x41, 0x55, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x79, 0x65, 0x61, 0x72, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x65, 0x61, 0x72, 0x4d, 0x6f, 0x6e, - 0x74, 0x68, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x41, 0x55, 0x43, 0x6f, 0x75, 0x6e, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x6f, 0x70, 0x73, + 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, + 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x70, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x73, 0x47, 0x6f, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, + 0x0b, 0x6f, 0x70, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x60, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x41, 0x55, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x79, 0x65, 0x61, 0x72, 0x5f, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x65, 0x61, 0x72, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x41, 0x55, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, diff --git a/proto/eventcounter/service.proto b/proto/eventcounter/service.proto index 0b3f6ffd5f..d2166e13bb 100644 --- a/proto/eventcounter/service.proto +++ b/proto/eventcounter/service.proto @@ -24,12 +24,13 @@ import "proto/eventcounter/timeseries.proto"; import "proto/eventcounter/variation_count.proto"; message GetExperimentEvaluationCountRequest { - string environment_namespace = 1; + reserved 1; int64 start_at = 2; int64 end_at = 3; string feature_id = 4; int32 feature_version = 5; repeated string variation_ids = 6; + string environment_id = 7; } message GetExperimentEvaluationCountResponse { @@ -46,9 +47,10 @@ message GetEvaluationTimeseriesCountRequest { FOURTEEN_DAYS = 3; THIRTY_DAYS = 4; } - string environment_namespace = 1; + reserved 1; string feature_id = 2; TimeRange time_range = 3; + string environment_id = 4; } message GetEvaluationTimeseriesCountResponse { @@ -57,8 +59,9 @@ message GetEvaluationTimeseriesCountResponse { } message GetExperimentResultRequest { - string environment_namespace = 1; + reserved 1; string experiment_id = 2; + string environment_id = 3; } message GetExperimentResultResponse { @@ -68,7 +71,8 @@ message GetExperimentResultResponse { message ListExperimentResultsRequest { string feature_id = 1; google.protobuf.Int32Value feature_version = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message ListExperimentResultsResponse { @@ -76,13 +80,14 @@ message ListExperimentResultsResponse { } message GetExperimentGoalCountRequest { - string environment_namespace = 1; + reserved 1; int64 start_at = 2; int64 end_at = 3; string goal_id = 4; string feature_id = 5; int32 feature_version = 6; repeated string variation_ids = 7; + string environment_id = 8; } message GetExperimentGoalCountResponse { @@ -91,12 +96,13 @@ message GetExperimentGoalCountResponse { } message GetOpsEvaluationUserCountRequest { - string environment_namespace = 1; + reserved 1; string ops_rule_id = 2; string clause_id = 3; string feature_id = 4; int32 feature_version = 5; string variation_id = 6; + string environment_id = 7; } message GetOpsEvaluationUserCountResponse { @@ -106,12 +112,13 @@ message GetOpsEvaluationUserCountResponse { } message GetOpsGoalUserCountRequest { - string environment_namespace = 1; + reserved 1; string ops_rule_id = 2; string clause_id = 3; string feature_id = 4; int32 feature_version = 5; string variation_id = 6; + string environment_id = 7; } message GetOpsGoalUserCountResponse { @@ -121,8 +128,9 @@ message GetOpsGoalUserCountResponse { } message GetMAUCountRequest { - string environment_namespace = 1; + reserved 1; string year_month = 2; + string environment_id = 3; } message GetMAUCountResponse { diff --git a/proto/eventpersisterdwh/evaluation_event.pb.go b/proto/eventpersisterdwh/evaluation_event.pb.go index 12f6878876..11c6f272be 100644 --- a/proto/eventpersisterdwh/evaluation_event.pb.go +++ b/proto/eventpersisterdwh/evaluation_event.pb.go @@ -39,17 +39,17 @@ type EvaluationEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,3,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - UserData string `protobuf:"bytes,4,opt,name=user_data,json=userData,proto3" json:"user_data"` - UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` - VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` - Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason"` - Tag string `protobuf:"bytes,8,opt,name=tag,proto3" json:"tag"` - SourceId string `protobuf:"bytes,9,opt,name=source_id,json=sourceId,proto3" json:"source_id"` - EnvironmentNamespace string `protobuf:"bytes,10,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Timestamp int64 `protobuf:"varint,11,opt,name=timestamp,proto3" json:"timestamp"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,3,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + UserData string `protobuf:"bytes,4,opt,name=user_data,json=userData,proto3" json:"user_data"` + UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` + VariationId string `protobuf:"bytes,6,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + Reason string `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason"` + Tag string `protobuf:"bytes,8,opt,name=tag,proto3" json:"tag"` + SourceId string `protobuf:"bytes,9,opt,name=source_id,json=sourceId,proto3" json:"source_id"` + Timestamp int64 `protobuf:"varint,11,opt,name=timestamp,proto3" json:"timestamp"` + EnvironmentId string `protobuf:"bytes,12,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EvaluationEvent) Reset() { @@ -147,18 +147,18 @@ func (x *EvaluationEvent) GetSourceId() string { return "" } -func (x *EvaluationEvent) GetEnvironmentNamespace() string { +func (x *EvaluationEvent) GetTimestamp() int64 { if x != nil { - return x.EnvironmentNamespace + return x.Timestamp } - return "" + return 0 } -func (x *EvaluationEvent) GetTimestamp() int64 { +func (x *EvaluationEvent) GetEnvironmentId() string { if x != nil { - return x.Timestamp + return x.EnvironmentId } - return 0 + return "" } var File_proto_eventpersisterdwh_evaluation_event_proto protoreflect.FileDescriptor @@ -168,7 +168,7 @@ var file_proto_eventpersisterdwh_evaluation_event_proto_rawDesc = []byte{ 0x73, 0x69, 0x73, 0x74, 0x65, 0x72, 0x64, 0x77, 0x68, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x22, 0xdc, 0x02, 0x0a, 0x0f, 0x45, 0x76, 0x61, + 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x22, 0xd4, 0x02, 0x0a, 0x0f, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -185,16 +185,15 @@ var file_proto_eventpersisterdwh_evaluation_event_proto_rawDesc = []byte{ 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, - 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x42, + 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/eventpersisterdwh/evaluation_event.proto b/proto/eventpersisterdwh/evaluation_event.proto index 8096a8bee3..7788693300 100644 --- a/proto/eventpersisterdwh/evaluation_event.proto +++ b/proto/eventpersisterdwh/evaluation_event.proto @@ -27,6 +27,7 @@ message EvaluationEvent { string reason = 7; string tag = 8; string source_id = 9; - string environment_namespace = 10; + reserved 10; int64 timestamp = 11; + string environment_id = 12; } diff --git a/proto/eventpersisterdwh/goal_event.pb.go b/proto/eventpersisterdwh/goal_event.pb.go index ccb4c48236..53fa7c16d8 100644 --- a/proto/eventpersisterdwh/goal_event.pb.go +++ b/proto/eventpersisterdwh/goal_event.pb.go @@ -39,19 +39,19 @@ type GoalEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - GoalId string `protobuf:"bytes,2,opt,name=goal_id,json=goalId,proto3" json:"goal_id"` - Value float32 `protobuf:"fixed32,3,opt,name=value,proto3" json:"value"` - UserData string `protobuf:"bytes,4,opt,name=user_data,json=userData,proto3" json:"user_data"` - UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` - Tag string `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag"` - SourceId string `protobuf:"bytes,7,opt,name=source_id,json=sourceId,proto3" json:"source_id"` - EnvironmentNamespace string `protobuf:"bytes,8,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Timestamp int64 `protobuf:"varint,9,opt,name=timestamp,proto3" json:"timestamp"` - FeatureId string `protobuf:"bytes,10,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion int32 `protobuf:"varint,11,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - VariationId string `protobuf:"bytes,12,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` - Reason string `protobuf:"bytes,13,opt,name=reason,proto3" json:"reason"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + GoalId string `protobuf:"bytes,2,opt,name=goal_id,json=goalId,proto3" json:"goal_id"` + Value float32 `protobuf:"fixed32,3,opt,name=value,proto3" json:"value"` + UserData string `protobuf:"bytes,4,opt,name=user_data,json=userData,proto3" json:"user_data"` + UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` + Tag string `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag"` + SourceId string `protobuf:"bytes,7,opt,name=source_id,json=sourceId,proto3" json:"source_id"` + Timestamp int64 `protobuf:"varint,9,opt,name=timestamp,proto3" json:"timestamp"` + FeatureId string `protobuf:"bytes,10,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion int32 `protobuf:"varint,11,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + VariationId string `protobuf:"bytes,12,opt,name=variation_id,json=variationId,proto3" json:"variation_id"` + Reason string `protobuf:"bytes,13,opt,name=reason,proto3" json:"reason"` + EnvironmentId string `protobuf:"bytes,14,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GoalEvent) Reset() { @@ -135,13 +135,6 @@ func (x *GoalEvent) GetSourceId() string { return "" } -func (x *GoalEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *GoalEvent) GetTimestamp() int64 { if x != nil { return x.Timestamp @@ -177,6 +170,13 @@ func (x *GoalEvent) GetReason() string { return "" } +func (x *GoalEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + var File_proto_eventpersisterdwh_goal_event_proto protoreflect.FileDescriptor var file_proto_eventpersisterdwh_goal_event_proto_rawDesc = []byte{ @@ -184,7 +184,7 @@ var file_proto_eventpersisterdwh_goal_event_proto_rawDesc = []byte{ 0x73, 0x69, 0x73, 0x74, 0x65, 0x72, 0x64, 0x77, 0x68, 0x2f, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x22, 0x85, 0x03, 0x0a, 0x09, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0xfd, 0x02, 0x0a, 0x09, 0x47, 0x6f, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x6f, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x6f, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, @@ -195,24 +195,24 @@ var file_proto_eventpersisterdwh_goal_event_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x08, + 0x10, 0x09, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/proto/eventpersisterdwh/goal_event.proto b/proto/eventpersisterdwh/goal_event.proto index a41802e75a..08f9abee2b 100644 --- a/proto/eventpersisterdwh/goal_event.proto +++ b/proto/eventpersisterdwh/goal_event.proto @@ -25,10 +25,11 @@ message GoalEvent { string user_id = 5; string tag = 6; string source_id = 7; - string environment_namespace = 8; + reserved 8; int64 timestamp = 9; string feature_id = 10; int32 feature_version = 11; string variation_id = 12; string reason = 13; + string environment_id = 14; } diff --git a/proto/experiment/proto_descriptor.pb b/proto/experiment/proto_descriptor.pb index d685506c61..6e9a2c0980 100644 Binary files a/proto/experiment/proto_descriptor.pb and b/proto/experiment/proto_descriptor.pb differ diff --git a/proto/experiment/service.pb.go b/proto/experiment/service.pb.go index 52d4940e90..e85ebbdf35 100644 --- a/proto/experiment/service.pb.go +++ b/proto/experiment/service.pb.go @@ -240,8 +240,8 @@ type GetGoalRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetGoalRequest) Reset() { @@ -283,9 +283,9 @@ func (x *GetGoalRequest) GetId() string { return "" } -func (x *GetGoalRequest) GetEnvironmentNamespace() string { +func (x *GetGoalRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -342,14 +342,14 @@ type ListGoalsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OrderBy ListGoalsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.experiment.ListGoalsRequest_OrderBy" json:"order_by"` - OrderDirection ListGoalsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.experiment.ListGoalsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - IsInUseStatus *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=is_in_use_status,json=isInUseStatus,proto3" json:"is_in_use_status"` - Archived *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=archived,proto3" json:"archived"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListGoalsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.experiment.ListGoalsRequest_OrderBy" json:"order_by"` + OrderDirection ListGoalsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.experiment.ListGoalsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + IsInUseStatus *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=is_in_use_status,json=isInUseStatus,proto3" json:"is_in_use_status"` + Archived *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=archived,proto3" json:"archived"` + EnvironmentId string `protobuf:"bytes,9,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListGoalsRequest) Reset() { @@ -398,13 +398,6 @@ func (x *ListGoalsRequest) GetCursor() string { return "" } -func (x *ListGoalsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListGoalsRequest) GetOrderBy() ListGoalsRequest_OrderBy { if x != nil { return x.OrderBy @@ -440,6 +433,13 @@ func (x *ListGoalsRequest) GetArchived() *wrapperspb.BoolValue { return nil } +func (x *ListGoalsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListGoalsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -508,8 +508,8 @@ type CreateGoalRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Command *CreateGoalCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Command *CreateGoalCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateGoalRequest) Reset() { @@ -551,9 +551,9 @@ func (x *CreateGoalRequest) GetCommand() *CreateGoalCommand { return nil } -func (x *CreateGoalRequest) GetEnvironmentNamespace() string { +func (x *CreateGoalRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -601,9 +601,9 @@ type ArchiveGoalRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *ArchiveGoalCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *ArchiveGoalCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ArchiveGoalRequest) Reset() { @@ -652,9 +652,9 @@ func (x *ArchiveGoalRequest) GetCommand() *ArchiveGoalCommand { return nil } -func (x *ArchiveGoalRequest) GetEnvironmentNamespace() string { +func (x *ArchiveGoalRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -702,9 +702,9 @@ type DeleteGoalRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DeleteGoalCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DeleteGoalCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteGoalRequest) Reset() { @@ -753,9 +753,9 @@ func (x *DeleteGoalRequest) GetCommand() *DeleteGoalCommand { return nil } -func (x *DeleteGoalRequest) GetEnvironmentNamespace() string { +func (x *DeleteGoalRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -806,7 +806,7 @@ type UpdateGoalRequest struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` RenameCommand *RenameGoalCommand `protobuf:"bytes,2,opt,name=rename_command,json=renameCommand,proto3" json:"rename_command"` ChangeDescriptionCommand *ChangeDescriptionGoalCommand `protobuf:"bytes,3,opt,name=change_description_command,json=changeDescriptionCommand,proto3" json:"change_description_command"` - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateGoalRequest) Reset() { @@ -862,9 +862,9 @@ func (x *UpdateGoalRequest) GetChangeDescriptionCommand() *ChangeDescriptionGoal return nil } -func (x *UpdateGoalRequest) GetEnvironmentNamespace() string { +func (x *UpdateGoalRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -912,8 +912,8 @@ type GetExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetExperimentRequest) Reset() { @@ -955,9 +955,9 @@ func (x *GetExperimentRequest) GetId() string { return "" } -func (x *GetExperimentRequest) GetEnvironmentNamespace() string { +func (x *GetExperimentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1014,20 +1014,20 @@ type ListExperimentsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - FeatureVersion *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` - From int64 `protobuf:"varint,3,opt,name=from,proto3" json:"from"` - To int64 `protobuf:"varint,4,opt,name=to,proto3" json:"to"` - PageSize int64 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,6,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,7,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Status *wrapperspb.Int32Value `protobuf:"bytes,8,opt,name=status,proto3" json:"status"` // [deprecated = true]; - Maintainer string `protobuf:"bytes,9,opt,name=maintainer,proto3" json:"maintainer"` - OrderBy ListExperimentsRequest_OrderBy `protobuf:"varint,10,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.experiment.ListExperimentsRequest_OrderBy" json:"order_by"` - OrderDirection ListExperimentsRequest_OrderDirection `protobuf:"varint,11,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.experiment.ListExperimentsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,12,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - Archived *wrapperspb.BoolValue `protobuf:"bytes,13,opt,name=archived,proto3" json:"archived"` - Statuses []Experiment_Status `protobuf:"varint,14,rep,packed,name=statuses,proto3,enum=bucketeer.experiment.Experiment_Status" json:"statuses"` + FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + FeatureVersion *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=feature_version,json=featureVersion,proto3" json:"feature_version"` + From int64 `protobuf:"varint,3,opt,name=from,proto3" json:"from"` + To int64 `protobuf:"varint,4,opt,name=to,proto3" json:"to"` + PageSize int64 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,6,opt,name=cursor,proto3" json:"cursor"` + Status *wrapperspb.Int32Value `protobuf:"bytes,8,opt,name=status,proto3" json:"status"` // [deprecated = true]; + Maintainer string `protobuf:"bytes,9,opt,name=maintainer,proto3" json:"maintainer"` + OrderBy ListExperimentsRequest_OrderBy `protobuf:"varint,10,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.experiment.ListExperimentsRequest_OrderBy" json:"order_by"` + OrderDirection ListExperimentsRequest_OrderDirection `protobuf:"varint,11,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.experiment.ListExperimentsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,12,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + Archived *wrapperspb.BoolValue `protobuf:"bytes,13,opt,name=archived,proto3" json:"archived"` + Statuses []Experiment_Status `protobuf:"varint,14,rep,packed,name=statuses,proto3,enum=bucketeer.experiment.Experiment_Status" json:"statuses"` + EnvironmentId string `protobuf:"bytes,15,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListExperimentsRequest) Reset() { @@ -1104,13 +1104,6 @@ func (x *ListExperimentsRequest) GetCursor() string { return "" } -func (x *ListExperimentsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListExperimentsRequest) GetStatus() *wrapperspb.Int32Value { if x != nil { return x.Status @@ -1160,6 +1153,13 @@ func (x *ListExperimentsRequest) GetStatuses() []Experiment_Status { return nil } +func (x *ListExperimentsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListExperimentsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1228,8 +1228,8 @@ type CreateExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Command *CreateExperimentCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Command *CreateExperimentCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateExperimentRequest) Reset() { @@ -1271,9 +1271,9 @@ func (x *CreateExperimentRequest) GetCommand() *CreateExperimentCommand { return nil } -func (x *CreateExperimentRequest) GetEnvironmentNamespace() string { +func (x *CreateExperimentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1330,12 +1330,11 @@ type UpdateExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - // [deprecated = true]; - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` ChangeExperimentPeriodCommand *ChangeExperimentPeriodCommand `protobuf:"bytes,5,opt,name=change_experiment_period_command,json=changeExperimentPeriodCommand,proto3" json:"change_experiment_period_command"` ChangeNameCommand *ChangeExperimentNameCommand `protobuf:"bytes,6,opt,name=change_name_command,json=changeNameCommand,proto3" json:"change_name_command"` ChangeDescriptionCommand *ChangeExperimentDescriptionCommand `protobuf:"bytes,7,opt,name=change_description_command,json=changeDescriptionCommand,proto3" json:"change_description_command"` + EnvironmentId string `protobuf:"bytes,8,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateExperimentRequest) Reset() { @@ -1377,13 +1376,6 @@ func (x *UpdateExperimentRequest) GetId() string { return "" } -func (x *UpdateExperimentRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UpdateExperimentRequest) GetChangeExperimentPeriodCommand() *ChangeExperimentPeriodCommand { if x != nil { return x.ChangeExperimentPeriodCommand @@ -1405,6 +1397,13 @@ func (x *UpdateExperimentRequest) GetChangeDescriptionCommand() *ChangeExperimen return nil } +func (x *UpdateExperimentRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type UpdateExperimentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1448,9 +1447,9 @@ type StartExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *StartExperimentCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *StartExperimentCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *StartExperimentRequest) Reset() { @@ -1485,13 +1484,6 @@ func (*StartExperimentRequest) Descriptor() ([]byte, []int) { return file_proto_experiment_service_proto_rawDescGZIP(), []int{20} } -func (x *StartExperimentRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *StartExperimentRequest) GetId() string { if x != nil { return x.Id @@ -1506,6 +1498,13 @@ func (x *StartExperimentRequest) GetCommand() *StartExperimentCommand { return nil } +func (x *StartExperimentRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type StartExperimentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1549,9 +1548,9 @@ type FinishExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *FinishExperimentCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *FinishExperimentCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FinishExperimentRequest) Reset() { @@ -1586,13 +1585,6 @@ func (*FinishExperimentRequest) Descriptor() ([]byte, []int) { return file_proto_experiment_service_proto_rawDescGZIP(), []int{22} } -func (x *FinishExperimentRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *FinishExperimentRequest) GetId() string { if x != nil { return x.Id @@ -1607,6 +1599,13 @@ func (x *FinishExperimentRequest) GetCommand() *FinishExperimentCommand { return nil } +func (x *FinishExperimentRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type FinishExperimentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1650,9 +1649,9 @@ type StopExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *StopExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *StopExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *StopExperimentRequest) Reset() { @@ -1701,9 +1700,9 @@ func (x *StopExperimentRequest) GetCommand() *StopExperimentCommand { return nil } -func (x *StopExperimentRequest) GetEnvironmentNamespace() string { +func (x *StopExperimentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1751,9 +1750,9 @@ type ArchiveExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *ArchiveExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *ArchiveExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ArchiveExperimentRequest) Reset() { @@ -1802,9 +1801,9 @@ func (x *ArchiveExperimentRequest) GetCommand() *ArchiveExperimentCommand { return nil } -func (x *ArchiveExperimentRequest) GetEnvironmentNamespace() string { +func (x *ArchiveExperimentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1852,9 +1851,9 @@ type DeleteExperimentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DeleteExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DeleteExperimentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteExperimentRequest) Reset() { @@ -1903,9 +1902,9 @@ func (x *DeleteExperimentRequest) GetCommand() *DeleteExperimentCommand { return nil } -func (x *DeleteExperimentRequest) GetEnvironmentNamespace() string { +func (x *DeleteExperimentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1962,52 +1961,51 @@ var file_proto_experiment_service_proto_rawDesc = []byte{ 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x41, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2e, 0x0a, 0x04, 0x67, 0x6f, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x04, 0x67, 0x6f, 0x61, 0x6c, - 0x22, 0xb2, 0x04, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x49, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, - 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, - 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x43, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x41, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x67, 0x6f, 0x61, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, + 0x61, 0x6c, 0x52, 0x04, 0x67, 0x6f, 0x61, 0x6c, 0x22, 0xaa, 0x04, 0x0a, 0x10, 0x4c, 0x69, 0x73, + 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x12, 0x49, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x5e, 0x0a, + 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x43, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x75, 0x73, + 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x73, 0x49, 0x6e, + 0x55, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x73, 0x49, 0x6e, 0x55, 0x73, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x22, 0x40, - 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, - 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, - 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, - 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, - 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x7e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, + 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x7e, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, @@ -2015,121 +2013,118 @@ var file_proto_experiment_service_proto_rawDesc = []byte{ 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x83, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x12, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x72, 0x63, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x14, 0x0a, 0x12, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x95, 0x01, 0x0a, 0x12, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x9b, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, + 0x22, 0x93, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x72, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0d, 0x72, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x70, 0x0a, 0x1a, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x18, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x45, 0x78, + 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x02, 0x0a, + 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x70, 0x0a, 0x1a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x6f, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, + 0x05, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0xa2, 0x06, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x74, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x59, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x9a, 0x06, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x42, 0x79, 0x12, 0x64, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0x40, 0x0a, - 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, - 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, - 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, - 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, - 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, - 0x53, 0x43, 0x10, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, + 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x64, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x3b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x08, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, + 0x08, 0x07, 0x10, 0x08, 0x22, 0x96, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, @@ -2138,221 +2133,217 @@ var file_proto_experiment_service_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x97, 0x01, + 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xc3, 0x03, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x7c, 0x0a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x1d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x61, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x1a, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1a, 0x0a, 0x18, 0x55, + 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, + 0x5c, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xbb, 0x03, + 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x7c, 0x0a, 0x20, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x1d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x61, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x1a, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x1a, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, - 0x19, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x17, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x46, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x22, 0x1a, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xa3, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1b, 0x0a, 0x19, + 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x18, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x18, 0x41, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x17, 0x44, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, - 0xe7, 0x0c, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, - 0x12, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, - 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x5e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x12, 0x26, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1a, 0x0a, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe7, 0x0c, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x6f, 0x61, 0x6c, 0x73, 0x12, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x61, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x27, 0x2e, + 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0a, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, + 0x0b, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x28, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, + 0x6c, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, + 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, - 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, + 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x73, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, + 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x11, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0b, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, - 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x47, 0x6f, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x47, 0x6f, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, - 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x73, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, - 0x0e, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x11, - 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/experiment/service.proto b/proto/experiment/service.proto index 8a72a0063c..f0f4dfcffb 100644 --- a/proto/experiment/service.proto +++ b/proto/experiment/service.proto @@ -25,7 +25,8 @@ import "proto/experiment/experiment.proto"; message GetGoalRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetGoalResponse { @@ -45,12 +46,13 @@ message ListGoalsRequest { } int64 page_size = 1; string cursor = 2; - string environment_namespace = 3; + reserved 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; google.protobuf.BoolValue is_in_use_status = 7; google.protobuf.BoolValue archived = 8; + string environment_id = 9; } message ListGoalsResponse { @@ -61,7 +63,8 @@ message ListGoalsResponse { message CreateGoalRequest { CreateGoalCommand command = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message CreateGoalResponse {} @@ -69,7 +72,8 @@ message CreateGoalResponse {} message ArchiveGoalRequest { string id = 1; ArchiveGoalCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message ArchiveGoalResponse {} @@ -77,7 +81,8 @@ message ArchiveGoalResponse {} message DeleteGoalRequest { string id = 1; DeleteGoalCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message DeleteGoalResponse {} @@ -86,14 +91,16 @@ message UpdateGoalRequest { string id = 1; RenameGoalCommand rename_command = 2; ChangeDescriptionGoalCommand change_description_command = 3; - string environment_namespace = 4; + reserved 4; + string environment_id = 5; } message UpdateGoalResponse {} message GetExperimentRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetExperimentResponse { @@ -117,7 +124,7 @@ message ListExperimentsRequest { int64 to = 4; int64 page_size = 5; string cursor = 6; - string environment_namespace = 7; + reserved 7; google.protobuf.Int32Value status = 8; // [deprecated = true]; string maintainer = 9; OrderBy order_by = 10; @@ -125,6 +132,7 @@ message ListExperimentsRequest { string search_keyword = 12; google.protobuf.BoolValue archived = 13; repeated Experiment.Status statuses = 14; + string environment_id = 15; } message ListExperimentsResponse { @@ -135,7 +143,8 @@ message ListExperimentsResponse { message CreateExperimentRequest { CreateExperimentCommand command = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message CreateExperimentResponse { @@ -148,26 +157,29 @@ message UpdateExperimentRequest { // [deprecated = true]; reserved 3; // ChangeStopAtExperimentCommand change_stop_at_command = 3 // [deprecated = true]; - string environment_namespace = 4; + reserved 4; ChangeExperimentPeriodCommand change_experiment_period_command = 5; ChangeExperimentNameCommand change_name_command = 6; ChangeExperimentDescriptionCommand change_description_command = 7; + string environment_id = 8; } message UpdateExperimentResponse {} message StartExperimentRequest { - string environment_namespace = 1; + reserved 1; string id = 2; StartExperimentCommand command = 3; + string environment_id = 4; } message StartExperimentResponse {} message FinishExperimentRequest { - string environment_namespace = 1; + reserved 1; string id = 2; FinishExperimentCommand command = 3; + string environment_id = 4; } message FinishExperimentResponse {} @@ -175,7 +187,8 @@ message FinishExperimentResponse {} message StopExperimentRequest { string id = 1; StopExperimentCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message StopExperimentResponse {} @@ -183,7 +196,8 @@ message StopExperimentResponse {} message ArchiveExperimentRequest { string id = 1; ArchiveExperimentCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message ArchiveExperimentResponse {} @@ -191,7 +205,8 @@ message ArchiveExperimentResponse {} message DeleteExperimentRequest { string id = 1; DeleteExperimentCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message DeleteExperimentResponse {} diff --git a/proto/feature/command.pb.go b/proto/feature/command.pb.go index c72d0c6322..30a760efd4 100644 --- a/proto/feature/command.pb.go +++ b/proto/feature/command.pb.go @@ -2193,7 +2193,7 @@ type CloneFeatureCommand struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + EnvironmentId string `protobuf:"bytes,2,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CloneFeatureCommand) Reset() { @@ -2228,9 +2228,9 @@ func (*CloneFeatureCommand) Descriptor() ([]byte, []int) { return file_proto_feature_command_proto_rawDescGZIP(), []int{41} } -func (x *CloneFeatureCommand) GetEnvironmentNamespace() string { +func (x *CloneFeatureCommand) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2956,60 +2956,59 @@ var file_proto_feature_command_proto_rawDesc = []byte{ 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, - 0x4a, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x52, - 0x65, 0x73, 0x65, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x5d, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x72, - 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0x3a, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x49, 0x64, 0x22, 0x69, 0x0a, 0x22, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x65, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, - 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0xd3, 0x01, - 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x47, - 0x0a, 0x23, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1a, 0x0a, 0x18, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1f, 0x0a, 0x1d, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x55, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x31, 0x5a, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, + 0x5d, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, + 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, + 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0x3a, + 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x73, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x22, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x73, 0x69, 0x74, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, + 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, + 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x19, 0x0a, 0x17, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x47, 0x0a, 0x23, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x1a, 0x0a, 0x18, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, + 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x55, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/feature/command.proto b/proto/feature/command.proto index d218fafa11..cb4b9cd53e 100644 --- a/proto/feature/command.proto +++ b/proto/feature/command.proto @@ -216,7 +216,8 @@ message BulkUploadSegmentUsersCommand { message IncrementFeatureVersionCommand {} message CloneFeatureCommand { - string environment_namespace = 1; + reserved 1; + string environment_id = 2; } message ResetSamplingSeedCommand {} diff --git a/proto/feature/flag_trigger.pb.go b/proto/feature/flag_trigger.pb.go index fd58ac8054..aed8bfc6e3 100644 --- a/proto/feature/flag_trigger.pb.go +++ b/proto/feature/flag_trigger.pb.go @@ -134,18 +134,18 @@ type FlagTrigger struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Type FlagTrigger_Type `protobuf:"varint,4,opt,name=type,proto3,enum=bucketeer.feature.FlagTrigger_Type" json:"type"` - Action FlagTrigger_Action `protobuf:"varint,5,opt,name=action,proto3,enum=bucketeer.feature.FlagTrigger_Action" json:"action"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description"` - TriggerCount int32 `protobuf:"varint,7,opt,name=trigger_count,json=triggerCount,proto3" json:"trigger_count"` - LastTriggeredAt int64 `protobuf:"varint,8,opt,name=last_triggered_at,json=lastTriggeredAt,proto3" json:"last_triggered_at"` - Token string `protobuf:"bytes,9,opt,name=token,proto3" json:"token"` - Disabled bool `protobuf:"varint,10,opt,name=disabled,proto3" json:"disabled"` - CreatedAt int64 `protobuf:"varint,11,opt,name=created_at,json=createdAt,proto3" json:"created_at"` - UpdatedAt int64 `protobuf:"varint,12,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + FeatureId string `protobuf:"bytes,2,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + Type FlagTrigger_Type `protobuf:"varint,4,opt,name=type,proto3,enum=bucketeer.feature.FlagTrigger_Type" json:"type"` + Action FlagTrigger_Action `protobuf:"varint,5,opt,name=action,proto3,enum=bucketeer.feature.FlagTrigger_Action" json:"action"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description"` + TriggerCount int32 `protobuf:"varint,7,opt,name=trigger_count,json=triggerCount,proto3" json:"trigger_count"` + LastTriggeredAt int64 `protobuf:"varint,8,opt,name=last_triggered_at,json=lastTriggeredAt,proto3" json:"last_triggered_at"` + Token string `protobuf:"bytes,9,opt,name=token,proto3" json:"token"` + Disabled bool `protobuf:"varint,10,opt,name=disabled,proto3" json:"disabled"` + CreatedAt int64 `protobuf:"varint,11,opt,name=created_at,json=createdAt,proto3" json:"created_at"` + UpdatedAt int64 `protobuf:"varint,12,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at"` + EnvironmentId string `protobuf:"bytes,13,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *FlagTrigger) Reset() { @@ -194,13 +194,6 @@ func (x *FlagTrigger) GetFeatureId() string { return "" } -func (x *FlagTrigger) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *FlagTrigger) GetType() FlagTrigger_Type { if x != nil { return x.Type @@ -264,52 +257,58 @@ func (x *FlagTrigger) GetUpdatedAt() int64 { return 0 } +func (x *FlagTrigger) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + var File_proto_feature_flag_trigger_proto protoreflect.FileDescriptor var file_proto_feature_flag_trigger_proto_rawDesc = []byte{ 0x0a, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb5, 0x04, 0x0a, 0x0b, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xad, 0x04, 0x0a, 0x0b, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x2a, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, - 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, - 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x10, 0x01, - 0x22, 0x3b, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, - 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x02, 0x42, 0x31, 0x5a, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, + 0x0a, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, + 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, + 0x10, 0x01, 0x22, 0x3b, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x4f, 0x4e, 0x10, 0x01, 0x12, + 0x0e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x02, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/feature/flag_trigger.proto b/proto/feature/flag_trigger.proto index cef76d88ce..377cdf5193 100644 --- a/proto/feature/flag_trigger.proto +++ b/proto/feature/flag_trigger.proto @@ -29,7 +29,7 @@ message FlagTrigger { } string id = 1; string feature_id = 2; - string environment_namespace = 3; + reserved 3; Type type = 4; Action action = 5; string description = 6; @@ -39,4 +39,5 @@ message FlagTrigger { bool disabled = 10; int64 created_at = 11; int64 updated_at = 12; + string environment_id = 13; } \ No newline at end of file diff --git a/proto/feature/proto_descriptor.pb b/proto/feature/proto_descriptor.pb index 44d15f87fe..8cf0b489e3 100644 Binary files a/proto/feature/proto_descriptor.pb and b/proto/feature/proto_descriptor.pb differ diff --git a/proto/feature/service.pb.go b/proto/feature/service.pb.go index a9388b5472..d1bc44154f 100644 --- a/proto/feature/service.pb.go +++ b/proto/feature/service.pb.go @@ -490,8 +490,8 @@ type GetFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetFeatureRequest) Reset() { @@ -533,9 +533,9 @@ func (x *GetFeatureRequest) GetId() string { return "" } -func (x *GetFeatureRequest) GetEnvironmentNamespace() string { +func (x *GetFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -592,8 +592,8 @@ type GetFeaturesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Ids []string `protobuf:"bytes,2,rep,name=ids,proto3" json:"ids"` + Ids []string `protobuf:"bytes,2,rep,name=ids,proto3" json:"ids"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetFeaturesRequest) Reset() { @@ -628,18 +628,18 @@ func (*GetFeaturesRequest) Descriptor() ([]byte, []int) { return file_proto_feature_service_proto_rawDescGZIP(), []int{2} } -func (x *GetFeaturesRequest) GetEnvironmentNamespace() string { +func (x *GetFeaturesRequest) GetIds() []string { if x != nil { - return x.EnvironmentNamespace + return x.Ids } - return "" + return nil } -func (x *GetFeaturesRequest) GetIds() []string { +func (x *GetFeaturesRequest) GetEnvironmentId() string { if x != nil { - return x.Ids + return x.EnvironmentId } - return nil + return "" } type GetFeaturesResponse struct { @@ -694,18 +694,18 @@ type ListFeaturesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags"` - OrderBy ListFeaturesRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListFeaturesRequest_OrderBy" json:"order_by"` - OrderDirection ListFeaturesRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListFeaturesRequest_OrderDirection" json:"order_direction"` - EnvironmentNamespace string `protobuf:"bytes,6,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Maintainer string `protobuf:"bytes,7,opt,name=maintainer,proto3" json:"maintainer"` - Enabled *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=enabled,proto3" json:"enabled"` - HasExperiment *wrapperspb.BoolValue `protobuf:"bytes,9,opt,name=has_experiment,json=hasExperiment,proto3" json:"has_experiment"` - SearchKeyword string `protobuf:"bytes,10,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - Archived *wrapperspb.BoolValue `protobuf:"bytes,11,opt,name=archived,proto3" json:"archived"` - HasPrerequisites *wrapperspb.BoolValue `protobuf:"bytes,12,opt,name=has_prerequisites,json=hasPrerequisites,proto3" json:"has_prerequisites"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags"` + OrderBy ListFeaturesRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListFeaturesRequest_OrderBy" json:"order_by"` + OrderDirection ListFeaturesRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListFeaturesRequest_OrderDirection" json:"order_direction"` + Maintainer string `protobuf:"bytes,7,opt,name=maintainer,proto3" json:"maintainer"` + Enabled *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=enabled,proto3" json:"enabled"` + HasExperiment *wrapperspb.BoolValue `protobuf:"bytes,9,opt,name=has_experiment,json=hasExperiment,proto3" json:"has_experiment"` + SearchKeyword string `protobuf:"bytes,10,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + Archived *wrapperspb.BoolValue `protobuf:"bytes,11,opt,name=archived,proto3" json:"archived"` + HasPrerequisites *wrapperspb.BoolValue `protobuf:"bytes,12,opt,name=has_prerequisites,json=hasPrerequisites,proto3" json:"has_prerequisites"` + EnvironmentId string `protobuf:"bytes,13,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListFeaturesRequest) Reset() { @@ -775,13 +775,6 @@ func (x *ListFeaturesRequest) GetOrderDirection() ListFeaturesRequest_OrderDirec return ListFeaturesRequest_ASC } -func (x *ListFeaturesRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListFeaturesRequest) GetMaintainer() string { if x != nil { return x.Maintainer @@ -824,6 +817,13 @@ func (x *ListFeaturesRequest) GetHasPrerequisites() *wrapperspb.BoolValue { return nil } +func (x *ListFeaturesRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListFeaturesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -892,10 +892,10 @@ type ListEnabledFeaturesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags"` - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListEnabledFeaturesRequest) Reset() { @@ -951,9 +951,9 @@ func (x *ListEnabledFeaturesRequest) GetTags() []string { return nil } -func (x *ListEnabledFeaturesRequest) GetEnvironmentNamespace() string { +func (x *ListEnabledFeaturesRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1018,8 +1018,8 @@ type CreateFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Command *CreateFeatureCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Command *CreateFeatureCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateFeatureRequest) Reset() { @@ -1061,9 +1061,9 @@ func (x *CreateFeatureRequest) GetCommand() *CreateFeatureCommand { return nil } -func (x *CreateFeatureRequest) GetEnvironmentNamespace() string { +func (x *CreateFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -1318,10 +1318,10 @@ type EnableFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *EnableFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *EnableFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EnableFeatureRequest) Reset() { @@ -1370,16 +1370,16 @@ func (x *EnableFeatureRequest) GetCommand() *EnableFeatureCommand { return nil } -func (x *EnableFeatureRequest) GetEnvironmentNamespace() string { +func (x *EnableFeatureRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *EnableFeatureRequest) GetComment() string { +func (x *EnableFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1427,10 +1427,10 @@ type DisableFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DisableFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DisableFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DisableFeatureRequest) Reset() { @@ -1479,16 +1479,16 @@ func (x *DisableFeatureRequest) GetCommand() *DisableFeatureCommand { return nil } -func (x *DisableFeatureRequest) GetEnvironmentNamespace() string { +func (x *DisableFeatureRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *DisableFeatureRequest) GetComment() string { +func (x *DisableFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1536,10 +1536,10 @@ type ArchiveFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *ArchiveFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *ArchiveFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ArchiveFeatureRequest) Reset() { @@ -1588,16 +1588,16 @@ func (x *ArchiveFeatureRequest) GetCommand() *ArchiveFeatureCommand { return nil } -func (x *ArchiveFeatureRequest) GetEnvironmentNamespace() string { +func (x *ArchiveFeatureRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *ArchiveFeatureRequest) GetComment() string { +func (x *ArchiveFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1645,10 +1645,10 @@ type UnarchiveFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *UnarchiveFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *UnarchiveFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UnarchiveFeatureRequest) Reset() { @@ -1697,16 +1697,16 @@ func (x *UnarchiveFeatureRequest) GetCommand() *UnarchiveFeatureCommand { return nil } -func (x *UnarchiveFeatureRequest) GetEnvironmentNamespace() string { +func (x *UnarchiveFeatureRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *UnarchiveFeatureRequest) GetComment() string { +func (x *UnarchiveFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1754,10 +1754,10 @@ type DeleteFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DeleteFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DeleteFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteFeatureRequest) Reset() { @@ -1806,16 +1806,16 @@ func (x *DeleteFeatureRequest) GetCommand() *DeleteFeatureCommand { return nil } -func (x *DeleteFeatureRequest) GetEnvironmentNamespace() string { +func (x *DeleteFeatureRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *DeleteFeatureRequest) GetComment() string { +func (x *DeleteFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1868,8 +1868,8 @@ type UpdateFeatureDetailsRequest struct { ChangeDescriptionCommand *ChangeDescriptionCommand `protobuf:"bytes,3,opt,name=change_description_command,json=changeDescriptionCommand,proto3" json:"change_description_command"` AddTagCommands []*AddTagCommand `protobuf:"bytes,4,rep,name=add_tag_commands,json=addTagCommands,proto3" json:"add_tag_commands"` RemoveTagCommands []*RemoveTagCommand `protobuf:"bytes,5,rep,name=remove_tag_commands,json=removeTagCommands,proto3" json:"remove_tag_commands"` - EnvironmentNamespace string `protobuf:"bytes,6,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` Comment string `protobuf:"bytes,7,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,8,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateFeatureDetailsRequest) Reset() { @@ -1939,16 +1939,16 @@ func (x *UpdateFeatureDetailsRequest) GetRemoveTagCommands() []*RemoveTagCommand return nil } -func (x *UpdateFeatureDetailsRequest) GetEnvironmentNamespace() string { +func (x *UpdateFeatureDetailsRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *UpdateFeatureDetailsRequest) GetComment() string { +func (x *UpdateFeatureDetailsRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -1996,10 +1996,10 @@ type UpdateFeatureVariationsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateFeatureVariationsRequest) Reset() { @@ -2048,16 +2048,16 @@ func (x *UpdateFeatureVariationsRequest) GetCommands() []*Command { return nil } -func (x *UpdateFeatureVariationsRequest) GetEnvironmentNamespace() string { +func (x *UpdateFeatureVariationsRequest) GetComment() string { if x != nil { - return x.EnvironmentNamespace + return x.Comment } return "" } -func (x *UpdateFeatureVariationsRequest) GetComment() string { +func (x *UpdateFeatureVariationsRequest) GetEnvironmentId() string { if x != nil { - return x.Comment + return x.EnvironmentId } return "" } @@ -2105,11 +2105,11 @@ type UpdateFeatureTargetingRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` - From UpdateFeatureTargetingRequest_From `protobuf:"varint,5,opt,name=from,proto3,enum=bucketeer.feature.UpdateFeatureTargetingRequest_From" json:"from"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` + Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment"` + From UpdateFeatureTargetingRequest_From `protobuf:"varint,5,opt,name=from,proto3,enum=bucketeer.feature.UpdateFeatureTargetingRequest_From" json:"from"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateFeatureTargetingRequest) Reset() { @@ -2158,13 +2158,6 @@ func (x *UpdateFeatureTargetingRequest) GetCommands() []*Command { return nil } -func (x *UpdateFeatureTargetingRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UpdateFeatureTargetingRequest) GetComment() string { if x != nil { return x.Comment @@ -2179,6 +2172,13 @@ func (x *UpdateFeatureTargetingRequest) GetFrom() UpdateFeatureTargetingRequest_ return UpdateFeatureTargetingRequest_UNKNOWN } +func (x *UpdateFeatureTargetingRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type UpdateFeatureTargetingResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2222,9 +2222,9 @@ type CloneFeatureRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *CloneFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *CloneFeatureCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CloneFeatureRequest) Reset() { @@ -2273,9 +2273,9 @@ func (x *CloneFeatureRequest) GetCommand() *CloneFeatureCommand { return nil } -func (x *CloneFeatureRequest) GetEnvironmentNamespace() string { +func (x *CloneFeatureRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2323,8 +2323,8 @@ type CreateSegmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Command *CreateSegmentCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Command *CreateSegmentCommand `protobuf:"bytes,1,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateSegmentRequest) Reset() { @@ -2366,9 +2366,9 @@ func (x *CreateSegmentRequest) GetCommand() *CreateSegmentCommand { return nil } -func (x *CreateSegmentRequest) GetEnvironmentNamespace() string { +func (x *CreateSegmentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2425,8 +2425,8 @@ type GetSegmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetSegmentRequest) Reset() { @@ -2468,9 +2468,9 @@ func (x *GetSegmentRequest) GetId() string { return "" } -func (x *GetSegmentRequest) GetEnvironmentNamespace() string { +func (x *GetSegmentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2527,14 +2527,14 @@ type ListSegmentsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - OrderBy ListSegmentsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListSegmentsRequest_OrderBy" json:"order_by"` - OrderDirection ListSegmentsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListSegmentsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - Status *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=status,proto3" json:"status"` - IsInUseStatus *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=is_in_use_status,json=isInUseStatus,proto3" json:"is_in_use_status"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListSegmentsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListSegmentsRequest_OrderBy" json:"order_by"` + OrderDirection ListSegmentsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListSegmentsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + Status *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=status,proto3" json:"status"` + IsInUseStatus *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=is_in_use_status,json=isInUseStatus,proto3" json:"is_in_use_status"` + EnvironmentId string `protobuf:"bytes,9,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListSegmentsRequest) Reset() { @@ -2583,13 +2583,6 @@ func (x *ListSegmentsRequest) GetCursor() string { return "" } -func (x *ListSegmentsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListSegmentsRequest) GetOrderBy() ListSegmentsRequest_OrderBy { if x != nil { return x.OrderBy @@ -2625,6 +2618,13 @@ func (x *ListSegmentsRequest) GetIsInUseStatus() *wrapperspb.BoolValue { return nil } +func (x *ListSegmentsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListSegmentsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2693,9 +2693,9 @@ type DeleteSegmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DeleteSegmentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DeleteSegmentCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteSegmentRequest) Reset() { @@ -2744,9 +2744,9 @@ func (x *DeleteSegmentRequest) GetCommand() *DeleteSegmentCommand { return nil } -func (x *DeleteSegmentRequest) GetEnvironmentNamespace() string { +func (x *DeleteSegmentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2794,9 +2794,9 @@ type UpdateSegmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Commands []*Command `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateSegmentRequest) Reset() { @@ -2845,9 +2845,9 @@ func (x *UpdateSegmentRequest) GetCommands() []*Command { return nil } -func (x *UpdateSegmentRequest) GetEnvironmentNamespace() string { +func (x *UpdateSegmentRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2895,9 +2895,9 @@ type AddSegmentUserRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *AddSegmentUserCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *AddSegmentUserCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *AddSegmentUserRequest) Reset() { @@ -2946,9 +2946,9 @@ func (x *AddSegmentUserRequest) GetCommand() *AddSegmentUserCommand { return nil } -func (x *AddSegmentUserRequest) GetEnvironmentNamespace() string { +func (x *AddSegmentUserRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -2996,9 +2996,9 @@ type DeleteSegmentUserRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - Command *DeleteSegmentUserCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` - EnvironmentNamespace string `protobuf:"bytes,3,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + Command *DeleteSegmentUserCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteSegmentUserRequest) Reset() { @@ -3047,9 +3047,9 @@ func (x *DeleteSegmentUserRequest) GetCommand() *DeleteSegmentUserCommand { return nil } -func (x *DeleteSegmentUserRequest) GetEnvironmentNamespace() string { +func (x *DeleteSegmentUserRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -3097,10 +3097,10 @@ type GetSegmentUserRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SegmentId string `protobuf:"bytes,1,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` - UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id"` - State SegmentUser_State `protobuf:"varint,3,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` - EnvironmentNamespace string `protobuf:"bytes,4,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + SegmentId string `protobuf:"bytes,1,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` + UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id"` + State SegmentUser_State `protobuf:"varint,3,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetSegmentUserRequest) Reset() { @@ -3156,9 +3156,9 @@ func (x *GetSegmentUserRequest) GetState() SegmentUser_State { return SegmentUser_INCLUDED } -func (x *GetSegmentUserRequest) GetEnvironmentNamespace() string { +func (x *GetSegmentUserRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -3215,12 +3215,12 @@ type ListSegmentUsersRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` - SegmentId string `protobuf:"bytes,3,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` - State *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=state,proto3" json:"state"` - UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` - EnvironmentNamespace string `protobuf:"bytes,6,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + PageSize int64 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor"` + SegmentId string `protobuf:"bytes,3,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` + State *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=state,proto3" json:"state"` + UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListSegmentUsersRequest) Reset() { @@ -3290,9 +3290,9 @@ func (x *ListSegmentUsersRequest) GetUserId() string { return "" } -func (x *ListSegmentUsersRequest) GetEnvironmentNamespace() string { +func (x *ListSegmentUsersRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -3357,9 +3357,9 @@ type BulkUploadSegmentUsersRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - SegmentId string `protobuf:"bytes,2,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` - Command *BulkUploadSegmentUsersCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + SegmentId string `protobuf:"bytes,2,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` + Command *BulkUploadSegmentUsersCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *BulkUploadSegmentUsersRequest) Reset() { @@ -3394,13 +3394,6 @@ func (*BulkUploadSegmentUsersRequest) Descriptor() ([]byte, []int) { return file_proto_feature_service_proto_rawDescGZIP(), []int{48} } -func (x *BulkUploadSegmentUsersRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *BulkUploadSegmentUsersRequest) GetSegmentId() string { if x != nil { return x.SegmentId @@ -3415,6 +3408,13 @@ func (x *BulkUploadSegmentUsersRequest) GetCommand() *BulkUploadSegmentUsersComm return nil } +func (x *BulkUploadSegmentUsersRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type BulkUploadSegmentUsersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3458,9 +3458,9 @@ type BulkDownloadSegmentUsersRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - SegmentId string `protobuf:"bytes,2,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` - State SegmentUser_State `protobuf:"varint,3,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` + SegmentId string `protobuf:"bytes,2,opt,name=segment_id,json=segmentId,proto3" json:"segment_id"` + State SegmentUser_State `protobuf:"varint,3,opt,name=state,proto3,enum=bucketeer.feature.SegmentUser_State" json:"state"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *BulkDownloadSegmentUsersRequest) Reset() { @@ -3495,13 +3495,6 @@ func (*BulkDownloadSegmentUsersRequest) Descriptor() ([]byte, []int) { return file_proto_feature_service_proto_rawDescGZIP(), []int{50} } -func (x *BulkDownloadSegmentUsersRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *BulkDownloadSegmentUsersRequest) GetSegmentId() string { if x != nil { return x.SegmentId @@ -3516,6 +3509,13 @@ func (x *BulkDownloadSegmentUsersRequest) GetState() SegmentUser_State { return SegmentUser_INCLUDED } +func (x *BulkDownloadSegmentUsersRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type BulkDownloadSegmentUsersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3568,10 +3568,10 @@ type EvaluateFeaturesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - User *user.User `protobuf:"bytes,1,opt,name=user,proto3" json:"user"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag"` - FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` // it will evaluate a single feature if set + User *user.User `protobuf:"bytes,1,opt,name=user,proto3" json:"user"` + Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag"` + FeatureId string `protobuf:"bytes,4,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` // it will evaluate a single feature if set + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EvaluateFeaturesRequest) Reset() { @@ -3613,23 +3613,23 @@ func (x *EvaluateFeaturesRequest) GetUser() *user.User { return nil } -func (x *EvaluateFeaturesRequest) GetEnvironmentNamespace() string { +func (x *EvaluateFeaturesRequest) GetTag() string { if x != nil { - return x.EnvironmentNamespace + return x.Tag } return "" } -func (x *EvaluateFeaturesRequest) GetTag() string { +func (x *EvaluateFeaturesRequest) GetFeatureId() string { if x != nil { - return x.Tag + return x.FeatureId } return "" } -func (x *EvaluateFeaturesRequest) GetFeatureId() string { +func (x *EvaluateFeaturesRequest) GetEnvironmentId() string { if x != nil { - return x.FeatureId + return x.EnvironmentId } return "" } @@ -3686,12 +3686,12 @@ type ListTagsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - OrderBy ListTagsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListTagsRequest_OrderBy" json:"order_by"` - OrderDirection ListTagsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListTagsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListTagsRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListTagsRequest_OrderBy" json:"order_by"` + OrderDirection ListTagsRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListTagsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListTagsRequest) Reset() { @@ -3726,13 +3726,6 @@ func (*ListTagsRequest) Descriptor() ([]byte, []int) { return file_proto_feature_service_proto_rawDescGZIP(), []int{54} } -func (x *ListTagsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListTagsRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -3768,6 +3761,13 @@ func (x *ListTagsRequest) GetSearchKeyword() string { return "" } +func (x *ListTagsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListTagsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3836,8 +3836,8 @@ type CreateFlagTriggerRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` CreateFlagTriggerCommand *CreateFlagTriggerCommand `protobuf:"bytes,2,opt,name=create_flag_trigger_command,json=createFlagTriggerCommand,proto3" json:"create_flag_trigger_command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateFlagTriggerRequest) Reset() { @@ -3872,18 +3872,18 @@ func (*CreateFlagTriggerRequest) Descriptor() ([]byte, []int) { return file_proto_feature_service_proto_rawDescGZIP(), []int{56} } -func (x *CreateFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *CreateFlagTriggerRequest) GetCreateFlagTriggerCommand() *CreateFlagTriggerCommand { if x != nil { - return x.EnvironmentNamespace + return x.CreateFlagTriggerCommand } - return "" + return nil } -func (x *CreateFlagTriggerRequest) GetCreateFlagTriggerCommand() *CreateFlagTriggerCommand { +func (x *CreateFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.CreateFlagTriggerCommand + return x.EnvironmentId } - return nil + return "" } type CreateFlagTriggerResponse struct { @@ -3947,8 +3947,8 @@ type DeleteFlagTriggerRequest struct { unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` DeleteFlagTriggerCommand *DeleteFlagTriggerCommand `protobuf:"bytes,3,opt,name=delete_flag_trigger_command,json=deleteFlagTriggerCommand,proto3" json:"delete_flag_trigger_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteFlagTriggerRequest) Reset() { @@ -3990,18 +3990,18 @@ func (x *DeleteFlagTriggerRequest) GetId() string { return "" } -func (x *DeleteFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *DeleteFlagTriggerRequest) GetDeleteFlagTriggerCommand() *DeleteFlagTriggerCommand { if x != nil { - return x.EnvironmentNamespace + return x.DeleteFlagTriggerCommand } - return "" + return nil } -func (x *DeleteFlagTriggerRequest) GetDeleteFlagTriggerCommand() *DeleteFlagTriggerCommand { +func (x *DeleteFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.DeleteFlagTriggerCommand + return x.EnvironmentId } - return nil + return "" } type DeleteFlagTriggerResponse struct { @@ -4048,8 +4048,8 @@ type UpdateFlagTriggerRequest struct { unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` ChangeFlagTriggerDescriptionCommand *ChangeFlagTriggerDescriptionCommand `protobuf:"bytes,3,opt,name=change_flag_trigger_description_command,json=changeFlagTriggerDescriptionCommand,proto3" json:"change_flag_trigger_description_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateFlagTriggerRequest) Reset() { @@ -4091,18 +4091,18 @@ func (x *UpdateFlagTriggerRequest) GetId() string { return "" } -func (x *UpdateFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *UpdateFlagTriggerRequest) GetChangeFlagTriggerDescriptionCommand() *ChangeFlagTriggerDescriptionCommand { if x != nil { - return x.EnvironmentNamespace + return x.ChangeFlagTriggerDescriptionCommand } - return "" + return nil } -func (x *UpdateFlagTriggerRequest) GetChangeFlagTriggerDescriptionCommand() *ChangeFlagTriggerDescriptionCommand { +func (x *UpdateFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.ChangeFlagTriggerDescriptionCommand + return x.EnvironmentId } - return nil + return "" } type UpdateFlagTriggerResponse struct { @@ -4149,8 +4149,8 @@ type EnableFlagTriggerRequest struct { unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` EnableFlagTriggerCommand *EnableFlagTriggerCommand `protobuf:"bytes,3,opt,name=enable_flag_trigger_command,json=enableFlagTriggerCommand,proto3" json:"enable_flag_trigger_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EnableFlagTriggerRequest) Reset() { @@ -4192,18 +4192,18 @@ func (x *EnableFlagTriggerRequest) GetId() string { return "" } -func (x *EnableFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *EnableFlagTriggerRequest) GetEnableFlagTriggerCommand() *EnableFlagTriggerCommand { if x != nil { - return x.EnvironmentNamespace + return x.EnableFlagTriggerCommand } - return "" + return nil } -func (x *EnableFlagTriggerRequest) GetEnableFlagTriggerCommand() *EnableFlagTriggerCommand { +func (x *EnableFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.EnableFlagTriggerCommand + return x.EnvironmentId } - return nil + return "" } type EnableFlagTriggerResponse struct { @@ -4250,8 +4250,8 @@ type DisableFlagTriggerRequest struct { unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` DisableFlagTriggerCommand *DisableFlagTriggerCommand `protobuf:"bytes,3,opt,name=disable_flag_trigger_command,json=disableFlagTriggerCommand,proto3" json:"disable_flag_trigger_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DisableFlagTriggerRequest) Reset() { @@ -4293,18 +4293,18 @@ func (x *DisableFlagTriggerRequest) GetId() string { return "" } -func (x *DisableFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *DisableFlagTriggerRequest) GetDisableFlagTriggerCommand() *DisableFlagTriggerCommand { if x != nil { - return x.EnvironmentNamespace + return x.DisableFlagTriggerCommand } - return "" + return nil } -func (x *DisableFlagTriggerRequest) GetDisableFlagTriggerCommand() *DisableFlagTriggerCommand { +func (x *DisableFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.DisableFlagTriggerCommand + return x.EnvironmentId } - return nil + return "" } type DisableFlagTriggerResponse struct { @@ -4351,8 +4351,8 @@ type ResetFlagTriggerRequest struct { unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` ResetFlagTriggerCommand *ResetFlagTriggerCommand `protobuf:"bytes,3,opt,name=reset_flag_trigger_command,json=resetFlagTriggerCommand,proto3" json:"reset_flag_trigger_command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ResetFlagTriggerRequest) Reset() { @@ -4394,18 +4394,18 @@ func (x *ResetFlagTriggerRequest) GetId() string { return "" } -func (x *ResetFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *ResetFlagTriggerRequest) GetResetFlagTriggerCommand() *ResetFlagTriggerCommand { if x != nil { - return x.EnvironmentNamespace + return x.ResetFlagTriggerCommand } - return "" + return nil } -func (x *ResetFlagTriggerRequest) GetResetFlagTriggerCommand() *ResetFlagTriggerCommand { +func (x *ResetFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.ResetFlagTriggerCommand + return x.EnvironmentId } - return nil + return "" } type ResetFlagTriggerResponse struct { @@ -4468,8 +4468,8 @@ type GetFlagTriggerRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetFlagTriggerRequest) Reset() { @@ -4511,9 +4511,9 @@ func (x *GetFlagTriggerRequest) GetId() string { return "" } -func (x *GetFlagTriggerRequest) GetEnvironmentNamespace() string { +func (x *GetFlagTriggerRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -4578,12 +4578,12 @@ type ListFlagTriggersRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - OrderBy ListFlagTriggersRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListFlagTriggersRequest_OrderBy" json:"order_by"` - OrderDirection ListFlagTriggersRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListFlagTriggersRequest_OrderDirection" json:"order_direction"` + FeatureId string `protobuf:"bytes,1,opt,name=feature_id,json=featureId,proto3" json:"feature_id"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + OrderBy ListFlagTriggersRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.feature.ListFlagTriggersRequest_OrderBy" json:"order_by"` + OrderDirection ListFlagTriggersRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.feature.ListFlagTriggersRequest_OrderDirection" json:"order_direction"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListFlagTriggersRequest) Reset() { @@ -4625,13 +4625,6 @@ func (x *ListFlagTriggersRequest) GetFeatureId() string { return "" } -func (x *ListFlagTriggersRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListFlagTriggersRequest) GetCursor() string { if x != nil { return x.Cursor @@ -4660,6 +4653,13 @@ func (x *ListFlagTriggersRequest) GetOrderDirection() ListFlagTriggersRequest_Or return ListFlagTriggersRequest_ASC } +func (x *ListFlagTriggersRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListFlagTriggersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4893,28 +4893,27 @@ var file_proto_feature_service_proto_rawDesc = []byte{ 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x58, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4a, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5b, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x4a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x22, 0x53, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x4d, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xfd, 0x05, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xf5, 0x05, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, @@ -4931,167 +4930,164 @@ var file_proto_feature_service_proto_rawDesc = []byte{ 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0e, - 0x68, 0x61, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, + 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x68, 0x61, 0x73, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, + 0x64, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x11, 0x68, 0x61, 0x73, + 0x5f, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0d, 0x68, 0x61, 0x73, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x47, - 0x0a, 0x11, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, - 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x68, 0x61, 0x73, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x41, 0x47, - 0x53, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x05, - 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, - 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x9a, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x6d, 0x0a, 0x1b, + 0x52, 0x10, 0x68, 0x61, 0x73, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, + 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x07, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, + 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x54, + 0x41, 0x47, 0x53, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0x05, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x87, 0x01, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x6d, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x14, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xcf, 0x05, 0x0a, 0x14, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x22, 0x4d, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, - 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x33, - 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x46, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x41, 0x0a, 0x0d, 0x6f, 0x66, - 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0c, 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, - 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb8, 0x01, 0x0a, - 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xcf, 0x05, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x45, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x73, 0x69, 0x74, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, + 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x10, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x12, 0x41, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6f, 0x66, 0x66, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, + 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x17, 0x0a, 0x15, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xba, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x22, 0xb2, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x18, 0x0a, - 0x16, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, - 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbe, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xb2, 0x01, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x03, 0x10, 0x04, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb6, 0x01, 0x0a, 0x17, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x6f, @@ -5099,27 +5095,26 @@ var file_proto_feature_service_proto_rawDesc = []byte{ 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x1a, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x14, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1a, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xe7, 0x03, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0xdf, 0x03, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5d, 0x0a, 0x16, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, @@ -5144,192 +5139,186 @@ var file_proto_feature_service_proto_rawDesc = []byte{ 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, - 0x61, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x1e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, + 0x61, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x06, 0x10, + 0x07, 0x22, 0x1e, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xaf, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x49, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0x26, 0x0a, 0x04, 0x46, 0x72, - 0x6f, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x50, 0x53, - 0x10, 0x02, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x14, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x04, 0x66, 0x72, + 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x52, + 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x26, 0x0a, 0x04, + 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f, + 0x50, 0x53, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x01, 0x0a, + 0x13, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x15, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x07, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x58, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x22, 0x4d, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x07, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, + 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x4a, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xb2, 0x04, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x22, 0xaa, 0x04, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x5e, - 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x43, 0x0a, 0x10, 0x69, 0x73, - 0x5f, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0d, 0x69, 0x73, 0x49, 0x6e, 0x55, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, - 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, - 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, - 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x36, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x14, 0x55, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x49, + 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, + 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x43, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x75, + 0x73, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x73, 0x49, + 0x6e, 0x55, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x87, + 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, + 0x04, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x15, 0x41, 0x64, - 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, + 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x98, 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x01, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x4c, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xee, 0x01, + 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xe6, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, @@ -5341,521 +5330,515 @@ var file_proto_feature_service_proto_rawDesc = []byte{ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x68, - 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xbf, 0x01, 0x0a, 0x1d, 0x42, 0x75, 0x6c, - 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x4a, - 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x20, 0x0a, 0x1e, 0x42, 0x75, + 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x68, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0xb7, 0x01, 0x0a, 0x1d, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x20, 0x0a, 0x1e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x0a, + 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x1f, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x36, 0x0a, 0x20, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa9, 0x01, 0x0a, 0x17, 0x45, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x18, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x36, 0x0a, 0x20, 0x42, 0x75, 0x6c, 0x6b, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0xa1, 0x01, 0x0a, 0x17, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x22, 0x69, 0x0a, 0x18, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xaa, 0x03, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, - 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x42, 0x79, 0x12, 0x5a, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, - 0x06, 0x0a, 0x02, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x77, 0x0a, 0x10, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xbb, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x22, 0x70, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0xa2, 0x03, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, + 0x5a, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3e, 0x0a, 0x07, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, + 0x00, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x22, 0x77, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb3, 0x01, + 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x70, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xc3, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, - 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xee, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x66, 0x6c, - 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x23, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcb, + 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, + 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x1b, 0x0a, 0x19, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x8c, 0x01, 0x0a, 0x27, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, + 0x23, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, + 0x03, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x6a, 0x0a, 0x1b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1b, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x22, 0x1b, 0x0a, 0x19, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x6d, 0x0a, 0x1c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1b, 0x0a, 0x19, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x19, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x6d, 0x0a, 0x1c, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x44, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x17, 0x52, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x67, 0x0a, 0x1a, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x17, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x22, 0x6f, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x22, 0x5c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, - 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x6d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x67, 0x0a, 0x1a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x66, + 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x17, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x6f, 0x0a, 0x18, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, + 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, + 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x54, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, + 0x10, 0x03, 0x22, 0x6d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x6c, 0x22, 0xb2, 0x03, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x6c, 0x22, 0xaa, 0x03, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x15, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, - 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x62, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x07, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, - 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, - 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, - 0x02, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xa3, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x55, 0x72, 0x6c, 0x52, 0x0c, 0x66, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x1a, 0x69, 0x0a, 0x12, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x55, 0x72, 0x6c, 0x12, 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, - 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x31, 0x0a, 0x19, - 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, - 0x1c, 0x0a, 0x1a, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x83, 0x20, - 0x0a, 0x0e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x62, + 0x09, 0x52, 0x09, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x4d, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, + 0x12, 0x62, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x07, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, + 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x02, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0xa3, + 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x66, + 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x55, + 0x72, 0x6c, 0x52, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x69, 0x0a, 0x12, 0x46, 0x6c, 0x61, + 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x55, 0x72, 0x6c, 0x12, + 0x41, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6c, 0x22, 0x31, 0x0a, 0x19, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x1c, 0x0a, 0x1a, 0x46, 0x6c, 0x61, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x83, 0x20, 0x0a, 0x0e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, - 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x26, 0x2e, + 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x76, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, - 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x6a, 0x0a, - 0x0e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x67, 0x0a, 0x0e, 0x41, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x64, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0d, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, - 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, + 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x6a, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, + 0x01, 0x12, 0x67, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x55, 0x6e, + 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x6e, - 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, - 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, + 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x79, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x7f, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x61, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x6c, 0x6f, + 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x47, 0x65, 0x74, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x64, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, + 0x01, 0x12, 0x73, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x6a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, + 0x02, 0x01, 0x12, 0x6d, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, - 0x0e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x41, 0x64, - 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x73, 0x0a, 0x11, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2b, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x6a, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x6d, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2a, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x42, 0x75, 0x6c, - 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x42, - 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, - 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x55, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, 0x2e, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, - 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, + 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x45, 0x76, + 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, - 0x0a, 0x12, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x72, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, + 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x08, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x70, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, + 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, - 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x73, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x94, 0x01, 0x0a, - 0x12, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x19, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x2f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x7d, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, + 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, + 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x28, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, + 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x2c, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x46, 0x6c, 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x6c, + 0x61, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x22, 0x19, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x2f, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x7d, 0x42, 0x31, 0x5a, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/feature/service.proto b/proto/feature/service.proto index 692d2e028a..aaaa0fcc26 100644 --- a/proto/feature/service.proto +++ b/proto/feature/service.proto @@ -34,7 +34,8 @@ import "proto/feature/target.proto"; message GetFeatureRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetFeatureResponse { @@ -42,8 +43,9 @@ message GetFeatureResponse { } message GetFeaturesRequest { - string environment_namespace = 1; + reserved 1; repeated string ids = 2; + string environment_id = 3; } message GetFeaturesResponse { @@ -68,13 +70,14 @@ message ListFeaturesRequest { repeated string tags = 3; OrderBy order_by = 4; OrderDirection order_direction = 5; - string environment_namespace = 6; + reserved 6; string maintainer = 7; google.protobuf.BoolValue enabled = 8; google.protobuf.BoolValue has_experiment = 9; string search_keyword = 10; google.protobuf.BoolValue archived = 11; google.protobuf.BoolValue has_prerequisites = 12; + string environment_id = 13; } message ListFeaturesResponse { @@ -87,7 +90,8 @@ message ListEnabledFeaturesRequest { int64 page_size = 1; string cursor = 2; repeated string tags = 3; - string environment_namespace = 4; + reserved 4; + string environment_id = 5; } message ListEnabledFeaturesResponse { @@ -97,7 +101,8 @@ message ListEnabledFeaturesResponse { message CreateFeatureRequest { CreateFeatureCommand command = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message CreateFeatureResponse { @@ -128,8 +133,9 @@ message UpdateFeatureResponse { message EnableFeatureRequest { string id = 1; EnableFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message EnableFeatureResponse {} @@ -137,8 +143,9 @@ message EnableFeatureResponse {} message DisableFeatureRequest { string id = 1; DisableFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message DisableFeatureResponse {} @@ -146,8 +153,9 @@ message DisableFeatureResponse {} message ArchiveFeatureRequest { string id = 1; ArchiveFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message ArchiveFeatureResponse {} @@ -155,8 +163,9 @@ message ArchiveFeatureResponse {} message UnarchiveFeatureRequest { string id = 1; UnarchiveFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message UnarchiveFeatureResponse {} @@ -164,8 +173,9 @@ message UnarchiveFeatureResponse {} message DeleteFeatureRequest { string id = 1; DeleteFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message DeleteFeatureResponse {} @@ -176,8 +186,9 @@ message UpdateFeatureDetailsRequest { ChangeDescriptionCommand change_description_command = 3; repeated AddTagCommand add_tag_commands = 4; repeated RemoveTagCommand remove_tag_commands = 5; - string environment_namespace = 6; + reserved 6; string comment = 7; + string environment_id = 8; } message UpdateFeatureDetailsResponse {} @@ -185,8 +196,9 @@ message UpdateFeatureDetailsResponse {} message UpdateFeatureVariationsRequest { string id = 1; repeated Command commands = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; + string environment_id = 5; } message UpdateFeatureVariationsResponse {} @@ -199,9 +211,10 @@ message UpdateFeatureTargetingRequest { } string id = 1; repeated Command commands = 2; - string environment_namespace = 3; + reserved 3; string comment = 4; From from = 5; + string environment_id = 6; } message UpdateFeatureTargetingResponse {} @@ -209,14 +222,16 @@ message UpdateFeatureTargetingResponse {} message CloneFeatureRequest { string id = 1; CloneFeatureCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message CloneFeatureResponse {} message CreateSegmentRequest { CreateSegmentCommand command = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 4; } message CreateSegmentResponse { @@ -225,7 +240,8 @@ message CreateSegmentResponse { message GetSegmentRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetSegmentResponse { @@ -245,12 +261,13 @@ message ListSegmentsRequest { } int64 page_size = 1; string cursor = 2; - string environment_namespace = 3; + reserved 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; google.protobuf.Int32Value status = 7; google.protobuf.BoolValue is_in_use_status = 8; + string environment_id = 9; } message ListSegmentsResponse { @@ -262,7 +279,8 @@ message ListSegmentsResponse { message DeleteSegmentRequest { string id = 1; DeleteSegmentCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message DeleteSegmentResponse {} @@ -270,7 +288,8 @@ message DeleteSegmentResponse {} message UpdateSegmentRequest { string id = 1; repeated Command commands = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message UpdateSegmentResponse {} @@ -278,7 +297,8 @@ message UpdateSegmentResponse {} message AddSegmentUserRequest { string id = 1; AddSegmentUserCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message AddSegmentUserResponse {} @@ -286,7 +306,8 @@ message AddSegmentUserResponse {} message DeleteSegmentUserRequest { string id = 1; DeleteSegmentUserCommand command = 2; - string environment_namespace = 3; + reserved 3; + string environment_id = 4; } message DeleteSegmentUserResponse {} @@ -295,7 +316,8 @@ message GetSegmentUserRequest { string segment_id = 1; string user_id = 2; SegmentUser.State state = 3; - string environment_namespace = 4; + reserved 4; + string environment_id = 5; } message GetSegmentUserResponse { @@ -308,7 +330,8 @@ message ListSegmentUsersRequest { string segment_id = 3; google.protobuf.Int32Value state = 4; string user_id = 5; - string environment_namespace = 6; + reserved 6; + string environment_id = 7; } message ListSegmentUsersResponse { @@ -317,17 +340,19 @@ message ListSegmentUsersResponse { } message BulkUploadSegmentUsersRequest { - string environment_namespace = 1; + reserved 1; string segment_id = 2; BulkUploadSegmentUsersCommand command = 3; + string environment_id = 4; } message BulkUploadSegmentUsersResponse {} message BulkDownloadSegmentUsersRequest { - string environment_namespace = 1; + reserved 1; string segment_id = 2; SegmentUser.State state = 3; + string environment_id = 4; } message BulkDownloadSegmentUsersResponse { @@ -336,9 +361,10 @@ message BulkDownloadSegmentUsersResponse { message EvaluateFeaturesRequest { bucketeer.user.User user = 1; - string environment_namespace = 2; + reserved 2; string tag = 3; string feature_id = 4; // it will evaluate a single feature if set + string environment_id = 5; } message EvaluateFeaturesResponse { @@ -356,12 +382,13 @@ message ListTagsRequest { ASC = 0; DESC = 1; } - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; + string environment_id = 7; } message ListTagsResponse { @@ -371,8 +398,9 @@ message ListTagsResponse { } message CreateFlagTriggerRequest { - string environment_namespace = 1; + reserved 1; CreateFlagTriggerCommand create_flag_trigger_command = 2; + string environment_id = 3; } message CreateFlagTriggerResponse { @@ -382,41 +410,46 @@ message CreateFlagTriggerResponse { message DeleteFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; DeleteFlagTriggerCommand delete_flag_trigger_command = 3; + string environment_id = 4; } message DeleteFlagTriggerResponse {} message UpdateFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; ChangeFlagTriggerDescriptionCommand change_flag_trigger_description_command = 3; + string environment_id = 4; } message UpdateFlagTriggerResponse {} message EnableFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; EnableFlagTriggerCommand enable_flag_trigger_command = 3; + string environment_id = 4; } message EnableFlagTriggerResponse {} message DisableFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; DisableFlagTriggerCommand disable_flag_trigger_command = 3; + string environment_id = 4; } message DisableFlagTriggerResponse {} message ResetFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; ResetFlagTriggerCommand reset_flag_trigger_command = 3; + string environment_id = 4; } message ResetFlagTriggerResponse { @@ -426,7 +459,8 @@ message ResetFlagTriggerResponse { message GetFlagTriggerRequest { string id = 1; - string environment_namespace = 2; + reserved 2; + string environment_id = 3; } message GetFlagTriggerResponse { @@ -445,11 +479,12 @@ message ListFlagTriggersRequest { DESC = 1; } string feature_id = 1; - string environment_namespace = 2; + reserved 2; string cursor = 3; int32 page_size = 4; OrderBy order_by = 5; OrderDirection order_direction = 6; + string environment_id = 7; } message ListFlagTriggersResponse { diff --git a/proto/gateway/proto_descriptor.pb b/proto/gateway/proto_descriptor.pb index 414c8d5ea0..d3707f27c8 100644 Binary files a/proto/gateway/proto_descriptor.pb and b/proto/gateway/proto_descriptor.pb differ diff --git a/proto/notification/proto_descriptor.pb b/proto/notification/proto_descriptor.pb index 52cf8fc0ff..cefe1fd7e9 100644 Binary files a/proto/notification/proto_descriptor.pb and b/proto/notification/proto_descriptor.pb differ diff --git a/proto/notification/sender/notification_event.pb.go b/proto/notification/sender/notification_event.pb.go index 38789b98f4..f07020b860 100644 --- a/proto/notification/sender/notification_event.pb.go +++ b/proto/notification/sender/notification_event.pb.go @@ -40,11 +40,11 @@ type NotificationEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` - EnvironmentNamespace string `protobuf:"bytes,2,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - SourceType notification.Subscription_SourceType `protobuf:"varint,3,opt,name=source_type,json=sourceType,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_type"` - Notification *Notification `protobuf:"bytes,4,opt,name=notification,proto3" json:"notification"` - IsAdminEvent bool `protobuf:"varint,5,opt,name=is_admin_event,json=isAdminEvent,proto3" json:"is_admin_event"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` + SourceType notification.Subscription_SourceType `protobuf:"varint,3,opt,name=source_type,json=sourceType,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_type"` + Notification *Notification `protobuf:"bytes,4,opt,name=notification,proto3" json:"notification"` + IsAdminEvent bool `protobuf:"varint,5,opt,name=is_admin_event,json=isAdminEvent,proto3" json:"is_admin_event"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *NotificationEvent) Reset() { @@ -86,13 +86,6 @@ func (x *NotificationEvent) GetId() string { return "" } -func (x *NotificationEvent) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *NotificationEvent) GetSourceType() notification.Subscription_SourceType { if x != nil { return x.SourceType @@ -114,6 +107,13 @@ func (x *NotificationEvent) GetIsAdminEvent() bool { return false } +func (x *NotificationEvent) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + var File_proto_notification_sender_notification_event_proto protoreflect.FileDescriptor var file_proto_notification_sender_notification_event_proto_rawDesc = []byte{ @@ -127,30 +127,29 @@ var file_proto_notification_sender_notification_event_proto_rawDesc = []byte{ 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x4e, 0x6f, 0x74, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x99, 0x02, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, - 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x3d, 0x5a, 0x3b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x50, + 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x4f, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/notification/sender/notification_event.proto b/proto/notification/sender/notification_event.proto index 9338ca82f5..cc8aa449c0 100644 --- a/proto/notification/sender/notification_event.proto +++ b/proto/notification/sender/notification_event.proto @@ -22,8 +22,9 @@ import "proto/notification/subscription.proto"; message NotificationEvent { string id = 1; - string environment_namespace = 2; + reserved 2; bucketeer.notification.Subscription.SourceType source_type = 3; Notification notification = 4; bool is_admin_event = 5; + string environment_id = 6; } \ No newline at end of file diff --git a/proto/notification/service.pb.go b/proto/notification/service.pb.go index 6a7776c20b..b7eef47550 100644 --- a/proto/notification/service.pb.go +++ b/proto/notification/service.pb.go @@ -1083,8 +1083,8 @@ type GetSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *GetSubscriptionRequest) Reset() { @@ -1119,16 +1119,16 @@ func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{16} } -func (x *GetSubscriptionRequest) GetEnvironmentNamespace() string { +func (x *GetSubscriptionRequest) GetId() string { if x != nil { - return x.EnvironmentNamespace + return x.Id } return "" } -func (x *GetSubscriptionRequest) GetId() string { +func (x *GetSubscriptionRequest) GetEnvironmentId() string { if x != nil { - return x.Id + return x.EnvironmentId } return "" } @@ -1185,14 +1185,14 @@ type ListSubscriptionsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - SourceTypes []Subscription_SourceType `protobuf:"varint,4,rep,packed,name=source_types,json=sourceTypes,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_types"` - OrderBy ListSubscriptionsRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.notification.ListSubscriptionsRequest_OrderBy" json:"order_by"` - OrderDirection ListSubscriptionsRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.notification.ListSubscriptionsRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,7,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` - Disabled *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=disabled,proto3" json:"disabled"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + SourceTypes []Subscription_SourceType `protobuf:"varint,4,rep,packed,name=source_types,json=sourceTypes,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_types"` + OrderBy ListSubscriptionsRequest_OrderBy `protobuf:"varint,5,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.notification.ListSubscriptionsRequest_OrderBy" json:"order_by"` + OrderDirection ListSubscriptionsRequest_OrderDirection `protobuf:"varint,6,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.notification.ListSubscriptionsRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,7,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + Disabled *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=disabled,proto3" json:"disabled"` + EnvironmentId string `protobuf:"bytes,9,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListSubscriptionsRequest) Reset() { @@ -1227,13 +1227,6 @@ func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{18} } -func (x *ListSubscriptionsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListSubscriptionsRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -1283,6 +1276,13 @@ func (x *ListSubscriptionsRequest) GetDisabled() *wrapperspb.BoolValue { return nil } +func (x *ListSubscriptionsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListSubscriptionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1351,10 +1351,10 @@ type ListEnabledSubscriptionsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - SourceTypes []Subscription_SourceType `protobuf:"varint,4,rep,packed,name=source_types,json=sourceTypes,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_types"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + SourceTypes []Subscription_SourceType `protobuf:"varint,4,rep,packed,name=source_types,json=sourceTypes,proto3,enum=bucketeer.notification.Subscription_SourceType" json:"source_types"` + EnvironmentId string `protobuf:"bytes,5,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListEnabledSubscriptionsRequest) Reset() { @@ -1389,13 +1389,6 @@ func (*ListEnabledSubscriptionsRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{20} } -func (x *ListEnabledSubscriptionsRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListEnabledSubscriptionsRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -1417,6 +1410,13 @@ func (x *ListEnabledSubscriptionsRequest) GetSourceTypes() []Subscription_Source return nil } +func (x *ListEnabledSubscriptionsRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListEnabledSubscriptionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1477,8 +1477,8 @@ type CreateSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Command *CreateSubscriptionCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + Command *CreateSubscriptionCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,3,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreateSubscriptionRequest) Reset() { @@ -1513,18 +1513,18 @@ func (*CreateSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{22} } -func (x *CreateSubscriptionRequest) GetEnvironmentNamespace() string { +func (x *CreateSubscriptionRequest) GetCommand() *CreateSubscriptionCommand { if x != nil { - return x.EnvironmentNamespace + return x.Command } - return "" + return nil } -func (x *CreateSubscriptionRequest) GetCommand() *CreateSubscriptionCommand { +func (x *CreateSubscriptionRequest) GetEnvironmentId() string { if x != nil { - return x.Command + return x.EnvironmentId } - return nil + return "" } type CreateSubscriptionResponse struct { @@ -1570,9 +1570,9 @@ type DeleteSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *DeleteSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *DeleteSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeleteSubscriptionRequest) Reset() { @@ -1607,13 +1607,6 @@ func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{24} } -func (x *DeleteSubscriptionRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *DeleteSubscriptionRequest) GetId() string { if x != nil { return x.Id @@ -1628,6 +1621,13 @@ func (x *DeleteSubscriptionRequest) GetCommand() *DeleteSubscriptionCommand { return nil } +func (x *DeleteSubscriptionRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type DeleteSubscriptionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1671,9 +1671,9 @@ type EnableSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *EnableSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *EnableSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *EnableSubscriptionRequest) Reset() { @@ -1708,13 +1708,6 @@ func (*EnableSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{26} } -func (x *EnableSubscriptionRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *EnableSubscriptionRequest) GetId() string { if x != nil { return x.Id @@ -1729,6 +1722,13 @@ func (x *EnableSubscriptionRequest) GetCommand() *EnableSubscriptionCommand { return nil } +func (x *EnableSubscriptionRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type EnableSubscriptionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1772,9 +1772,9 @@ type DisableSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - Command *DisableSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *DisableSubscriptionCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DisableSubscriptionRequest) Reset() { @@ -1809,13 +1809,6 @@ func (*DisableSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{28} } -func (x *DisableSubscriptionRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *DisableSubscriptionRequest) GetId() string { if x != nil { return x.Id @@ -1830,6 +1823,13 @@ func (x *DisableSubscriptionRequest) GetCommand() *DisableSubscriptionCommand { return nil } +func (x *DisableSubscriptionRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type DisableSubscriptionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1873,11 +1873,11 @@ type UpdateSubscriptionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` AddSourceTypesCommand *AddSourceTypesCommand `protobuf:"bytes,3,opt,name=add_source_types_command,json=addSourceTypesCommand,proto3" json:"add_source_types_command"` DeleteSourceTypesCommand *DeleteSourceTypesCommand `protobuf:"bytes,4,opt,name=delete_source_types_command,json=deleteSourceTypesCommand,proto3" json:"delete_source_types_command"` RenameSubscriptionCommand *RenameSubscriptionCommand `protobuf:"bytes,5,opt,name=rename_subscription_command,json=renameSubscriptionCommand,proto3" json:"rename_subscription_command"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdateSubscriptionRequest) Reset() { @@ -1912,13 +1912,6 @@ func (*UpdateSubscriptionRequest) Descriptor() ([]byte, []int) { return file_proto_notification_service_proto_rawDescGZIP(), []int{30} } -func (x *UpdateSubscriptionRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UpdateSubscriptionRequest) GetId() string { if x != nil { return x.Id @@ -1947,6 +1940,13 @@ func (x *UpdateSubscriptionRequest) GetRenameSubscriptionCommand() *RenameSubscr return nil } +func (x *UpdateSubscriptionRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type UpdateSubscriptionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2143,57 +2143,56 @@ var file_proto_notification_service_proto_rawDesc = []byte{ 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x0a, 0x16, 0x47, 0x65, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd5, 0x04, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x08, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, + 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, + 0x79, 0x12, 0x68, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdd, - 0x04, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x08, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x68, - 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x36, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xa0, + 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xa0, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, @@ -2204,107 +2203,104 @@ var file_proto_notification_service_proto_rawDesc = []byte{ 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0xdf, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x22, 0xd7, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x52, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x9d, 0x01, 0x0a, - 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x0c, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x2f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x86, 0x01, 0x0a, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x1c, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x44, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, 0x0a, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, 0x61, 0x62, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xa5, 0x01, 0x0a, 0x19, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4b, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x01, 0x0a, 0x1a, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x1a, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xa4, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x66, 0x0a, + 0x18, 0x61, 0x64, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x15, + 0x61, 0x64, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x6f, 0x0a, 0x1b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x71, 0x0a, 0x1b, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xac, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x66, 0x0a, 0x18, 0x61, 0x64, - 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x15, 0x61, 0x64, 0x64, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x6f, 0x0a, 0x1b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x71, 0x0a, 0x1b, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x19, 0x72, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x19, + 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x99, 0x11, 0x0a, 0x13, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x83, 0x01, 0x0a, diff --git a/proto/notification/service.proto b/proto/notification/service.proto index 1f78907844..3be18b83de 100644 --- a/proto/notification/service.proto +++ b/proto/notification/service.proto @@ -104,8 +104,9 @@ message UpdateAdminSubscriptionRequest { message UpdateAdminSubscriptionResponse {} message GetSubscriptionRequest { - string environment_namespace = 1; + reserved 1; string id = 2; + string environment_id = 3; } message GetSubscriptionResponse { @@ -123,7 +124,7 @@ message ListSubscriptionsRequest { ASC = 0; DESC = 1; } - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; repeated Subscription.SourceType source_types = 4; @@ -131,6 +132,7 @@ message ListSubscriptionsRequest { OrderDirection order_direction = 6; string search_keyword = 7; google.protobuf.BoolValue disabled = 8; + string environment_id = 9; } message ListSubscriptionsResponse { @@ -140,10 +142,11 @@ message ListSubscriptionsResponse { } message ListEnabledSubscriptionsRequest { - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; repeated Subscription.SourceType source_types = 4; + string environment_id = 5; } message ListEnabledSubscriptionsResponse { @@ -152,42 +155,47 @@ message ListEnabledSubscriptionsResponse { } message CreateSubscriptionRequest { - string environment_namespace = 1; + reserved 1; CreateSubscriptionCommand command = 2; + string environment_id = 3; } message CreateSubscriptionResponse {} message DeleteSubscriptionRequest { - string environment_namespace = 1; + reserved 1; string id = 2; DeleteSubscriptionCommand command = 3; + string environment_id = 4; } message DeleteSubscriptionResponse {} message EnableSubscriptionRequest { - string environment_namespace = 1; + reserved 1; string id = 2; EnableSubscriptionCommand command = 3; + string environment_id = 4; } message EnableSubscriptionResponse {} message DisableSubscriptionRequest { - string environment_namespace = 1; + reserved 1; string id = 2; DisableSubscriptionCommand command = 3; + string environment_id = 4; } message DisableSubscriptionResponse {} message UpdateSubscriptionRequest { - string environment_namespace = 1; + reserved 1; string id = 2; AddSourceTypesCommand add_source_types_command = 3; DeleteSourceTypesCommand delete_source_types_command = 4; RenameSubscriptionCommand rename_subscription_command = 5; + string environment_id = 6; } message UpdateSubscriptionResponse {} diff --git a/proto/proto.lock b/proto/proto.lock index 654f4e3beb..26131503c8 100644 --- a/proto/proto.lock +++ b/proto/proto.lock @@ -417,17 +417,6 @@ { "name": "EnvironmentAPIKey", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string", - "options": [ - { - "name": "deprecated", - "value": "true" - } - ] - }, { "id": 2, "name": "api_key", @@ -459,6 +448,9 @@ "name": "project_url_code", "type": "string" } + ], + "reserved_ids": [ + 1 ] } ], @@ -1487,10 +1479,13 @@ "type": "CreateAPIKeyCommand" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -1517,10 +1512,13 @@ "type": "ChangeAPIKeyNameCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -1540,10 +1538,13 @@ "type": "EnableAPIKeyCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -1563,10 +1564,13 @@ "type": "DisableAPIKeyCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -1581,10 +1585,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -1610,11 +1617,6 @@ "name": "cursor", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "order_by", @@ -1634,7 +1636,15 @@ "id": 7, "name": "disabled", "type": "google.protobuf.BoolValue" + }, + { + "id": 8, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -5193,11 +5203,6 @@ "name": "cursor", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "order_by", @@ -5227,7 +5232,15 @@ "id": 9, "name": "entity_type", "type": "google.protobuf.Int32Value" + }, + { + "id": 10, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -5335,11 +5348,6 @@ "name": "cursor", "type": "string" }, - { - "id": 4, - "name": "environment_namespace", - "type": "string" - }, { "id": 5, "name": "order_by", @@ -5364,7 +5372,15 @@ "id": 9, "name": "to", "type": "int64" + }, + { + "id": 10, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 4 ] }, { @@ -6872,15 +6888,18 @@ "name": "GetAutoOpsRuleRequest", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "id", "type": "string" }, { - "id": 2, - "name": "id", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -6896,16 +6915,19 @@ { "name": "CreateAutoOpsRuleRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "command", "type": "CreateAutoOpsRuleCommand" + }, + { + "id": 3, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -6914,11 +6936,6 @@ { "name": "ListAutoOpsRulesRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -6934,7 +6951,15 @@ "name": "feature_ids", "type": "string", "is_repeated": true + }, + { + "id": 5, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -6956,11 +6981,6 @@ { "name": "StopAutoOpsRuleRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -6970,7 +6990,15 @@ "id": 3, "name": "command", "type": "StopAutoOpsRuleCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -6979,11 +7007,6 @@ { "name": "DeleteAutoOpsRuleRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -6993,7 +7016,15 @@ "id": 3, "name": "command", "type": "DeleteAutoOpsRuleCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7002,11 +7033,6 @@ { "name": "UpdateAutoOpsRuleRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -7041,9 +7067,15 @@ "name": "change_datetime_clause_commands", "type": "ChangeDatetimeClauseCommand", "is_repeated": true + }, + { + "id": 9, + "name": "environment_id", + "type": "string" } ], "reserved_ids": [ + 1, 3 ] }, @@ -7053,11 +7085,6 @@ { "name": "ExecuteAutoOpsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -7067,9 +7094,15 @@ "id": 4, "name": "execute_auto_ops_rule_command", "type": "ExecuteAutoOpsRuleCommand" + }, + { + "id": 5, + "name": "environment_id", + "type": "string" } ], "reserved_ids": [ + 1, 3 ] }, @@ -7086,11 +7119,6 @@ { "name": "ListOpsCountsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -7112,7 +7140,15 @@ "name": "feature_ids", "type": "string", "is_repeated": true + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7134,16 +7170,19 @@ { "name": "CreateProgressiveRolloutRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "command", "type": "CreateProgressiveRolloutCommand" + }, + { + "id": 3, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7153,15 +7192,18 @@ "name": "GetProgressiveRolloutRequest", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "id", "type": "string" }, { - "id": 2, - "name": "id", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7177,11 +7219,6 @@ { "name": "StopProgressiveRolloutRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -7191,7 +7228,15 @@ "id": 3, "name": "command", "type": "StopProgressiveRolloutCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7200,11 +7245,6 @@ { "name": "DeleteProgressiveRolloutRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -7214,7 +7254,15 @@ "id": 3, "name": "command", "type": "DeleteProgressiveRolloutCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7223,11 +7271,6 @@ { "name": "ListProgressiveRolloutsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -7263,7 +7306,15 @@ "id": 8, "name": "type", "type": "ProgressiveRollout.Type" + }, + { + "id": 9, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -7290,11 +7341,6 @@ { "name": "ExecuteProgressiveRolloutRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -7304,7 +7350,15 @@ "id": 3, "name": "change_progressive_rollout_triggered_at_command", "type": "ChangeProgressiveRolloutScheduleTriggeredAtCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -13268,10 +13322,13 @@ "type": "google.protobuf.Any" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -14803,11 +14860,6 @@ "name": "data", "type": "google.protobuf.Any" }, - { - "id": 8, - "name": "environment_namespace", - "type": "string" - }, { "id": 9, "name": "is_admin_event", @@ -14827,7 +14879,15 @@ "id": 12, "name": "previous_entity_data", "type": "string" + }, + { + "id": 13, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 8 ] }, { @@ -17575,11 +17635,6 @@ "name": "feature_id", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "type", @@ -17609,7 +17664,15 @@ "id": 9, "name": "updated_at", "type": "int64" + }, + { + "id": 10, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17626,15 +17689,18 @@ "type": "string" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "token", "type": "string" }, { - "id": 4, - "name": "token", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17651,15 +17717,18 @@ "type": "string" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "description", "type": "string" }, { - "id": 4, - "name": "description", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17676,10 +17745,13 @@ "type": "string" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17696,10 +17768,13 @@ "type": "string" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17716,10 +17791,13 @@ "type": "string" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17735,11 +17813,6 @@ "name": "feature_id", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "last_triggered_at", @@ -17749,7 +17822,15 @@ "id": 5, "name": "trigger_times", "type": "int32" + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -17921,11 +18002,6 @@ "name": "user", "type": "bucketeer.user.User" }, - { - "id": 5, - "name": "environment_namespace", - "type": "string" - }, { "id": 6, "name": "tag", @@ -17933,7 +18009,8 @@ } ], "reserved_ids": [ - 4 + 4, + 5 ] } ], @@ -17965,11 +18042,6 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "segment_id", @@ -17989,7 +18061,15 @@ "id": 6, "name": "editor", "type": "bucketeer.event.domain.Editor" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] } ], @@ -18024,11 +18104,6 @@ "name": "id", "type": "string" }, - { - "id": 4, - "name": "environment_namespace", - "type": "string" - }, { "id": 5, "name": "tag", @@ -18048,6 +18123,11 @@ "id": 9, "name": "source_id", "type": "bucketeer.event.client.SourceId" + }, + { + "id": 10, + "name": "environment_id", + "type": "string" } ], "maps": [ @@ -18062,7 +18142,8 @@ ], "reserved_ids": [ 2, - 3 + 3, + 4 ] } ], @@ -18547,11 +18628,6 @@ { "name": "GetExperimentEvaluationCountRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "start_at", @@ -18577,7 +18653,15 @@ "name": "variation_ids", "type": "string", "is_repeated": true + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18604,11 +18688,6 @@ { "name": "GetEvaluationTimeseriesCountRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "feature_id", @@ -18618,7 +18697,15 @@ "id": 3, "name": "time_range", "type": "TimeRange" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18642,15 +18729,18 @@ "name": "GetExperimentResultRequest", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "experiment_id", "type": "string" }, { - "id": 2, - "name": "experiment_id", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18677,10 +18767,13 @@ "type": "google.protobuf.Int32Value" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -18699,11 +18792,6 @@ { "name": "GetExperimentGoalCountRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "start_at", @@ -18734,7 +18822,15 @@ "name": "variation_ids", "type": "string", "is_repeated": true + }, + { + "id": 8, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18756,11 +18852,6 @@ { "name": "GetOpsEvaluationUserCountRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "ops_rule_id", @@ -18785,7 +18876,15 @@ "id": 6, "name": "variation_id", "type": "string" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18811,11 +18910,6 @@ { "name": "GetOpsGoalUserCountRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "ops_rule_id", @@ -18840,7 +18934,15 @@ "id": 6, "name": "variation_id", "type": "string" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -18867,15 +18969,18 @@ "name": "GetMAUCountRequest", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "year_month", "type": "string" }, { - "id": 2, - "name": "year_month", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -19316,16 +19421,19 @@ "name": "source_id", "type": "string" }, - { - "id": 10, - "name": "environment_namespace", - "type": "string" - }, { "id": 11, "name": "timestamp", "type": "int64" + }, + { + "id": 12, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 10 ] } ], @@ -19382,11 +19490,6 @@ "name": "source_id", "type": "string" }, - { - "id": 8, - "name": "environment_namespace", - "type": "string" - }, { "id": 9, "name": "timestamp", @@ -19411,7 +19514,15 @@ "id": 13, "name": "reason", "type": "string" + }, + { + "id": 14, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 8 ] } ], @@ -19899,10 +20010,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -19928,11 +20042,6 @@ "name": "cursor", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "order_by", @@ -19957,7 +20066,15 @@ "id": 8, "name": "archived", "type": "google.protobuf.BoolValue" + }, + { + "id": 9, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -19990,10 +20107,13 @@ "type": "CreateGoalCommand" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -20013,10 +20133,13 @@ "type": "ArchiveGoalCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -20036,10 +20159,13 @@ "type": "DeleteGoalCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -20064,10 +20190,13 @@ "type": "ChangeDescriptionGoalCommand" }, { - "id": 4, - "name": "environment_namespace", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 4 ] }, { @@ -20082,10 +20211,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -20131,11 +20263,6 @@ "name": "cursor", "type": "string" }, - { - "id": 7, - "name": "environment_namespace", - "type": "string" - }, { "id": 8, "name": "status", @@ -20171,7 +20298,15 @@ "name": "statuses", "type": "Experiment.Status", "is_repeated": true + }, + { + "id": 15, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 7 ] }, { @@ -20204,10 +20339,13 @@ "type": "CreateExperimentCommand" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -20228,11 +20366,6 @@ "name": "id", "type": "string" }, - { - "id": 4, - "name": "environment_namespace", - "type": "string" - }, { "id": 5, "name": "change_experiment_period_command", @@ -20247,11 +20380,17 @@ "id": 7, "name": "change_description_command", "type": "ChangeExperimentDescriptionCommand" + }, + { + "id": 8, + "name": "environment_id", + "type": "string" } ], "reserved_ids": [ 2, - 3 + 3, + 4 ] }, { @@ -20260,11 +20399,6 @@ { "name": "StartExperimentRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -20274,7 +20408,15 @@ "id": 3, "name": "command", "type": "StartExperimentCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -20283,11 +20425,6 @@ { "name": "FinishExperimentRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -20297,7 +20434,15 @@ "id": 3, "name": "command", "type": "FinishExperimentCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -20317,10 +20462,13 @@ "type": "StopExperimentCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -20340,10 +20488,13 @@ "type": "ArchiveExperimentCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -20363,10 +20514,13 @@ "type": "DeleteExperimentCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -21134,10 +21288,13 @@ "name": "CloneFeatureCommand", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -21721,11 +21878,6 @@ "name": "feature_id", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "type", @@ -21770,7 +21922,15 @@ "id": 12, "name": "updated_at", "type": "int64" + }, + { + "id": 13, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] } ], @@ -22284,10 +22444,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -22303,17 +22466,20 @@ { "name": "GetFeaturesRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "ids", "type": "string", "is_repeated": true + }, + { + "id": 3, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -22356,11 +22522,6 @@ "name": "order_direction", "type": "OrderDirection" }, - { - "id": 6, - "name": "environment_namespace", - "type": "string" - }, { "id": 7, "name": "maintainer", @@ -22390,7 +22551,15 @@ "id": 12, "name": "has_prerequisites", "type": "google.protobuf.BoolValue" + }, + { + "id": 13, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 6 ] }, { @@ -22434,10 +22603,13 @@ "is_repeated": true }, { - "id": 4, - "name": "environment_namespace", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 4 ] }, { @@ -22465,10 +22637,13 @@ "type": "CreateFeatureCommand" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -22585,15 +22760,18 @@ "type": "EnableFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22613,15 +22791,18 @@ "type": "DisableFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22641,15 +22822,18 @@ "type": "ArchiveFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22669,15 +22853,18 @@ "type": "UnarchiveFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22697,15 +22884,18 @@ "type": "DeleteFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22742,15 +22932,18 @@ "is_repeated": true }, { - "id": 6, - "name": "environment_namespace", + "id": 7, + "name": "comment", "type": "string" }, { - "id": 7, - "name": "comment", + "id": 8, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 6 ] }, { @@ -22771,15 +22964,18 @@ "is_repeated": true }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "comment", "type": "string" }, { - "id": 4, - "name": "comment", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22799,11 +22995,6 @@ "type": "Command", "is_repeated": true }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "comment", @@ -22813,7 +23004,15 @@ "id": 5, "name": "from", "type": "From" + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22833,10 +23032,13 @@ "type": "CloneFeatureCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22851,10 +23053,13 @@ "type": "CreateSegmentCommand" }, { - "id": 2, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -22876,10 +23081,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -22905,11 +23113,6 @@ "name": "cursor", "type": "string" }, - { - "id": 3, - "name": "environment_namespace", - "type": "string" - }, { "id": 4, "name": "order_by", @@ -22934,7 +23137,15 @@ "id": 8, "name": "is_in_use_status", "type": "google.protobuf.BoolValue" + }, + { + "id": 9, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22972,10 +23183,13 @@ "type": "DeleteSegmentCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -22996,10 +23210,13 @@ "is_repeated": true }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -23019,10 +23236,13 @@ "type": "AddSegmentUserCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -23042,10 +23262,13 @@ "type": "DeleteSegmentUserCommand" }, { - "id": 3, - "name": "environment_namespace", + "id": 4, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 3 ] }, { @@ -23070,10 +23293,13 @@ "type": "SegmentUser.State" }, { - "id": 4, - "name": "environment_namespace", + "id": 5, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 4 ] }, { @@ -23115,10 +23341,13 @@ "type": "string" }, { - "id": 6, - "name": "environment_namespace", + "id": 7, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 6 ] }, { @@ -23140,11 +23369,6 @@ { "name": "BulkUploadSegmentUsersRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "segment_id", @@ -23154,7 +23378,15 @@ "id": 3, "name": "command", "type": "BulkUploadSegmentUsersCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -23163,11 +23395,6 @@ { "name": "BulkDownloadSegmentUsersRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "segment_id", @@ -23177,7 +23404,15 @@ "id": 3, "name": "state", "type": "SegmentUser.State" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -23198,11 +23433,6 @@ "name": "user", "type": "bucketeer.user.User" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "tag", @@ -23212,7 +23442,15 @@ "id": 4, "name": "feature_id", "type": "string" + }, + { + "id": 5, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23228,11 +23466,6 @@ { "name": "ListTagsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -23257,7 +23490,15 @@ "id": 6, "name": "search_keyword", "type": "string" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -23284,16 +23525,19 @@ { "name": "CreateFlagTriggerRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "create_flag_trigger_command", "type": "CreateFlagTriggerCommand" + }, + { + "id": 3, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -23319,16 +23563,19 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "delete_flag_trigger_command", "type": "DeleteFlagTriggerCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23342,16 +23589,19 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "change_flag_trigger_description_command", "type": "ChangeFlagTriggerDescriptionCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23365,16 +23615,19 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "enable_flag_trigger_command", "type": "EnableFlagTriggerCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23388,16 +23641,19 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "disable_flag_trigger_command", "type": "DisableFlagTriggerCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23411,16 +23667,19 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "reset_flag_trigger_command", "type": "ResetFlagTriggerCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23447,10 +23706,13 @@ "type": "string" }, { - "id": 2, - "name": "environment_namespace", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -23476,11 +23738,6 @@ "name": "feature_id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "cursor", @@ -23500,7 +23757,15 @@ "id": 6, "name": "order_direction", "type": "OrderDirection" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] }, { @@ -26373,11 +26638,6 @@ "name": "id", "type": "string" }, - { - "id": 2, - "name": "environment_namespace", - "type": "string" - }, { "id": 3, "name": "source_type", @@ -26392,7 +26652,15 @@ "id": 5, "name": "is_admin_event", "type": "bool" + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 2 ] } ], @@ -26703,15 +26971,18 @@ "name": "GetSubscriptionRequest", "fields": [ { - "id": 1, - "name": "environment_namespace", + "id": 2, + "name": "id", "type": "string" }, { - "id": 2, - "name": "id", + "id": 3, + "name": "environment_id", "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26727,11 +26998,6 @@ { "name": "ListSubscriptionsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -26767,7 +27033,15 @@ "id": 8, "name": "disabled", "type": "google.protobuf.BoolValue" + }, + { + "id": 9, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26794,11 +27068,6 @@ { "name": "ListEnabledSubscriptionsRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -26814,7 +27083,15 @@ "name": "source_types", "type": "Subscription.SourceType", "is_repeated": true + }, + { + "id": 5, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26836,16 +27113,19 @@ { "name": "CreateSubscriptionRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "command", "type": "CreateSubscriptionCommand" + }, + { + "id": 3, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26854,11 +27134,6 @@ { "name": "DeleteSubscriptionRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -26868,7 +27143,15 @@ "id": 3, "name": "command", "type": "DeleteSubscriptionCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26877,11 +27160,6 @@ { "name": "EnableSubscriptionRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -26891,7 +27169,15 @@ "id": 3, "name": "command", "type": "EnableSubscriptionCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26900,11 +27186,6 @@ { "name": "DisableSubscriptionRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -26914,7 +27195,15 @@ "id": 3, "name": "command", "type": "DisableSubscriptionCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -26923,11 +27212,6 @@ { "name": "UpdateSubscriptionRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -26947,7 +27231,15 @@ "id": 5, "name": "rename_subscription_command", "type": "RenameSubscriptionCommand" + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -27498,11 +27790,6 @@ { "name": "CreatePushRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "command", @@ -27529,7 +27816,15 @@ "id": 5, "name": "fcm_service_account", "type": "bytes" + }, + { + "id": 6, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -27545,11 +27840,6 @@ { "name": "ListPushesRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "page_size", @@ -27574,7 +27864,15 @@ "id": 6, "name": "search_keyword", "type": "string" + }, + { + "id": 7, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -27601,11 +27899,6 @@ { "name": "DeletePushRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -27614,14 +27907,16 @@ { "id": 3, "name": "command", - "type": "DeletePushCommand", - "options": [ - { - "name": "deprecated", - "value": "true" - } - ] + "type": "DeletePushCommand" + }, + { + "id": 4, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -27630,11 +27925,6 @@ { "name": "UpdatePushRequest", "fields": [ - { - "id": 1, - "name": "environment_namespace", - "type": "string" - }, { "id": 2, "name": "id", @@ -27683,7 +27973,15 @@ "id": 7, "name": "name", "type": "google.protobuf.StringValue" + }, + { + "id": 8, + "name": "environment_id", + "type": "string" } + ], + "reserved_ids": [ + 1 ] }, { @@ -27701,7 +27999,7 @@ "fields": [ { "id": 1, - "name": "environment_namespace", + "name": "environment_id", "type": "string" }, { diff --git a/proto/push/proto_descriptor.pb b/proto/push/proto_descriptor.pb index d5b627b362..cb50ffd0af 100644 Binary files a/proto/push/proto_descriptor.pb and b/proto/push/proto_descriptor.pb differ diff --git a/proto/push/service.pb.go b/proto/push/service.pb.go index 5c7eaeb212..de8c4a04ea 100644 --- a/proto/push/service.pb.go +++ b/proto/push/service.pb.go @@ -142,12 +142,12 @@ type CreatePushRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` // Deprecated: Do not use. Command *CreatePushCommand `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags"` Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name"` FcmServiceAccount []byte `protobuf:"bytes,5,opt,name=fcm_service_account,json=fcmServiceAccount,proto3" json:"fcm_service_account"` + EnvironmentId string `protobuf:"bytes,6,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *CreatePushRequest) Reset() { @@ -182,13 +182,6 @@ func (*CreatePushRequest) Descriptor() ([]byte, []int) { return file_proto_push_service_proto_rawDescGZIP(), []int{0} } -func (x *CreatePushRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - // Deprecated: Do not use. func (x *CreatePushRequest) GetCommand() *CreatePushCommand { if x != nil { @@ -218,6 +211,13 @@ func (x *CreatePushRequest) GetFcmServiceAccount() []byte { return nil } +func (x *CreatePushRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type CreatePushResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -270,12 +270,12 @@ type ListPushesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` - Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` - OrderBy ListPushesRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.push.ListPushesRequest_OrderBy" json:"order_by"` - OrderDirection ListPushesRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.push.ListPushesRequest_OrderDirection" json:"order_direction"` - SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size"` + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor"` + OrderBy ListPushesRequest_OrderBy `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=bucketeer.push.ListPushesRequest_OrderBy" json:"order_by"` + OrderDirection ListPushesRequest_OrderDirection `protobuf:"varint,5,opt,name=order_direction,json=orderDirection,proto3,enum=bucketeer.push.ListPushesRequest_OrderDirection" json:"order_direction"` + SearchKeyword string `protobuf:"bytes,6,opt,name=search_keyword,json=searchKeyword,proto3" json:"search_keyword"` + EnvironmentId string `protobuf:"bytes,7,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *ListPushesRequest) Reset() { @@ -310,13 +310,6 @@ func (*ListPushesRequest) Descriptor() ([]byte, []int) { return file_proto_push_service_proto_rawDescGZIP(), []int{2} } -func (x *ListPushesRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *ListPushesRequest) GetPageSize() int64 { if x != nil { return x.PageSize @@ -352,6 +345,13 @@ func (x *ListPushesRequest) GetSearchKeyword() string { return "" } +func (x *ListPushesRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type ListPushesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -420,10 +420,9 @@ type DeletePushRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` - // Deprecated: Do not use. - Command *DeletePushCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Command *DeletePushCommand `protobuf:"bytes,3,opt,name=command,proto3" json:"command"` + EnvironmentId string `protobuf:"bytes,4,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *DeletePushRequest) Reset() { @@ -458,13 +457,6 @@ func (*DeletePushRequest) Descriptor() ([]byte, []int) { return file_proto_push_service_proto_rawDescGZIP(), []int{4} } -func (x *DeletePushRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *DeletePushRequest) GetId() string { if x != nil { return x.Id @@ -472,7 +464,6 @@ func (x *DeletePushRequest) GetId() string { return "" } -// Deprecated: Do not use. func (x *DeletePushRequest) GetCommand() *DeletePushCommand { if x != nil { return x.Command @@ -480,6 +471,13 @@ func (x *DeletePushRequest) GetCommand() *DeletePushCommand { return nil } +func (x *DeletePushRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type DeletePushResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -523,8 +521,7 @@ type UpdatePushRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` // Deprecated: Do not use. AddPushTagsCommand *AddPushTagsCommand `protobuf:"bytes,3,opt,name=add_push_tags_command,json=addPushTagsCommand,proto3" json:"add_push_tags_command"` // Deprecated: Do not use. @@ -533,6 +530,7 @@ type UpdatePushRequest struct { RenamePushCommand *RenamePushCommand `protobuf:"bytes,5,opt,name=rename_push_command,json=renamePushCommand,proto3" json:"rename_push_command"` Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags"` Name *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=name,proto3" json:"name"` + EnvironmentId string `protobuf:"bytes,8,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` } func (x *UpdatePushRequest) Reset() { @@ -567,13 +565,6 @@ func (*UpdatePushRequest) Descriptor() ([]byte, []int) { return file_proto_push_service_proto_rawDescGZIP(), []int{6} } -func (x *UpdatePushRequest) GetEnvironmentNamespace() string { - if x != nil { - return x.EnvironmentNamespace - } - return "" -} - func (x *UpdatePushRequest) GetId() string { if x != nil { return x.Id @@ -619,6 +610,13 @@ func (x *UpdatePushRequest) GetName() *wrapperspb.StringValue { return nil } +func (x *UpdatePushRequest) GetEnvironmentId() string { + if x != nil { + return x.EnvironmentId + } + return "" +} + type UpdatePushResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -671,8 +669,8 @@ type GetPushRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EnvironmentNamespace string `protobuf:"bytes,1,opt,name=environment_namespace,json=environmentNamespace,proto3" json:"environment_namespace"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` + EnvironmentId string `protobuf:"bytes,1,opt,name=environment_id,json=environmentId,proto3" json:"environment_id"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id"` } func (x *GetPushRequest) Reset() { @@ -707,9 +705,9 @@ func (*GetPushRequest) Descriptor() ([]byte, []int) { return file_proto_push_service_proto_rawDescGZIP(), []int{8} } -func (x *GetPushRequest) GetEnvironmentNamespace() string { +func (x *GetPushRequest) GetEnvironmentId() string { if x != nil { - return x.EnvironmentNamespace + return x.EnvironmentId } return "" } @@ -778,52 +776,51 @@ var file_proto_push_service_proto_rawDesc = []byte{ 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe1, 0x01, 0x0a, 0x11, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd9, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2e, 0x0a, 0x13, 0x66, 0x63, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x66, 0x63, - 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x3e, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, - 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x22, - 0xac, 0x03, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x44, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, + 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x63, + 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x66, 0x63, 0x6d, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x3e, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, + 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, 0x73, + 0x68, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x22, 0xa4, 0x03, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, + 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x59, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x59, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, - 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0x7b, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x22, 0x40, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x03, 0x22, 0x23, 0x0a, 0x0e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x7b, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x75, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, @@ -831,90 +828,88 @@ var file_proto_push_service_proto_rawDesc = []byte{ 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x11, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x03, - 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x5f, - 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x75, 0x73, 0x68, - 0x54, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x12, 0x61, 0x64, 0x64, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x62, 0x0a, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x75, - 0x73, 0x68, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, - 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, - 0x68, 0x54, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, - 0x52, 0x15, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x72, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, - 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x75, 0x73, 0x68, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x72, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, - 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x70, 0x75, - 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x04, - 0x70, 0x75, 0x73, 0x68, 0x22, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, - 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, - 0x73, 0x68, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x32, 0xb7, 0x03, 0x0a, 0x0b, 0x50, 0x75, 0x73, - 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, - 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x55, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x21, 0x2e, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x75, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x14, 0x0a, 0x12, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xac, 0x03, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x5f, 0x70, + 0x75, 0x73, 0x68, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, + 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x75, 0x73, 0x68, 0x54, + 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, + 0x61, 0x64, 0x64, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x62, 0x0a, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x75, 0x73, + 0x68, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, + 0x54, 0x61, 0x67, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x15, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x54, 0x61, 0x67, 0x73, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, + 0x70, 0x75, 0x73, 0x68, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x72, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x22, 0x3e, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, + 0x22, 0x47, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, + 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x50, 0x75, 0x73, 0x68, + 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x32, 0xb7, 0x03, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, + 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, - 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x55, 0x70, 0x64, + 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x73, + 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x12, - 0x1e, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, - 0x73, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, + 0x73, 0x68, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, + 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x75, 0x73, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x12, 0x1e, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x65, 0x72, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x65, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x73, 0x68, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/push/service.proto b/proto/push/service.proto index f506c1c5b3..133b917ad7 100644 --- a/proto/push/service.proto +++ b/proto/push/service.proto @@ -23,11 +23,12 @@ import "proto/push/push.proto"; import "proto/push/command.proto"; message CreatePushRequest { - string environment_namespace = 1; + reserved 1; CreatePushCommand command = 2 [deprecated = true]; repeated string tags = 3; string name = 4; bytes fcm_service_account = 5; + string environment_id = 6; } message CreatePushResponse { @@ -45,12 +46,13 @@ message ListPushesRequest { ASC = 0; DESC = 1; } - string environment_namespace = 1; + reserved 1; int64 page_size = 2; string cursor = 3; OrderBy order_by = 4; OrderDirection order_direction = 5; string search_keyword = 6; + string environment_id = 7; } message ListPushesResponse { @@ -60,21 +62,23 @@ message ListPushesResponse { } message DeletePushRequest { - string environment_namespace = 1; + reserved 1; string id = 2; - DeletePushCommand command = 3 [deprecated = true]; + DeletePushCommand command = 3; + string environment_id = 4; } message DeletePushResponse {} message UpdatePushRequest { - string environment_namespace = 1; + reserved 1; string id = 2; AddPushTagsCommand add_push_tags_command = 3 [deprecated = true]; DeletePushTagsCommand delete_push_tags_command = 4 [deprecated = true]; RenamePushCommand rename_push_command = 5 [deprecated = true]; repeated string tags = 6; google.protobuf.StringValue name = 7; + string environment_id = 8; } message UpdatePushResponse { @@ -82,7 +86,7 @@ message UpdatePushResponse { } message GetPushRequest { - string environment_namespace = 1; + string environment_id = 1; string id = 2; } diff --git a/test/e2e/autoops/auto_ops_test.go b/test/e2e/autoops/auto_ops_test.go index 3d48d661fc..d2613c45e0 100644 --- a/test/e2e/autoops/auto_ops_test.go +++ b/test/e2e/autoops/auto_ops_test.go @@ -80,10 +80,10 @@ var ( type eventType int type event struct { - ID string `json:"id,omitempty"` - Event json.RawMessage `json:"event,omitempty"` - EnvironmentNamespace string `json:"environment_namespace,omitempty"` - Type eventType `json:"type,omitempty"` + ID string `json:"id,omitempty"` + Event json.RawMessage `json:"event,omitempty"` + EnvironmentId string `json:"environment_id,omitempty"` + Type eventType `json:"type,omitempty"` } type successResponse struct { @@ -299,8 +299,8 @@ func TestDeleteAutoOpsRule(t *testing.T) { } deleteAutoOpsRules(t, autoOpsClient, autoOpsRules[0].Id) resp, err := autoOpsClient.GetAutoOpsRule(ctx, &autoopsproto.GetAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: autoOpsRules[0].Id, + EnvironmentId: *environmentNamespace, + Id: autoOpsRules[0].Id, }) if resp != nil { t.Fatal("autoOpsRules is not deleted") @@ -336,8 +336,8 @@ func TestUpdateAutoOpsRule(t *testing.T) { } updateAutoOpsRules(t, autoOpsClient, autoOpsRules[0].Id, &addClause) resp, err := autoOpsClient.GetAutoOpsRule(ctx, &autoopsproto.GetAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: autoOpsRules[0].Id, + EnvironmentId: *environmentNamespace, + Id: autoOpsRules[0].Id, }) if resp == nil { t.Fatalf("failed to get AutoOpsRule, err %d", err) @@ -382,8 +382,8 @@ func TestExecuteAutoOpsRule(t *testing.T) { t.Fatal("not enough rules") } _, err := autoOpsClient.ExecuteAutoOps(ctx, &autoopsproto.ExecuteAutoOpsRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: autoOpsRules[0].Id, + EnvironmentId: *environmentNamespace, + Id: autoOpsRules[0].Id, ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ ClauseId: autoOpsRules[0].Clauses[0].Id, }, @@ -421,8 +421,8 @@ func TestExecuteAutoOpsRuleForMultiSchedule(t *testing.T) { t.Fatal("not enough rules") } _, err := autoOpsClient.ExecuteAutoOps(ctx, &autoopsproto.ExecuteAutoOpsRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: autoOpsRules[0].Id, + EnvironmentId: *environmentNamespace, + Id: autoOpsRules[0].Id, ExecuteAutoOpsRuleCommand: &autoopsproto.ExecuteAutoOpsRuleCommand{ ClauseId: autoOpsRules[0].Clauses[0].Id, }, @@ -766,8 +766,8 @@ func createGoal(ctx context.Context, t *testing.T, client experimentclient.Clien Description: goalID, } _, err := client.CreateGoal(ctx, &experimentproto.CreateGoalRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -828,8 +828,8 @@ func createAutoOpsRule( DatetimeClauses: dcs, } _, err := client.CreateAutoOpsRule(ctx, &autoopsproto.CreateAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Command: cmd, + EnvironmentId: *environmentNamespace, + Command: cmd, }) if err != nil { t.Fatal(err) @@ -897,8 +897,8 @@ func createFeature(ctx context.Context, t *testing.T, client featureclient.Clien t.Helper() cmd := newCreateFeatureCommand(featureID) createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } if _, err := client.CreateFeature(ctx, createReq); err != nil { t.Fatal(err) @@ -910,8 +910,8 @@ func createDisabledFeature(ctx context.Context, t *testing.T, client featureclie t.Helper() cmd := newCreateFeatureCommand(featureID) createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } if _, err := client.CreateFeature(ctx, createReq); err != nil { t.Fatal(err) @@ -921,8 +921,8 @@ func createDisabledFeature(ctx context.Context, t *testing.T, client featureclie func getFeature(t *testing.T, client featureclient.Client, featureID string) *featureproto.Feature { t.Helper() getReq := &featureproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -982,9 +982,9 @@ func newCreateFeatureCommand(featureID string) *featureproto.CreateFeatureComman func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &featureproto.EnableFeatureRequest{ - Id: featureID, - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -998,9 +998,9 @@ func listAutoOpsRulesByFeatureID(t *testing.T, client autoopsclient.Client, feat ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListAutoOpsRules(ctx, &autoopsproto.ListAutoOpsRulesRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: int64(500), - FeatureIds: []string{featureID}, + EnvironmentId: *environmentNamespace, + PageSize: int64(500), + FeatureIds: []string{featureID}, }) if err != nil { t.Fatal("failed to list auto ops rules", err) @@ -1015,8 +1015,8 @@ func getAutoOpsRules(t *testing.T, id string) *autoopsproto.AutoOpsRule { c := newAutoOpsClient(t) defer c.Close() resp, err := c.GetAutoOpsRule(ctx, &autoopsproto.GetAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { t.Fatal("failed to list auto ops rules", err) @@ -1029,9 +1029,9 @@ func deleteAutoOpsRules(t *testing.T, client autoopsclient.Client, id string) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() _, err := client.DeleteAutoOpsRule(ctx, &autoopsproto.DeleteAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &autoopsproto.DeleteAutoOpsRuleCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &autoopsproto.DeleteAutoOpsRuleCommand{}, }) if err != nil { t.Fatal("failed to list auto ops rules", err) @@ -1057,8 +1057,8 @@ func TestStopAutoOpsRule(t *testing.T) { } stopAutoOpsRule(t, autoOpsClient, autoOpsRules[0].Id) resp, err := autoOpsClient.GetAutoOpsRule(ctx, &autoopsproto.GetAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: autoOpsRules[0].Id, + EnvironmentId: *environmentNamespace, + Id: autoOpsRules[0].Id, }) if resp == nil { t.Fatalf("failed to get AutoOpsRule, err %d", err) @@ -1074,9 +1074,9 @@ func stopAutoOpsRule(t *testing.T, client autoopsclient.Client, id string) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() _, err := client.StopAutoOpsRule(ctx, &autoopsproto.StopAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &autoopsproto.StopAutoOpsRuleCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &autoopsproto.StopAutoOpsRuleCommand{}, }) if err != nil { t.Fatal("failed to stop auto ops rules", err) @@ -1088,8 +1088,8 @@ func updateAutoOpsRules(t *testing.T, client autoopsclient.Client, id string, da ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() _, err := client.UpdateAutoOpsRule(ctx, &autoopsproto.UpdateAutoOpsRuleRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, AddDatetimeClauseCommands: []*autoopsproto.AddDatetimeClauseCommand{ {DatetimeClause: dateClause}, }, diff --git a/test/e2e/autoops/progressive_rollout_test.go b/test/e2e/autoops/progressive_rollout_test.go index a428c69fa7..5decf71fca 100644 --- a/test/e2e/autoops/progressive_rollout_test.go +++ b/test/e2e/autoops/progressive_rollout_test.go @@ -157,8 +157,8 @@ func TestStopProgressiveRollout(t *testing.T) { } stopProgressiveRollout(t, autoOpsClient, progressiveRollouts[0].Id) resp, err := autoOpsClient.GetProgressiveRollout(ctx, &autoopsproto.GetProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: progressiveRollouts[0].Id, + EnvironmentId: *environmentNamespace, + Id: progressiveRollouts[0].Id, }) assert.NoError(t, err) assert.True(t, resp.ProgressiveRollout.StoppedAt > time.Now().Add(time.Second*-10).Unix()) @@ -196,8 +196,8 @@ func TestDeleteProgressiveRollout(t *testing.T) { } deleteProgressiveRollout(t, autoOpsClient, progressiveRollouts[0].Id) resp, err := autoOpsClient.GetProgressiveRollout(ctx, &autoopsproto.GetProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: progressiveRollouts[0].Id, + EnvironmentId: *environmentNamespace, + Id: progressiveRollouts[0].Id, }) if resp != nil { t.Fatal("progressiveRollout is not deleted") @@ -240,8 +240,8 @@ func TestExecuteProgressiveRollout(t *testing.T) { } clause := unmarshalProgressiveRolloutManualClause(t, progressiveRollouts[0].Clause) _, err := autoOpsClient.ExecuteProgressiveRollout(ctx, &autoopsproto.ExecuteProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: progressiveRollouts[0].Id, + EnvironmentId: *environmentNamespace, + Id: progressiveRollouts[0].Id, ChangeProgressiveRolloutTriggeredAtCommand: &autoopsproto.ChangeProgressiveRolloutScheduleTriggeredAtCommand{ ScheduleId: clause.Schedules[0].ScheduleId, }, @@ -374,8 +374,8 @@ func createProgressiveRollout( ProgressiveRolloutTemplateScheduleClause: template, } _, err := client.CreateProgressiveRollout(ctx, &autoopsproto.CreateProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Command: cmd, + EnvironmentId: *environmentNamespace, + Command: cmd, }) if err != nil { t.Fatal(err) @@ -387,9 +387,9 @@ func listProgressiveRollouts(t *testing.T, client autoopsclient.Client, featureI ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListProgressiveRollouts(ctx, &autoopsproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: 0, - FeatureIds: []string{featureID}, + EnvironmentId: *environmentNamespace, + PageSize: 0, + FeatureIds: []string{featureID}, }) if err != nil { t.Fatal("Failed to list progressive rollout", err) @@ -430,8 +430,8 @@ func getProgressiveRollout(t *testing.T, id string) *autoopsproto.ProgressiveRol c := newAutoOpsClient(t) defer c.Close() resp, err := c.GetProgressiveRollout(ctx, &autoopsproto.GetProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { t.Fatal("Failed to get progressive rollout", err) @@ -444,8 +444,8 @@ func stopProgressiveRollout(t *testing.T, client autoopsclient.Client, id string ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() _, err := client.StopProgressiveRollout(ctx, &autoopsproto.StopProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, Command: &autoopsproto.StopProgressiveRolloutCommand{ StoppedBy: autoopsproto.ProgressiveRollout_USER, }, @@ -460,9 +460,9 @@ func deleteProgressiveRollout(t *testing.T, client autoopsclient.Client, id stri ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() _, err := client.DeleteProgressiveRollout(ctx, &autoopsproto.DeleteProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &autoopsproto.DeleteProgressiveRolloutCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &autoopsproto.DeleteProgressiveRolloutCommand{}, }) if err != nil { t.Fatal("Failed to delete progressive rollout", err) diff --git a/test/e2e/eventcounter/eventcounter_test.go b/test/e2e/eventcounter/eventcounter_test.go index 02574c76b3..d972554e46 100644 --- a/test/e2e/eventcounter/eventcounter_test.go +++ b/test/e2e/eventcounter/eventcounter_test.go @@ -1606,8 +1606,8 @@ func createGoals(ctx context.Context, t *testing.T, client experimentclient.Clie Description: fmt.Sprintf("%s-goal-description", prefixTestName), } _, err := client.CreateGoal(ctx, &experimentproto.CreateGoalRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -1636,16 +1636,16 @@ func createExperimentWithMultiGoals( BaseVariationId: baseVariationID, } resp, err := client.CreateExperiment(ctx, &experimentproto.CreateExperimentRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) } _, err = client.StartExperiment(ctx, &experimentproto.StartExperimentRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: resp.Experiment.Id, - Command: &experimentproto.StartExperimentCommand{}, + EnvironmentId: *environmentNamespace, + Id: resp.Experiment.Id, + Command: &experimentproto.StartExperimentCommand{}, }) if err != nil { t.Fatal(err) @@ -2058,8 +2058,8 @@ func createFeature( t.Helper() cmd := newCreateFeatureCommand(featureID, []string{variationA, variationB}) createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2077,7 +2077,7 @@ func addTag(t *testing.T, tag string, featureID string, client featureclient.Cli AddTagCommands: []*featureproto.AddTagCommand{ {Tag: tag}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2089,9 +2089,9 @@ func addTag(t *testing.T, tag string, featureID string, client featureclient.Cli func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &featureproto.EnableFeatureRequest{ - Id: featureID, - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2115,8 +2115,8 @@ func addFeatureIndividualTargeting(t *testing.T, featureID, userID, variationID Command: cmd, }, }, - EnvironmentNamespace: *environmentNamespace, - From: featureproto.UpdateFeatureTargetingRequest_USER, + EnvironmentId: *environmentNamespace, + From: featureproto.UpdateFeatureTargetingRequest_USER, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2161,8 +2161,8 @@ func getExperiment(t *testing.T, c experimentclient.Client, id string) (*experim ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req := &experimentproto.GetExperimentRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, } var response *experimentproto.GetExperimentResponse var err error @@ -2190,8 +2190,8 @@ func getExperimentResult(t *testing.T, c ecclient.Client, experimentID string) ( ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req := &ecproto.GetExperimentResultRequest{ - ExperimentId: experimentID, - EnvironmentNamespace: *environmentNamespace, + ExperimentId: experimentID, + EnvironmentId: *environmentNamespace, } var response *ecproto.GetExperimentResultResponse var err error @@ -2223,12 +2223,12 @@ func getExperimentEvaluationCount( defer cancel() now := time.Now() req := &ecproto.GetExperimentEvaluationCountRequest{ - EnvironmentNamespace: *environmentNamespace, - StartAt: now.Add(-30 * 24 * time.Hour).Unix(), - EndAt: now.Unix(), - FeatureId: featureID, - FeatureVersion: featureVersion, - VariationIds: variationIDs, + EnvironmentId: *environmentNamespace, + StartAt: now.Add(-30 * 24 * time.Hour).Unix(), + EndAt: now.Unix(), + FeatureId: featureID, + FeatureVersion: featureVersion, + VariationIds: variationIDs, } var response *ecproto.GetExperimentEvaluationCountResponse var err error @@ -2260,13 +2260,13 @@ func getExperimentGoalCount( defer cancel() now := time.Now() req := &ecproto.GetExperimentGoalCountRequest{ - EnvironmentNamespace: *environmentNamespace, - StartAt: now.Add(-30 * 24 * time.Hour).Unix(), - EndAt: now.Unix(), - GoalId: goalID, - FeatureId: featureID, - FeatureVersion: featureVersion, - VariationIds: variationIDs, + EnvironmentId: *environmentNamespace, + StartAt: now.Add(-30 * 24 * time.Hour).Unix(), + EndAt: now.Unix(), + GoalId: goalID, + FeatureId: featureID, + FeatureVersion: featureVersion, + VariationIds: variationIDs, } var response *ecproto.GetExperimentGoalCountResponse var err error @@ -2293,8 +2293,8 @@ func getExperimentGoalCount( func getFeature(t *testing.T, client featureclient.Client, featureID string) (*featureproto.Feature, error) { t.Helper() getReq := &featureproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2326,9 +2326,9 @@ func getEvaluationTimeseriesCount( ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req := &ecproto.GetEvaluationTimeseriesCountRequest{ - EnvironmentNamespace: *environmentNamespace, - FeatureId: featureID, - TimeRange: timeRange, + EnvironmentId: *environmentNamespace, + FeatureId: featureID, + TimeRange: timeRange, } var response *ecproto.GetEvaluationTimeseriesCountResponse var err error diff --git a/test/e2e/experiment/experiment_test.go b/test/e2e/experiment/experiment_test.go index dc9f0f01a4..35244b7784 100644 --- a/test/e2e/experiment/experiment_test.go +++ b/test/e2e/experiment/experiment_test.go @@ -68,8 +68,8 @@ func TestCreateAndGetExperiment(t *testing.T) { feature := getFeature(ctx, t, featureID) expected := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -96,8 +96,8 @@ func TestListExperiments(t *testing.T) { actualExps := []*experimentproto.Experiment{} for _, e := range expectedExps { getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: e.Id, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -121,15 +121,15 @@ func TestStopExperiment(t *testing.T) { stopAt := startAt.Local().Add(time.Hour * 1) e := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) if _, err := c.StopExperiment(ctx, &experimentproto.StopExperimentRequest{ - Id: e.Id, - Command: &experimentproto.StopExperimentCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + Command: &experimentproto.StopExperimentCommand{}, + EnvironmentId: *environmentNamespace, }); err != nil { t.Fatal(err) } getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: e.Id, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -153,15 +153,15 @@ func TestArchiveExperiment(t *testing.T) { stopAt := startAt.Local().Add(time.Hour * 1) e := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) if _, err := c.ArchiveExperiment(ctx, &experimentproto.ArchiveExperimentRequest{ - Id: e.Id, - Command: &experimentproto.ArchiveExperimentCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + Command: &experimentproto.ArchiveExperimentCommand{}, + EnvironmentId: *environmentNamespace, }); err != nil { t.Fatal(err) } getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: e.Id, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -185,15 +185,15 @@ func TestDeleteExperiment(t *testing.T) { stopAt := startAt.Local().Add(time.Hour * 1) e := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) if _, err := c.DeleteExperiment(ctx, &experimentproto.DeleteExperimentRequest{ - Id: e.Id, - Command: &experimentproto.DeleteExperimentCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + Command: &experimentproto.DeleteExperimentCommand{}, + EnvironmentId: *environmentNamespace, }); err != nil { t.Fatal(err) } getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: e.Id, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -222,13 +222,13 @@ func TestUpdateExperiment(t *testing.T) { if _, err := c.UpdateExperiment(ctx, &experimentproto.UpdateExperimentRequest{ Id: e.Id, ChangeExperimentPeriodCommand: &experimentproto.ChangeExperimentPeriodCommand{StartAt: startAt.Unix(), StopAt: stopAt.Unix()}, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, }); err != nil { t.Fatal(err) } getResp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: e.Id, - EnvironmentNamespace: *environmentNamespace, + Id: e.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -251,8 +251,8 @@ func TestCreateAndGetGoal(t *testing.T) { expectedName := fmt.Sprintf("%s-goal-name", goalID) expectedDescription := fmt.Sprintf("%s-goal-description", goalID) getResp, err := c.GetGoal(ctx, &experimentproto.GetGoalRequest{ - Id: goalID, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -281,8 +281,8 @@ func TestListGoalsCursor(t *testing.T) { createGoals(ctx, t, c, 2) expectedSize := 1 listResp, err := c.ListGoals(ctx, &experimentproto.ListGoalsRequest{ - PageSize: int64(expectedSize), - EnvironmentNamespace: *environmentNamespace, + PageSize: int64(expectedSize), + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -295,9 +295,9 @@ func TestListGoalsCursor(t *testing.T) { t.Fatalf("Different sizes. Expected: %v, actual: %v", expectedSize, actualSize) } listResp, err = c.ListGoals(ctx, &experimentproto.ListGoalsRequest{ - PageSize: int64(expectedSize), - Cursor: listResp.Cursor, - EnvironmentNamespace: *environmentNamespace, + PageSize: int64(expectedSize), + Cursor: listResp.Cursor, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -317,8 +317,8 @@ func TestListGoalsPageSize(t *testing.T) { createGoals(ctx, t, c, 3) expectedSize := 3 listResp, err := c.ListGoals(ctx, &experimentproto.ListGoalsRequest{ - PageSize: int64(expectedSize), - EnvironmentNamespace: *environmentNamespace, + PageSize: int64(expectedSize), + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -342,14 +342,14 @@ func TestUpdateGoal(t *testing.T) { Id: goalID, RenameCommand: &experimentproto.RenameGoalCommand{Name: expectedName}, ChangeDescriptionCommand: &experimentproto.ChangeDescriptionGoalCommand{Description: expectedDescription}, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) } getResp, err := c.GetGoal(ctx, &experimentproto.GetGoalRequest{ - Id: goalID, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -377,16 +377,16 @@ func TestArchiveGoal(t *testing.T) { defer c.Close() goalID := createGoal(ctx, t, c) _, err := c.ArchiveGoal(ctx, &experimentproto.ArchiveGoalRequest{ - Id: goalID, - Command: &experimentproto.ArchiveGoalCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + Command: &experimentproto.ArchiveGoalCommand{}, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) } getResp, err := c.GetGoal(ctx, &experimentproto.GetGoalRequest{ - Id: goalID, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -404,16 +404,16 @@ func TestDeleteGoal(t *testing.T) { defer c.Close() goalID := createGoal(ctx, t, c) _, err := c.DeleteGoal(ctx, &experimentproto.DeleteGoalRequest{ - Id: goalID, - Command: &experimentproto.DeleteGoalCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + Command: &experimentproto.DeleteGoalCommand{}, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) } getResp, err := c.GetGoal(ctx, &experimentproto.GetGoalRequest{ - Id: goalID, - EnvironmentNamespace: *environmentNamespace, + Id: goalID, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -437,8 +437,8 @@ func TestStatusUpdateFromWaitingToRunning(t *testing.T) { feature := getFeature(ctx, t, featureID) expected := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) resp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -448,8 +448,8 @@ func TestStatusUpdateFromWaitingToRunning(t *testing.T) { } for i := 0; i < retryTimes; i++ { resp, err = c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -479,8 +479,8 @@ func TestStatusUpdateFromRunningToStopped(t *testing.T) { feature := getFeature(ctx, t, featureID) expected := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) resp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -489,23 +489,23 @@ func TestStatusUpdateFromRunningToStopped(t *testing.T) { t.Fatalf("Experiment status is not waiting. actual: %d", resp.Experiment.Status) } if _, err = c.StartExperiment(ctx, &experimentproto.StartExperimentRequest{ - Id: expected.Id, - Command: &experimentproto.StartExperimentCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + Command: &experimentproto.StartExperimentCommand{}, + EnvironmentId: *environmentNamespace, }); err != nil { t.Fatal(err) } resp, err = c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if resp.Experiment.Status != experimentproto.Experiment_RUNNING { t.Fatalf("Experiment status is not running. actual: %d", resp.Experiment.Status) } for i := 0; i < retryTimes; i++ { resp, err = c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -535,8 +535,8 @@ func TestStatusUpdateFromWaitingToStopped(t *testing.T) { feature := getFeature(ctx, t, featureID) expected := createExperimentWithMultiGoals(ctx, t, c, featureID, feature.Variations[0].Id, goalIDs, startAt, stopAt) resp, err := c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -546,8 +546,8 @@ func TestStatusUpdateFromWaitingToStopped(t *testing.T) { } for i := 0; i < retryTimes; i++ { resp, err = c.GetExperiment(ctx, &experimentproto.GetExperimentRequest{ - Id: expected.Id, - EnvironmentNamespace: *environmentNamespace, + Id: expected.Id, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -571,8 +571,8 @@ func createGoal(ctx context.Context, t *testing.T, client experimentclient.Clien Description: fmt.Sprintf("%s-goal-description", goalID), } _, err := client.CreateGoal(ctx, &experimentproto.CreateGoalRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -622,8 +622,8 @@ func createExperimentWithMultiGoals( BaseVariationId: baseVariationID, } resp, err := client.CreateExperiment(ctx, &experimentproto.CreateExperimentRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal(err) @@ -664,8 +664,8 @@ func getFeature(ctx context.Context, t *testing.T, featureID string) *featurepro client := newFeatureClient(t) defer client.Close() req := &featureproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + EnvironmentId: *environmentNamespace, } resp, err := client.GetFeature(ctx, req) if err != nil { @@ -680,8 +680,8 @@ func createFeature(ctx context.Context, t *testing.T, featureID string) { defer client.Close() cmd := newCreateFeatureCommand(featureID) createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } if _, err := client.CreateFeature(ctx, createReq); err != nil { t.Fatal(err) @@ -738,9 +738,9 @@ func newCreateFeatureCommand(featureID string) *featureproto.CreateFeatureComman func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &featureproto.EnableFeatureRequest{ - Id: featureID, - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() diff --git a/test/e2e/feature/feature_flag_trigger_test.go b/test/e2e/feature/feature_flag_trigger_test.go index e2e3755381..d92cedece4 100644 --- a/test/e2e/feature/feature_flag_trigger_test.go +++ b/test/e2e/feature/feature_flag_trigger_test.go @@ -76,8 +76,8 @@ func TestUpdateFlagTrigger(t *testing.T) { time.Sleep(1 * time.Second) // Update flag trigger updateFlagTriggerReq := &featureproto.UpdateFlagTriggerRequest{ - Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: createResp.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, ChangeFlagTriggerDescriptionCommand: &featureproto.ChangeFlagTriggerDescriptionCommand{ Description: newTriggerDescription(t), }, @@ -88,8 +88,8 @@ func TestUpdateFlagTrigger(t *testing.T) { } // Get flag trigger getFlagTriggerReq := &featureproto.GetFlagTriggerRequest{ - Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: createResp.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, } resp := getFeatureFlagTrigger(t, client, getFlagTriggerReq) if resp.FlagTrigger.Description != updateFlagTriggerReq.ChangeFlagTriggerDescriptionCommand.Description { @@ -113,7 +113,7 @@ func TestDisableEnableFlagTrigger(t *testing.T) { // Disable flag trigger disableFlagTriggerReq := &featureproto.DisableFlagTriggerRequest{ Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, DisableFlagTriggerCommand: &featureproto.DisableFlagTriggerCommand{}, } _, err := client.DisableFlagTrigger(context.Background(), disableFlagTriggerReq) @@ -121,8 +121,8 @@ func TestDisableEnableFlagTrigger(t *testing.T) { t.Fatal(err) } getFlagTriggerReq := &featureproto.GetFlagTriggerRequest{ - Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: createResp.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, } // Get flag trigger resp := getFeatureFlagTrigger(t, client, getFlagTriggerReq) @@ -132,7 +132,7 @@ func TestDisableEnableFlagTrigger(t *testing.T) { // Enable flag trigger enableFlagTriggerReq := &featureproto.EnableFlagTriggerRequest{ Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, EnableFlagTriggerCommand: &featureproto.EnableFlagTriggerCommand{}, } _, err = client.EnableFlagTrigger(context.Background(), enableFlagTriggerReq) @@ -162,7 +162,7 @@ func TestResetFlagTrigger(t *testing.T) { // Reset flag trigger resetFlagTriggerReq := &featureproto.ResetFlagTriggerRequest{ Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, ResetFlagTriggerCommand: &featureproto.ResetFlagTriggerCommand{}, } resetResp, err := client.ResetFlagTrigger(context.Background(), resetFlagTriggerReq) @@ -190,7 +190,7 @@ func TestDeleteFlagTrigger(t *testing.T) { // Delete flag trigger deleteFlagTriggerReq := &featureproto.DeleteFlagTriggerRequest{ Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, DeleteFlagTriggerCommand: &featureproto.DeleteFlagTriggerCommand{}, } _, err := client.DeleteFlagTrigger(context.Background(), deleteFlagTriggerReq) @@ -199,8 +199,8 @@ func TestDeleteFlagTrigger(t *testing.T) { } // Get flag trigger getFlagTriggerReq := &featureproto.GetFlagTriggerRequest{ - Id: createResp.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: createResp.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, } _, err = client.GetFlagTrigger(context.Background(), getFlagTriggerReq) if err == nil { @@ -216,7 +216,7 @@ func TestListFlagTriggers(t *testing.T) { createFeature(t, client, command) // Create flag triggers trigger1, err := client.CreateFlagTrigger(context.Background(), &featureproto.CreateFlagTriggerRequest{ - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, CreateFlagTriggerCommand: newCreateFlagTriggerCmd( command.Id, newTriggerDescription(t), @@ -228,7 +228,7 @@ func TestListFlagTriggers(t *testing.T) { } time.Sleep(1 * time.Second) trigger2, err := client.CreateFlagTrigger(context.Background(), &featureproto.CreateFlagTriggerRequest{ - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, CreateFlagTriggerCommand: newCreateFlagTriggerCmd( command.Id, newTriggerDescription(t), @@ -240,12 +240,12 @@ func TestListFlagTriggers(t *testing.T) { } // List flag triggers listFlagTriggersReq := &featureproto.ListFlagTriggersRequest{ - FeatureId: command.Id, - EnvironmentNamespace: *environmentNamespace, - Cursor: "0", - PageSize: 10, - OrderBy: featureproto.ListFlagTriggersRequest_CREATED_AT, - OrderDirection: featureproto.ListFlagTriggersRequest_ASC, + FeatureId: command.Id, + EnvironmentId: *environmentNamespace, + Cursor: "0", + PageSize: 10, + OrderBy: featureproto.ListFlagTriggersRequest_CREATED_AT, + OrderDirection: featureproto.ListFlagTriggersRequest_ASC, } triggers, err := client.ListFlagTriggers(context.Background(), listFlagTriggersReq) if err != nil { @@ -284,7 +284,7 @@ func TestFeatureFlagWebhook(t *testing.T) { createFeature(t, client, command) // Create Enable flag triggers enableTrigger, err := client.CreateFlagTrigger(context.Background(), &featureproto.CreateFlagTriggerRequest{ - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, CreateFlagTriggerCommand: newCreateFlagTriggerCmd( command.Id, newTriggerDescription(t), @@ -308,8 +308,8 @@ func TestFeatureFlagWebhook(t *testing.T) { t.Fatalf("unexpected enabled: %v", enabledFeature.Enabled) } enabledTrigger := getFeatureFlagTrigger(t, client, &featureproto.GetFlagTriggerRequest{ - Id: enableTrigger.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: enableTrigger.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, }) if enabledTrigger.FlagTrigger.TriggerCount != 1 { t.Fatalf("unexpected trigger times: %d", enabledTrigger.FlagTrigger.TriggerCount) @@ -319,7 +319,7 @@ func TestFeatureFlagWebhook(t *testing.T) { } // Create Disable flag triggers disableTrigger, err := client.CreateFlagTrigger(context.Background(), &featureproto.CreateFlagTriggerRequest{ - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, CreateFlagTriggerCommand: newCreateFlagTriggerCmd( command.Id, newTriggerDescription(t), @@ -343,8 +343,8 @@ func TestFeatureFlagWebhook(t *testing.T) { t.Fatalf("unexpected enabled: %v", disabledFeature.Enabled) } disabledTrigger := getFeatureFlagTrigger(t, client, &featureproto.GetFlagTriggerRequest{ - Id: disableTrigger.FlagTrigger.Id, - EnvironmentNamespace: *environmentNamespace, + Id: disableTrigger.FlagTrigger.Id, + EnvironmentId: *environmentNamespace, }) if disabledTrigger.FlagTrigger.TriggerCount != 1 { t.Fatalf("unexpected trigger times: %d", disabledTrigger.FlagTrigger.TriggerCount) @@ -407,7 +407,7 @@ func createFeatureFlagTrigger( ) *featureproto.CreateFlagTriggerResponse { t.Helper() resp, err := client.CreateFlagTrigger(context.Background(), &featureproto.CreateFlagTriggerRequest{ - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, CreateFlagTriggerCommand: cmd, }) if err != nil { diff --git a/test/e2e/feature/feature_test.go b/test/e2e/feature/feature_test.go index 3f997c1b91..36842faedd 100644 --- a/test/e2e/feature/feature_test.go +++ b/test/e2e/feature/feature_test.go @@ -105,9 +105,9 @@ func TestArchiveFeature(t *testing.T) { cmd := newCreateFeatureCommand(featureID) createFeature(t, client, cmd) req := &feature.ArchiveFeatureRequest{ - Id: featureID, - Command: &feature.ArchiveFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.ArchiveFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -132,17 +132,17 @@ func TestUnarchiveFeature(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req := &feature.ArchiveFeatureRequest{ - Id: featureID, - Command: &feature.ArchiveFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.ArchiveFeatureCommand{}, + EnvironmentId: *environmentNamespace, } if _, err := client.ArchiveFeature(ctx, req); err != nil { t.Fatal(err) } reqUnarchive := &feature.UnarchiveFeatureRequest{ - Id: featureID, - Command: &feature.UnarchiveFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.UnarchiveFeatureCommand{}, + EnvironmentId: *environmentNamespace, } if _, err := client.UnarchiveFeature(ctx, reqUnarchive); err != nil { t.Fatal(err) @@ -163,9 +163,9 @@ func TestDeleteFeature(t *testing.T) { cmd := newCreateFeatureCommand(featureID) createFeature(t, client, cmd) deleteReq := &feature.DeleteFeatureRequest{ - Id: featureID, - Command: &feature.DeleteFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.DeleteFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -307,9 +307,9 @@ func TestDisableFeature(t *testing.T) { t.Fatal("Progressive rollout list shouldn't be empty") } disableReq := &feature.DisableFeatureRequest{ - Id: cmd.Id, - Command: &feature.DisableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: cmd.Id, + Command: &feature.DisableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } if _, err := client.DisableFeature(ctx, disableReq); err != nil { t.Fatal(err) @@ -384,9 +384,9 @@ func TestListArchivedFeatures(t *testing.T) { cmd := newCreateFeatureCommand(featureID) createFeature(t, client, cmd) req := &feature.ArchiveFeatureRequest{ - Id: featureID, - Command: &feature.ArchiveFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.ArchiveFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -394,9 +394,9 @@ func TestListArchivedFeatures(t *testing.T) { t.Fatal(err) } listReq := &feature.ListFeaturesRequest{ - PageSize: size, - Archived: &wrappers.BoolValue{Value: true}, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + Archived: &wrappers.BoolValue{Value: true}, + EnvironmentId: *environmentNamespace, } response, err := client.ListFeatures(ctx, listReq) if err != nil { @@ -414,8 +414,8 @@ func TestListFeaturesPageSize(t *testing.T) { size := int64(1) createRandomIDFeatures(t, 2, client) listReq := &feature.ListFeaturesRequest{ - PageSize: size, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -435,8 +435,8 @@ func TestListFeaturesCursor(t *testing.T) { createRandomIDFeatures(t, 3, client) size := int64(1) listReq := &feature.ListFeaturesRequest{ - PageSize: size, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -449,9 +449,9 @@ func TestListFeaturesCursor(t *testing.T) { } features := response.Features listReq = &feature.ListFeaturesRequest{ - PageSize: size, - Cursor: response.Cursor, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + Cursor: response.Cursor, + EnvironmentId: *environmentNamespace, } response, err = client.ListFeatures(ctx, listReq) if err != nil { @@ -484,10 +484,10 @@ func TestListFeaturesOrderByName(t *testing.T) { for _, tc := range testcases { listReq := &feature.ListFeaturesRequest{ - PageSize: size, - OrderBy: feature.ListFeaturesRequest_NAME, - OrderDirection: tc.orderDirection, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + OrderBy: feature.ListFeaturesRequest_NAME, + OrderDirection: tc.orderDirection, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -527,10 +527,10 @@ func TestListFeaturesOrderByCreatedAt(t *testing.T) { for _, tc := range testcases { listReq := &feature.ListFeaturesRequest{ - PageSize: size, - OrderBy: feature.ListFeaturesRequest_CREATED_AT, - OrderDirection: tc.orderDirection, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + OrderBy: feature.ListFeaturesRequest_CREATED_AT, + OrderDirection: tc.orderDirection, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -570,10 +570,10 @@ func TestListFeaturesOrderByUpdatedAt(t *testing.T) { for _, tc := range testcases { listReq := &feature.ListFeaturesRequest{ - PageSize: size, - OrderBy: feature.ListFeaturesRequest_UPDATED_AT, - OrderDirection: tc.orderDirection, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + OrderBy: feature.ListFeaturesRequest_UPDATED_AT, + OrderDirection: tc.orderDirection, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -599,8 +599,8 @@ func TestListEnabledFeaturesPageSize(t *testing.T) { enableFeatures(t, ids, client) size := int64(2) listReq := &feature.ListEnabledFeaturesRequest{ - PageSize: size, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -623,8 +623,8 @@ func TestListEnabledFeaturesCursor(t *testing.T) { enableFeatures(t, ids, client) size := int64(2) listReq := &feature.ListEnabledFeaturesRequest{ - PageSize: size, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -642,9 +642,9 @@ func TestListEnabledFeaturesCursor(t *testing.T) { } checkEnabledFlag(t, features) listReq = &feature.ListEnabledFeaturesRequest{ - PageSize: size, - Cursor: response.Cursor, - EnvironmentNamespace: *environmentNamespace, + PageSize: size, + Cursor: response.Cursor, + EnvironmentId: *environmentNamespace, } response, err = client.ListEnabledFeatures(ctx, listReq) if err != nil { @@ -667,7 +667,7 @@ func TestRename(t *testing.T) { updateReq := &feature.UpdateFeatureDetailsRequest{ Id: cmd.Id, RenameFeatureCommand: &feature.RenameFeatureCommand{Name: expected}, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -692,7 +692,7 @@ func TestChangeDescription(t *testing.T) { updateReq := &feature.UpdateFeatureDetailsRequest{ Id: cmd.Id, ChangeDescriptionCommand: &feature.ChangeDescriptionCommand{Description: expected}, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -721,7 +721,7 @@ func TestAddTags(t *testing.T) { {Tag: newTags[1]}, {Tag: newTags[2]}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -748,9 +748,9 @@ func TestRemoveTags(t *testing.T) { {Tag: cmd.Tags[2]}, } removeReq := &feature.UpdateFeatureDetailsRequest{ - Id: cmd.Id, - RemoveTagCommands: removeTargetTags, - EnvironmentNamespace: *environmentNamespace, + Id: cmd.Id, + RemoveTagCommands: removeTargetTags, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1444,7 +1444,7 @@ func TestCloneFeature(t *testing.T) { }) require.NoError(t, err) updateFeatureTargeting(t, client, addCmd, featureID) - targetEnvironmentNamespace := newUUID(t) + targetEnvironmentId := newUUID(t) c := newEnvironmentClient(t) defer c.Close() envCmd := newEnvironmentCommand(targetEnvironmentNamespace) @@ -1731,8 +1731,8 @@ func createFeatures(t *testing.T, featureIDS []string, client featureclient.Clie func createFeature(t *testing.T, client featureclient.Client, cmd *feature.CreateFeatureCommand) { t.Helper() createReq := &feature.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1744,8 +1744,8 @@ func createFeature(t *testing.T, client featureclient.Client, cmd *feature.Creat func getFeature(t *testing.T, featureID string, client featureclient.Client) *feature.Feature { t.Helper() getReq := &feature.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1783,9 +1783,9 @@ func enableFeatures(t *testing.T, featureIDS []string, client featureclient.Clie func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &feature.EnableFeatureRequest{ - Id: featureID, - Command: &feature.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &feature.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1819,9 +1819,9 @@ func compareVariation(t *testing.T, expected *feature.Variation, actual *feature func updateVariations(t *testing.T, featureID string, commands []*feature.Command, client featureclient.Client) { t.Helper() updateReq := &feature.UpdateFeatureVariationsRequest{ - Id: featureID, - Commands: commands, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Commands: commands, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1962,8 +1962,8 @@ func updateFeatureTargeting(t *testing.T, client featureclient.Client, cmd *any. Commands: []*feature.Command{ {Command: cmd}, }, - EnvironmentNamespace: *environmentNamespace, - From: feature.UpdateFeatureTargetingRequest_USER, + EnvironmentId: *environmentNamespace, + From: feature.UpdateFeatureTargetingRequest_USER, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1987,9 +1987,9 @@ func compareFeatures(t *testing.T, expected []*feature.Feature, actual []*featur func evaluateFeatures(t *testing.T, client featureclient.Client, userID, tag string) *feature.EvaluateFeaturesResponse { t.Helper() req := &feature.EvaluateFeaturesRequest{ - User: &userproto.User{Id: userID}, - EnvironmentNamespace: *environmentNamespace, - Tag: tag, + User: &userproto.User{Id: userID}, + EnvironmentId: *environmentNamespace, + Tag: tag, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -2016,8 +2016,8 @@ func createProgressiveRollout( ProgressiveRolloutTemplateScheduleClause: template, } _, err := client.CreateProgressiveRollout(ctx, &aoproto.CreateProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Command: cmd, + EnvironmentId: *environmentNamespace, + Command: cmd, }) if err != nil { t.Fatal(err) @@ -2029,9 +2029,9 @@ func listProgressiveRollouts(t *testing.T, client aoclient.Client, featureID str ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListProgressiveRollouts(ctx, &aoproto.ListProgressiveRolloutsRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: 0, - FeatureIds: []string{featureID}, + EnvironmentId: *environmentNamespace, + PageSize: 0, + FeatureIds: []string{featureID}, }) if err != nil { t.Fatal("Failed to list progressive rollout", err) @@ -2044,8 +2044,8 @@ func getProgressiveRollout(t *testing.T, client aoclient.Client, id string) *aop ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.GetProgressiveRollout(ctx, &aoproto.GetProgressiveRolloutRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { t.Fatal("Failed to get progressive rollout", err) diff --git a/test/e2e/feature/segment_test.go b/test/e2e/feature/segment_test.go index 45f5ea3954..8b3402dcc2 100644 --- a/test/e2e/feature/segment_test.go +++ b/test/e2e/feature/segment_test.go @@ -42,8 +42,8 @@ func TestCreateSegment(t *testing.T) { Description: fmt.Sprintf("%s-description", prefixSegment), } req := &featureproto.CreateSegmentRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } res, err := client.CreateSegment(ctx, req) assert.NoError(t, err) @@ -107,7 +107,7 @@ func TestChangeSegmentName(t *testing.T) { Commands: []*featureproto.Command{ {Command: cmdChange}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, }, ) assert.NotNil(t, res) @@ -130,7 +130,7 @@ func TestChangeSegmentName(t *testing.T) { Commands: []*featureproto.Command{ {Command: cmdChange}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, }, ) assert.NotNil(t, res) @@ -154,7 +154,7 @@ func TestChangeSegmentDescription(t *testing.T) { Commands: []*featureproto.Command{ {Command: cmdChange}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, }, ) assert.NotNil(t, res) @@ -171,9 +171,9 @@ func TestDeleteSegment(t *testing.T) { res, err := client.DeleteSegment( ctx, &featureproto.DeleteSegmentRequest{ - Id: id, - Command: &featureproto.DeleteSegmentCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: id, + Command: &featureproto.DeleteSegmentCommand{}, + EnvironmentId: *environmentNamespace, }, ) assert.NotNil(t, res) @@ -191,8 +191,8 @@ func TestListSegmentsPageSize(t *testing.T) { } pageSize := int64(1) res, err := client.ListSegments(ctx, &featureproto.ListSegmentsRequest{ - PageSize: pageSize, - EnvironmentNamespace: *environmentNamespace, + PageSize: pageSize, + EnvironmentId: *environmentNamespace, }) assert.NoError(t, err) assert.Equal(t, pageSize, int64(len(res.Segments))) @@ -207,17 +207,17 @@ func TestListSegmentsCursor(t *testing.T) { } pageSize := int64(2) res, err := client.ListSegments(ctx, &featureproto.ListSegmentsRequest{ - PageSize: pageSize, - EnvironmentNamespace: *environmentNamespace, + PageSize: pageSize, + EnvironmentId: *environmentNamespace, }) assert.NoError(t, err) assert.NotEmpty(t, res.Cursor) resCursor, err := client.ListSegments( ctx, &featureproto.ListSegmentsRequest{ - PageSize: pageSize, - Cursor: res.Cursor, - EnvironmentNamespace: *environmentNamespace, + PageSize: pageSize, + Cursor: res.Cursor, + EnvironmentId: *environmentNamespace, }, ) assert.NoError(t, err) @@ -233,8 +233,8 @@ func TestListSegmentsCursor(t *testing.T) { func getSegment(ctx context.Context, t *testing.T, client featureclient.Client, id string) *featureproto.Segment { t.Helper() req := &featureproto.GetSegmentRequest{ - Id: id, - EnvironmentNamespace: *environmentNamespace, + Id: id, + EnvironmentId: *environmentNamespace, } res, err := client.GetSegment(ctx, req) assert.NoError(t, err) @@ -248,8 +248,8 @@ func createSegment(ctx context.Context, t *testing.T, client featureclient.Clien Description: fmt.Sprintf("%s-%s", "description", prefixSegment), } req := &featureproto.CreateSegmentRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } res, err := client.CreateSegment(ctx, req) assert.NoError(t, err) diff --git a/test/e2e/feature/segment_user_test.go b/test/e2e/feature/segment_user_test.go index 82c2f5bfa4..d8dfd801ca 100644 --- a/test/e2e/feature/segment_user_test.go +++ b/test/e2e/feature/segment_user_test.go @@ -102,10 +102,10 @@ func TestListSegmentUsersPageSize(t *testing.T) { addSegmentUser(ctx, t, client, segmentID, userIDs, featureproto.SegmentUser_INCLUDED) pageSize := int64(1) res, err := client.ListSegmentUsers(ctx, &featureproto.ListSegmentUsersRequest{ - PageSize: pageSize, - SegmentId: segmentID, - State: &wrappersproto.Int32Value{Value: int32(featureproto.SegmentUser_INCLUDED)}, - EnvironmentNamespace: *environmentNamespace, + PageSize: pageSize, + SegmentId: segmentID, + State: &wrappersproto.Int32Value{Value: int32(featureproto.SegmentUser_INCLUDED)}, + EnvironmentId: *environmentNamespace, }) assert.NoError(t, err) assert.Equal(t, pageSize, int64(len(res.Users))) @@ -125,11 +125,11 @@ func TestListSegmentUsersCursor(t *testing.T) { cursor := "" for i := 0; i < 3; i++ { res, err := client.ListSegmentUsers(ctx, &featureproto.ListSegmentUsersRequest{ - PageSize: pageSize, - Cursor: cursor, - SegmentId: segmentID, - State: state, - EnvironmentNamespace: *environmentNamespace, + PageSize: pageSize, + Cursor: cursor, + SegmentId: segmentID, + State: state, + EnvironmentId: *environmentNamespace, }) assert.NoError(t, err) assert.NotEmpty(t, res.Cursor) @@ -177,8 +177,8 @@ func TestBulkUploadAndDownloadSegmentUsers(t *testing.T) { sort.Strings(uids) userIDs := []byte(fmt.Sprintf("%s\n%s\n%s\n", uids[0], uids[1], uids[2])) uploadRes, err := client.BulkUploadSegmentUsers(ctx, &featureproto.BulkUploadSegmentUsersRequest{ - EnvironmentNamespace: *environmentNamespace, - SegmentId: segmentID, + EnvironmentId: *environmentNamespace, + SegmentId: segmentID, Command: &featureproto.BulkUploadSegmentUsersCommand{ Data: userIDs, State: featureproto.SegmentUser_INCLUDED, @@ -207,7 +207,7 @@ func addSegmentUser(ctx context.Context, t *testing.T, client featureclient.Clie UserIds: userIDs, State: state, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } res, err := client.AddSegmentUser(ctx, req) assert.NotNil(t, res) @@ -221,7 +221,7 @@ func deleteSegmentUser(ctx context.Context, t *testing.T, client featureclient.C UserIds: userIDs, State: state, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } res, err := client.DeleteSegmentUser(ctx, req) assert.NotNil(t, res) @@ -231,10 +231,10 @@ func deleteSegmentUser(ctx context.Context, t *testing.T, client featureclient.C func getSegmentUser(ctx context.Context, t *testing.T, client featureclient.Client, segmentID string, userID string, state featureproto.SegmentUser_State) *featureproto.SegmentUser { t.Helper() req := &featureproto.GetSegmentUserRequest{ - SegmentId: segmentID, - UserId: userID, - State: state, - EnvironmentNamespace: *environmentNamespace, + SegmentId: segmentID, + UserId: userID, + State: state, + EnvironmentId: *environmentNamespace, } res, err := client.GetSegmentUser(ctx, req) assert.NoError(t, err) @@ -244,9 +244,9 @@ func getSegmentUser(ctx context.Context, t *testing.T, client featureclient.Clie func listSegmentUsers(ctx context.Context, t *testing.T, client featureclient.Client, segmentID string, state *wrappersproto.Int32Value) *featureproto.ListSegmentUsersResponse { t.Helper() req := &featureproto.ListSegmentUsersRequest{ - SegmentId: segmentID, - State: state, - EnvironmentNamespace: *environmentNamespace, + SegmentId: segmentID, + State: state, + EnvironmentId: *environmentNamespace, } res, err := client.ListSegmentUsers(ctx, req) assert.NoError(t, err) @@ -282,9 +282,9 @@ func bulkDownloadSegmentUsers(t *testing.T, client featureclient.Client, segment ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() return client.BulkDownloadSegmentUsers(ctx, &featureproto.BulkDownloadSegmentUsersRequest{ - EnvironmentNamespace: *environmentNamespace, - SegmentId: segmentID, - State: featureproto.SegmentUser_INCLUDED, + EnvironmentId: *environmentNamespace, + SegmentId: segmentID, + State: featureproto.SegmentUser_INCLUDED, }) } diff --git a/test/e2e/feature/tag_test.go b/test/e2e/feature/tag_test.go index 87c60e91a9..192a0a0a7d 100644 --- a/test/e2e/feature/tag_test.go +++ b/test/e2e/feature/tag_test.go @@ -85,8 +85,8 @@ func existTag(tags []string, target string) bool { func listTags(ctx context.Context, t *testing.T, client featureclient.Client) []*feature.Tag { t.Helper() resp, err := client.ListTags(ctx, &feature.ListTagsRequest{ - PageSize: int64(500), - EnvironmentNamespace: *environmentNamespace, + PageSize: int64(500), + EnvironmentId: *environmentNamespace, }) if err != nil { t.Fatal("failed to list tags", err) @@ -101,7 +101,7 @@ func addTag(t *testing.T, tag string, featureID string, client featureclient.Cli AddTagCommands: []*feature.AddTagCommand{ {Tag: tag}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() diff --git a/test/e2e/gateway/api_grpc_test.go b/test/e2e/gateway/api_grpc_test.go index ec74b208da..7294439095 100644 --- a/test/e2e/gateway/api_grpc_test.go +++ b/test/e2e/gateway/api_grpc_test.go @@ -1073,8 +1073,8 @@ func createFeature( ) *featureproto.CreateFeatureCommand { t.Helper() createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1087,8 +1087,8 @@ func createFeature( func getFeature(t *testing.T, featureID string, client featureclient.Client) *featureproto.Feature { t.Helper() getReq := &featureproto.GetFeatureRequest{ - Id: featureID, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1106,7 +1106,7 @@ func addTag(t *testing.T, tag string, featureID string, client featureclient.Cli AddTagCommands: []*featureproto.AddTagCommand{ {Tag: tag}, }, - EnvironmentNamespace: *environmentNamespace, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1125,9 +1125,9 @@ func addRule(t *testing.T, featureID, variationID string, client featureclient.C func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &featureproto.EnableFeatureRequest{ - Id: featureID, - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1139,9 +1139,9 @@ func enableFeature(t *testing.T, featureID string, client featureclient.Client) func archiveFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() req := &featureproto.ArchiveFeatureRequest{ - Id: featureID, - Command: &featureproto.ArchiveFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.ArchiveFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -1278,8 +1278,8 @@ func updateFeatureTargeting(t *testing.T, client featureclient.Client, cmd *any. Commands: []*featureproto.Command{ {Command: cmd}, }, - EnvironmentNamespace: *environmentNamespace, - From: featureproto.UpdateFeatureTargetingRequest_USER, + EnvironmentId: *environmentNamespace, + From: featureproto.UpdateFeatureTargetingRequest_USER, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() diff --git a/test/e2e/gateway/api_test.go b/test/e2e/gateway/api_test.go index e37af81311..05e8f9873e 100644 --- a/test/e2e/gateway/api_test.go +++ b/test/e2e/gateway/api_test.go @@ -171,16 +171,16 @@ func TestRegisterEvents(t *testing.T) { t, []util.Event{ { - ID: newUUID(t), - Event: json.RawMessage(evaluation), - EnvironmentNamespace: "", - Type: gwapi.EvaluationEventType, + ID: newUUID(t), + Event: json.RawMessage(evaluation), + EnvironmentId: "", + Type: gwapi.EvaluationEventType, }, { - ID: newUUID(t), - Event: json.RawMessage(goal), - EnvironmentNamespace: "", - Type: gwapi.GoalEventType, + ID: newUUID(t), + Event: json.RawMessage(goal), + EnvironmentId: "", + Type: gwapi.GoalEventType, }, }, *gatewayAddr, diff --git a/test/e2e/notification/subscription_test.go b/test/e2e/notification/subscription_test.go index 97431b0cc7..999518d86f 100644 --- a/test/e2e/notification/subscription_test.go +++ b/test/e2e/notification/subscription_test.go @@ -72,8 +72,8 @@ func TestCreateGetDeleteSubscription(t *testing.T) { } createSubscription(ctx, t, notificationClient, name, sourceTypes, recipient) resp, err := notificationClient.GetSubscription(ctx, &proto.GetSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { t.Fatal(err) @@ -101,16 +101,16 @@ func TestCreateGetDeleteSubscription(t *testing.T) { t.Fatalf("Incorrect deleted. Expected: %t actual: %t", false, subscription.Disabled) } _, err = notificationClient.DeleteSubscription(ctx, &proto.DeleteSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &proto.DeleteSubscriptionCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &proto.DeleteSubscriptionCommand{}, }) if err != nil { t.Fatal(err) } _, err = notificationClient.GetSubscription(ctx, &proto.GetSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { st, _ := status.FromError(err) @@ -171,16 +171,16 @@ func TestCreateListDeleteSubscription(t *testing.T) { t.Fatalf("Incorrect deleted. Expected: %t actual: %t", false, subscription.Disabled) } _, err = notificationClient.DeleteSubscription(ctx, &proto.DeleteSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &proto.DeleteSubscriptionCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &proto.DeleteSubscriptionCommand{}, }) if err != nil { t.Fatal(err) } _, err = notificationClient.GetSubscription(ctx, &proto.GetSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { st, _ := status.FromError(err) @@ -212,8 +212,8 @@ func TestUpdateSubscription(t *testing.T) { } createSubscription(ctx, t, notificationClient, name, sourceTypes, recipient) _, err = notificationClient.UpdateSubscription(ctx, &proto.UpdateSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, AddSourceTypesCommand: &proto.AddSourceTypesCommand{ SourceTypes: []proto.Subscription_SourceType{ proto.Subscription_DOMAIN_EVENT_ADMIN_ACCOUNT, @@ -229,8 +229,8 @@ func TestUpdateSubscription(t *testing.T) { t.Fatal(err) } resp, err := notificationClient.GetSubscription(ctx, &proto.GetSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { t.Fatal(err) @@ -258,16 +258,16 @@ func TestUpdateSubscription(t *testing.T) { t.Fatalf("Incorrect deleted. Expected: %t actual: %t", false, subscription.Disabled) } _, err = notificationClient.DeleteSubscription(ctx, &proto.DeleteSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &proto.DeleteSubscriptionCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &proto.DeleteSubscriptionCommand{}, }) if err != nil { t.Fatal(err) } _, err = notificationClient.GetSubscription(ctx, &proto.GetSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, + EnvironmentId: *environmentNamespace, + Id: id, }) if err != nil { st, _ := status.FromError(err) @@ -299,9 +299,9 @@ func TestListEnabledSubscriptions(t *testing.T) { } createSubscription(ctx, t, notificationClient, name, sourceTypes, recipient) _, err = notificationClient.DisableSubscription(ctx, &proto.DisableSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &proto.DisableSubscriptionCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &proto.DisableSubscriptionCommand{}, }) if err != nil { t.Fatal(err) @@ -322,9 +322,9 @@ func TestListEnabledSubscriptions(t *testing.T) { t.Fatal("List enabled subscriptions include disabled subscription") } _, err = notificationClient.DeleteSubscription(ctx, &proto.DeleteSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Id: id, - Command: &proto.DeleteSubscriptionCommand{}, + EnvironmentId: *environmentNamespace, + Id: id, + Command: &proto.DeleteSubscriptionCommand{}, }) if err != nil { t.Fatal(err) @@ -370,8 +370,8 @@ func createSubscription( t.Helper() cmd := newCreateSubscriptionCommand(name, sourceTypes, recipient) createReq := &proto.CreateSubscriptionRequest{ - EnvironmentNamespace: *environmentNamespace, - Command: cmd, + EnvironmentId: *environmentNamespace, + Command: cmd, } if _, err := client.CreateSubscription(ctx, createReq); err != nil { t.Fatal(err) @@ -398,9 +398,9 @@ func listSubscriptions( ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListSubscriptions(ctx, &proto.ListSubscriptionsRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: int64(500), - SourceTypes: sourceTypes, + EnvironmentId: *environmentNamespace, + PageSize: int64(500), + SourceTypes: sourceTypes, }) if err != nil { t.Fatal("failed to list subscriptions", err) @@ -416,9 +416,9 @@ func listEnabledSubscriptions( ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListEnabledSubscriptions(ctx, &proto.ListEnabledSubscriptionsRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: int64(500), - SourceTypes: sourceTypes, + EnvironmentId: *environmentNamespace, + PageSize: int64(500), + SourceTypes: sourceTypes, }) if err != nil { t.Fatal("failed to list enabled subscriptions", err) diff --git a/test/e2e/push/push_test.go b/test/e2e/push/push_test.go index 668a67b6b0..14e364d277 100644 --- a/test/e2e/push/push_test.go +++ b/test/e2e/push/push_test.go @@ -173,8 +173,8 @@ func createFeature(ctx context.Context, t *testing.T, client featureclient.Clien t.Helper() cmd := newCreateFeatureCommand(featureID, tag) createReq := &featureproto.CreateFeatureRequest{ - Command: cmd, - EnvironmentNamespace: *environmentNamespace, + Command: cmd, + EnvironmentId: *environmentNamespace, } if _, err := client.CreateFeature(ctx, createReq); err != nil { t.Fatal(err) @@ -185,9 +185,9 @@ func createFeature(ctx context.Context, t *testing.T, client featureclient.Clien func enableFeature(t *testing.T, featureID string, client featureclient.Client) { t.Helper() enableReq := &featureproto.EnableFeatureRequest{ - Id: featureID, - Command: &featureproto.EnableFeatureCommand{}, - EnvironmentNamespace: *environmentNamespace, + Id: featureID, + Command: &featureproto.EnableFeatureCommand{}, + EnvironmentId: *environmentNamespace, } ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -257,8 +257,8 @@ func createPush( t.Helper() cmd := newCreatePushCommand(t, fcmServiceAccount, []string{tag}) createReq := &pushproto.CreatePushRequest{ - EnvironmentNamespace: *environmentNamespace, - Command: cmd, + EnvironmentId: *environmentNamespace, + Command: cmd, } if _, err := client.CreatePush(ctx, createReq); err != nil { t.Fatal(err) @@ -274,10 +274,10 @@ func createPushNoCommand( ) { t.Helper() createReq := &pushproto.CreatePushRequest{ - EnvironmentNamespace: *environmentNamespace, - Name: newPushName(t), - Tags: []string{tag}, - FcmServiceAccount: fcmServiceAccount, + EnvironmentId: *environmentNamespace, + Name: newPushName(t), + Tags: []string{tag}, + FcmServiceAccount: fcmServiceAccount, } if _, err := client.CreatePush(ctx, createReq); err != nil { t.Fatal(err) @@ -297,8 +297,8 @@ func listPushes(t *testing.T, client pushclient.Client) []*pushproto.Push { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() resp, err := client.ListPushes(ctx, &pushproto.ListPushesRequest{ - EnvironmentNamespace: *environmentNamespace, - PageSize: int64(500), + EnvironmentId: *environmentNamespace, + PageSize: int64(500), }) if err != nil { t.Fatal("failed to list pushes", err) diff --git a/test/e2e/util/rest.go b/test/e2e/util/rest.go index 9cea99f0cb..e16945d1c5 100644 --- a/test/e2e/util/rest.go +++ b/test/e2e/util/rest.go @@ -75,10 +75,10 @@ type getEvaluationResponse struct { } type Event struct { - ID string `json:"id,omitempty"` - Event json.RawMessage `json:"event,omitempty"` - EnvironmentNamespace string `json:"environment_namespace,omitempty"` - Type gwapi.EventType `json:"type,omitempty"` + ID string `json:"id,omitempty"` + Event json.RawMessage `json:"event,omitempty"` + EnvironmentId string `json:"environment_id,omitempty"` + Type gwapi.EventType `json:"type,omitempty"` } func GetEvaluations(t *testing.T, tag, userID, gatewayAddr, apiKeyPath string) *getEvaluationsResponse { diff --git a/ui/web-v2/src/components/DebuggerEvaluateForm/index.tsx b/ui/web-v2/src/components/DebuggerEvaluateForm/index.tsx index 923e925f3e..0b15209812 100644 --- a/ui/web-v2/src/components/DebuggerEvaluateForm/index.tsx +++ b/ui/web-v2/src/components/DebuggerEvaluateForm/index.tsx @@ -50,7 +50,7 @@ export const DebuggerEvaluateForm: FC = memo( useEffect(() => { dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 0, cursor: '', tags: [], diff --git a/ui/web-v2/src/components/EventRateAddUpdateForm/index.tsx b/ui/web-v2/src/components/EventRateAddUpdateForm/index.tsx index 4753d70866..4b44702794 100644 --- a/ui/web-v2/src/components/EventRateAddUpdateForm/index.tsx +++ b/ui/web-v2/src/components/EventRateAddUpdateForm/index.tsx @@ -97,7 +97,7 @@ export const EventRateAddUpdateForm: FC = memo( useEffect(() => { dispatch( listGoals({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', searchKeyword: '', @@ -139,7 +139,7 @@ export const EventRateAddUpdateForm: FC = memo( changeOpsEventRateClauseCommands.push(command); const param: UpdateAutoOpsRuleParams = { - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: autoOpsRule.id, changeOpsEventRateClauseCommands }; @@ -155,7 +155,7 @@ export const EventRateAddUpdateForm: FC = memo( dispatch( createAutoOpsRule({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, command: command }) ).then(() => onSubmit()); @@ -535,7 +535,7 @@ const AddGoalModal: FC = ({ open, setOpen }) => { async (data) => { dispatch( createGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.id, name: data.name, description: data.description @@ -545,7 +545,7 @@ const AddGoalModal: FC = ({ open, setOpen }) => { resetAdd(); dispatch( listGoals({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', searchKeyword: '', diff --git a/ui/web-v2/src/components/ExperimentAddForm/index.tsx b/ui/web-v2/src/components/ExperimentAddForm/index.tsx index 2333034c46..3d518d5ba3 100644 --- a/ui/web-v2/src/components/ExperimentAddForm/index.tsx +++ b/ui/web-v2/src/components/ExperimentAddForm/index.tsx @@ -107,7 +107,7 @@ export const ExperimentAddForm: FC = memo( useEffect(() => { dispatch( listGoals({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', searchKeyword: null, @@ -119,7 +119,7 @@ export const ExperimentAddForm: FC = memo( ); dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', tags: [], @@ -139,7 +139,7 @@ export const ExperimentAddForm: FC = memo( dispatch( listProgressiveRollout({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ).then((res) => { const response = diff --git a/ui/web-v2/src/components/ExperimentResultDetail/index.tsx b/ui/web-v2/src/components/ExperimentResultDetail/index.tsx index 39b6f8b350..eda418f1ac 100644 --- a/ui/web-v2/src/components/ExperimentResultDetail/index.tsx +++ b/ui/web-v2/src/components/ExperimentResultDetail/index.tsx @@ -71,7 +71,7 @@ export const ExperimentResultDetail: FC = ({ if (experimentId && experiment.startAt < Number(Date.now() / 1000)) { dispatch( getExperimentResult({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, experimentId: experimentId }) ); diff --git a/ui/web-v2/src/components/FeatureAutoOpsRulesForm/index.tsx b/ui/web-v2/src/components/FeatureAutoOpsRulesForm/index.tsx index a6d4c6b4fa..9eac9b6f00 100644 --- a/ui/web-v2/src/components/FeatureAutoOpsRulesForm/index.tsx +++ b/ui/web-v2/src/components/FeatureAutoOpsRulesForm/index.tsx @@ -321,7 +321,7 @@ export const FeatureAutoOpsRulesForm: FC = memo( if (ids.length > 0) { dispatch( listOpsCounts({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, ids }) ); @@ -392,7 +392,7 @@ export const FeatureAutoOpsRulesForm: FC = memo( ) { dispatch( deleteAutoOpsRule({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: selectedOperation.id }) ).then(() => { @@ -401,7 +401,7 @@ export const FeatureAutoOpsRulesForm: FC = memo( } else if (selectedOperation.type === OperationType.PROGRESSIVE_ROLLOUT) { dispatch( deleteProgressiveRollout({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: selectedOperation.id }) ).then(() => { @@ -424,7 +424,7 @@ export const FeatureAutoOpsRulesForm: FC = memo( ) { dispatch( stopAutoOpsRule({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: selectedOperation.id }) ).then(() => { @@ -433,7 +433,7 @@ export const FeatureAutoOpsRulesForm: FC = memo( } else if (selectedOperation.type === OperationType.PROGRESSIVE_ROLLOUT) { dispatch( stopProgressiveRollout({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: selectedOperation.id }) ).then(() => { diff --git a/ui/web-v2/src/components/FeatureConfirmDialog/index.tsx b/ui/web-v2/src/components/FeatureConfirmDialog/index.tsx index defeca1c38..9e0d21a2d3 100644 --- a/ui/web-v2/src/components/FeatureConfirmDialog/index.tsx +++ b/ui/web-v2/src/components/FeatureConfirmDialog/index.tsx @@ -128,7 +128,7 @@ export const FeatureConfirmDialog: FC = ({ dispatch( listProgressiveRollout({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); } @@ -137,7 +137,7 @@ export const FeatureConfirmDialog: FC = ({ useEffect(() => { if (isArchive && open) { listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 0, cursor: '', tags: [], @@ -216,7 +216,7 @@ export const FeatureConfirmDialog: FC = ({ command.setDatetimeClausesList([clause]); dispatch( createAutoOpsRule({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, command: command }) ).then(() => { diff --git a/ui/web-v2/src/components/FeatureEvaluation/index.tsx b/ui/web-v2/src/components/FeatureEvaluation/index.tsx index 442f3ce690..2d5b9091fc 100644 --- a/ui/web-v2/src/components/FeatureEvaluation/index.tsx +++ b/ui/web-v2/src/components/FeatureEvaluation/index.tsx @@ -128,7 +128,7 @@ export const FeatureEvaluation: FC = memo( dispatch( getEvaluationTimeseriesCount({ featureId: featureId, - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, timeRange: o.value }) ); diff --git a/ui/web-v2/src/components/FeatureTargetingForm/index.tsx b/ui/web-v2/src/components/FeatureTargetingForm/index.tsx index 822617b692..6c934c6398 100644 --- a/ui/web-v2/src/components/FeatureTargetingForm/index.tsx +++ b/ui/web-v2/src/components/FeatureTargetingForm/index.tsx @@ -463,7 +463,7 @@ const FlagIsPrerequisite: FC = ({ featureId }) => { useEffect(() => { listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 0, cursor: '', tags: [], @@ -608,7 +608,7 @@ export const PrerequisiteInput: FC = memo( const dispatchListFeatures = () => { return dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', tags: [], @@ -1059,7 +1059,7 @@ export const ClausesInput: FC = memo( }); dispatch( listSegments({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, cursor: '' }) ); @@ -1086,7 +1086,7 @@ export const ClausesInput: FC = memo( }); dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', tags: [], @@ -1126,7 +1126,7 @@ export const ClausesInput: FC = memo( useEffect(() => { dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', tags: [], diff --git a/ui/web-v2/src/components/FeatureTriggerForm/index.tsx b/ui/web-v2/src/components/FeatureTriggerForm/index.tsx index c9d3022b03..f7d48349ae 100644 --- a/ui/web-v2/src/components/FeatureTriggerForm/index.tsx +++ b/ui/web-v2/src/components/FeatureTriggerForm/index.tsx @@ -104,7 +104,7 @@ export const FeatureTriggerForm: FC = memo( const fetchFlagTriggers = useCallback(() => { dispatch( listFlagTriggers({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, featureId }) ); @@ -120,7 +120,7 @@ export const FeatureTriggerForm: FC = memo( dispatch( deleteFlagTrigger({ id: selectedFlagTrigger.flagTrigger.id, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ).then(() => fetchFlagTriggers()); }; @@ -132,7 +132,7 @@ export const FeatureTriggerForm: FC = memo( dispatch( resetFlagTrigger({ id: selectedFlagTrigger.flagTrigger.id, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ).then((response) => { const payload = response.payload as ResetFlagTriggerResponse.AsObject; @@ -148,7 +148,7 @@ export const FeatureTriggerForm: FC = memo( dispatch( enableFlagTrigger({ id: flagTriggerId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ).then(() => fetchFlagTriggers()); }, []); @@ -157,7 +157,7 @@ export const FeatureTriggerForm: FC = memo( dispatch( disableFlagTrigger({ id: flagTriggerId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ).then(() => fetchFlagTriggers()); }, []); @@ -527,7 +527,7 @@ const AddUpdateTrigger: FC = memo( const handleOnSubmit = useCallback((data) => { dispatch( createFlagTrigger({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, featureId, triggerType: data.triggerType, action: data.action, @@ -549,7 +549,7 @@ const AddUpdateTrigger: FC = memo( (data) => { dispatch( updateFlagTrigger({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: flagTriggerWithUrl.flagTrigger.id, description: data.description }) diff --git a/ui/web-v2/src/components/FeatureVariationsForm/index.tsx b/ui/web-v2/src/components/FeatureVariationsForm/index.tsx index 83022eb63e..380a6d1b86 100644 --- a/ui/web-v2/src/components/FeatureVariationsForm/index.tsx +++ b/ui/web-v2/src/components/FeatureVariationsForm/index.tsx @@ -74,7 +74,7 @@ export const FeatureVariationsForm: FC = memo( dispatch( listProgressiveRollout({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); }, []); diff --git a/ui/web-v2/src/components/ProgressiveRolloutAddForm/index.tsx b/ui/web-v2/src/components/ProgressiveRolloutAddForm/index.tsx index 80c5e1d5a0..c6b3559d99 100644 --- a/ui/web-v2/src/components/ProgressiveRolloutAddForm/index.tsx +++ b/ui/web-v2/src/components/ProgressiveRolloutAddForm/index.tsx @@ -164,7 +164,7 @@ export const ProgressiveRolloutAddForm: FC = dispatch( listExperiments({ featureId: featureId, - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, searchKeyword: '', pageSize: 1000, cursor: '' @@ -287,7 +287,7 @@ export const ProgressiveRolloutAddForm: FC = dispatch( createProgressiveRollout({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, command: command }) ).then(() => { diff --git a/ui/web-v2/src/components/ScheduleAddUpdateForm/index.tsx b/ui/web-v2/src/components/ScheduleAddUpdateForm/index.tsx index 7dc46067d2..1e20a08a61 100644 --- a/ui/web-v2/src/components/ScheduleAddUpdateForm/index.tsx +++ b/ui/web-v2/src/components/ScheduleAddUpdateForm/index.tsx @@ -186,7 +186,7 @@ export const ScheduleAddUpdateForm: FC = memo( } const param: UpdateAutoOpsRuleParams = { - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: autoOpsRule.id, addDatetimeClauseCommands, deleteClauseCommands, @@ -210,7 +210,7 @@ export const ScheduleAddUpdateForm: FC = memo( dispatch( createAutoOpsRule({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, command: command }) ).then(() => onSubmit()); diff --git a/ui/web-v2/src/modules/apiKeys.ts b/ui/web-v2/src/modules/apiKeys.ts index ee579a2669..39ee18b8ab 100644 --- a/ui/web-v2/src/modules/apiKeys.ts +++ b/ui/web-v2/src/modules/apiKeys.ts @@ -40,7 +40,7 @@ export const listAPIKeys = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListAPIKeysRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setOrderBy(params.orderBy); @@ -59,7 +59,7 @@ export type OrderDirection = ListAPIKeysRequest.OrderDirectionMap[keyof ListAPIKeysRequest.OrderDirectionMap]; interface APIKeyParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; orderBy: OrderBy; @@ -69,7 +69,7 @@ interface APIKeyParams { } export interface GetAPIKeyParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -79,14 +79,14 @@ export const getAPIKey = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/get`, async (params) => { const request = new GetAPIKeyRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); const result = await grpc.getAPIKey(request); return result.response.toObject().apiKey; }); export interface EnableAPIKeyParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -96,14 +96,14 @@ export const enableAPIKey = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/enable`, async (params) => { const request = new EnableAPIKeyRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new EnableAPIKeyCommand()); await grpc.enableAPIKey(request); }); export interface DisableAPIKeyParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -113,14 +113,14 @@ export const disableAPIKey = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/disable`, async (params) => { const request = new DisableAPIKeyRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DisableAPIKeyCommand()); await grpc.disableAPIKey(request); }); export interface CreateAPIKeyParams { - environmentNamespace: string; + environmentId: string; name: string; role: APIKey.RoleMap[keyof APIKey.RoleMap]; } @@ -134,13 +134,13 @@ export const createAPIKey = createAsyncThunk< const cmd = new CreateAPIKeyCommand(); cmd.setName(params.name); cmd.setRole(params.role); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(cmd); await grpc.createAPIKey(request); }); export interface updateAPIKeyParams { - environmentNamespace: string; + environmentId: string; id: string; name: string; } @@ -153,7 +153,7 @@ export const updateAPIKey = createAsyncThunk< const request = new ChangeAPIKeyNameRequest(); const cmd = new ChangeAPIKeyNameCommand(); cmd.setName(params.name); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(cmd); await grpc.changeAPIKeyName(request); diff --git a/ui/web-v2/src/modules/auditLogs.ts b/ui/web-v2/src/modules/auditLogs.ts index ab2e25699d..4f42f408e2 100644 --- a/ui/web-v2/src/modules/auditLogs.ts +++ b/ui/web-v2/src/modules/auditLogs.ts @@ -72,7 +72,7 @@ export const listAdminAuditLogs = createAsyncThunk< export interface ListAuditLogsParams { pageSize: number; cursor: string; - environmentNamespace: string; + environmentId: string; orderBy?: OrderBy; orderDirection?: OrderDirection; searchKeyword?: string; @@ -89,7 +89,7 @@ export const listAuditLogs = createAsyncThunk< const request = new ListAuditLogsRequest(); request.setPageSize(params.pageSize); request.setCursor(params.cursor); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setOrderBy(params.orderBy); request.setOrderDirection(params.orderDirection); request.setSearchKeyword(params.searchKeyword); @@ -105,7 +105,7 @@ export interface ListFeatureHistoryParams { featureId: string; pageSize: number; cursor: string; - environmentNamespace: string; + environmentId: string; orderBy?: OrderBy; orderDirection?: OrderDirection; searchKeyword?: string; @@ -122,7 +122,7 @@ export const listFeatureHistory = createAsyncThunk< request.setFeatureId(params.featureId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setOrderBy(params.orderBy); request.setOrderDirection(params.orderDirection); request.setSearchKeyword(params.searchKeyword); diff --git a/ui/web-v2/src/modules/autoOpsRules.ts b/ui/web-v2/src/modules/autoOpsRules.ts index 3edbf9fc76..a859c9bf19 100644 --- a/ui/web-v2/src/modules/autoOpsRules.ts +++ b/ui/web-v2/src/modules/autoOpsRules.ts @@ -36,7 +36,7 @@ export const autoOpsRulesAdapter = createEntityAdapter({ export const { selectAll, selectById } = autoOpsRulesAdapter.getSelectors(); interface CreateAutoOpsRuleParams { - environmentNamespace: string; + environmentId: string; command: CreateAutoOpsRuleCommand; } @@ -46,13 +46,13 @@ export const createAutoOpsRule = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/create`, async (params) => { const request = new CreateAutoOpsRuleRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(params.command); await autoOpsGrpc.createAutoOpsRule(request); }); export interface ListAutoOpsRulesParams { - environmentNamespace: string; + environmentId: string; featureId: string; } @@ -63,13 +63,13 @@ export const listAutoOpsRules = createAsyncThunk< >(`${MODULE_NAME}/list`, async (params) => { const request = new ListAutoOpsRulesRequest(); request.setFeatureIdsList([params.featureId]); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const result = await autoOpsGrpc.listAutoOpsRules(request); return result.response.toObject(); }); export interface UpdateAutoOpsRuleParams { - environmentNamespace: string; + environmentId: string; id: string; addOpsEventRateClauseCommands?: Array; changeOpsEventRateClauseCommands?: Array; @@ -84,7 +84,7 @@ export const updateAutoOpsRule = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/update`, async (params) => { const request = new UpdateAutoOpsRuleRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); params.addOpsEventRateClauseCommands?.length > 0 && request.setAddOpsEventRateClauseCommandsList( @@ -106,7 +106,7 @@ export const updateAutoOpsRule = createAsyncThunk< }); export interface DeleteAutoOpsRuleParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -117,14 +117,14 @@ export const deleteAutoOpsRule = createAsyncThunk< >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeleteAutoOpsRuleRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new DeleteAutoOpsRuleCommand(); request.setCommand(command); await autoOpsGrpc.deleteAutoOpsRule(request); }); export interface StopAutoOpsRuleParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -135,7 +135,7 @@ export const stopAutoOpsRule = createAsyncThunk< >(`${MODULE_NAME}/stop`, async (params) => { const request = new StopAutoOpsRuleRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new StopAutoOpsRuleCommand(); request.setCommand(command); await autoOpsGrpc.stopAutoOpsRule(request); diff --git a/ui/web-v2/src/modules/debugger.ts b/ui/web-v2/src/modules/debugger.ts index 7524cbdfbd..31bd4cba2f 100644 --- a/ui/web-v2/src/modules/debugger.ts +++ b/ui/web-v2/src/modules/debugger.ts @@ -23,7 +23,7 @@ export const debuggerAdapter = createEntityAdapter({ export const { selectAll, selectById } = debuggerAdapter.getSelectors(); interface evaluateFeaturesParams { - environmentNamespace: string; + environmentId: string; flag: string; userId: string; userAttributes: Array<[string, string]>; @@ -43,7 +43,7 @@ export const evaluateFeatures = createAsyncThunk< } request.setFeatureId(params.flag); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setUser(user); const result = await featuresGrpc.evaluateFeatures(request); return result.response.toObject(); diff --git a/ui/web-v2/src/modules/evaluationTimeseriesCount.ts b/ui/web-v2/src/modules/evaluationTimeseriesCount.ts index aa722b02b6..884714ac4d 100644 --- a/ui/web-v2/src/modules/evaluationTimeseriesCount.ts +++ b/ui/web-v2/src/modules/evaluationTimeseriesCount.ts @@ -18,7 +18,7 @@ export interface EvaluationTimeseriesCount { } export interface GetEvaluationTimeseriesCountParams { - environmentNamespace: string; + environmentId: string; featureId: string; timeRange: GetEvaluationTimeseriesCountRequest.TimeRangeMap[keyof GetEvaluationTimeseriesCountRequest.TimeRangeMap]; } @@ -30,7 +30,7 @@ export const getEvaluationTimeseriesCount = createAsyncThunk< >(`${MODULE_NAME}/getEvaluationTimeseriesCount`, async (params) => { const request = new GetEvaluationTimeseriesCountRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setFeatureId(params.featureId); request.setTimeRange(params.timeRange); const result = await grpc.getEvaluationTimeseriesCount(request); diff --git a/ui/web-v2/src/modules/experimentResult.ts b/ui/web-v2/src/modules/experimentResult.ts index d73ea470b5..d3483ec4fd 100644 --- a/ui/web-v2/src/modules/experimentResult.ts +++ b/ui/web-v2/src/modules/experimentResult.ts @@ -34,7 +34,7 @@ const initialState = experimentResultsAdapter.getInitialState<{ }); export interface GetExperimentResultParams { - environmentNamespace: string; + environmentId: string; experimentId: string; } @@ -44,7 +44,7 @@ export const getExperimentResult = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/getExperimentResult`, async (params) => { const request = new GetExperimentResultRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setExperimentId(params.experimentId); const result = await grpc.getExperimentResult(request); return result.response.toObject(); diff --git a/ui/web-v2/src/modules/experiments.ts b/ui/web-v2/src/modules/experiments.ts index 077ee0d29b..aeef2ffad0 100644 --- a/ui/web-v2/src/modules/experiments.ts +++ b/ui/web-v2/src/modules/experiments.ts @@ -52,7 +52,7 @@ const initialState = experimentsAdapter.getInitialState<{ export type ExperimentsState = typeof initialState; export interface GetExperimentParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -62,7 +62,7 @@ export const getExperiment = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/getExperiment`, async (params) => { const request = new GetExperimentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); const result = await grpc.getExperiment(request); return result.response.getExperiment().toObject(); @@ -74,7 +74,7 @@ export type OrderDirection = ListExperimentsRequest.OrderDirectionMap[keyof ListExperimentsRequest.OrderDirectionMap]; export interface ListExperimentsParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; featureId?: string; @@ -95,7 +95,7 @@ export const listExperiments = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListExperimentsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setSearchKeyword(params.searchKeyword); request.setCursor(params.cursor); @@ -132,7 +132,7 @@ export const listExperiments = createAsyncThunk< export interface CreateExperimentParams { name: string; description?: string; - environmentNamespace: string; + environmentId: string; featureId: string; baseVariationId: string; goalIdsList: string[]; @@ -157,14 +157,14 @@ export const createExperiment = createAsyncThunk< command.setStartAt(Math.floor(params.startAt)); command.setStopAt(Math.floor(params.stopAt)); request.setCommand(command); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const result = await grpc.createExperiment(request); return result.response.toObject().experiment; }); export interface UpdateExperimentParams { - environmentNamespace: string; + environmentId: string; id: string; changeNameCommand?: ChangeExperimentNameCommand; changeDescriptionCommand?: ChangeExperimentDescriptionCommand; @@ -177,7 +177,7 @@ export const updateExperiment = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/update`, async (params) => { const request = new UpdateExperimentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); if (params.changeNameCommand) { request.setChangeNameCommand(params.changeNameCommand); @@ -192,7 +192,7 @@ export const updateExperiment = createAsyncThunk< }); export interface ArchiveExperimentParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -202,14 +202,14 @@ export const archiveExperiment = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/archive`, async (params) => { const request = new ArchiveExperimentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new ArchiveExperimentCommand()); await grpc.archiveExperiment(request); }); export interface StopExperimentParams { - environmentNamespace: string; + environmentId: string; experimentId: string; } @@ -219,7 +219,7 @@ export const stopExperiment = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/stop`, async (params) => { const request = new StopExperimentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.experimentId); request.setCommand(new StopExperimentCommand()); await grpc.stopExperiment(request); diff --git a/ui/web-v2/src/modules/features.ts b/ui/web-v2/src/modules/features.ts index e07d314cef..590f9469b1 100644 --- a/ui/web-v2/src/modules/features.ts +++ b/ui/web-v2/src/modules/features.ts @@ -60,7 +60,7 @@ export interface VariationParams { description: string; } export interface CreateFeatureParams { - environmentNamespace: string; + environmentId: string; name: string; id: string; description: string; @@ -88,7 +88,7 @@ export const createFeature = createAsyncThunk< variations.push(variation); }); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); cmd.setName(params.name); cmd.setId(params.id); cmd.setDescription(params.description); @@ -111,9 +111,9 @@ export const createFeature = createAsyncThunk< }); export interface CloneFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; - destinationEnvironmentNamespace: string; + destinationenvironmentId: string; } export const cloneFeature = createAsyncThunk< @@ -123,8 +123,8 @@ export const cloneFeature = createAsyncThunk< >(`${MODULE_NAME}/clone`, async (params) => { const request = new CloneFeatureRequest(); const cmd = new CloneFeatureCommand(); - cmd.setEnvironmentNamespace(params.destinationEnvironmentNamespace); - request.setEnvironmentNamespace(params.environmentNamespace); + cmd.setEnvironmentId(params.destinationenvironmentId); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(cmd); await featureGrpc.cloneFeature(request); @@ -137,7 +137,7 @@ export type OrderDirection = ListFeaturesRequest.OrderDirectionMap[keyof ListFeaturesRequest.OrderDirectionMap]; export interface ListFeaturesParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; tags: string[]; @@ -157,7 +157,7 @@ export const listFeatures = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListFeaturesRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setTagsList(params.tags); @@ -190,7 +190,7 @@ export const listTags = createAsyncThunk< }); export interface GetFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -200,7 +200,7 @@ export const getFeature = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/get`, async (params) => { const request = new GetFeatureRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); const result = await featureGrpc.getFeature(request); return result.response.toObject().feature; @@ -219,7 +219,7 @@ const initialState = featuresAdapter.getInitialState<{ }); export interface UpdateFeatureDetailsParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; updateDetailCommands: UpdateDetailCommands; @@ -237,7 +237,7 @@ export const updateFeatureDetails = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/updateDetails`, async (params) => { const request = new UpdateFeatureDetailsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); @@ -264,7 +264,7 @@ export const updateFeatureDetails = createAsyncThunk< }); export interface UpdateFeatureTargetingParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; commands: Command[]; @@ -276,7 +276,7 @@ export const updateFeatureTargeting = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/updateTargeting`, async (params) => { const request = new UpdateFeatureTargetingRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); request.setCommandsList(params.commands); @@ -285,7 +285,7 @@ export const updateFeatureTargeting = createAsyncThunk< }); export interface UpdateFeatureVariationsParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; commands: Command[]; @@ -297,7 +297,7 @@ export const updateFeatureVariations = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/updateVariations`, async (params) => { const request = new UpdateFeatureVariationsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); request.setCommandsList(params.commands); @@ -305,7 +305,7 @@ export const updateFeatureVariations = createAsyncThunk< }); export interface EnableFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; } @@ -316,7 +316,7 @@ export const enableFeature = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/enable`, async (params) => { const request = new EnableFeatureRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); request.setCommand(new EnableFeatureCommand()); @@ -324,7 +324,7 @@ export const enableFeature = createAsyncThunk< }); export interface DisableFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; comment?: string; } @@ -335,7 +335,7 @@ export const disableFeature = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/disable`, async (params) => { const request = new DisableFeatureRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); if (params.comment) { request.setComment(params.comment); @@ -345,7 +345,7 @@ export const disableFeature = createAsyncThunk< }); export interface ArchiveFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; } @@ -356,7 +356,7 @@ export const archiveFeature = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/archive`, async (params) => { const request = new ArchiveFeatureRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); request.setCommand(new ArchiveFeatureCommand()); @@ -364,7 +364,7 @@ export const archiveFeature = createAsyncThunk< }); export interface UnarchiveFeatureParams { - environmentNamespace: string; + environmentId: string; id: string; comment: string; } @@ -375,7 +375,7 @@ export const unarchiveFeature = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/unarchive`, async (params) => { const request = new UnarchiveFeatureRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setComment(params.comment); request.setCommand(new UnarchiveFeatureCommand()); diff --git a/ui/web-v2/src/modules/flagTriggers.ts b/ui/web-v2/src/modules/flagTriggers.ts index e804aaf7e7..37b069b5bb 100644 --- a/ui/web-v2/src/modules/flagTriggers.ts +++ b/ui/web-v2/src/modules/flagTriggers.ts @@ -40,7 +40,7 @@ export const flagTriggersAdapter = createEntityAdapter({ export const { selectAll, selectById } = flagTriggersAdapter.getSelectors(); interface CreateFlagTriggerParams { - environmentNamespace: string; + environmentId: string; featureId: string; action: FlagTrigger.ActionMap[keyof FlagTrigger.ActionMap]; triggerType: FlagTrigger.TypeMap[keyof FlagTrigger.TypeMap]; @@ -54,7 +54,7 @@ export const createFlagTrigger = createAsyncThunk< >(`${MODULE_NAME}/create`, async (params) => { const request = new CreateFlagTriggerRequest(); const command = new CreateFlagTriggerCommand(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); command.setFeatureId(params.featureId); command.setAction(params.action); @@ -67,7 +67,7 @@ export const createFlagTrigger = createAsyncThunk< }); export interface ListFlagTriggersParams { - environmentNamespace: string; + environmentId: string; featureId: string; } @@ -77,7 +77,7 @@ export const listFlagTriggers = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListFlagTriggersRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setFeatureId(params.featureId); request.setOrderDirection(ListFlagTriggersRequest.OrderDirection.DESC); const result = await flagTriggersGrpc.listFlagTriggers(request); @@ -85,7 +85,7 @@ export const listFlagTriggers = createAsyncThunk< }); export interface UpdateFlagTriggerParams { - environmentNamespace: string; + environmentId: string; id: string; description: string; } @@ -99,7 +99,7 @@ export const updateFlagTrigger = createAsyncThunk< command.setDescription(params.description); const request = new UpdateFlagTriggerRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setChangeFlagTriggerDescriptionCommand(command); @@ -107,7 +107,7 @@ export const updateFlagTrigger = createAsyncThunk< }); export interface DeleteFlagTriggerParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -118,14 +118,14 @@ export const deleteFlagTrigger = createAsyncThunk< >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeleteFlagTriggerRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new DeleteFlagTriggerCommand(); request.setDeleteFlagTriggerCommand(command); await flagTriggersGrpc.deleteFlagTrigger(request); }); export interface ResetFlagTriggerParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -136,7 +136,7 @@ export const resetFlagTrigger = createAsyncThunk< >(`${MODULE_NAME}/reset`, async (params) => { const request = new ResetFlagTriggerRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new ResetFlagTriggerCommand(); request.setResetFlagTriggerCommand(command); const result = await flagTriggersGrpc.resetFlagTrigger(request); @@ -144,7 +144,7 @@ export const resetFlagTrigger = createAsyncThunk< }); export interface EnableFlagTriggerParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -155,14 +155,14 @@ export const enableFlagTrigger = createAsyncThunk< >(`${MODULE_NAME}/enable`, async (params) => { const request = new EnableFlagTriggerRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new EnableFlagTriggerCommand(); request.setEnableFlagTriggerCommand(command); await flagTriggersGrpc.enableFlagTrigger(request); }); export interface DisableFlagTriggerParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -173,7 +173,7 @@ export const disableFlagTrigger = createAsyncThunk< >(`${MODULE_NAME}/disable`, async (params) => { const request = new DisableFlagTriggerRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new DisableFlagTriggerCommand(); request.setDisableFlagTriggerCommand(command); await flagTriggersGrpc.disableFlagTrigger(request); diff --git a/ui/web-v2/src/modules/goals.ts b/ui/web-v2/src/modules/goals.ts index c0455bf3b0..0540c87590 100644 --- a/ui/web-v2/src/modules/goals.ts +++ b/ui/web-v2/src/modules/goals.ts @@ -37,7 +37,7 @@ export const goalsAdapter = createEntityAdapter({ export const { selectAll, selectById } = goalsAdapter.getSelectors(); interface GetGoalParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -47,7 +47,7 @@ export const getGoal = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/getGoal`, async (params) => { const request = new GetGoalRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); const result = await grpc.getGoal(request); return result.response.toObject(); @@ -59,7 +59,7 @@ export type OrderDirection = ListGoalsRequest.OrderDirectionMap[keyof ListGoalsRequest.OrderDirectionMap]; interface ListGoalsParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; searchKeyword: string; @@ -75,7 +75,7 @@ export const listGoals = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/listGoals`, async (params) => { const request = new ListGoalsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setOrderBy(params.orderBy); @@ -94,7 +94,7 @@ export const listGoals = createAsyncThunk< }); interface CreateGoalParams { - environmentNamespace: string; + environmentId: string; id: string; name: string; description: string; @@ -107,7 +107,7 @@ export const createGoal = createAsyncThunk< >(`${MODULE_NAME}/createGoal`, async (params) => { const request = new CreateGoalRequest(); const command = new CreateGoalCommand(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); command.setId(params.id); command.setName(params.name); command.setDescription(params.description); @@ -116,7 +116,7 @@ export const createGoal = createAsyncThunk< }); interface DeleteGoalParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -126,14 +126,14 @@ export const deleteGoal = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/deleteGoal`, async (params) => { const request = new DeleteGoalRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DeleteGoalCommand()); await grpc.deleteGoal(request); }); interface UpdateGoalParams { - environmentNamespace: string; + environmentId: string; id: string; name?: string; description?: string; @@ -145,7 +145,7 @@ export const updateGoal = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/updateGoal`, async (params) => { const request = new UpdateGoalRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); if (params.name) { const renameCommand = new RenameGoalCommand(); @@ -161,7 +161,7 @@ export const updateGoal = createAsyncThunk< }); export interface ArchiveGoalParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -171,7 +171,7 @@ export const archiveGoal = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/archive`, async (params) => { const request = new ArchiveGoalRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new ArchiveGoalCommand()); await grpc.archiveGoal(request); diff --git a/ui/web-v2/src/modules/notifications.ts b/ui/web-v2/src/modules/notifications.ts index 4fb53cea23..e92b100cf3 100644 --- a/ui/web-v2/src/modules/notifications.ts +++ b/ui/web-v2/src/modules/notifications.ts @@ -54,7 +54,7 @@ export type OrderDirection = ListSubscriptionsRequest.OrderDirectionMap[keyof ListSubscriptionsRequest.OrderDirectionMap]; interface ListNotificationParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; orderBy?: OrderBy; @@ -69,7 +69,7 @@ export const listNotification = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListSubscriptionsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setOrderBy(params.orderBy); @@ -82,7 +82,7 @@ export const listNotification = createAsyncThunk< }); export interface CreateNotificationParams { - environmentNamespace: string; + environmentId: string; name: string; sourceTypes: Array< Subscription.SourceTypeMap[keyof Subscription.SourceTypeMap] @@ -113,13 +113,13 @@ export const createNotification = createAsyncThunk< cmd.setRecipient(recipient); const request = new CreateSubscriptionRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(cmd); await subscriptionGrpc.createSubscription(request); }); export interface UpdateNotificationParams { - environmentNamespace: string; + environmentId: string; id: string; name: string; currentSourceTypes: Array< @@ -136,7 +136,7 @@ export const updateNotification = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/update`, async (params) => { const request = new UpdateSubscriptionRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); if (params.name) { @@ -168,7 +168,7 @@ export const updateNotification = createAsyncThunk< }); export interface EnableNotificationParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -178,14 +178,14 @@ export const enableNotification = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/enable`, async (params) => { const request = new EnableSubscriptionRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new EnableSubscriptionCommand()); await subscriptionGrpc.enableSubscription(request); }); export interface DisableNotificationParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -195,14 +195,14 @@ export const disableNotification = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/disable`, async (params) => { const request = new DisableSubscriptionRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DisableSubscriptionCommand()); await subscriptionGrpc.disableSubscription(request); }); export interface DeleteNotificationParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -212,7 +212,7 @@ export const deleteNotification = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeleteSubscriptionRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DeleteSubscriptionCommand()); await subscriptionGrpc.deleteSubscription(request); diff --git a/ui/web-v2/src/modules/opsCounts.ts b/ui/web-v2/src/modules/opsCounts.ts index bd8083680d..70ccf9aa41 100644 --- a/ui/web-v2/src/modules/opsCounts.ts +++ b/ui/web-v2/src/modules/opsCounts.ts @@ -22,7 +22,7 @@ export const opsCountsAdapter = createEntityAdapter({ export const { selectAll, selectById } = opsCountsAdapter.getSelectors(); export interface ListOpsCountsParams { - environmentNamespace: string; + environmentId: string; ids: Array; } @@ -33,7 +33,7 @@ export const listOpsCounts = createAsyncThunk< >(`${MODULE_NAME}/listOpsCounts`, async (params) => { const request = new ListOpsCountsRequest(); request.setAutoOpsRuleIdsList(params.ids); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const result = await autoOpsGrpc.listOpsCounts(request); return result.response.toObject(); }); diff --git a/ui/web-v2/src/modules/porgressiveRollout.ts b/ui/web-v2/src/modules/porgressiveRollout.ts index 1a2367b472..caf15b2a4f 100644 --- a/ui/web-v2/src/modules/porgressiveRollout.ts +++ b/ui/web-v2/src/modules/porgressiveRollout.ts @@ -32,7 +32,7 @@ export const { selectAll, selectById } = progressiveRolloutAdapter.getSelectors(); interface CreateProgressiveRolloutParams { - environmentNamespace: string; + environmentId: string; command: CreateProgressiveRolloutCommand; } @@ -43,13 +43,13 @@ export const createProgressiveRollout = createAsyncThunk< >(`${MODULE_NAME}/create`, async (params) => { const request = new CreateProgressiveRolloutRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(params.command); await progressiveRolloutGrpc.createProgressiveRollout(request); }); export interface ListProgressiveRolloutParams { - environmentNamespace: string; + environmentId: string; featureId: string; } @@ -60,13 +60,13 @@ export const listProgressiveRollout = createAsyncThunk< >(`${MODULE_NAME}/list`, async (params) => { const request = new ListProgressiveRolloutsRequest(); request.setFeatureIdsList([params.featureId]); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const result = await progressiveRolloutGrpc.listProgressiveRollouts(request); return result.response.toObject(); }); export interface DeleteProgressiveRolloutParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -77,14 +77,14 @@ export const deleteProgressiveRollout = createAsyncThunk< >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeleteProgressiveRolloutRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new DeleteProgressiveRolloutCommand(); request.setCommand(command); await progressiveRolloutGrpc.deleteProgressiveRollout(request); }); export interface StopProgressiveRolloutParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -95,7 +95,7 @@ export const stopProgressiveRollout = createAsyncThunk< >(`${MODULE_NAME}/stop`, async (params) => { const request = new StopProgressiveRolloutRequest(); request.setId(params.id); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); const command = new StopProgressiveRolloutCommand(); command.setStoppedBy(ProgressiveRollout.StoppedBy.USER); request.setCommand(command); diff --git a/ui/web-v2/src/modules/pushes.ts b/ui/web-v2/src/modules/pushes.ts index 1d1c861145..dddb4f3eb0 100644 --- a/ui/web-v2/src/modules/pushes.ts +++ b/ui/web-v2/src/modules/pushes.ts @@ -45,7 +45,7 @@ export type OrderDirection = ListPushesRequest.OrderDirectionMap[keyof ListPushesRequest.OrderDirectionMap]; interface ListPushesParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; orderBy?: OrderBy; @@ -59,7 +59,7 @@ export const listPushes = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListPushesRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setOrderBy(params.orderBy); @@ -70,7 +70,7 @@ export const listPushes = createAsyncThunk< }); export interface CreatePushParams { - environmentNamespace: string; + environmentId: string; name: string; tags: Array; fcmServiceAccount: Uint8Array | string; @@ -87,13 +87,13 @@ export const createPush = createAsyncThunk< cmd.setFcmServiceAccount(params.fcmServiceAccount); const request = new CreatePushRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(cmd); await pushGrpc.createPush(request); }); export interface UpdatePushParams { - environmentNamespace: string; + environmentId: string; id: string; name: string; currentTags: Array; @@ -129,13 +129,13 @@ export const updatePush = createAsyncThunk< request.setDeletePushTagsCommand(cmd); } } - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); await pushGrpc.updatePush(request); }); export interface DeletePushParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -145,7 +145,7 @@ export const deletePush = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeletePushRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DeletePushCommand()); await pushGrpc.deletePush(request); diff --git a/ui/web-v2/src/modules/segments.ts b/ui/web-v2/src/modules/segments.ts index 6f1124971e..c9a9bb7cc9 100644 --- a/ui/web-v2/src/modules/segments.ts +++ b/ui/web-v2/src/modules/segments.ts @@ -45,7 +45,7 @@ export type OrderDirection = ListSegmentsRequest.OrderDirectionMap[keyof ListSegmentsRequest.OrderDirectionMap]; export interface ListSegmentsParams { - environmentNamespace: string; + environmentId: string; pageSize?: number; cursor: string; orderBy?: OrderBy; @@ -60,7 +60,7 @@ export const listSegments = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/list`, async (params) => { const request = new ListSegmentsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCursor(params.cursor); if (params.pageSize) { request.setPageSize(params.pageSize); @@ -75,7 +75,7 @@ export const listSegments = createAsyncThunk< }); export interface GetSegmentParams { - environmentNamespace: string; + environmentId: string; id: string; } @@ -85,7 +85,7 @@ export const getSegment = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/get`, async (params) => { const request = new GetSegmentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); const result = await segmentGrpc.getSegment(request); return result.response.toObject().segment; @@ -93,7 +93,7 @@ export const getSegment = createAsyncThunk< export interface BulkDownloadSegmentUsersParams { segmentId: string; - environmentNamespace: string; + environmentId: string; } export const bulkDownloadSegmentUsers = createAsyncThunk< @@ -102,14 +102,14 @@ export const bulkDownloadSegmentUsers = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/download`, async (params) => { const request = new BulkDownloadSegmentUsersRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setSegmentId(params.segmentId); const result = await segmentGrpc.bulkDownloadSegmentUsers(request); return result.response.toObject().data; }); export interface BulkUploadSegmentUsersParams { - environmentNamespace: string; + environmentId: string; segmentId: string; data: Uint8Array; } @@ -122,14 +122,14 @@ export const bulkUploadSegmentUsers = createAsyncThunk< const cmd = new BulkUploadSegmentUsersCommand(); cmd.setData(params.data); const request = new BulkUploadSegmentUsersRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setSegmentId(params.segmentId); request.setCommand(cmd); await segmentGrpc.bulkUploadSegmentUsers(request); }); export interface CreateSegmentParams { - environmentNamespace: string; + environmentId: string; name: string; description: string; } @@ -143,7 +143,7 @@ export const createSegment = createAsyncThunk< cmd.setName(params.name); cmd.setDescription(params.description); const request = new CreateSegmentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setCommand(cmd); const result = await segmentGrpc.createSegment(request); return result.response.toObject().segment.id; @@ -162,7 +162,7 @@ const convertCommandToAny = ( }; export interface UpdateSegmentParams { - environmentNamespace: string; + environmentId: string; id: string; name: string; description: string; @@ -185,7 +185,7 @@ export const updateSegment = createAsyncThunk< cmdList.push(convertCommandToAny(cmd, 'ChangeSegmentDescriptionCommand')); } const request = new UpdateSegmentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommandsList(cmdList); await segmentGrpc.updateSegment(request); @@ -193,7 +193,7 @@ export const updateSegment = createAsyncThunk< export interface DeleteSegmentUsersParams { id: string; - environmentNamespace: string; + environmentId: string; } export const deleteSegmentUser = createAsyncThunk< @@ -202,7 +202,7 @@ export const deleteSegmentUser = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/delete`, async (params) => { const request = new DeleteSegmentRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setId(params.id); request.setCommand(new DeleteSegmentCommand()); await segmentGrpc.deleteSegment(request); diff --git a/ui/web-v2/src/modules/tags.ts b/ui/web-v2/src/modules/tags.ts index a32c2a5cd7..a078a21e1f 100644 --- a/ui/web-v2/src/modules/tags.ts +++ b/ui/web-v2/src/modules/tags.ts @@ -28,7 +28,7 @@ export type OrderDirection = ListTagsRequest.OrderDirectionMap[keyof ListTagsRequest.OrderDirectionMap]; export interface ListTagsParams { - environmentNamespace: string; + environmentId: string; pageSize: number; cursor: string; orderBy: OrderBy; @@ -42,7 +42,7 @@ export const listTags = createAsyncThunk< { state: AppState } >(`${MODULE_NAME}/listTags`, async (params) => { const request = new ListTagsRequest(); - request.setEnvironmentNamespace(params.environmentNamespace); + request.setEnvironmentId(params.environmentId); request.setPageSize(params.pageSize); request.setCursor(params.cursor); request.setOrderBy(params.orderBy); diff --git a/ui/web-v2/src/pages/apiKey/index.tsx b/ui/web-v2/src/pages/apiKey/index.tsx index 722b0ace58..ca54621a98 100644 --- a/ui/web-v2/src/pages/apiKey/index.tsx +++ b/ui/web-v2/src/pages/apiKey/index.tsx @@ -134,7 +134,7 @@ export const APIKeyIndexPage: FC = memo(() => { options && options.enabled ? options.enabled === 'false' : null; dispatch( listAPIKeys({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: APIKEY_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -179,12 +179,12 @@ export const APIKeyIndexPage: FC = memo(() => { (() => { if (data.enabled) { return enableAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.apiKeyId }); } return disableAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.apiKeyId }); })() @@ -192,7 +192,7 @@ export const APIKeyIndexPage: FC = memo(() => { setIsConfirmDialogOpen(false); dispatch( getAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.apiKeyId }) ); @@ -274,7 +274,7 @@ export const APIKeyIndexPage: FC = memo(() => { async (data) => { dispatch( createAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, name: data.name, role: data.role }) @@ -294,14 +294,14 @@ export const APIKeyIndexPage: FC = memo(() => { async (data) => { dispatch( updateAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: apiKeyId, name: data.name }) ).then(() => { dispatch( getAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: apiKeyId }) ); @@ -326,7 +326,7 @@ export const APIKeyIndexPage: FC = memo(() => { if (isUpdate) { dispatch( getAPIKey({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: apiKeyId }) ).then((e) => { diff --git a/ui/web-v2/src/pages/auditLog/index.tsx b/ui/web-v2/src/pages/auditLog/index.tsx index 4055468a25..f2094179b5 100644 --- a/ui/web-v2/src/pages/auditLog/index.tsx +++ b/ui/web-v2/src/pages/auditLog/index.tsx @@ -138,7 +138,7 @@ export const AuditLogIndexPage: FC = memo(() => { dispatch( listAuditLogs({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: AUDITLOG_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: searchOptions.q as string, diff --git a/ui/web-v2/src/pages/debugger/index.tsx b/ui/web-v2/src/pages/debugger/index.tsx index 0a257d60ff..b853561967 100644 --- a/ui/web-v2/src/pages/debugger/index.tsx +++ b/ui/web-v2/src/pages/debugger/index.tsx @@ -56,7 +56,7 @@ export const DebuggerIndexPage: FC = memo(() => { const evaluateFeaturesPromises = flag.map((f) => dispatch( evaluateFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, flag: f, userId: userId, userAttributes: userAttributes.map((ua) => [ua.key, ua.value]) @@ -72,7 +72,7 @@ export const DebuggerIndexPage: FC = memo(() => { const featureDetailsPromises = allEvaluations.map((evaluation) => dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: evaluation.featureId }) ).then((e) => { diff --git a/ui/web-v2/src/pages/experiment/index.tsx b/ui/web-v2/src/pages/experiment/index.tsx index 6d1f1d2345..c24d3aeadd 100644 --- a/ui/web-v2/src/pages/experiment/index.tsx +++ b/ui/web-v2/src/pages/experiment/index.tsx @@ -165,7 +165,7 @@ export const ExperimentIndexPage: FC = memo(() => { options && options.archived ? options.archived === 'true' : false; dispatch( listExperiments({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: EXPERIMENT_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -246,7 +246,7 @@ export const ExperimentIndexPage: FC = memo(() => { async (data) => { dispatch( createExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, name: data.name, description: data.description, featureId: data.featureId, @@ -278,7 +278,7 @@ export const ExperimentIndexPage: FC = memo(() => { } dispatch( updateExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: experimentId, changeNameCommand: changeExperimentNameCommand, changeDescriptionCommand: changeExperimentDescriptionCommand @@ -286,7 +286,7 @@ export const ExperimentIndexPage: FC = memo(() => { ).then(() => { dispatch( getExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: experimentId }) ); @@ -325,7 +325,7 @@ export const ExperimentIndexPage: FC = memo(() => { async (data) => { dispatch( archiveExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.experiment.id }) ).then(() => { @@ -340,7 +340,7 @@ export const ExperimentIndexPage: FC = memo(() => { const handleStop = useCallback(async () => { dispatch( stopExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, experimentId: experimentIdForStop }) ).then(() => { @@ -353,7 +353,7 @@ export const ExperimentIndexPage: FC = memo(() => { if (isUpdate) { dispatch( getExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: experimentId }) ).then((e) => { diff --git a/ui/web-v2/src/pages/feature/autoops.tsx b/ui/web-v2/src/pages/feature/autoops.tsx index 97869026b2..105ca6a39e 100644 --- a/ui/web-v2/src/pages/feature/autoops.tsx +++ b/ui/web-v2/src/pages/feature/autoops.tsx @@ -83,7 +83,7 @@ export const FeatureAutoOpsPage: FC = memo( dispatch( listAutoOpsRules({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); }, [dispatch]); @@ -92,7 +92,7 @@ export const FeatureAutoOpsPage: FC = memo( dispatch( listProgressiveRollout({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); }, [dispatch]); diff --git a/ui/web-v2/src/pages/feature/detail.tsx b/ui/web-v2/src/pages/feature/detail.tsx index dd4c665be4..33d155b032 100644 --- a/ui/web-v2/src/pages/feature/detail.tsx +++ b/ui/web-v2/src/pages/feature/detail.tsx @@ -105,26 +105,26 @@ export const FeatureDetailPage: FC = memo(() => { if (featureId) { dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId }) ); dispatch( listAutoOpsRules({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); dispatch( listFlagTriggers({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); dispatch( listProgressiveRollout({ featureId: featureId, - environmentNamespace: currentEnvironment.id + environmentId: currentEnvironment.id }) ); } diff --git a/ui/web-v2/src/pages/feature/evaluation.tsx b/ui/web-v2/src/pages/feature/evaluation.tsx index 06404b6695..848967eff0 100644 --- a/ui/web-v2/src/pages/feature/evaluation.tsx +++ b/ui/web-v2/src/pages/feature/evaluation.tsx @@ -31,7 +31,7 @@ export const FeatureEvaluationPage: FC = memo( dispatch( getEvaluationTimeseriesCount({ featureId: featureId, - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, timeRange: TimeRange.SEVEN_DAYS }) ); diff --git a/ui/web-v2/src/pages/feature/experiments.tsx b/ui/web-v2/src/pages/feature/experiments.tsx index 001680fbc5..572618b003 100644 --- a/ui/web-v2/src/pages/feature/experiments.tsx +++ b/ui/web-v2/src/pages/feature/experiments.tsx @@ -68,13 +68,13 @@ export const FeatureExperimentsPage: FC = memo( const handleStop = useCallback(async () => { dispatch( stopExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, experimentId: experimentId }) ).then(() => { dispatch( getExperiment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: experimentId }) ); @@ -86,7 +86,7 @@ export const FeatureExperimentsPage: FC = memo( dispatch( listExperiments({ featureId: featureId, - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, searchKeyword: '', pageSize: 1000, cursor: '', diff --git a/ui/web-v2/src/pages/feature/history.tsx b/ui/web-v2/src/pages/feature/history.tsx index 71a128f8bd..194bdbb08b 100644 --- a/ui/web-v2/src/pages/feature/history.tsx +++ b/ui/web-v2/src/pages/feature/history.tsx @@ -65,7 +65,7 @@ export const FeatureHistoryPage: FC = memo( dispatch( listFeatureHistory({ featureId: featureId, - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: AUDITLOG_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options.q as string, diff --git a/ui/web-v2/src/pages/feature/index.tsx b/ui/web-v2/src/pages/feature/index.tsx index 1bfba854d4..f9721fde85 100644 --- a/ui/web-v2/src/pages/feature/index.tsx +++ b/ui/web-v2/src/pages/feature/index.tsx @@ -236,7 +236,7 @@ export const FeatureIndexPage: FC = memo(() => { dispatch( listFeatures({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: FEATURE_LIST_PAGE_SIZE, cursor: String(cursor), tags, @@ -315,7 +315,7 @@ export const FeatureIndexPage: FC = memo(() => { async (data) => { dispatch( createFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.id, name: data.name, description: data.description, @@ -364,9 +364,9 @@ export const FeatureIndexPage: FC = memo(() => { ); dispatch( cloneFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId, - destinationEnvironmentNamespace: destinationEnvironment.id + destinationenvironmentId: destinationEnvironment.id }) ) .then(unwrapResult) @@ -398,13 +398,13 @@ export const FeatureIndexPage: FC = memo(() => { (() => { if (data.enabled) { return enableFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.featureId, comment: data.comment }); } return disableFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.featureId, comment: data.comment }); @@ -429,7 +429,7 @@ export const FeatureIndexPage: FC = memo(() => { setIsSwitchEnableConfirmDialogOpen(false); dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.featureId }) ); @@ -464,12 +464,12 @@ export const FeatureIndexPage: FC = memo(() => { dispatch( data.feature.archived ? unarchiveFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.feature.id, comment: data.comment }) : archiveFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.feature.id, comment: data.comment }) @@ -500,7 +500,7 @@ export const FeatureIndexPage: FC = memo(() => { if (isClone) { dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId }) ).then((e) => { @@ -524,7 +524,7 @@ export const FeatureIndexPage: FC = memo(() => { ); dispatch( listTags({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', orderBy: ListTagsRequest.OrderBy.DEFAULT, diff --git a/ui/web-v2/src/pages/feature/settings.tsx b/ui/web-v2/src/pages/feature/settings.tsx index 3373e32015..1112138218 100644 --- a/ui/web-v2/src/pages/feature/settings.tsx +++ b/ui/web-v2/src/pages/feature/settings.tsx @@ -100,7 +100,7 @@ export const FeatureSettingsPage: FC = memo( } dispatch( updateFeatureDetails({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: feature.id, comment: data.comment, updateDetailCommands: commands @@ -109,7 +109,7 @@ export const FeatureSettingsPage: FC = memo( setIsConfirmDialogOpen(false); dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId }) ); diff --git a/ui/web-v2/src/pages/feature/targeting.tsx b/ui/web-v2/src/pages/feature/targeting.tsx index 1b0d11900a..048d782a1a 100644 --- a/ui/web-v2/src/pages/feature/targeting.tsx +++ b/ui/web-v2/src/pages/feature/targeting.tsx @@ -204,7 +204,7 @@ export const FeatureTargetingPage: FC = memo( dispatch( updateFeatureTargeting({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: feature.id, comment: data.comment, commands: commands @@ -213,7 +213,7 @@ export const FeatureTargetingPage: FC = memo( setIsConfirmDialogOpen(false); dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId }) ).then(() => { @@ -227,7 +227,7 @@ export const FeatureTargetingPage: FC = memo( useEffect(() => { dispatch( listSegments({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, cursor: '' }) ); diff --git a/ui/web-v2/src/pages/feature/variations.tsx b/ui/web-v2/src/pages/feature/variations.tsx index 801bfa7854..2a9e0b6897 100644 --- a/ui/web-v2/src/pages/feature/variations.tsx +++ b/ui/web-v2/src/pages/feature/variations.tsx @@ -83,7 +83,7 @@ export const FeatureVariationsPage: FC = memo( data.resetSampling && commands.push(createResetSampleSeedCommand()); dispatch( updateFeatureVariations({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: feature.id, comment: data.comment, commands: commands @@ -92,7 +92,7 @@ export const FeatureVariationsPage: FC = memo( setIsConfirmDialogOpen(false); dispatch( getFeature({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: featureId }) ); diff --git a/ui/web-v2/src/pages/goal/index.tsx b/ui/web-v2/src/pages/goal/index.tsx index 0656fc871e..c2af8f159a 100644 --- a/ui/web-v2/src/pages/goal/index.tsx +++ b/ui/web-v2/src/pages/goal/index.tsx @@ -117,7 +117,7 @@ export const GoalIndexPage: FC = memo(() => { async (data) => { dispatch( createGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.id, name: data.name, description: data.description @@ -157,7 +157,7 @@ export const GoalIndexPage: FC = memo(() => { } dispatch( updateGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: goalId, name: name, description: description @@ -165,7 +165,7 @@ export const GoalIndexPage: FC = memo(() => { ).then(() => { dispatch( getGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: goalId }) ); @@ -200,7 +200,7 @@ export const GoalIndexPage: FC = memo(() => { : false; dispatch( listGoals({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: GOAL_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -278,7 +278,7 @@ export const GoalIndexPage: FC = memo(() => { async (data) => { dispatch( archiveGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.goal.id }) ).then(() => { @@ -304,7 +304,7 @@ export const GoalIndexPage: FC = memo(() => { if (isUpdate) { dispatch( getGoal({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: goalId }) ).then((e) => { diff --git a/ui/web-v2/src/pages/notification/index.tsx b/ui/web-v2/src/pages/notification/index.tsx index d00c9b1f04..adc4ded793 100644 --- a/ui/web-v2/src/pages/notification/index.tsx +++ b/ui/web-v2/src/pages/notification/index.tsx @@ -119,7 +119,7 @@ export const NotificationIndexPage: FC = memo(() => { options && options.enabled ? options.enabled === 'false' : null; dispatch( listNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: NOTIFICATION_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -182,7 +182,7 @@ export const NotificationIndexPage: FC = memo(() => { async (data) => { dispatch( createNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, name: data.name, sourceTypes: data.sourceTypes, webhookUrl: data.webhookUrl @@ -240,7 +240,7 @@ export const NotificationIndexPage: FC = memo(() => { } dispatch( updateNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: notificationId, name: name, currentSourceTypes: notification.sourceTypesList, @@ -295,11 +295,11 @@ export const NotificationIndexPage: FC = memo(() => { dispatch( data.notification.disabled ? enableNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.notification.id }) : disableNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.notification.id }) ).then(() => { @@ -335,7 +335,7 @@ export const NotificationIndexPage: FC = memo(() => { (data) => { dispatch( deleteNotification({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.notification.id }) ).then(() => { diff --git a/ui/web-v2/src/pages/push/index.tsx b/ui/web-v2/src/pages/push/index.tsx index 997fa352cb..2c5d20486f 100644 --- a/ui/web-v2/src/pages/push/index.tsx +++ b/ui/web-v2/src/pages/push/index.tsx @@ -110,7 +110,7 @@ export const PushIndexPage: FC = memo(() => { const cursor = (page - 1) * PUSH_LIST_PAGE_SIZE; dispatch( listPushes({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: PUSH_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -174,7 +174,7 @@ export const PushIndexPage: FC = memo(() => { convertFileToUnit8Array(data.file[0], (unit8Array) => { dispatch( createPush({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, name: data.name, tags: data.tags, fcmServiceAccount: unit8Array @@ -231,7 +231,7 @@ export const PushIndexPage: FC = memo(() => { } dispatch( updatePush({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: pushId, name: name, currentTags: push.tagsList, @@ -280,7 +280,7 @@ export const PushIndexPage: FC = memo(() => { (data) => { dispatch( deletePush({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.push.id }) ).then(() => { @@ -321,7 +321,7 @@ export const PushIndexPage: FC = memo(() => { useEffect(() => { dispatch( listTags({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: 99999, cursor: '', orderBy: ListTagsRequest.OrderBy.DEFAULT, diff --git a/ui/web-v2/src/pages/segment/index.tsx b/ui/web-v2/src/pages/segment/index.tsx index 5926b6e64c..061239cc5c 100644 --- a/ui/web-v2/src/pages/segment/index.tsx +++ b/ui/web-v2/src/pages/segment/index.tsx @@ -133,7 +133,7 @@ export const SegmentIndexPage: FC = memo(() => { options && options.inUse != null ? options.inUse === 'true' : null; dispatch( listSegments({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, pageSize: SEGMENT_LIST_PAGE_SIZE, cursor: String(cursor), searchKeyword: options && (options.q as string), @@ -174,7 +174,7 @@ export const SegmentIndexPage: FC = memo(() => { setIsConfirmDialogOpen(false); dispatch( deleteSegmentUser({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: data.segment.id }) ); @@ -186,7 +186,7 @@ export const SegmentIndexPage: FC = memo(() => { (segment: Segment.AsObject) => { dispatch( bulkDownloadSegmentUsers({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, segmentId: segment.id }) ).then((data) => { @@ -292,7 +292,7 @@ export const SegmentIndexPage: FC = memo(() => { async (data) => { dispatch( createSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, name: data.name, description: data.description }) @@ -311,7 +311,7 @@ export const SegmentIndexPage: FC = memo(() => { convertFileToUint8Array(file, (uint8Array) => { dispatch( bulkUploadSegmentUsers({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, segmentId: response.payload as string, data: uint8Array }) @@ -371,14 +371,14 @@ export const SegmentIndexPage: FC = memo(() => { convertFileToUint8Array(file, (uint8Array) => { dispatch( bulkUploadSegmentUsers({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, segmentId: segmentId, data: uint8Array }) ).then(() => { dispatch( getSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: segmentId }) ).then(handleOnClose); @@ -389,7 +389,7 @@ export const SegmentIndexPage: FC = memo(() => { // Name, description and file dispatch( updateSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: segmentId, name: name, description: description @@ -398,7 +398,7 @@ export const SegmentIndexPage: FC = memo(() => { if (!file) { dispatch( getSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: segmentId }) ).then(handleOnClose); @@ -407,14 +407,14 @@ export const SegmentIndexPage: FC = memo(() => { convertFileToUint8Array(file, (uint8Array) => { dispatch( bulkUploadSegmentUsers({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, segmentId: segmentId, data: uint8Array }) ).then(() => { dispatch( getSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: segmentId }) ).then(handleOnClose); @@ -437,7 +437,7 @@ export const SegmentIndexPage: FC = memo(() => { if (isUpdate) { dispatch( getSegment({ - environmentNamespace: currentEnvironment.id, + environmentId: currentEnvironment.id, id: segmentId }) ).then((response) => { diff --git a/ui/web-v2/src/proto/account/api_key_pb.d.ts b/ui/web-v2/src/proto/account/api_key_pb.d.ts index 51f37f6fa7..e6824b9ba2 100644 --- a/ui/web-v2/src/proto/account/api_key_pb.d.ts +++ b/ui/web-v2/src/proto/account/api_key_pb.d.ts @@ -64,9 +64,6 @@ export namespace APIKey { } export class EnvironmentAPIKey extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasApiKey(): boolean; clearApiKey(): void; getApiKey(): APIKey | undefined; @@ -109,7 +106,6 @@ export class EnvironmentAPIKey extends jspb.Message { export namespace EnvironmentAPIKey { export type AsObject = { - environmentNamespace: string; apiKey?: APIKey.AsObject; environmentDisabled: boolean; projectId: string; diff --git a/ui/web-v2/src/proto/account/api_key_pb.js b/ui/web-v2/src/proto/account/api_key_pb.js index 446177d418..fec6a0f6d7 100644 --- a/ui/web-v2/src/proto/account/api_key_pb.js +++ b/ui/web-v2/src/proto/account/api_key_pb.js @@ -380,7 +380,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), apiKey: (f = msg.getApiKey()) && proto.bucketeer.account.APIKey.toObject(includeInstance, f), @@ -435,10 +434,6 @@ proto.bucketeer.account.EnvironmentAPIKey.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto.bucketeer.account.APIKey(); reader.readMessage( @@ -502,10 +497,6 @@ proto.bucketeer.account.EnvironmentAPIKey.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getApiKey(); if (f != null) { writer.writeMessage( @@ -536,26 +527,6 @@ proto.bucketeer.account.EnvironmentAPIKey.serializeBinaryToWriter = function ( } }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.account.EnvironmentAPIKey.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.account.EnvironmentAPIKey} returns this - */ -proto.bucketeer.account.EnvironmentAPIKey.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional APIKey api_key = 2; * @return {?proto.bucketeer.account.APIKey} diff --git a/ui/web-v2/src/proto/account/service_pb.d.ts b/ui/web-v2/src/proto/account/service_pb.d.ts index c606b2b937..74acb1587b 100644 --- a/ui/web-v2/src/proto/account/service_pb.d.ts +++ b/ui/web-v2/src/proto/account/service_pb.d.ts @@ -1079,8 +1079,8 @@ export class CreateAPIKeyRequest extends jspb.Message { getCommand(): proto_account_command_pb.CreateAPIKeyCommand | undefined; setCommand(value?: proto_account_command_pb.CreateAPIKeyCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateAPIKeyRequest.AsObject; @@ -1106,7 +1106,7 @@ export class CreateAPIKeyRequest extends jspb.Message { export namespace CreateAPIKeyRequest { export type AsObject = { command?: proto_account_command_pb.CreateAPIKeyCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1152,8 +1152,8 @@ export class ChangeAPIKeyNameRequest extends jspb.Message { getCommand(): proto_account_command_pb.ChangeAPIKeyNameCommand | undefined; setCommand(value?: proto_account_command_pb.ChangeAPIKeyNameCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ChangeAPIKeyNameRequest.AsObject; @@ -1180,7 +1180,7 @@ export namespace ChangeAPIKeyNameRequest { export type AsObject = { id: string; command?: proto_account_command_pb.ChangeAPIKeyNameCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1219,8 +1219,8 @@ export class EnableAPIKeyRequest extends jspb.Message { getCommand(): proto_account_command_pb.EnableAPIKeyCommand | undefined; setCommand(value?: proto_account_command_pb.EnableAPIKeyCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EnableAPIKeyRequest.AsObject; @@ -1247,7 +1247,7 @@ export namespace EnableAPIKeyRequest { export type AsObject = { id: string; command?: proto_account_command_pb.EnableAPIKeyCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1286,8 +1286,8 @@ export class DisableAPIKeyRequest extends jspb.Message { getCommand(): proto_account_command_pb.DisableAPIKeyCommand | undefined; setCommand(value?: proto_account_command_pb.DisableAPIKeyCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DisableAPIKeyRequest.AsObject; @@ -1314,7 +1314,7 @@ export namespace DisableAPIKeyRequest { export type AsObject = { id: string; command?: proto_account_command_pb.DisableAPIKeyCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1348,8 +1348,8 @@ export class GetAPIKeyRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetAPIKeyRequest.AsObject; @@ -1375,7 +1375,7 @@ export class GetAPIKeyRequest extends jspb.Message { export namespace GetAPIKeyRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -1419,9 +1419,6 @@ export class ListAPIKeysRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOrderBy(): ListAPIKeysRequest.OrderByMap[keyof ListAPIKeysRequest.OrderByMap]; setOrderBy( value: ListAPIKeysRequest.OrderByMap[keyof ListAPIKeysRequest.OrderByMap] @@ -1440,6 +1437,9 @@ export class ListAPIKeysRequest extends jspb.Message { getDisabled(): google_protobuf_wrappers_pb.BoolValue | undefined; setDisabled(value?: google_protobuf_wrappers_pb.BoolValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListAPIKeysRequest.AsObject; static toObject( @@ -1465,11 +1465,11 @@ export namespace ListAPIKeysRequest { export type AsObject = { pageSize: number; cursor: string; - environmentNamespace: string; orderBy: ListAPIKeysRequest.OrderByMap[keyof ListAPIKeysRequest.OrderByMap]; orderDirection: ListAPIKeysRequest.OrderDirectionMap[keyof ListAPIKeysRequest.OrderDirectionMap]; searchKeyword: string; disabled?: google_protobuf_wrappers_pb.BoolValue.AsObject; + environmentId: string; }; export interface OrderByMap { diff --git a/ui/web-v2/src/proto/account/service_pb.js b/ui/web-v2/src/proto/account/service_pb.js index a8434192ba..28e33d597a 100644 --- a/ui/web-v2/src/proto/account/service_pb.js +++ b/ui/web-v2/src/proto/account/service_pb.js @@ -7138,7 +7138,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -7188,9 +7188,9 @@ proto.bucketeer.account.CreateAPIKeyRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -7234,9 +7234,9 @@ proto.bucketeer.account.CreateAPIKeyRequest.serializeBinaryToWriter = function ( proto_account_command_pb.CreateAPIKeyCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -7282,13 +7282,13 @@ proto.bucketeer.account.CreateAPIKeyRequest.prototype.hasCommand = function () { }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.account.CreateAPIKeyRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.account.CreateAPIKeyRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -7296,9 +7296,9 @@ proto.bucketeer.account.CreateAPIKeyRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.account.CreateAPIKeyRequest} returns this */ -proto.bucketeer.account.CreateAPIKeyRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.account.CreateAPIKeyRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -7511,7 +7511,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -7565,9 +7565,9 @@ proto.bucketeer.account.ChangeAPIKeyNameRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -7613,9 +7613,9 @@ proto.bucketeer.account.ChangeAPIKeyNameRequest.serializeBinaryToWriter = proto_account_command_pb.ChangeAPIKeyNameCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -7680,13 +7680,13 @@ proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -7694,9 +7694,9 @@ proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.getEnvironmentNamespac * @param {string} value * @return {!proto.bucketeer.account.ChangeAPIKeyNameRequest} returns this */ -proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.account.ChangeAPIKeyNameRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -7852,7 +7852,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -7906,9 +7906,9 @@ proto.bucketeer.account.EnableAPIKeyRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -7956,9 +7956,9 @@ proto.bucketeer.account.EnableAPIKeyRequest.serializeBinaryToWriter = function ( proto_account_command_pb.EnableAPIKeyCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -8020,13 +8020,13 @@ proto.bucketeer.account.EnableAPIKeyRequest.prototype.hasCommand = function () { }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.account.EnableAPIKeyRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.account.EnableAPIKeyRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -8034,9 +8034,9 @@ proto.bucketeer.account.EnableAPIKeyRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.account.EnableAPIKeyRequest} returns this */ -proto.bucketeer.account.EnableAPIKeyRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.account.EnableAPIKeyRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -8193,7 +8193,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -8247,9 +8247,9 @@ proto.bucketeer.account.DisableAPIKeyRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -8295,9 +8295,9 @@ proto.bucketeer.account.DisableAPIKeyRequest.serializeBinaryToWriter = proto_account_command_pb.DisableAPIKeyCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -8363,13 +8363,13 @@ proto.bucketeer.account.DisableAPIKeyRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.account.DisableAPIKeyRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.account.DisableAPIKeyRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -8377,9 +8377,9 @@ proto.bucketeer.account.DisableAPIKeyRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.account.DisableAPIKeyRequest} returns this */ -proto.bucketeer.account.DisableAPIKeyRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.account.DisableAPIKeyRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -8530,7 +8530,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -8573,9 +8573,9 @@ proto.bucketeer.account.GetAPIKeyRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -8615,9 +8615,9 @@ proto.bucketeer.account.GetAPIKeyRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -8638,13 +8638,13 @@ proto.bucketeer.account.GetAPIKeyRequest.prototype.setId = function (value) { }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.account.GetAPIKeyRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.account.GetAPIKeyRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -8652,10 +8652,11 @@ proto.bucketeer.account.GetAPIKeyRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.account.GetAPIKeyRequest} returns this */ -proto.bucketeer.account.GetAPIKeyRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; +proto.bucketeer.account.GetAPIKeyRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 3, value); +}; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -8862,13 +8863,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), cursor: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), disabled: (f = msg.getDisabled()) && - google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 8, '') }; if (includeInstance) { @@ -8917,10 +8918,6 @@ proto.bucketeer.account.ListAPIKeysRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.account.ListAPIKeysRequest.OrderBy} */ ( @@ -8947,6 +8944,10 @@ proto.bucketeer.account.ListAPIKeysRequest.deserializeBinaryFromReader = ); msg.setDisabled(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -8989,10 +8990,6 @@ proto.bucketeer.account.ListAPIKeysRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getOrderBy(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -9013,6 +9010,10 @@ proto.bucketeer.account.ListAPIKeysRequest.serializeBinaryToWriter = function ( google_protobuf_wrappers_pb.BoolValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(8, f); + } }; /** @@ -9069,26 +9070,6 @@ proto.bucketeer.account.ListAPIKeysRequest.prototype.setCursor = function ( return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.account.ListAPIKeysRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.account.ListAPIKeysRequest} returns this - */ -proto.bucketeer.account.ListAPIKeysRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional OrderBy order_by = 4; * @return {!proto.bucketeer.account.ListAPIKeysRequest.OrderBy} @@ -9186,6 +9167,26 @@ proto.bucketeer.account.ListAPIKeysRequest.prototype.hasDisabled = function () { return jspb.Message.getField(this, 7) != null; }; +/** + * optional string environment_id = 8; + * @return {string} + */ +proto.bucketeer.account.ListAPIKeysRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 8, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.account.ListAPIKeysRequest} returns this + */ +proto.bucketeer.account.ListAPIKeysRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 8, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} diff --git a/ui/web-v2/src/proto/auditlog/service_pb.d.ts b/ui/web-v2/src/proto/auditlog/service_pb.d.ts index 31c4038e14..20cae10be4 100644 --- a/ui/web-v2/src/proto/auditlog/service_pb.d.ts +++ b/ui/web-v2/src/proto/auditlog/service_pb.d.ts @@ -12,9 +12,6 @@ export class ListAuditLogsRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOrderBy(): ListAuditLogsRequest.OrderByMap[keyof ListAuditLogsRequest.OrderByMap]; setOrderBy( value: ListAuditLogsRequest.OrderByMap[keyof ListAuditLogsRequest.OrderByMap] @@ -39,6 +36,9 @@ export class ListAuditLogsRequest extends jspb.Message { getEntityType(): google_protobuf_wrappers_pb.Int32Value | undefined; setEntityType(value?: google_protobuf_wrappers_pb.Int32Value): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListAuditLogsRequest.AsObject; static toObject( @@ -64,13 +64,13 @@ export namespace ListAuditLogsRequest { export type AsObject = { pageSize: number; cursor: string; - environmentNamespace: string; orderBy: ListAuditLogsRequest.OrderByMap[keyof ListAuditLogsRequest.OrderByMap]; orderDirection: ListAuditLogsRequest.OrderDirectionMap[keyof ListAuditLogsRequest.OrderDirectionMap]; searchKeyword: string; from: number; to: number; entityType?: google_protobuf_wrappers_pb.Int32Value.AsObject; + environmentId: string; }; export interface OrderByMap { @@ -265,9 +265,6 @@ export class ListFeatureHistoryRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOrderBy(): ListFeatureHistoryRequest.OrderByMap[keyof ListFeatureHistoryRequest.OrderByMap]; setOrderBy( value: ListFeatureHistoryRequest.OrderByMap[keyof ListFeatureHistoryRequest.OrderByMap] @@ -287,6 +284,9 @@ export class ListFeatureHistoryRequest extends jspb.Message { getTo(): number; setTo(value: number): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListFeatureHistoryRequest.AsObject; static toObject( @@ -313,12 +313,12 @@ export namespace ListFeatureHistoryRequest { featureId: string; pageSize: number; cursor: string; - environmentNamespace: string; orderBy: ListFeatureHistoryRequest.OrderByMap[keyof ListFeatureHistoryRequest.OrderByMap]; orderDirection: ListFeatureHistoryRequest.OrderDirectionMap[keyof ListFeatureHistoryRequest.OrderDirectionMap]; searchKeyword: string; from: number; to: number; + environmentId: string; }; export interface OrderByMap { diff --git a/ui/web-v2/src/proto/auditlog/service_pb.js b/ui/web-v2/src/proto/auditlog/service_pb.js index 6768bcb35d..327ded37eb 100644 --- a/ui/web-v2/src/proto/auditlog/service_pb.js +++ b/ui/web-v2/src/proto/auditlog/service_pb.js @@ -286,7 +286,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), cursor: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), @@ -294,7 +293,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { to: jspb.Message.getFieldWithDefault(msg, 8, 0), entityType: (f = msg.getEntityType()) && - google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f) + google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 10, '') }; if (includeInstance) { @@ -343,10 +343,6 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.auditlog.ListAuditLogsRequest.OrderBy} */ ( @@ -381,6 +377,10 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.deserializeBinaryFromReader = ); msg.setEntityType(value); break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -421,10 +421,6 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getOrderBy(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -453,6 +449,10 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.serializeBinaryToWriter = google_protobuf_wrappers_pb.Int32Value.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(10, f); + } }; /** @@ -511,26 +511,6 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.setCursor = function ( return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.auditlog.ListAuditLogsRequest} returns this - */ -proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional OrderBy order_by = 4; * @return {!proto.bucketeer.auditlog.ListAuditLogsRequest.OrderBy} @@ -670,6 +650,26 @@ proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.hasEntityType = return jspb.Message.getField(this, 9) != null; }; +/** + * optional string environment_id = 10; + * @return {string} + */ +proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 10, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.auditlog.ListAuditLogsRequest} returns this + */ +proto.bucketeer.auditlog.ListAuditLogsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 10, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -1586,12 +1586,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { featureId: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 5, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 6, 0), searchKeyword: jspb.Message.getFieldWithDefault(msg, 7, ''), from: jspb.Message.getFieldWithDefault(msg, 8, 0), - to: jspb.Message.getFieldWithDefault(msg, 9, 0) + to: jspb.Message.getFieldWithDefault(msg, 9, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 10, '') }; if (includeInstance) { @@ -1643,10 +1643,6 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 4: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 5: var value = /** @type {!proto.bucketeer.auditlog.ListFeatureHistoryRequest.OrderBy} */ ( @@ -1673,6 +1669,10 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.deserializeBinaryFromReader = var value = /** @type {number} */ (reader.readInt64()); msg.setTo(value); break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1717,10 +1717,6 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(3, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(4, f); - } f = message.getOrderBy(); if (f !== 0.0) { writer.writeEnum(5, f); @@ -1741,6 +1737,10 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.serializeBinaryToWriter = if (f !== 0) { writer.writeInt64(9, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(10, f); + } }; /** @@ -1817,26 +1817,6 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.setCursor = return jspb.Message.setProto3StringField(this, 3, value); }; -/** - * optional string environment_namespace = 4; - * @return {string} - */ -proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.auditlog.ListFeatureHistoryRequest} returns this - */ -proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 4, value); - }; - /** * optional OrderBy order_by = 5; * @return {!proto.bucketeer.auditlog.ListFeatureHistoryRequest.OrderBy} @@ -1934,6 +1914,26 @@ proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.setTo = function ( return jspb.Message.setProto3IntField(this, 9, value); }; +/** + * optional string environment_id = 10; + * @return {string} + */ +proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 10, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.auditlog.ListFeatureHistoryRequest} returns this + */ +proto.bucketeer.auditlog.ListFeatureHistoryRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 10, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} diff --git a/ui/web-v2/src/proto/autoops/service_pb.d.ts b/ui/web-v2/src/proto/autoops/service_pb.d.ts index fa7d6cccdf..7dc23ee6c2 100644 --- a/ui/web-v2/src/proto/autoops/service_pb.d.ts +++ b/ui/web-v2/src/proto/autoops/service_pb.d.ts @@ -8,12 +8,12 @@ import * as proto_autoops_ops_count_pb from '../../proto/autoops/ops_count_pb'; import * as proto_autoops_progressive_rollout_pb from '../../proto/autoops/progressive_rollout_pb'; export class GetAutoOpsRuleRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetAutoOpsRuleRequest.AsObject; static toObject( @@ -37,8 +37,8 @@ export class GetAutoOpsRuleRequest extends jspb.Message { export namespace GetAutoOpsRuleRequest { export type AsObject = { - environmentNamespace: string; id: string; + environmentId: string; }; } @@ -76,14 +76,14 @@ export namespace GetAutoOpsRuleResponse { } export class CreateAutoOpsRuleRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasCommand(): boolean; clearCommand(): void; getCommand(): proto_autoops_command_pb.CreateAutoOpsRuleCommand | undefined; setCommand(value?: proto_autoops_command_pb.CreateAutoOpsRuleCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateAutoOpsRuleRequest.AsObject; static toObject( @@ -107,8 +107,8 @@ export class CreateAutoOpsRuleRequest extends jspb.Message { export namespace CreateAutoOpsRuleRequest { export type AsObject = { - environmentNamespace: string; command?: proto_autoops_command_pb.CreateAutoOpsRuleCommand.AsObject; + environmentId: string; }; } @@ -139,9 +139,6 @@ export namespace CreateAutoOpsRuleResponse { } export class ListAutoOpsRulesRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -153,6 +150,9 @@ export class ListAutoOpsRulesRequest extends jspb.Message { setFeatureIdsList(value: Array): void; addFeatureIds(value: string, index?: number): string; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListAutoOpsRulesRequest.AsObject; static toObject( @@ -176,10 +176,10 @@ export class ListAutoOpsRulesRequest extends jspb.Message { export namespace ListAutoOpsRulesRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; featureIdsList: Array; + environmentId: string; }; } @@ -226,9 +226,6 @@ export namespace ListAutoOpsRulesResponse { } export class StopAutoOpsRuleRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -237,6 +234,9 @@ export class StopAutoOpsRuleRequest extends jspb.Message { getCommand(): proto_autoops_command_pb.StopAutoOpsRuleCommand | undefined; setCommand(value?: proto_autoops_command_pb.StopAutoOpsRuleCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StopAutoOpsRuleRequest.AsObject; static toObject( @@ -260,9 +260,9 @@ export class StopAutoOpsRuleRequest extends jspb.Message { export namespace StopAutoOpsRuleRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_autoops_command_pb.StopAutoOpsRuleCommand.AsObject; + environmentId: string; }; } @@ -293,9 +293,6 @@ export namespace StopAutoOpsRuleResponse { } export class DeleteAutoOpsRuleRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -304,6 +301,9 @@ export class DeleteAutoOpsRuleRequest extends jspb.Message { getCommand(): proto_autoops_command_pb.DeleteAutoOpsRuleCommand | undefined; setCommand(value?: proto_autoops_command_pb.DeleteAutoOpsRuleCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteAutoOpsRuleRequest.AsObject; static toObject( @@ -327,9 +327,9 @@ export class DeleteAutoOpsRuleRequest extends jspb.Message { export namespace DeleteAutoOpsRuleRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_autoops_command_pb.DeleteAutoOpsRuleCommand.AsObject; + environmentId: string; }; } @@ -360,9 +360,6 @@ export namespace DeleteAutoOpsRuleResponse { } export class UpdateAutoOpsRuleRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -416,6 +413,9 @@ export class UpdateAutoOpsRuleRequest extends jspb.Message { index?: number ): proto_autoops_command_pb.ChangeDatetimeClauseCommand; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateAutoOpsRuleRequest.AsObject; static toObject( @@ -439,13 +439,13 @@ export class UpdateAutoOpsRuleRequest extends jspb.Message { export namespace UpdateAutoOpsRuleRequest { export type AsObject = { - environmentNamespace: string; id: string; addOpsEventRateClauseCommandsList: Array; changeOpsEventRateClauseCommandsList: Array; deleteClauseCommandsList: Array; addDatetimeClauseCommandsList: Array; changeDatetimeClauseCommandsList: Array; + environmentId: string; }; } @@ -476,9 +476,6 @@ export namespace UpdateAutoOpsRuleResponse { } export class ExecuteAutoOpsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -491,6 +488,9 @@ export class ExecuteAutoOpsRequest extends jspb.Message { value?: proto_autoops_command_pb.ExecuteAutoOpsRuleCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ExecuteAutoOpsRequest.AsObject; static toObject( @@ -514,9 +514,9 @@ export class ExecuteAutoOpsRequest extends jspb.Message { export namespace ExecuteAutoOpsRequest { export type AsObject = { - environmentNamespace: string; id: string; executeAutoOpsRuleCommand?: proto_autoops_command_pb.ExecuteAutoOpsRuleCommand.AsObject; + environmentId: string; }; } @@ -552,9 +552,6 @@ export namespace ExecuteAutoOpsResponse { } export class ListOpsCountsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -571,6 +568,9 @@ export class ListOpsCountsRequest extends jspb.Message { setFeatureIdsList(value: Array): void; addFeatureIds(value: string, index?: number): string; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListOpsCountsRequest.AsObject; static toObject( @@ -594,11 +594,11 @@ export class ListOpsCountsRequest extends jspb.Message { export namespace ListOpsCountsRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; autoOpsRuleIdsList: Array; featureIdsList: Array; + environmentId: string; }; } @@ -643,9 +643,6 @@ export namespace ListOpsCountsResponse { } export class CreateProgressiveRolloutRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasCommand(): boolean; clearCommand(): void; getCommand(): @@ -655,6 +652,9 @@ export class CreateProgressiveRolloutRequest extends jspb.Message { value?: proto_autoops_command_pb.CreateProgressiveRolloutCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateProgressiveRolloutRequest.AsObject; static toObject( @@ -678,8 +678,8 @@ export class CreateProgressiveRolloutRequest extends jspb.Message { export namespace CreateProgressiveRolloutRequest { export type AsObject = { - environmentNamespace: string; command?: proto_autoops_command_pb.CreateProgressiveRolloutCommand.AsObject; + environmentId: string; }; } @@ -712,12 +712,12 @@ export namespace CreateProgressiveRolloutResponse { } export class GetProgressiveRolloutRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetProgressiveRolloutRequest.AsObject; static toObject( @@ -741,8 +741,8 @@ export class GetProgressiveRolloutRequest extends jspb.Message { export namespace GetProgressiveRolloutRequest { export type AsObject = { - environmentNamespace: string; id: string; + environmentId: string; }; } @@ -784,9 +784,6 @@ export namespace GetProgressiveRolloutResponse { } export class StopProgressiveRolloutRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -799,6 +796,9 @@ export class StopProgressiveRolloutRequest extends jspb.Message { value?: proto_autoops_command_pb.StopProgressiveRolloutCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StopProgressiveRolloutRequest.AsObject; static toObject( @@ -822,9 +822,9 @@ export class StopProgressiveRolloutRequest extends jspb.Message { export namespace StopProgressiveRolloutRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_autoops_command_pb.StopProgressiveRolloutCommand.AsObject; + environmentId: string; }; } @@ -855,9 +855,6 @@ export namespace StopProgressiveRolloutResponse { } export class DeleteProgressiveRolloutRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -870,6 +867,9 @@ export class DeleteProgressiveRolloutRequest extends jspb.Message { value?: proto_autoops_command_pb.DeleteProgressiveRolloutCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteProgressiveRolloutRequest.AsObject; static toObject( @@ -893,9 +893,9 @@ export class DeleteProgressiveRolloutRequest extends jspb.Message { export namespace DeleteProgressiveRolloutRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_autoops_command_pb.DeleteProgressiveRolloutCommand.AsObject; + environmentId: string; }; } @@ -928,9 +928,6 @@ export namespace DeleteProgressiveRolloutResponse { } export class ListProgressiveRolloutsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -966,6 +963,9 @@ export class ListProgressiveRolloutsRequest extends jspb.Message { value: proto_autoops_progressive_rollout_pb.ProgressiveRollout.TypeMap[keyof proto_autoops_progressive_rollout_pb.ProgressiveRollout.TypeMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListProgressiveRolloutsRequest.AsObject; static toObject( @@ -989,7 +989,6 @@ export class ListProgressiveRolloutsRequest extends jspb.Message { export namespace ListProgressiveRolloutsRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; featureIdsList: Array; @@ -997,6 +996,7 @@ export namespace ListProgressiveRolloutsRequest { orderDirection: ListProgressiveRolloutsRequest.OrderDirectionMap[keyof ListProgressiveRolloutsRequest.OrderDirectionMap]; status: proto_autoops_progressive_rollout_pb.ProgressiveRollout.StatusMap[keyof proto_autoops_progressive_rollout_pb.ProgressiveRollout.StatusMap]; type: proto_autoops_progressive_rollout_pb.ProgressiveRollout.TypeMap[keyof proto_autoops_progressive_rollout_pb.ProgressiveRollout.TypeMap]; + environmentId: string; }; export interface OrderByMap { @@ -1062,9 +1062,6 @@ export namespace ListProgressiveRolloutsResponse { } export class ExecuteProgressiveRolloutRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -1077,6 +1074,9 @@ export class ExecuteProgressiveRolloutRequest extends jspb.Message { value?: proto_autoops_command_pb.ChangeProgressiveRolloutScheduleTriggeredAtCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject( includeInstance?: boolean @@ -1102,9 +1102,9 @@ export class ExecuteProgressiveRolloutRequest extends jspb.Message { export namespace ExecuteProgressiveRolloutRequest { export type AsObject = { - environmentNamespace: string; id: string; changeProgressiveRolloutTriggeredAtCommand?: proto_autoops_command_pb.ChangeProgressiveRolloutScheduleTriggeredAtCommand.AsObject; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/autoops/service_pb.js b/ui/web-v2/src/proto/autoops/service_pb.js index 6984209435..ca05978e21 100644 --- a/ui/web-v2/src/proto/autoops/service_pb.js +++ b/ui/web-v2/src/proto/autoops/service_pb.js @@ -918,8 +918,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), - id: jspb.Message.getFieldWithDefault(msg, 2, '') + id: jspb.Message.getFieldWithDefault(msg, 2, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -960,14 +960,14 @@ proto.bucketeer.autoops.GetAutoOpsRuleRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1000,34 +1000,14 @@ proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.serializeBinary = proto.bucketeer.autoops.GetAutoOpsRuleRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.GetAutoOpsRuleRequest} returns this - */ -proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** @@ -1048,6 +1028,26 @@ proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 2, value); }; +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.GetAutoOpsRuleRequest} returns this + */ +proto.bucketeer.autoops.GetAutoOpsRuleRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -1260,13 +1260,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.CreateAutoOpsRuleCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -1307,10 +1307,6 @@ proto.bucketeer.autoops.CreateAutoOpsRuleRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto_autoops_command_pb.CreateAutoOpsRuleCommand(); reader.readMessage( @@ -1320,6 +1316,10 @@ proto.bucketeer.autoops.CreateAutoOpsRuleRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1352,10 +1352,6 @@ proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.serializeBinary = proto.bucketeer.autoops.CreateAutoOpsRuleRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getCommand(); if (f != null) { writer.writeMessage( @@ -1365,26 +1361,10 @@ proto.bucketeer.autoops.CreateAutoOpsRuleRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.CreateAutoOpsRuleRequest} returns this - */ -proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** @@ -1429,6 +1409,26 @@ proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.hasCommand = return jspb.Message.getField(this, 2) != null; }; +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.CreateAutoOpsRuleRequest} returns this + */ +proto.bucketeer.autoops.CreateAutoOpsRuleRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -1581,11 +1581,11 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), featureIdsList: - (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -1626,10 +1626,6 @@ proto.bucketeer.autoops.ListAutoOpsRulesRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -1642,6 +1638,10 @@ proto.bucketeer.autoops.ListAutoOpsRulesRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.addFeatureIds(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1674,10 +1674,6 @@ proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.serializeBinary = proto.bucketeer.autoops.ListAutoOpsRulesRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -1690,26 +1686,10 @@ proto.bucketeer.autoops.ListAutoOpsRulesRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeRepeatedString(4, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.ListAutoOpsRulesRequest} returns this - */ -proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -1790,6 +1770,26 @@ proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.clearFeatureIdsList = return this.setFeatureIdsList([]); }; +/** + * optional string environment_id = 5; + * @return {string} + */ +proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 5, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.ListAutoOpsRulesRequest} returns this + */ +proto.bucketeer.autoops.ListAutoOpsRulesRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -2044,14 +2044,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.StopAutoOpsRuleCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -2092,10 +2092,6 @@ proto.bucketeer.autoops.StopAutoOpsRuleRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -2109,6 +2105,10 @@ proto.bucketeer.autoops.StopAutoOpsRuleRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -2141,10 +2141,6 @@ proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.serializeBinary = proto.bucketeer.autoops.StopAutoOpsRuleRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -2157,26 +2153,10 @@ proto.bucketeer.autoops.StopAutoOpsRuleRequest.serializeBinaryToWriter = proto_autoops_command_pb.StopAutoOpsRuleCommand.serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.StopAutoOpsRuleRequest} returns this - */ -proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -2240,6 +2220,26 @@ proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.StopAutoOpsRuleRequest} returns this + */ +proto.bucketeer.autoops.StopAutoOpsRuleRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -2385,14 +2385,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.DeleteAutoOpsRuleCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -2433,10 +2433,6 @@ proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -2450,6 +2446,10 @@ proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -2482,10 +2482,6 @@ proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.serializeBinary = proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -2499,26 +2495,10 @@ proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.DeleteAutoOpsRuleRequest} returns this - */ -proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -2581,6 +2561,26 @@ proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.DeleteAutoOpsRuleRequest} returns this + */ +proto.bucketeer.autoops.DeleteAutoOpsRuleRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -2735,7 +2735,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), addOpsEventRateClauseCommandsList: jspb.Message.toObjectList( msg.getAddOpsEventRateClauseCommandsList(), @@ -2761,7 +2760,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { msg.getChangeDatetimeClauseCommandsList(), proto_autoops_command_pb.ChangeDatetimeClauseCommand.toObject, includeInstance - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 9, '') }; if (includeInstance) { @@ -2802,10 +2802,6 @@ proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -2858,6 +2854,10 @@ proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.deserializeBinaryFromReader = ); msg.addChangeDatetimeClauseCommands(value); break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -2890,10 +2890,6 @@ proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.serializeBinary = proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -2942,26 +2938,10 @@ proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.UpdateAutoOpsRuleRequest} returns this - */ -proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(9, f); + } }; /** @@ -3227,6 +3207,26 @@ proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.clearChangeDatetimeCl return this.setChangeDatetimeClauseCommandsList([]); }; +/** + * optional string environment_id = 9; + * @return {string} + */ +proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 9, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.UpdateAutoOpsRuleRequest} returns this + */ +proto.bucketeer.autoops.UpdateAutoOpsRuleRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 9, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -3373,14 +3373,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), executeAutoOpsRuleCommand: (f = msg.getExecuteAutoOpsRuleCommand()) && proto_autoops_command_pb.ExecuteAutoOpsRuleCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -3421,10 +3421,6 @@ proto.bucketeer.autoops.ExecuteAutoOpsRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -3438,6 +3434,10 @@ proto.bucketeer.autoops.ExecuteAutoOpsRequest.deserializeBinaryFromReader = ); msg.setExecuteAutoOpsRuleCommand(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3470,10 +3470,6 @@ proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.serializeBinary = proto.bucketeer.autoops.ExecuteAutoOpsRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -3487,26 +3483,10 @@ proto.bucketeer.autoops.ExecuteAutoOpsRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.ExecuteAutoOpsRequest} returns this - */ -proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -3569,6 +3549,26 @@ proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.hasExecuteAutoOpsRuleCom return jspb.Message.getField(this, 4) != null; }; +/** + * optional string environment_id = 5; + * @return {string} + */ +proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 5, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.ExecuteAutoOpsRequest} returns this + */ +proto.bucketeer.autoops.ExecuteAutoOpsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -3753,13 +3753,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), autoOpsRuleIdsList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f, featureIdsList: - (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -3800,10 +3800,6 @@ proto.bucketeer.autoops.ListOpsCountsRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -3820,6 +3816,10 @@ proto.bucketeer.autoops.ListOpsCountsRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.addFeatureIds(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3852,10 +3852,6 @@ proto.bucketeer.autoops.ListOpsCountsRequest.prototype.serializeBinary = proto.bucketeer.autoops.ListOpsCountsRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -3872,26 +3868,10 @@ proto.bucketeer.autoops.ListOpsCountsRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeRepeatedString(5, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.ListOpsCountsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.ListOpsCountsRequest} returns this - */ -proto.bucketeer.autoops.ListOpsCountsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; /** @@ -3995,18 +3975,38 @@ proto.bucketeer.autoops.ListOpsCountsRequest.prototype.setFeatureIdsList = * @param {number=} opt_index * @return {!proto.bucketeer.autoops.ListOpsCountsRequest} returns this */ -proto.bucketeer.autoops.ListOpsCountsRequest.prototype.addFeatureIds = - function (value, opt_index) { - return jspb.Message.addToRepeatedField(this, 5, value, opt_index); +proto.bucketeer.autoops.ListOpsCountsRequest.prototype.addFeatureIds = + function (value, opt_index) { + return jspb.Message.addToRepeatedField(this, 5, value, opt_index); + }; + +/** + * Clears the list making it empty but non-null. + * @return {!proto.bucketeer.autoops.ListOpsCountsRequest} returns this + */ +proto.bucketeer.autoops.ListOpsCountsRequest.prototype.clearFeatureIdsList = + function () { + return this.setFeatureIdsList([]); + }; + +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.autoops.ListOpsCountsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); }; /** - * Clears the list making it empty but non-null. + * @param {string} value * @return {!proto.bucketeer.autoops.ListOpsCountsRequest} returns this */ -proto.bucketeer.autoops.ListOpsCountsRequest.prototype.clearFeatureIdsList = - function () { - return this.setFeatureIdsList([]); +proto.bucketeer.autoops.ListOpsCountsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 6, value); }; /** @@ -4263,13 +4263,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.CreateProgressiveRolloutCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -4309,10 +4309,6 @@ proto.bucketeer.autoops.CreateProgressiveRolloutRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto_autoops_command_pb.CreateProgressiveRolloutCommand(); @@ -4323,6 +4319,10 @@ proto.bucketeer.autoops.CreateProgressiveRolloutRequest.deserializeBinaryFromRea ); msg.setCommand(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -4355,10 +4355,6 @@ proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.serializeBinar proto.bucketeer.autoops.CreateProgressiveRolloutRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getCommand(); if (f != null) { writer.writeMessage( @@ -4368,26 +4364,10 @@ proto.bucketeer.autoops.CreateProgressiveRolloutRequest.serializeBinaryToWriter .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.CreateProgressiveRolloutRequest} returns this - */ -proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** @@ -4432,6 +4412,26 @@ proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.hasCommand = return jspb.Message.getField(this, 2) != null; }; +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.CreateProgressiveRolloutRequest} returns this + */ +proto.bucketeer.autoops.CreateProgressiveRolloutRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -4576,8 +4576,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), - id: jspb.Message.getFieldWithDefault(msg, 2, '') + id: jspb.Message.getFieldWithDefault(msg, 2, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -4617,14 +4617,14 @@ proto.bucketeer.autoops.GetProgressiveRolloutRequest.deserializeBinaryFromReader } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -4657,24 +4657,24 @@ proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.serializeBinary = proto.bucketeer.autoops.GetProgressiveRolloutRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** - * optional string environment_namespace = 1; + * optional string id = 2; * @return {string} */ -proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') + jspb.Message.getFieldWithDefault(this, 2, '') ); }; @@ -4682,19 +4682,19 @@ proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getEnvironmentNam * @param {string} value * @return {!proto.bucketeer.autoops.GetProgressiveRolloutRequest} returns this */ -proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.setId = function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 2, value); }; /** - * optional string id = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getId = +proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -4702,9 +4702,9 @@ proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.getId = * @param {string} value * @return {!proto.bucketeer.autoops.GetProgressiveRolloutRequest} returns this */ -proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.setId = +proto.bucketeer.autoops.GetProgressiveRolloutRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -4919,14 +4919,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.StopProgressiveRolloutCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -4966,10 +4966,6 @@ proto.bucketeer.autoops.StopProgressiveRolloutRequest.deserializeBinaryFromReade } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -4984,6 +4980,10 @@ proto.bucketeer.autoops.StopProgressiveRolloutRequest.deserializeBinaryFromReade ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5016,10 +5016,6 @@ proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.serializeBinary proto.bucketeer.autoops.StopProgressiveRolloutRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -5033,26 +5029,10 @@ proto.bucketeer.autoops.StopProgressiveRolloutRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.StopProgressiveRolloutRequest} returns this - */ -proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -5117,6 +5097,26 @@ proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.StopProgressiveRolloutRequest} returns this + */ +proto.bucketeer.autoops.StopProgressiveRolloutRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -5261,14 +5261,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_autoops_command_pb.DeleteProgressiveRolloutCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -5308,10 +5308,6 @@ proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -5326,6 +5322,10 @@ proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.deserializeBinaryFromRea ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5358,10 +5358,6 @@ proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.serializeBinar proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -5375,26 +5371,10 @@ proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.serializeBinaryToWriter .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.DeleteProgressiveRolloutRequest} returns this - */ -proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -5459,6 +5439,26 @@ proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.DeleteProgressiveRolloutRequest} returns this + */ +proto.bucketeer.autoops.DeleteProgressiveRolloutRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -5610,7 +5610,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), featureIdsList: @@ -5618,7 +5617,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { orderBy: jspb.Message.getFieldWithDefault(msg, 5, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 6, 0), status: jspb.Message.getFieldWithDefault(msg, 7, 0), - type: jspb.Message.getFieldWithDefault(msg, 8, 0) + type: jspb.Message.getFieldWithDefault(msg, 8, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 9, '') }; if (includeInstance) { @@ -5658,10 +5658,6 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.deserializeBinaryFromRead } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -5702,6 +5698,10 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.deserializeBinaryFromRead ); msg.setType(value); break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5734,10 +5734,6 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.serializeBinary proto.bucketeer.autoops.ListProgressiveRolloutsRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -5770,6 +5766,10 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.serializeBinaryToWriter = if (f != null) { writer.writeEnum(8, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(9, f); + } }; /** @@ -5789,26 +5789,6 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.OrderDirection = { DESC: 1 }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.ListProgressiveRolloutsRequest} returns this - */ -proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional int64 page_size = 2; * @return {number} @@ -6002,6 +5982,26 @@ proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.hasType = return jspb.Message.getField(this, 8) != null; }; +/** + * optional string environment_id = 9; + * @return {string} + */ +proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 9, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.ListProgressiveRolloutsRequest} returns this + */ +proto.bucketeer.autoops.ListProgressiveRolloutsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 9, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -6283,14 +6283,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), changeProgressiveRolloutTriggeredAtCommand: (f = msg.getChangeProgressiveRolloutTriggeredAtCommand()) && proto_autoops_command_pb.ChangeProgressiveRolloutScheduleTriggeredAtCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6330,10 +6330,6 @@ proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.deserializeBinaryFromRe } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -6349,6 +6345,10 @@ proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.deserializeBinaryFromRe ); msg.setChangeProgressiveRolloutTriggeredAtCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6381,10 +6381,6 @@ proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.serializeBina proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -6399,26 +6395,10 @@ proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.serializeBinaryToWriter .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest} returns this - */ -proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -6483,6 +6463,26 @@ proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.hasChangeProg return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest} returns this + */ +proto.bucketeer.autoops.ExecuteProgressiveRolloutRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/ui/web-v2/src/proto/event/client/event_pb.d.ts b/ui/web-v2/src/proto/event/client/event_pb.d.ts index 8ac2753e8d..563b0e1030 100644 --- a/ui/web-v2/src/proto/event/client/event_pb.d.ts +++ b/ui/web-v2/src/proto/event/client/event_pb.d.ts @@ -17,8 +17,8 @@ export class Event extends jspb.Message { getEvent(): google_protobuf_any_pb.Any | undefined; setEvent(value?: google_protobuf_any_pb.Any): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Event.AsObject; @@ -42,7 +42,7 @@ export namespace Event { export type AsObject = { id: string; event?: google_protobuf_any_pb.Any.AsObject; - environmentNamespace: string; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/event/client/event_pb.js b/ui/web-v2/src/proto/event/client/event_pb.js index dcf148e392..eb27e1cb34 100644 --- a/ui/web-v2/src/proto/event/client/event_pb.js +++ b/ui/web-v2/src/proto/event/client/event_pb.js @@ -838,7 +838,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { event: (f = msg.getEvent()) && google_protobuf_any_pb.Any.toObject(includeInstance, f), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -891,9 +891,9 @@ proto.bucketeer.event.client.Event.deserializeBinaryFromReader = function ( ); msg.setEvent(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -937,9 +937,9 @@ proto.bucketeer.event.client.Event.serializeBinaryToWriter = function ( google_protobuf_any_pb.Any.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -994,24 +994,22 @@ proto.bucketeer.event.client.Event.prototype.hasEvent = function () { }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.event.client.Event.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; +proto.bucketeer.event.client.Event.prototype.getEnvironmentId = function () { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, '')); +}; /** * @param {string} value * @return {!proto.bucketeer.event.client.Event} returns this */ -proto.bucketeer.event.client.Event.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; +proto.bucketeer.event.client.Event.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; if (jspb.Message.GENERATE_TO_OBJECT) { /** diff --git a/ui/web-v2/src/proto/event/domain/event_pb.d.ts b/ui/web-v2/src/proto/event/domain/event_pb.d.ts index f93b0d0685..d701084f61 100644 --- a/ui/web-v2/src/proto/event/domain/event_pb.d.ts +++ b/ui/web-v2/src/proto/event/domain/event_pb.d.ts @@ -48,9 +48,6 @@ export class Event extends jspb.Message { getData(): google_protobuf_any_pb.Any | undefined; setData(value?: google_protobuf_any_pb.Any): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getIsAdminEvent(): boolean; setIsAdminEvent(value: boolean): void; @@ -65,6 +62,9 @@ export class Event extends jspb.Message { getPreviousEntityData(): string; setPreviousEntityData(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Event.AsObject; static toObject(includeInstance: boolean, msg: Event): Event.AsObject; @@ -92,11 +92,11 @@ export namespace Event { type: Event.TypeMap[keyof Event.TypeMap]; editor?: Editor.AsObject; data?: google_protobuf_any_pb.Any.AsObject; - environmentNamespace: string; isAdminEvent: boolean; options?: Options.AsObject; entityData: string; previousEntityData: string; + environmentId: string; }; export interface EntityTypeMap { @@ -6345,9 +6345,6 @@ export class FlagTriggerCreatedEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getType(): proto_feature_flag_trigger_pb.FlagTrigger.TypeMap[keyof proto_feature_flag_trigger_pb.FlagTrigger.TypeMap]; setType( value: proto_feature_flag_trigger_pb.FlagTrigger.TypeMap[keyof proto_feature_flag_trigger_pb.FlagTrigger.TypeMap] @@ -6370,6 +6367,9 @@ export class FlagTriggerCreatedEvent extends jspb.Message { getUpdatedAt(): number; setUpdatedAt(value: number): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerCreatedEvent.AsObject; static toObject( @@ -6395,13 +6395,13 @@ export namespace FlagTriggerCreatedEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; type: proto_feature_flag_trigger_pb.FlagTrigger.TypeMap[keyof proto_feature_flag_trigger_pb.FlagTrigger.TypeMap]; action: proto_feature_flag_trigger_pb.FlagTrigger.ActionMap[keyof proto_feature_flag_trigger_pb.FlagTrigger.ActionMap]; description: string; token: string; createdAt: number; updatedAt: number; + environmentId: string; }; } @@ -6412,12 +6412,12 @@ export class FlagTriggerResetEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getToken(): string; setToken(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerResetEvent.AsObject; static toObject( @@ -6443,8 +6443,8 @@ export namespace FlagTriggerResetEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; token: string; + environmentId: string; }; } @@ -6455,12 +6455,12 @@ export class FlagTriggerDescriptionChangedEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getDescription(): string; setDescription(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject( includeInstance?: boolean @@ -6490,8 +6490,8 @@ export namespace FlagTriggerDescriptionChangedEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; description: string; + environmentId: string; }; } @@ -6502,8 +6502,8 @@ export class FlagTriggerDisabledEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerDisabledEvent.AsObject; @@ -6530,7 +6530,7 @@ export namespace FlagTriggerDisabledEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; + environmentId: string; }; } @@ -6541,8 +6541,8 @@ export class FlagTriggerEnabledEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerEnabledEvent.AsObject; @@ -6569,7 +6569,7 @@ export namespace FlagTriggerEnabledEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; + environmentId: string; }; } @@ -6580,8 +6580,8 @@ export class FlagTriggerDeletedEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerDeletedEvent.AsObject; @@ -6608,7 +6608,7 @@ export namespace FlagTriggerDeletedEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; + environmentId: string; }; } @@ -6619,15 +6619,15 @@ export class FlagTriggerUsageUpdatedEvent extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getLastTriggeredAt(): number; setLastTriggeredAt(value: number): void; getTriggerTimes(): number; setTriggerTimes(value: number): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTriggerUsageUpdatedEvent.AsObject; static toObject( @@ -6653,9 +6653,9 @@ export namespace FlagTriggerUsageUpdatedEvent { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; lastTriggeredAt: number; triggerTimes: number; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/event/domain/event_pb.js b/ui/web-v2/src/proto/event/domain/event_pb.js index 7486ffb074..0cdacf5dad 100644 --- a/ui/web-v2/src/proto/event/domain/event_pb.js +++ b/ui/web-v2/src/proto/event/domain/event_pb.js @@ -5196,13 +5196,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { data: (f = msg.getData()) && google_protobuf_any_pb.Any.toObject(includeInstance, f), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 8, ''), isAdminEvent: jspb.Message.getBooleanFieldWithDefault(msg, 9, false), options: (f = msg.getOptions()) && proto.bucketeer.event.domain.Options.toObject(includeInstance, f), entityData: jspb.Message.getFieldWithDefault(msg, 11, ''), - previousEntityData: jspb.Message.getFieldWithDefault(msg, 12, '') + previousEntityData: jspb.Message.getFieldWithDefault(msg, 12, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 13, '') }; if (includeInstance) { @@ -5284,10 +5284,6 @@ proto.bucketeer.event.domain.Event.deserializeBinaryFromReader = function ( ); msg.setData(value); break; - case 8: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 9: var value = /** @type {boolean} */ (reader.readBool()); msg.setIsAdminEvent(value); @@ -5308,6 +5304,10 @@ proto.bucketeer.event.domain.Event.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setPreviousEntityData(value); break; + case 13: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5374,10 +5374,6 @@ proto.bucketeer.event.domain.Event.serializeBinaryToWriter = function ( google_protobuf_any_pb.Any.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(8, f); - } f = message.getIsAdminEvent(); if (f) { writer.writeBool(9, f); @@ -5398,6 +5394,10 @@ proto.bucketeer.event.domain.Event.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(12, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(13, f); + } }; /** @@ -5748,26 +5748,6 @@ proto.bucketeer.event.domain.Event.prototype.hasData = function () { return jspb.Message.getField(this, 7) != null; }; -/** - * optional string environment_namespace = 8; - * @return {string} - */ -proto.bucketeer.event.domain.Event.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 8, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.domain.Event} returns this - */ -proto.bucketeer.event.domain.Event.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 8, value); - }; - /** * optional bool is_admin_event = 9; * @return {boolean} @@ -5859,6 +5839,24 @@ proto.bucketeer.event.domain.Event.prototype.setPreviousEntityData = function ( return jspb.Message.setProto3StringField(this, 12, value); }; +/** + * optional string environment_id = 13; + * @return {string} + */ +proto.bucketeer.event.domain.Event.prototype.getEnvironmentId = function () { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 13, '')); +}; + +/** + * @param {string} value + * @return {!proto.bucketeer.event.domain.Event} returns this + */ +proto.bucketeer.event.domain.Event.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 13, value); +}; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -35518,13 +35516,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), type: jspb.Message.getFieldWithDefault(msg, 4, 0), action: jspb.Message.getFieldWithDefault(msg, 5, 0), description: jspb.Message.getFieldWithDefault(msg, 6, ''), token: jspb.Message.getFieldWithDefault(msg, 7, ''), createdAt: jspb.Message.getFieldWithDefault(msg, 8, 0), - updatedAt: jspb.Message.getFieldWithDefault(msg, 9, 0) + updatedAt: jspb.Message.getFieldWithDefault(msg, 9, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 10, '') }; if (includeInstance) { @@ -35572,10 +35570,6 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.deserializeBinaryFromReader var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.feature.FlagTrigger.Type} */ ( reader.readEnum() @@ -35605,6 +35599,10 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.deserializeBinaryFromReader var value = /** @type {number} */ (reader.readInt64()); msg.setUpdatedAt(value); break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -35645,10 +35643,6 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getType(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -35673,6 +35667,10 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.serializeBinaryToWriter = if (f !== 0) { writer.writeInt64(9, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(10, f); + } }; /** @@ -35715,26 +35713,6 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.setFeatureId = return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.domain.FlagTriggerCreatedEvent} returns this - */ -proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional bucketeer.feature.FlagTrigger.Type type = 4; * @return {!proto.bucketeer.feature.FlagTrigger.Type} @@ -35851,6 +35829,26 @@ proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.setUpdatedAt = return jspb.Message.setProto3IntField(this, 9, value); }; +/** + * optional string environment_id = 10; + * @return {string} + */ +proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 10, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.event.domain.FlagTriggerCreatedEvent} returns this + */ +proto.bucketeer.event.domain.FlagTriggerCreatedEvent.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 10, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -35889,8 +35887,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - token: jspb.Message.getFieldWithDefault(msg, 4, '') + token: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -35938,14 +35936,14 @@ proto.bucketeer.event.domain.FlagTriggerResetEvent.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setToken(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -35986,14 +35984,14 @@ proto.bucketeer.event.domain.FlagTriggerResetEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getToken(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -36038,13 +36036,13 @@ proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.setFeatureId = }; /** - * optional string environment_namespace = 3; + * optional string token = 4; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getToken = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -36052,19 +36050,19 @@ proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getEnvironmentNames * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerResetEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.setEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.setToken = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; /** - * optional string token = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getToken = +proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -36072,9 +36070,9 @@ proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.getToken = * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerResetEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.setToken = +proto.bucketeer.event.domain.FlagTriggerResetEvent.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -36113,8 +36111,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - description: jspb.Message.getFieldWithDefault(msg, 4, '') + description: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -36163,14 +36161,14 @@ proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.deserializeBinar var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setDescription(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -36211,14 +36209,14 @@ proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.serializeBinaryT if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getDescription(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -36262,13 +36260,13 @@ proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.setFea }; /** - * optional string environment_namespace = 3; + * optional string description = 4; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getDescription = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -36276,19 +36274,19 @@ proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getEnv * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.setEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.setDescription = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; /** - * optional string description = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getDescription = +proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -36296,9 +36294,9 @@ proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.getDes * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.setDescription = +proto.bucketeer.event.domain.FlagTriggerDescriptionChangedEvent.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -36339,7 +36337,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -36387,9 +36385,9 @@ proto.bucketeer.event.domain.FlagTriggerDisabledEvent.deserializeBinaryFromReade var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -36431,9 +36429,9 @@ proto.bucketeer.event.domain.FlagTriggerDisabledEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -36478,13 +36476,13 @@ proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.setFeatureId = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.getEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -36492,9 +36490,9 @@ proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.getEnvironmentNa * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerDisabledEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.setEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDisabledEvent.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -36535,7 +36533,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -36583,9 +36581,9 @@ proto.bucketeer.event.domain.FlagTriggerEnabledEvent.deserializeBinaryFromReader var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -36627,9 +36625,9 @@ proto.bucketeer.event.domain.FlagTriggerEnabledEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -36674,13 +36672,13 @@ proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.setFeatureId = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.getEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -36688,9 +36686,9 @@ proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.getEnvironmentNam * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerEnabledEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.setEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerEnabledEvent.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -36731,7 +36729,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -36779,9 +36777,9 @@ proto.bucketeer.event.domain.FlagTriggerDeletedEvent.deserializeBinaryFromReader var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -36823,9 +36821,9 @@ proto.bucketeer.event.domain.FlagTriggerDeletedEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -36870,13 +36868,13 @@ proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.setFeatureId = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.getEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -36884,9 +36882,9 @@ proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.getEnvironmentNam * @param {string} value * @return {!proto.bucketeer.event.domain.FlagTriggerDeletedEvent} returns this */ -proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.setEnvironmentNamespace = +proto.bucketeer.event.domain.FlagTriggerDeletedEvent.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -36925,9 +36923,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), lastTriggeredAt: jspb.Message.getFieldWithDefault(msg, 4, 0), - triggerTimes: jspb.Message.getFieldWithDefault(msg, 5, 0) + triggerTimes: jspb.Message.getFieldWithDefault(msg, 5, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -36975,10 +36973,6 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.deserializeBinaryFromR var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {number} */ (reader.readInt64()); msg.setLastTriggeredAt(value); @@ -36987,6 +36981,10 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.deserializeBinaryFromR var value = /** @type {number} */ (reader.readInt32()); msg.setTriggerTimes(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -37027,10 +37025,6 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.serializeBinaryToWrite if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getLastTriggeredAt(); if (f !== 0) { writer.writeInt64(4, f); @@ -37039,6 +37033,10 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.serializeBinaryToWrite if (f !== 0) { writer.writeInt32(5, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; /** @@ -37081,26 +37079,6 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.setFeatureId return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent} returns this - */ -proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional int64 last_triggered_at = 4; * @return {number} @@ -37137,6 +37115,26 @@ proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.setTriggerTi return jspb.Message.setProto3IntField(this, 5, value); }; +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent} returns this + */ +proto.bucketeer.event.domain.FlagTriggerUsageUpdatedEvent.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 6, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/ui/web-v2/src/proto/event/service/feature_pb.d.ts b/ui/web-v2/src/proto/event/service/feature_pb.d.ts index cc6df6d969..372ed2e12f 100644 --- a/ui/web-v2/src/proto/event/service/feature_pb.d.ts +++ b/ui/web-v2/src/proto/event/service/feature_pb.d.ts @@ -16,9 +16,6 @@ export class EvaluationRequestEvent extends jspb.Message { getUser(): proto_user_user_pb.User | undefined; setUser(value?: proto_user_user_pb.User): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getTag(): string; setTag(value: string): void; @@ -48,7 +45,6 @@ export namespace EvaluationRequestEvent { id: string; timestamp: number; user?: proto_user_user_pb.User.AsObject; - environmentNamespace: string; tag: string; }; } diff --git a/ui/web-v2/src/proto/event/service/feature_pb.js b/ui/web-v2/src/proto/event/service/feature_pb.js index 98f5fc99d5..ee4c1d78a7 100644 --- a/ui/web-v2/src/proto/event/service/feature_pb.js +++ b/ui/web-v2/src/proto/event/service/feature_pb.js @@ -97,7 +97,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { user: (f = msg.getUser()) && proto_user_user_pb.User.toObject(includeInstance, f), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 5, ''), tag: jspb.Message.getFieldWithDefault(msg, 6, '') }; @@ -154,10 +153,6 @@ proto.bucketeer.event.service.EvaluationRequestEvent.deserializeBinaryFromReader ); msg.setUser(value); break; - case 5: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 6: var value = /** @type {string} */ (reader.readString()); msg.setTag(value); @@ -210,10 +205,6 @@ proto.bucketeer.event.service.EvaluationRequestEvent.serializeBinaryToWriter = proto_user_user_pb.User.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(5, f); - } f = message.getTag(); if (f.length > 0) { writer.writeString(6, f); @@ -296,26 +287,6 @@ proto.bucketeer.event.service.EvaluationRequestEvent.prototype.hasUser = return jspb.Message.getField(this, 3) != null; }; -/** - * optional string environment_namespace = 5; - * @return {string} - */ -proto.bucketeer.event.service.EvaluationRequestEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 5, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.service.EvaluationRequestEvent} returns this - */ -proto.bucketeer.event.service.EvaluationRequestEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 5, value); - }; - /** * optional string tag = 6; * @return {string} diff --git a/ui/web-v2/src/proto/event/service/segment_pb.d.ts b/ui/web-v2/src/proto/event/service/segment_pb.d.ts index 875c36b811..74d3bfe50c 100644 --- a/ui/web-v2/src/proto/event/service/segment_pb.d.ts +++ b/ui/web-v2/src/proto/event/service/segment_pb.d.ts @@ -9,9 +9,6 @@ export class BulkSegmentUsersReceivedEvent extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getSegmentId(): string; setSegmentId(value: string): void; @@ -30,6 +27,9 @@ export class BulkSegmentUsersReceivedEvent extends jspb.Message { getEditor(): proto_event_domain_event_pb.Editor | undefined; setEditor(value?: proto_event_domain_event_pb.Editor): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): BulkSegmentUsersReceivedEvent.AsObject; static toObject( @@ -54,10 +54,10 @@ export class BulkSegmentUsersReceivedEvent extends jspb.Message { export namespace BulkSegmentUsersReceivedEvent { export type AsObject = { id: string; - environmentNamespace: string; segmentId: string; data: Uint8Array | string; state: proto_feature_segment_pb.SegmentUser.StateMap[keyof proto_feature_segment_pb.SegmentUser.StateMap]; editor?: proto_event_domain_event_pb.Editor.AsObject; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/event/service/segment_pb.js b/ui/web-v2/src/proto/event/service/segment_pb.js index 66eb769974..7d7d19c019 100644 --- a/ui/web-v2/src/proto/event/service/segment_pb.js +++ b/ui/web-v2/src/proto/event/service/segment_pb.js @@ -95,13 +95,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), segmentId: jspb.Message.getFieldWithDefault(msg, 3, ''), data: msg.getData_asB64(), state: jspb.Message.getFieldWithDefault(msg, 5, 0), editor: (f = msg.getEditor()) && - proto_event_domain_event_pb.Editor.toObject(includeInstance, f) + proto_event_domain_event_pb.Editor.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -145,10 +145,6 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.deserializeBinaryFro var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = /** @type {string} */ (reader.readString()); msg.setSegmentId(value); @@ -172,6 +168,10 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.deserializeBinaryFro ); msg.setEditor(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -208,10 +208,6 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.serializeBinaryToWri if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getSegmentId(); if (f.length > 0) { writer.writeString(3, f); @@ -232,6 +228,10 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.serializeBinaryToWri proto_event_domain_event_pb.Editor.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -254,26 +254,6 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.setId = return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent} returns this - */ -proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional string segment_id = 3; * @return {string} @@ -394,4 +374,24 @@ proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.hasEditor return jspb.Message.getField(this, 6) != null; }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent} returns this + */ +proto.bucketeer.event.service.BulkSegmentUsersReceivedEvent.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 7, value); + }; + goog.object.extend(exports, proto.bucketeer.event.service); diff --git a/ui/web-v2/src/proto/event/service/user_pb.d.ts b/ui/web-v2/src/proto/event/service/user_pb.d.ts index 36ef7a4a8f..272c6f3f4d 100644 --- a/ui/web-v2/src/proto/event/service/user_pb.d.ts +++ b/ui/web-v2/src/proto/event/service/user_pb.d.ts @@ -8,9 +8,6 @@ export class UserEvent extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getTag(): string; setTag(value: string): void; @@ -27,6 +24,9 @@ export class UserEvent extends jspb.Message { value: proto_event_client_event_pb.SourceIdMap[keyof proto_event_client_event_pb.SourceIdMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UserEvent.AsObject; static toObject(includeInstance: boolean, msg: UserEvent): UserEvent.AsObject; @@ -48,11 +48,11 @@ export class UserEvent extends jspb.Message { export namespace UserEvent { export type AsObject = { id: string; - environmentNamespace: string; tag: string; userId: string; lastSeen: number; dataMap: Array<[string, string]>; sourceId: proto_event_client_event_pb.SourceIdMap[keyof proto_event_client_event_pb.SourceIdMap]; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/event/service/user_pb.js b/ui/web-v2/src/proto/event/service/user_pb.js index 9d60dad793..4303e18b02 100644 --- a/ui/web-v2/src/proto/event/service/user_pb.js +++ b/ui/web-v2/src/proto/event/service/user_pb.js @@ -87,14 +87,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, ''), tag: jspb.Message.getFieldWithDefault(msg, 5, ''), userId: jspb.Message.getFieldWithDefault(msg, 6, ''), lastSeen: jspb.Message.getFieldWithDefault(msg, 7, 0), dataMap: (f = msg.getDataMap()) ? f.toObject(includeInstance, undefined) : [], - sourceId: jspb.Message.getFieldWithDefault(msg, 9, 0) + sourceId: jspb.Message.getFieldWithDefault(msg, 9, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 10, '') }; if (includeInstance) { @@ -139,10 +139,6 @@ proto.bucketeer.event.service.UserEvent.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 4: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 5: var value = /** @type {string} */ (reader.readString()); msg.setTag(value); @@ -175,6 +171,10 @@ proto.bucketeer.event.service.UserEvent.deserializeBinaryFromReader = function ( ); msg.setSourceId(value); break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -213,10 +213,6 @@ proto.bucketeer.event.service.UserEvent.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(4, f); - } f = message.getTag(); if (f.length > 0) { writer.writeString(5, f); @@ -242,6 +238,10 @@ proto.bucketeer.event.service.UserEvent.serializeBinaryToWriter = function ( if (f !== 0.0) { writer.writeEnum(9, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(10, f); + } }; /** @@ -260,26 +260,6 @@ proto.bucketeer.event.service.UserEvent.prototype.setId = function (value) { return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 4; - * @return {string} - */ -proto.bucketeer.event.service.UserEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.event.service.UserEvent} returns this - */ -proto.bucketeer.event.service.UserEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 4, value); - }; - /** * optional string tag = 5; * @return {string} @@ -373,4 +353,25 @@ proto.bucketeer.event.service.UserEvent.prototype.setSourceId = function ( return jspb.Message.setProto3EnumField(this, 9, value); }; +/** + * optional string environment_id = 10; + * @return {string} + */ +proto.bucketeer.event.service.UserEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 10, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.event.service.UserEvent} returns this + */ +proto.bucketeer.event.service.UserEvent.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 10, value); +}; + goog.object.extend(exports, proto.bucketeer.event.service); diff --git a/ui/web-v2/src/proto/eventcounter/service_pb.d.ts b/ui/web-v2/src/proto/eventcounter/service_pb.d.ts index 8150d33abb..1b8d9df499 100644 --- a/ui/web-v2/src/proto/eventcounter/service_pb.d.ts +++ b/ui/web-v2/src/proto/eventcounter/service_pb.d.ts @@ -8,9 +8,6 @@ import * as proto_eventcounter_timeseries_pb from '../../proto/eventcounter/time import * as proto_eventcounter_variation_count_pb from '../../proto/eventcounter/variation_count_pb'; export class GetExperimentEvaluationCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getStartAt(): number; setStartAt(value: number): void; @@ -28,6 +25,9 @@ export class GetExperimentEvaluationCountRequest extends jspb.Message { setVariationIdsList(value: Array): void; addVariationIds(value: string, index?: number): string; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject( includeInstance?: boolean @@ -55,12 +55,12 @@ export class GetExperimentEvaluationCountRequest extends jspb.Message { export namespace GetExperimentEvaluationCountRequest { export type AsObject = { - environmentNamespace: string; startAt: number; endAt: number; featureId: string; featureVersion: number; variationIdsList: Array; + environmentId: string; }; } @@ -115,9 +115,6 @@ export namespace GetExperimentEvaluationCountResponse { } export class GetEvaluationTimeseriesCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getFeatureId(): string; setFeatureId(value: string): void; @@ -126,6 +123,9 @@ export class GetEvaluationTimeseriesCountRequest extends jspb.Message { value: GetEvaluationTimeseriesCountRequest.TimeRangeMap[keyof GetEvaluationTimeseriesCountRequest.TimeRangeMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject( includeInstance?: boolean @@ -153,9 +153,9 @@ export class GetEvaluationTimeseriesCountRequest extends jspb.Message { export namespace GetEvaluationTimeseriesCountRequest { export type AsObject = { - environmentNamespace: string; featureId: string; timeRange: GetEvaluationTimeseriesCountRequest.TimeRangeMap[keyof GetEvaluationTimeseriesCountRequest.TimeRangeMap]; + environmentId: string; }; export interface TimeRangeMap { @@ -223,12 +223,12 @@ export namespace GetEvaluationTimeseriesCountResponse { } export class GetExperimentResultRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getExperimentId(): string; setExperimentId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetExperimentResultRequest.AsObject; static toObject( @@ -252,8 +252,8 @@ export class GetExperimentResultRequest extends jspb.Message { export namespace GetExperimentResultRequest { export type AsObject = { - environmentNamespace: string; experimentId: string; + environmentId: string; }; } @@ -303,8 +303,8 @@ export class ListExperimentResultsRequest extends jspb.Message { getFeatureVersion(): google_protobuf_wrappers_pb.Int32Value | undefined; setFeatureVersion(value?: google_protobuf_wrappers_pb.Int32Value): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListExperimentResultsRequest.AsObject; @@ -331,7 +331,7 @@ export namespace ListExperimentResultsRequest { export type AsObject = { featureId: string; featureVersion?: google_protobuf_wrappers_pb.Int32Value.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -374,9 +374,6 @@ export namespace ListExperimentResultsResponse { } export class GetExperimentGoalCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getStartAt(): number; setStartAt(value: number): void; @@ -397,6 +394,9 @@ export class GetExperimentGoalCountRequest extends jspb.Message { setVariationIdsList(value: Array): void; addVariationIds(value: string, index?: number): string; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetExperimentGoalCountRequest.AsObject; static toObject( @@ -420,13 +420,13 @@ export class GetExperimentGoalCountRequest extends jspb.Message { export namespace GetExperimentGoalCountRequest { export type AsObject = { - environmentNamespace: string; startAt: number; endAt: number; goalId: string; featureId: string; featureVersion: number; variationIdsList: Array; + environmentId: string; }; } @@ -473,9 +473,6 @@ export namespace GetExperimentGoalCountResponse { } export class GetOpsEvaluationUserCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOpsRuleId(): string; setOpsRuleId(value: string): void; @@ -491,6 +488,9 @@ export class GetOpsEvaluationUserCountRequest extends jspb.Message { getVariationId(): string; setVariationId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject( includeInstance?: boolean @@ -516,12 +516,12 @@ export class GetOpsEvaluationUserCountRequest extends jspb.Message { export namespace GetOpsEvaluationUserCountRequest { export type AsObject = { - environmentNamespace: string; opsRuleId: string; clauseId: string; featureId: string; featureVersion: number; variationId: string; + environmentId: string; }; } @@ -569,9 +569,6 @@ export namespace GetOpsEvaluationUserCountResponse { } export class GetOpsGoalUserCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOpsRuleId(): string; setOpsRuleId(value: string): void; @@ -587,6 +584,9 @@ export class GetOpsGoalUserCountRequest extends jspb.Message { getVariationId(): string; setVariationId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetOpsGoalUserCountRequest.AsObject; static toObject( @@ -610,12 +610,12 @@ export class GetOpsGoalUserCountRequest extends jspb.Message { export namespace GetOpsGoalUserCountRequest { export type AsObject = { - environmentNamespace: string; opsRuleId: string; clauseId: string; featureId: string; featureVersion: number; variationId: string; + environmentId: string; }; } @@ -659,12 +659,12 @@ export namespace GetOpsGoalUserCountResponse { } export class GetMAUCountRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getYearMonth(): string; setYearMonth(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetMAUCountRequest.AsObject; static toObject( @@ -688,8 +688,8 @@ export class GetMAUCountRequest extends jspb.Message { export namespace GetMAUCountRequest { export type AsObject = { - environmentNamespace: string; yearMonth: string; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/eventcounter/service_pb.js b/ui/web-v2/src/proto/eventcounter/service_pb.js index 3fd7183280..e9e7e1be88 100644 --- a/ui/web-v2/src/proto/eventcounter/service_pb.js +++ b/ui/web-v2/src/proto/eventcounter/service_pb.js @@ -671,13 +671,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { function (includeInstance, msg) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), startAt: jspb.Message.getFieldWithDefault(msg, 2, 0), endAt: jspb.Message.getFieldWithDefault(msg, 3, 0), featureId: jspb.Message.getFieldWithDefault(msg, 4, ''), featureVersion: jspb.Message.getFieldWithDefault(msg, 5, 0), variationIdsList: - (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -718,10 +718,6 @@ proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.deserializeBina } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setStartAt(value); @@ -742,6 +738,10 @@ proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.deserializeBina var value = /** @type {string} */ (reader.readString()); msg.addVariationIds(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -774,10 +774,6 @@ proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.seria proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getStartAt(); if (f !== 0) { writer.writeInt64(2, f); @@ -798,26 +794,10 @@ proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.serializeBinary if (f.length > 0) { writer.writeRepeatedString(6, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest} returns this - */ -proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -933,6 +913,26 @@ proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.clear return this.setVariationIdsList([]); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest} returns this + */ +proto.bucketeer.eventcounter.GetExperimentEvaluationCountRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 7, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -1212,9 +1212,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { function (includeInstance, msg) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - timeRange: jspb.Message.getFieldWithDefault(msg, 3, 0) + timeRange: jspb.Message.getFieldWithDefault(msg, 3, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -1255,10 +1255,6 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.deserializeBina } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); @@ -1270,6 +1266,10 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.deserializeBina ); msg.setTimeRange(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1302,10 +1302,6 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.seria proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getFeatureId(); if (f.length > 0) { writer.writeString(2, f); @@ -1314,6 +1310,10 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.serializeBinary if (f !== 0.0) { writer.writeEnum(3, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -1327,26 +1327,6 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.TimeRange = { THIRTY_DAYS: 4 }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest} returns this - */ -proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional string feature_id = 2; * @return {string} @@ -1387,6 +1367,26 @@ proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.setTi return jspb.Message.setProto3EnumField(this, 3, value); }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest} returns this + */ +proto.bucketeer.eventcounter.GetEvaluationTimeseriesCountRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -1685,8 +1685,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), - experimentId: jspb.Message.getFieldWithDefault(msg, 2, '') + experimentId: jspb.Message.getFieldWithDefault(msg, 2, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -1726,14 +1726,14 @@ proto.bucketeer.eventcounter.GetExperimentResultRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setExperimentId(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1766,24 +1766,24 @@ proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.serializeBinar proto.bucketeer.eventcounter.GetExperimentResultRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getExperimentId(); if (f.length > 0) { writer.writeString(2, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** - * optional string environment_namespace = 1; + * optional string experiment_id = 2; * @return {string} */ -proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getExperimentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') + jspb.Message.getFieldWithDefault(this, 2, '') ); }; @@ -1791,19 +1791,19 @@ proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getEnvironment * @param {string} value * @return {!proto.bucketeer.eventcounter.GetExperimentResultRequest} returns this */ -proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.setExperimentId = function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 2, value); }; /** - * optional string experiment_id = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getExperimentId = +proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -1811,9 +1811,9 @@ proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.getExperimentI * @param {string} value * @return {!proto.bucketeer.eventcounter.GetExperimentResultRequest} returns this */ -proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.setExperimentId = +proto.bucketeer.eventcounter.GetExperimentResultRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2030,7 +2030,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { featureVersion: (f = msg.getFeatureVersion()) && google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -2082,9 +2082,9 @@ proto.bucketeer.eventcounter.ListExperimentResultsRequest.deserializeBinaryFromR ); msg.setFeatureVersion(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -2130,9 +2130,9 @@ proto.bucketeer.eventcounter.ListExperimentResultsRequest.serializeBinaryToWrite google_protobuf_wrappers_pb.Int32Value.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -2199,13 +2199,13 @@ proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.hasFeatureVe }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -2213,9 +2213,9 @@ proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.getEnvironme * @param {string} value * @return {!proto.bucketeer.eventcounter.ListExperimentResultsRequest} returns this */ -proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.eventcounter.ListExperimentResultsRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2427,14 +2427,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { function (includeInstance, msg) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), startAt: jspb.Message.getFieldWithDefault(msg, 2, 0), endAt: jspb.Message.getFieldWithDefault(msg, 3, 0), goalId: jspb.Message.getFieldWithDefault(msg, 4, ''), featureId: jspb.Message.getFieldWithDefault(msg, 5, ''), featureVersion: jspb.Message.getFieldWithDefault(msg, 6, 0), variationIdsList: - (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 8, '') }; if (includeInstance) { @@ -2474,10 +2474,6 @@ proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.deserializeBinaryFrom } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setStartAt(value); @@ -2502,6 +2498,10 @@ proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.deserializeBinaryFrom var value = /** @type {string} */ (reader.readString()); msg.addVariationIds(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -2534,10 +2534,6 @@ proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.serializeBi proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getStartAt(); if (f !== 0) { writer.writeInt64(2, f); @@ -2562,26 +2558,10 @@ proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.serializeBinaryToWrit if (f.length > 0) { writer.writeRepeatedString(7, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GetExperimentGoalCountRequest} returns this - */ -proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(8, f); + } }; /** @@ -2717,6 +2697,26 @@ proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.clearVariat return this.setVariationIdsList([]); }; +/** + * optional string environment_id = 8; + * @return {string} + */ +proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 8, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GetExperimentGoalCountRequest} returns this + */ +proto.bucketeer.eventcounter.GetExperimentGoalCountRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 8, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -2969,12 +2969,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { function (includeInstance, msg) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), opsRuleId: jspb.Message.getFieldWithDefault(msg, 2, ''), clauseId: jspb.Message.getFieldWithDefault(msg, 3, ''), featureId: jspb.Message.getFieldWithDefault(msg, 4, ''), featureVersion: jspb.Message.getFieldWithDefault(msg, 5, 0), - variationId: jspb.Message.getFieldWithDefault(msg, 6, '') + variationId: jspb.Message.getFieldWithDefault(msg, 6, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -3015,10 +3015,6 @@ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.deserializeBinaryF } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setOpsRuleId(value); @@ -3039,6 +3035,10 @@ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.deserializeBinaryF var value = /** @type {string} */ (reader.readString()); msg.setVariationId(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3071,10 +3071,6 @@ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.serializ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getOpsRuleId(); if (f.length > 0) { writer.writeString(2, f); @@ -3095,26 +3091,10 @@ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.serializeBinaryToW if (f.length > 0) { writer.writeString(6, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest} returns this - */ -proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -3215,6 +3195,26 @@ proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.setVaria return jspb.Message.setProto3StringField(this, 6, value); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest} returns this + */ +proto.bucketeer.eventcounter.GetOpsEvaluationUserCountRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 7, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -3444,12 +3444,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), opsRuleId: jspb.Message.getFieldWithDefault(msg, 2, ''), clauseId: jspb.Message.getFieldWithDefault(msg, 3, ''), featureId: jspb.Message.getFieldWithDefault(msg, 4, ''), featureVersion: jspb.Message.getFieldWithDefault(msg, 5, 0), - variationId: jspb.Message.getFieldWithDefault(msg, 6, '') + variationId: jspb.Message.getFieldWithDefault(msg, 6, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -3489,10 +3489,6 @@ proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setOpsRuleId(value); @@ -3513,6 +3509,10 @@ proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.deserializeBinaryFromRea var value = /** @type {string} */ (reader.readString()); msg.setVariationId(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3545,10 +3545,6 @@ proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.serializeBinar proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getOpsRuleId(); if (f.length > 0) { writer.writeString(2, f); @@ -3569,26 +3565,10 @@ proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.serializeBinaryToWriter if (f.length > 0) { writer.writeString(6, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest} returns this - */ -proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -3689,6 +3669,26 @@ proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.setVariationId return jspb.Message.setProto3StringField(this, 6, value); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest} returns this + */ +proto.bucketeer.eventcounter.GetOpsGoalUserCountRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 7, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -3919,8 +3919,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), - yearMonth: jspb.Message.getFieldWithDefault(msg, 2, '') + yearMonth: jspb.Message.getFieldWithDefault(msg, 2, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -3961,14 +3961,14 @@ proto.bucketeer.eventcounter.GetMAUCountRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setYearMonth(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -4001,24 +4001,24 @@ proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.serializeBinary = proto.bucketeer.eventcounter.GetMAUCountRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getYearMonth(); if (f.length > 0) { writer.writeString(2, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** - * optional string environment_namespace = 1; + * optional string year_month = 2; * @return {string} */ -proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getYearMonth = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') + jspb.Message.getFieldWithDefault(this, 2, '') ); }; @@ -4026,19 +4026,19 @@ proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getEnvironmentNamespac * @param {string} value * @return {!proto.bucketeer.eventcounter.GetMAUCountRequest} returns this */ -proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.setYearMonth = function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 2, value); }; /** - * optional string year_month = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getYearMonth = +proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -4046,9 +4046,9 @@ proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.getYearMonth = * @param {string} value * @return {!proto.bucketeer.eventcounter.GetMAUCountRequest} returns this */ -proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.setYearMonth = +proto.bucketeer.eventcounter.GetMAUCountRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { diff --git a/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.d.ts b/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.d.ts index 92b9c77cd5..32c15e66af 100644 --- a/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.d.ts +++ b/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.d.ts @@ -31,12 +31,12 @@ export class EvaluationEvent extends jspb.Message { getSourceId(): string; setSourceId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getTimestamp(): number; setTimestamp(value: number): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EvaluationEvent.AsObject; static toObject( @@ -69,7 +69,7 @@ export namespace EvaluationEvent { reason: string; tag: string; sourceId: string; - environmentNamespace: string; timestamp: number; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.js b/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.js index bfa713b308..6a7a9d9485 100644 --- a/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.js +++ b/ui/web-v2/src/proto/eventpersisterdwh/evaluation_event_pb.js @@ -93,8 +93,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { reason: jspb.Message.getFieldWithDefault(msg, 7, ''), tag: jspb.Message.getFieldWithDefault(msg, 8, ''), sourceId: jspb.Message.getFieldWithDefault(msg, 9, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 10, ''), - timestamp: jspb.Message.getFieldWithDefault(msg, 11, 0) + timestamp: jspb.Message.getFieldWithDefault(msg, 11, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 12, '') }; if (includeInstance) { @@ -171,14 +171,14 @@ proto.bucketeer.eventcounter.EvaluationEvent.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setSourceId(value); break; - case 10: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 11: var value = /** @type {number} */ (reader.readInt64()); msg.setTimestamp(value); break; + case 12: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -247,14 +247,14 @@ proto.bucketeer.eventcounter.EvaluationEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(9, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(10, f); - } f = message.getTimestamp(); if (f !== 0) { writer.writeInt64(11, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(12, f); + } }; /** @@ -430,26 +430,6 @@ proto.bucketeer.eventcounter.EvaluationEvent.prototype.setSourceId = function ( return jspb.Message.setProto3StringField(this, 9, value); }; -/** - * optional string environment_namespace = 10; - * @return {string} - */ -proto.bucketeer.eventcounter.EvaluationEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 10, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.EvaluationEvent} returns this - */ -proto.bucketeer.eventcounter.EvaluationEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 10, value); - }; - /** * optional int64 timestamp = 11; * @return {number} @@ -471,4 +451,24 @@ proto.bucketeer.eventcounter.EvaluationEvent.prototype.setTimestamp = function ( return jspb.Message.setProto3IntField(this, 11, value); }; +/** + * optional string environment_id = 12; + * @return {string} + */ +proto.bucketeer.eventcounter.EvaluationEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 12, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.EvaluationEvent} returns this + */ +proto.bucketeer.eventcounter.EvaluationEvent.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 12, value); + }; + goog.object.extend(exports, proto.bucketeer.eventcounter); diff --git a/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.d.ts b/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.d.ts index d215503c5e..f5bd02e75b 100644 --- a/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.d.ts +++ b/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.d.ts @@ -25,9 +25,6 @@ export class GoalEvent extends jspb.Message { getSourceId(): string; setSourceId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getTimestamp(): number; setTimestamp(value: number): void; @@ -43,6 +40,9 @@ export class GoalEvent extends jspb.Message { getReason(): string; setReason(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GoalEvent.AsObject; static toObject(includeInstance: boolean, msg: GoalEvent): GoalEvent.AsObject; @@ -70,11 +70,11 @@ export namespace GoalEvent { userId: string; tag: string; sourceId: string; - environmentNamespace: string; timestamp: number; featureId: string; featureVersion: number; variationId: string; reason: string; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.js b/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.js index 3f9dfdf798..ebb878a025 100644 --- a/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.js +++ b/ui/web-v2/src/proto/eventpersisterdwh/goal_event_pb.js @@ -91,12 +91,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { userId: jspb.Message.getFieldWithDefault(msg, 5, ''), tag: jspb.Message.getFieldWithDefault(msg, 6, ''), sourceId: jspb.Message.getFieldWithDefault(msg, 7, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 8, ''), timestamp: jspb.Message.getFieldWithDefault(msg, 9, 0), featureId: jspb.Message.getFieldWithDefault(msg, 10, ''), featureVersion: jspb.Message.getFieldWithDefault(msg, 11, 0), variationId: jspb.Message.getFieldWithDefault(msg, 12, ''), - reason: jspb.Message.getFieldWithDefault(msg, 13, '') + reason: jspb.Message.getFieldWithDefault(msg, 13, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 14, '') }; if (includeInstance) { @@ -165,10 +165,6 @@ proto.bucketeer.eventcounter.GoalEvent.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setSourceId(value); break; - case 8: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 9: var value = /** @type {number} */ (reader.readInt64()); msg.setTimestamp(value); @@ -189,6 +185,10 @@ proto.bucketeer.eventcounter.GoalEvent.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setReason(value); break; + case 14: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -247,10 +247,6 @@ proto.bucketeer.eventcounter.GoalEvent.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(7, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(8, f); - } f = message.getTimestamp(); if (f !== 0) { writer.writeInt64(9, f); @@ -271,6 +267,10 @@ proto.bucketeer.eventcounter.GoalEvent.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(13, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(14, f); + } }; /** @@ -391,26 +391,6 @@ proto.bucketeer.eventcounter.GoalEvent.prototype.setSourceId = function ( return jspb.Message.setProto3StringField(this, 7, value); }; -/** - * optional string environment_namespace = 8; - * @return {string} - */ -proto.bucketeer.eventcounter.GoalEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 8, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.eventcounter.GoalEvent} returns this - */ -proto.bucketeer.eventcounter.GoalEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 8, value); - }; - /** * optional int64 timestamp = 9; * @return {number} @@ -502,4 +482,25 @@ proto.bucketeer.eventcounter.GoalEvent.prototype.setReason = function (value) { return jspb.Message.setProto3StringField(this, 13, value); }; +/** + * optional string environment_id = 14; + * @return {string} + */ +proto.bucketeer.eventcounter.GoalEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 14, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.eventcounter.GoalEvent} returns this + */ +proto.bucketeer.eventcounter.GoalEvent.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 14, value); +}; + goog.object.extend(exports, proto.bucketeer.eventcounter); diff --git a/ui/web-v2/src/proto/experiment/service_pb.d.ts b/ui/web-v2/src/proto/experiment/service_pb.d.ts index e1392c74d9..ffee3bacaf 100644 --- a/ui/web-v2/src/proto/experiment/service_pb.d.ts +++ b/ui/web-v2/src/proto/experiment/service_pb.d.ts @@ -11,8 +11,8 @@ export class GetGoalRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetGoalRequest.AsObject; @@ -38,7 +38,7 @@ export class GetGoalRequest extends jspb.Message { export namespace GetGoalRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -82,9 +82,6 @@ export class ListGoalsRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOrderBy(): ListGoalsRequest.OrderByMap[keyof ListGoalsRequest.OrderByMap]; setOrderBy( value: ListGoalsRequest.OrderByMap[keyof ListGoalsRequest.OrderByMap] @@ -108,6 +105,9 @@ export class ListGoalsRequest extends jspb.Message { getArchived(): google_protobuf_wrappers_pb.BoolValue | undefined; setArchived(value?: google_protobuf_wrappers_pb.BoolValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListGoalsRequest.AsObject; static toObject( @@ -133,12 +133,12 @@ export namespace ListGoalsRequest { export type AsObject = { pageSize: number; cursor: string; - environmentNamespace: string; orderBy: ListGoalsRequest.OrderByMap[keyof ListGoalsRequest.OrderByMap]; orderDirection: ListGoalsRequest.OrderDirectionMap[keyof ListGoalsRequest.OrderDirectionMap]; searchKeyword: string; isInUseStatus?: google_protobuf_wrappers_pb.BoolValue.AsObject; archived?: google_protobuf_wrappers_pb.BoolValue.AsObject; + environmentId: string; }; export interface OrderByMap { @@ -208,8 +208,8 @@ export class CreateGoalRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.CreateGoalCommand | undefined; setCommand(value?: proto_experiment_command_pb.CreateGoalCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateGoalRequest.AsObject; @@ -235,7 +235,7 @@ export class CreateGoalRequest extends jspb.Message { export namespace CreateGoalRequest { export type AsObject = { command?: proto_experiment_command_pb.CreateGoalCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -274,8 +274,8 @@ export class ArchiveGoalRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.ArchiveGoalCommand | undefined; setCommand(value?: proto_experiment_command_pb.ArchiveGoalCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ArchiveGoalRequest.AsObject; @@ -302,7 +302,7 @@ export namespace ArchiveGoalRequest { export type AsObject = { id: string; command?: proto_experiment_command_pb.ArchiveGoalCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -341,8 +341,8 @@ export class DeleteGoalRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.DeleteGoalCommand | undefined; setCommand(value?: proto_experiment_command_pb.DeleteGoalCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteGoalRequest.AsObject; @@ -369,7 +369,7 @@ export namespace DeleteGoalRequest { export type AsObject = { id: string; command?: proto_experiment_command_pb.DeleteGoalCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -417,8 +417,8 @@ export class UpdateGoalRequest extends jspb.Message { value?: proto_experiment_command_pb.ChangeDescriptionGoalCommand ): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateGoalRequest.AsObject; @@ -446,7 +446,7 @@ export namespace UpdateGoalRequest { id: string; renameCommand?: proto_experiment_command_pb.RenameGoalCommand.AsObject; changeDescriptionCommand?: proto_experiment_command_pb.ChangeDescriptionGoalCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -480,8 +480,8 @@ export class GetExperimentRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetExperimentRequest.AsObject; @@ -507,7 +507,7 @@ export class GetExperimentRequest extends jspb.Message { export namespace GetExperimentRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -565,9 +565,6 @@ export class ListExperimentsRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasStatus(): boolean; clearStatus(): void; getStatus(): google_protobuf_wrappers_pb.Int32Value | undefined; @@ -608,6 +605,9 @@ export class ListExperimentsRequest extends jspb.Message { index?: number ): proto_experiment_experiment_pb.Experiment.StatusMap[keyof proto_experiment_experiment_pb.Experiment.StatusMap]; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListExperimentsRequest.AsObject; static toObject( @@ -637,7 +637,6 @@ export namespace ListExperimentsRequest { to: number; pageSize: number; cursor: string; - environmentNamespace: string; status?: google_protobuf_wrappers_pb.Int32Value.AsObject; maintainer: string; orderBy: ListExperimentsRequest.OrderByMap[keyof ListExperimentsRequest.OrderByMap]; @@ -647,6 +646,7 @@ export namespace ListExperimentsRequest { statusesList: Array< proto_experiment_experiment_pb.Experiment.StatusMap[keyof proto_experiment_experiment_pb.Experiment.StatusMap] >; + environmentId: string; }; export interface OrderByMap { @@ -718,8 +718,8 @@ export class CreateExperimentRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.CreateExperimentCommand | undefined; setCommand(value?: proto_experiment_command_pb.CreateExperimentCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateExperimentRequest.AsObject; @@ -745,7 +745,7 @@ export class CreateExperimentRequest extends jspb.Message { export namespace CreateExperimentRequest { export type AsObject = { command?: proto_experiment_command_pb.CreateExperimentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -786,9 +786,6 @@ export class UpdateExperimentRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasChangeExperimentPeriodCommand(): boolean; clearChangeExperimentPeriodCommand(): void; getChangeExperimentPeriodCommand(): @@ -816,6 +813,9 @@ export class UpdateExperimentRequest extends jspb.Message { value?: proto_experiment_command_pb.ChangeExperimentDescriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateExperimentRequest.AsObject; static toObject( @@ -840,10 +840,10 @@ export class UpdateExperimentRequest extends jspb.Message { export namespace UpdateExperimentRequest { export type AsObject = { id: string; - environmentNamespace: string; changeExperimentPeriodCommand?: proto_experiment_command_pb.ChangeExperimentPeriodCommand.AsObject; changeNameCommand?: proto_experiment_command_pb.ChangeExperimentNameCommand.AsObject; changeDescriptionCommand?: proto_experiment_command_pb.ChangeExperimentDescriptionCommand.AsObject; + environmentId: string; }; } @@ -874,9 +874,6 @@ export namespace UpdateExperimentResponse { } export class StartExperimentRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -885,6 +882,9 @@ export class StartExperimentRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.StartExperimentCommand | undefined; setCommand(value?: proto_experiment_command_pb.StartExperimentCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StartExperimentRequest.AsObject; static toObject( @@ -908,9 +908,9 @@ export class StartExperimentRequest extends jspb.Message { export namespace StartExperimentRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_experiment_command_pb.StartExperimentCommand.AsObject; + environmentId: string; }; } @@ -941,9 +941,6 @@ export namespace StartExperimentResponse { } export class FinishExperimentRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -952,6 +949,9 @@ export class FinishExperimentRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.FinishExperimentCommand | undefined; setCommand(value?: proto_experiment_command_pb.FinishExperimentCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FinishExperimentRequest.AsObject; static toObject( @@ -975,9 +975,9 @@ export class FinishExperimentRequest extends jspb.Message { export namespace FinishExperimentRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_experiment_command_pb.FinishExperimentCommand.AsObject; + environmentId: string; }; } @@ -1016,8 +1016,8 @@ export class StopExperimentRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.StopExperimentCommand | undefined; setCommand(value?: proto_experiment_command_pb.StopExperimentCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StopExperimentRequest.AsObject; @@ -1044,7 +1044,7 @@ export namespace StopExperimentRequest { export type AsObject = { id: string; command?: proto_experiment_command_pb.StopExperimentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1087,8 +1087,8 @@ export class ArchiveExperimentRequest extends jspb.Message { value?: proto_experiment_command_pb.ArchiveExperimentCommand ): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ArchiveExperimentRequest.AsObject; @@ -1115,7 +1115,7 @@ export namespace ArchiveExperimentRequest { export type AsObject = { id: string; command?: proto_experiment_command_pb.ArchiveExperimentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1154,8 +1154,8 @@ export class DeleteExperimentRequest extends jspb.Message { getCommand(): proto_experiment_command_pb.DeleteExperimentCommand | undefined; setCommand(value?: proto_experiment_command_pb.DeleteExperimentCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteExperimentRequest.AsObject; @@ -1182,7 +1182,7 @@ export namespace DeleteExperimentRequest { export type AsObject = { id: string; command?: proto_experiment_command_pb.DeleteExperimentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/experiment/service_pb.js b/ui/web-v2/src/proto/experiment/service_pb.js index f7e8ff9a71..f5cf9d9fa6 100644 --- a/ui/web-v2/src/proto/experiment/service_pb.js +++ b/ui/web-v2/src/proto/experiment/service_pb.js @@ -911,7 +911,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -954,9 +954,9 @@ proto.bucketeer.experiment.GetGoalRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -996,9 +996,9 @@ proto.bucketeer.experiment.GetGoalRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -1019,13 +1019,13 @@ proto.bucketeer.experiment.GetGoalRequest.prototype.setId = function (value) { }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.experiment.GetGoalRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.GetGoalRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -1033,9 +1033,9 @@ proto.bucketeer.experiment.GetGoalRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.experiment.GetGoalRequest} returns this */ -proto.bucketeer.experiment.GetGoalRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.GetGoalRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -1245,7 +1245,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), cursor: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), @@ -1254,7 +1253,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), archived: (f = msg.getArchived()) && - google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 9, '') }; if (includeInstance) { @@ -1303,10 +1303,6 @@ proto.bucketeer.experiment.ListGoalsRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.experiment.ListGoalsRequest.OrderBy} */ ( @@ -1341,6 +1337,10 @@ proto.bucketeer.experiment.ListGoalsRequest.deserializeBinaryFromReader = ); msg.setArchived(value); break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1383,10 +1383,6 @@ proto.bucketeer.experiment.ListGoalsRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getOrderBy(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -1415,6 +1411,10 @@ proto.bucketeer.experiment.ListGoalsRequest.serializeBinaryToWriter = function ( google_protobuf_wrappers_pb.BoolValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(9, f); + } }; /** @@ -1472,26 +1472,6 @@ proto.bucketeer.experiment.ListGoalsRequest.prototype.setCursor = function ( return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.experiment.ListGoalsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.experiment.ListGoalsRequest} returns this - */ -proto.bucketeer.experiment.ListGoalsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional OrderBy order_by = 4; * @return {!proto.bucketeer.experiment.ListGoalsRequest.OrderBy} @@ -1637,6 +1617,26 @@ proto.bucketeer.experiment.ListGoalsRequest.prototype.hasArchived = return jspb.Message.getField(this, 8) != null; }; +/** + * optional string environment_id = 9; + * @return {string} + */ +proto.bucketeer.experiment.ListGoalsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 9, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.experiment.ListGoalsRequest} returns this + */ +proto.bucketeer.experiment.ListGoalsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 9, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -1925,7 +1925,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -1975,9 +1975,9 @@ proto.bucketeer.experiment.CreateGoalRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -2019,9 +2019,9 @@ proto.bucketeer.experiment.CreateGoalRequest.serializeBinaryToWriter = proto_experiment_command_pb.CreateGoalCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -2069,13 +2069,13 @@ proto.bucketeer.experiment.CreateGoalRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.experiment.CreateGoalRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.CreateGoalRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -2083,9 +2083,9 @@ proto.bucketeer.experiment.CreateGoalRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.experiment.CreateGoalRequest} returns this */ -proto.bucketeer.experiment.CreateGoalRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.CreateGoalRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2242,7 +2242,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -2296,9 +2296,9 @@ proto.bucketeer.experiment.ArchiveGoalRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -2344,9 +2344,9 @@ proto.bucketeer.experiment.ArchiveGoalRequest.serializeBinaryToWriter = proto_experiment_command_pb.ArchiveGoalCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -2412,13 +2412,13 @@ proto.bucketeer.experiment.ArchiveGoalRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.experiment.ArchiveGoalRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.ArchiveGoalRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -2426,9 +2426,9 @@ proto.bucketeer.experiment.ArchiveGoalRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.experiment.ArchiveGoalRequest} returns this */ -proto.bucketeer.experiment.ArchiveGoalRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.ArchiveGoalRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2585,7 +2585,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -2639,9 +2639,9 @@ proto.bucketeer.experiment.DeleteGoalRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -2687,9 +2687,9 @@ proto.bucketeer.experiment.DeleteGoalRequest.serializeBinaryToWriter = proto_experiment_command_pb.DeleteGoalCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -2755,13 +2755,13 @@ proto.bucketeer.experiment.DeleteGoalRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.experiment.DeleteGoalRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.DeleteGoalRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -2769,9 +2769,9 @@ proto.bucketeer.experiment.DeleteGoalRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.experiment.DeleteGoalRequest} returns this */ -proto.bucketeer.experiment.DeleteGoalRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.DeleteGoalRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2934,7 +2934,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -2998,9 +2998,9 @@ proto.bucketeer.experiment.UpdateGoalRequest.deserializeBinaryFromReader = ); msg.setChangeDescriptionCommand(value); break; - case 4: + case 5: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -3055,9 +3055,9 @@ proto.bucketeer.experiment.UpdateGoalRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(4, f); + writer.writeString(5, f); } }; @@ -3164,13 +3164,13 @@ proto.bucketeer.experiment.UpdateGoalRequest.prototype.hasChangeDescriptionComma }; /** - * optional string environment_namespace = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.experiment.UpdateGoalRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.UpdateGoalRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -3178,9 +3178,9 @@ proto.bucketeer.experiment.UpdateGoalRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.experiment.UpdateGoalRequest} returns this */ -proto.bucketeer.experiment.UpdateGoalRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.UpdateGoalRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3330,7 +3330,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -3375,9 +3375,9 @@ proto.bucketeer.experiment.GetExperimentRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -3415,9 +3415,9 @@ proto.bucketeer.experiment.GetExperimentRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -3440,13 +3440,13 @@ proto.bucketeer.experiment.GetExperimentRequest.prototype.setId = function ( }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.experiment.GetExperimentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.GetExperimentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -3454,9 +3454,9 @@ proto.bucketeer.experiment.GetExperimentRequest.prototype.getEnvironmentNamespac * @param {string} value * @return {!proto.bucketeer.experiment.GetExperimentRequest} returns this */ -proto.bucketeer.experiment.GetExperimentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.GetExperimentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3682,7 +3682,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { to: jspb.Message.getFieldWithDefault(msg, 4, 0), pageSize: jspb.Message.getFieldWithDefault(msg, 5, 0), cursor: jspb.Message.getFieldWithDefault(msg, 6, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 7, ''), status: (f = msg.getStatus()) && google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f), @@ -3694,7 +3693,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { (f = msg.getArchived()) && google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), statusesList: - (f = jspb.Message.getRepeatedField(msg, 14)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 14)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 15, '') }; if (includeInstance) { @@ -3763,10 +3763,6 @@ proto.bucketeer.experiment.ListExperimentsRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 7: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 8: var value = new google_protobuf_wrappers_pb.Int32Value(); reader.readMessage( @@ -3816,6 +3812,10 @@ proto.bucketeer.experiment.ListExperimentsRequest.deserializeBinaryFromReader = msg.addStatuses(values[i]); } break; + case 15: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3876,10 +3876,6 @@ proto.bucketeer.experiment.ListExperimentsRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(6, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(7, f); - } f = message.getStatus(); if (f != null) { writer.writeMessage( @@ -3916,6 +3912,10 @@ proto.bucketeer.experiment.ListExperimentsRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writePackedEnum(14, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(15, f); + } }; /** @@ -4074,26 +4074,6 @@ proto.bucketeer.experiment.ListExperimentsRequest.prototype.setCursor = return jspb.Message.setProto3StringField(this, 6, value); }; -/** - * optional string environment_namespace = 7; - * @return {string} - */ -proto.bucketeer.experiment.ListExperimentsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 7, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.experiment.ListExperimentsRequest} returns this - */ -proto.bucketeer.experiment.ListExperimentsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 7, value); - }; - /** * optional google.protobuf.Int32Value status = 8; * @return {?proto.google.protobuf.Int32Value} @@ -4297,6 +4277,26 @@ proto.bucketeer.experiment.ListExperimentsRequest.prototype.clearStatusesList = return this.setStatusesList([]); }; +/** + * optional string environment_id = 15; + * @return {string} + */ +proto.bucketeer.experiment.ListExperimentsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 15, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.experiment.ListExperimentsRequest} returns this + */ +proto.bucketeer.experiment.ListExperimentsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 15, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -4582,7 +4582,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -4631,9 +4631,9 @@ proto.bucketeer.experiment.CreateExperimentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -4676,9 +4676,9 @@ proto.bucketeer.experiment.CreateExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -4725,13 +4725,13 @@ proto.bucketeer.experiment.CreateExperimentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.experiment.CreateExperimentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.CreateExperimentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -4739,9 +4739,9 @@ proto.bucketeer.experiment.CreateExperimentRequest.prototype.getEnvironmentNames * @param {string} value * @return {!proto.bucketeer.experiment.CreateExperimentRequest} returns this */ -proto.bucketeer.experiment.CreateExperimentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.CreateExperimentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -4952,7 +4952,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, ''), changeExperimentPeriodCommand: (f = msg.getChangeExperimentPeriodCommand()) && proto_experiment_command_pb.ChangeExperimentPeriodCommand.toObject( @@ -4970,7 +4969,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_experiment_command_pb.ChangeExperimentDescriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 8, '') }; if (includeInstance) { @@ -5014,10 +5014,6 @@ proto.bucketeer.experiment.UpdateExperimentRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 4: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 5: var value = new proto_experiment_command_pb.ChangeExperimentPeriodCommand(); @@ -5048,6 +5044,10 @@ proto.bucketeer.experiment.UpdateExperimentRequest.deserializeBinaryFromReader = ); msg.setChangeDescriptionCommand(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5084,10 +5084,6 @@ proto.bucketeer.experiment.UpdateExperimentRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(4, f); - } f = message.getChangeExperimentPeriodCommand(); if (f != null) { writer.writeMessage( @@ -5115,6 +5111,10 @@ proto.bucketeer.experiment.UpdateExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(8, f); + } }; /** @@ -5138,26 +5138,6 @@ proto.bucketeer.experiment.UpdateExperimentRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 4; - * @return {string} - */ -proto.bucketeer.experiment.UpdateExperimentRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.experiment.UpdateExperimentRequest} returns this - */ -proto.bucketeer.experiment.UpdateExperimentRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 4, value); - }; - /** * optional ChangeExperimentPeriodCommand change_experiment_period_command = 5; * @return {?proto.bucketeer.experiment.ChangeExperimentPeriodCommand} @@ -5284,6 +5264,26 @@ proto.bucketeer.experiment.UpdateExperimentRequest.prototype.hasChangeDescriptio return jspb.Message.getField(this, 7) != null; }; +/** + * optional string environment_id = 8; + * @return {string} + */ +proto.bucketeer.experiment.UpdateExperimentRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 8, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.experiment.UpdateExperimentRequest} returns this + */ +proto.bucketeer.experiment.UpdateExperimentRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 8, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -5428,14 +5428,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_experiment_command_pb.StartExperimentCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -5476,10 +5476,6 @@ proto.bucketeer.experiment.StartExperimentRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -5493,6 +5489,10 @@ proto.bucketeer.experiment.StartExperimentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5525,10 +5525,6 @@ proto.bucketeer.experiment.StartExperimentRequest.prototype.serializeBinary = proto.bucketeer.experiment.StartExperimentRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -5542,26 +5538,10 @@ proto.bucketeer.experiment.StartExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.experiment.StartExperimentRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.experiment.StartExperimentRequest} returns this - */ -proto.bucketeer.experiment.StartExperimentRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -5627,6 +5607,26 @@ proto.bucketeer.experiment.StartExperimentRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.experiment.StartExperimentRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.experiment.StartExperimentRequest} returns this + */ +proto.bucketeer.experiment.StartExperimentRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -5771,14 +5771,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_experiment_command_pb.FinishExperimentCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -5818,10 +5818,6 @@ proto.bucketeer.experiment.FinishExperimentRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -5835,6 +5831,10 @@ proto.bucketeer.experiment.FinishExperimentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5867,10 +5867,6 @@ proto.bucketeer.experiment.FinishExperimentRequest.prototype.serializeBinary = proto.bucketeer.experiment.FinishExperimentRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -5884,26 +5880,10 @@ proto.bucketeer.experiment.FinishExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.experiment.FinishExperimentRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.experiment.FinishExperimentRequest} returns this - */ -proto.bucketeer.experiment.FinishExperimentRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -5969,6 +5949,26 @@ proto.bucketeer.experiment.FinishExperimentRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.experiment.FinishExperimentRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.experiment.FinishExperimentRequest} returns this + */ +proto.bucketeer.experiment.FinishExperimentRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -6120,7 +6120,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6174,9 +6174,9 @@ proto.bucketeer.experiment.StopExperimentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -6223,9 +6223,9 @@ proto.bucketeer.experiment.StopExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -6290,13 +6290,13 @@ proto.bucketeer.experiment.StopExperimentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.experiment.StopExperimentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.StopExperimentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -6304,9 +6304,9 @@ proto.bucketeer.experiment.StopExperimentRequest.prototype.getEnvironmentNamespa * @param {string} value * @return {!proto.bucketeer.experiment.StopExperimentRequest} returns this */ -proto.bucketeer.experiment.StopExperimentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.StopExperimentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -6461,7 +6461,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6515,9 +6515,9 @@ proto.bucketeer.experiment.ArchiveExperimentRequest.deserializeBinaryFromReader ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -6564,9 +6564,9 @@ proto.bucketeer.experiment.ArchiveExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -6634,13 +6634,13 @@ proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -6648,9 +6648,9 @@ proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.getEnvironmentName * @param {string} value * @return {!proto.bucketeer.experiment.ArchiveExperimentRequest} returns this */ -proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.ArchiveExperimentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -6804,7 +6804,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6857,9 +6857,9 @@ proto.bucketeer.experiment.DeleteExperimentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -6906,9 +6906,9 @@ proto.bucketeer.experiment.DeleteExperimentRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -6976,13 +6976,13 @@ proto.bucketeer.experiment.DeleteExperimentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.experiment.DeleteExperimentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.experiment.DeleteExperimentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -6990,9 +6990,9 @@ proto.bucketeer.experiment.DeleteExperimentRequest.prototype.getEnvironmentNames * @param {string} value * @return {!proto.bucketeer.experiment.DeleteExperimentRequest} returns this */ -proto.bucketeer.experiment.DeleteExperimentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.experiment.DeleteExperimentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { diff --git a/ui/web-v2/src/proto/feature/command_pb.d.ts b/ui/web-v2/src/proto/feature/command_pb.d.ts index a3a03539b6..c67a6c745c 100644 --- a/ui/web-v2/src/proto/feature/command_pb.d.ts +++ b/ui/web-v2/src/proto/feature/command_pb.d.ts @@ -1454,8 +1454,8 @@ export namespace IncrementFeatureVersionCommand { } export class CloneFeatureCommand extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CloneFeatureCommand.AsObject; @@ -1480,7 +1480,7 @@ export class CloneFeatureCommand extends jspb.Message { export namespace CloneFeatureCommand { export type AsObject = { - environmentNamespace: string; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/feature/command_pb.js b/ui/web-v2/src/proto/feature/command_pb.js index ef9a09b49c..3103fa9250 100644 --- a/ui/web-v2/src/proto/feature/command_pb.js +++ b/ui/web-v2/src/proto/feature/command_pb.js @@ -8482,7 +8482,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 2, '') }; if (includeInstance) { @@ -8523,9 +8523,9 @@ proto.bucketeer.feature.CloneFeatureCommand.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: + case 2: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -8561,20 +8561,20 @@ proto.bucketeer.feature.CloneFeatureCommand.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(1, f); + writer.writeString(2, f); } }; /** - * optional string environment_namespace = 1; + * optional string environment_id = 2; * @return {string} */ -proto.bucketeer.feature.CloneFeatureCommand.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.CloneFeatureCommand.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') + jspb.Message.getFieldWithDefault(this, 2, '') ); }; @@ -8582,9 +8582,9 @@ proto.bucketeer.feature.CloneFeatureCommand.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.CloneFeatureCommand} returns this */ -proto.bucketeer.feature.CloneFeatureCommand.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.CloneFeatureCommand.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + return jspb.Message.setProto3StringField(this, 2, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { diff --git a/ui/web-v2/src/proto/feature/flag_trigger_pb.d.ts b/ui/web-v2/src/proto/feature/flag_trigger_pb.d.ts index 9849562c97..61508cfb17 100644 --- a/ui/web-v2/src/proto/feature/flag_trigger_pb.d.ts +++ b/ui/web-v2/src/proto/feature/flag_trigger_pb.d.ts @@ -10,9 +10,6 @@ export class FlagTrigger extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getType(): FlagTrigger.TypeMap[keyof FlagTrigger.TypeMap]; setType(value: FlagTrigger.TypeMap[keyof FlagTrigger.TypeMap]): void; @@ -40,6 +37,9 @@ export class FlagTrigger extends jspb.Message { getUpdatedAt(): number; setUpdatedAt(value: number): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): FlagTrigger.AsObject; static toObject( @@ -65,7 +65,6 @@ export namespace FlagTrigger { export type AsObject = { id: string; featureId: string; - environmentNamespace: string; type: FlagTrigger.TypeMap[keyof FlagTrigger.TypeMap]; action: FlagTrigger.ActionMap[keyof FlagTrigger.ActionMap]; description: string; @@ -75,6 +74,7 @@ export namespace FlagTrigger { disabled: boolean; createdAt: number; updatedAt: number; + environmentId: string; }; export interface TypeMap { diff --git a/ui/web-v2/src/proto/feature/flag_trigger_pb.js b/ui/web-v2/src/proto/feature/flag_trigger_pb.js index 14d030034a..f673eae861 100644 --- a/ui/web-v2/src/proto/feature/flag_trigger_pb.js +++ b/ui/web-v2/src/proto/feature/flag_trigger_pb.js @@ -88,7 +88,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), featureId: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), type: jspb.Message.getFieldWithDefault(msg, 4, 0), action: jspb.Message.getFieldWithDefault(msg, 5, 0), description: jspb.Message.getFieldWithDefault(msg, 6, ''), @@ -97,7 +96,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { token: jspb.Message.getFieldWithDefault(msg, 9, ''), disabled: jspb.Message.getBooleanFieldWithDefault(msg, 10, false), createdAt: jspb.Message.getFieldWithDefault(msg, 11, 0), - updatedAt: jspb.Message.getFieldWithDefault(msg, 12, 0) + updatedAt: jspb.Message.getFieldWithDefault(msg, 12, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 13, '') }; if (includeInstance) { @@ -146,10 +146,6 @@ proto.bucketeer.feature.FlagTrigger.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.feature.FlagTrigger.Type} */ ( reader.readEnum() @@ -190,6 +186,10 @@ proto.bucketeer.feature.FlagTrigger.deserializeBinaryFromReader = function ( var value = /** @type {number} */ (reader.readInt64()); msg.setUpdatedAt(value); break; + case 13: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -228,10 +228,6 @@ proto.bucketeer.feature.FlagTrigger.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getType(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -268,6 +264,10 @@ proto.bucketeer.feature.FlagTrigger.serializeBinaryToWriter = function ( if (f !== 0) { writer.writeInt64(12, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(13, f); + } }; /** @@ -319,26 +319,6 @@ proto.bucketeer.feature.FlagTrigger.prototype.setFeatureId = function (value) { return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.feature.FlagTrigger.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.FlagTrigger} returns this - */ -proto.bucketeer.feature.FlagTrigger.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional Type type = 4; * @return {!proto.bucketeer.feature.FlagTrigger.Type} @@ -495,4 +475,22 @@ proto.bucketeer.feature.FlagTrigger.prototype.setUpdatedAt = function (value) { return jspb.Message.setProto3IntField(this, 12, value); }; +/** + * optional string environment_id = 13; + * @return {string} + */ +proto.bucketeer.feature.FlagTrigger.prototype.getEnvironmentId = function () { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 13, '')); +}; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.FlagTrigger} returns this + */ +proto.bucketeer.feature.FlagTrigger.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 13, value); +}; + goog.object.extend(exports, proto.bucketeer.feature); diff --git a/ui/web-v2/src/proto/feature/service_pb.d.ts b/ui/web-v2/src/proto/feature/service_pb.d.ts index c32feb260d..8dd2b6984d 100644 --- a/ui/web-v2/src/proto/feature/service_pb.d.ts +++ b/ui/web-v2/src/proto/feature/service_pb.d.ts @@ -20,8 +20,8 @@ export class GetFeatureRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetFeatureRequest.AsObject; @@ -47,7 +47,7 @@ export class GetFeatureRequest extends jspb.Message { export namespace GetFeatureRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -85,14 +85,14 @@ export namespace GetFeatureResponse { } export class GetFeaturesRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - clearIdsList(): void; getIdsList(): Array; setIdsList(value: Array): void; addIds(value: string, index?: number): string; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetFeaturesRequest.AsObject; static toObject( @@ -116,8 +116,8 @@ export class GetFeaturesRequest extends jspb.Message { export namespace GetFeaturesRequest { export type AsObject = { - environmentNamespace: string; idsList: Array; + environmentId: string; }; } @@ -179,9 +179,6 @@ export class ListFeaturesRequest extends jspb.Message { value: ListFeaturesRequest.OrderDirectionMap[keyof ListFeaturesRequest.OrderDirectionMap] ): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getMaintainer(): string; setMaintainer(value: string): void; @@ -208,6 +205,9 @@ export class ListFeaturesRequest extends jspb.Message { getHasPrerequisites(): google_protobuf_wrappers_pb.BoolValue | undefined; setHasPrerequisites(value?: google_protobuf_wrappers_pb.BoolValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListFeaturesRequest.AsObject; static toObject( @@ -236,13 +236,13 @@ export namespace ListFeaturesRequest { tagsList: Array; orderBy: ListFeaturesRequest.OrderByMap[keyof ListFeaturesRequest.OrderByMap]; orderDirection: ListFeaturesRequest.OrderDirectionMap[keyof ListFeaturesRequest.OrderDirectionMap]; - environmentNamespace: string; maintainer: string; enabled?: google_protobuf_wrappers_pb.BoolValue.AsObject; hasExperiment?: google_protobuf_wrappers_pb.BoolValue.AsObject; searchKeyword: string; archived?: google_protobuf_wrappers_pb.BoolValue.AsObject; hasPrerequisites?: google_protobuf_wrappers_pb.BoolValue.AsObject; + environmentId: string; }; export interface OrderByMap { @@ -320,8 +320,8 @@ export class ListEnabledFeaturesRequest extends jspb.Message { setTagsList(value: Array): void; addTags(value: string, index?: number): string; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListEnabledFeaturesRequest.AsObject; @@ -349,7 +349,7 @@ export namespace ListEnabledFeaturesRequest { pageSize: number; cursor: string; tagsList: Array; - environmentNamespace: string; + environmentId: string; }; } @@ -399,8 +399,8 @@ export class CreateFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.CreateFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.CreateFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateFeatureRequest.AsObject; @@ -426,7 +426,7 @@ export class CreateFeatureRequest extends jspb.Message { export namespace CreateFeatureRequest { export type AsObject = { command?: proto_feature_command_pb.CreateFeatureCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -624,12 +624,12 @@ export class EnableFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.EnableFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.EnableFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EnableFeatureRequest.AsObject; static toObject( @@ -655,8 +655,8 @@ export namespace EnableFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.EnableFeatureCommand.AsObject; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -695,12 +695,12 @@ export class DisableFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.DisableFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.DisableFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DisableFeatureRequest.AsObject; static toObject( @@ -726,8 +726,8 @@ export namespace DisableFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.DisableFeatureCommand.AsObject; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -766,12 +766,12 @@ export class ArchiveFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.ArchiveFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.ArchiveFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ArchiveFeatureRequest.AsObject; static toObject( @@ -797,8 +797,8 @@ export namespace ArchiveFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.ArchiveFeatureCommand.AsObject; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -837,12 +837,12 @@ export class UnarchiveFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.UnarchiveFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.UnarchiveFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UnarchiveFeatureRequest.AsObject; static toObject( @@ -868,8 +868,8 @@ export namespace UnarchiveFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.UnarchiveFeatureCommand.AsObject; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -908,12 +908,12 @@ export class DeleteFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.DeleteFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.DeleteFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteFeatureRequest.AsObject; static toObject( @@ -939,8 +939,8 @@ export namespace DeleteFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.DeleteFeatureCommand.AsObject; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -1012,12 +1012,12 @@ export class UpdateFeatureDetailsRequest extends jspb.Message { index?: number ): proto_feature_command_pb.RemoveTagCommand; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateFeatureDetailsRequest.AsObject; static toObject( @@ -1046,8 +1046,8 @@ export namespace UpdateFeatureDetailsRequest { changeDescriptionCommand?: proto_feature_command_pb.ChangeDescriptionCommand.AsObject; addTagCommandsList: Array; removeTagCommandsList: Array; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -1089,12 +1089,12 @@ export class UpdateFeatureVariationsRequest extends jspb.Message { index?: number ): proto_feature_command_pb.Command; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateFeatureVariationsRequest.AsObject; static toObject( @@ -1120,8 +1120,8 @@ export namespace UpdateFeatureVariationsRequest { export type AsObject = { id: string; commandsList: Array; - environmentNamespace: string; comment: string; + environmentId: string; }; } @@ -1163,9 +1163,6 @@ export class UpdateFeatureTargetingRequest extends jspb.Message { index?: number ): proto_feature_command_pb.Command; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getComment(): string; setComment(value: string): void; @@ -1174,6 +1171,9 @@ export class UpdateFeatureTargetingRequest extends jspb.Message { value: UpdateFeatureTargetingRequest.FromMap[keyof UpdateFeatureTargetingRequest.FromMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateFeatureTargetingRequest.AsObject; static toObject( @@ -1199,9 +1199,9 @@ export namespace UpdateFeatureTargetingRequest { export type AsObject = { id: string; commandsList: Array; - environmentNamespace: string; comment: string; from: UpdateFeatureTargetingRequest.FromMap[keyof UpdateFeatureTargetingRequest.FromMap]; + environmentId: string; }; export interface FromMap { @@ -1248,8 +1248,8 @@ export class CloneFeatureRequest extends jspb.Message { getCommand(): proto_feature_command_pb.CloneFeatureCommand | undefined; setCommand(value?: proto_feature_command_pb.CloneFeatureCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CloneFeatureRequest.AsObject; @@ -1276,7 +1276,7 @@ export namespace CloneFeatureRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.CloneFeatureCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1312,8 +1312,8 @@ export class CreateSegmentRequest extends jspb.Message { getCommand(): proto_feature_command_pb.CreateSegmentCommand | undefined; setCommand(value?: proto_feature_command_pb.CreateSegmentCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateSegmentRequest.AsObject; @@ -1339,7 +1339,7 @@ export class CreateSegmentRequest extends jspb.Message { export namespace CreateSegmentRequest { export type AsObject = { command?: proto_feature_command_pb.CreateSegmentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1380,8 +1380,8 @@ export class GetSegmentRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetSegmentRequest.AsObject; @@ -1407,7 +1407,7 @@ export class GetSegmentRequest extends jspb.Message { export namespace GetSegmentRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -1451,9 +1451,6 @@ export class ListSegmentsRequest extends jspb.Message { getCursor(): string; setCursor(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getOrderBy(): ListSegmentsRequest.OrderByMap[keyof ListSegmentsRequest.OrderByMap]; setOrderBy( value: ListSegmentsRequest.OrderByMap[keyof ListSegmentsRequest.OrderByMap] @@ -1477,6 +1474,9 @@ export class ListSegmentsRequest extends jspb.Message { getIsInUseStatus(): google_protobuf_wrappers_pb.BoolValue | undefined; setIsInUseStatus(value?: google_protobuf_wrappers_pb.BoolValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListSegmentsRequest.AsObject; static toObject( @@ -1502,12 +1502,12 @@ export namespace ListSegmentsRequest { export type AsObject = { pageSize: number; cursor: string; - environmentNamespace: string; orderBy: ListSegmentsRequest.OrderByMap[keyof ListSegmentsRequest.OrderByMap]; orderDirection: ListSegmentsRequest.OrderDirectionMap[keyof ListSegmentsRequest.OrderDirectionMap]; searchKeyword: string; status?: google_protobuf_wrappers_pb.Int32Value.AsObject; isInUseStatus?: google_protobuf_wrappers_pb.BoolValue.AsObject; + environmentId: string; }; export interface OrderByMap { @@ -1580,8 +1580,8 @@ export class DeleteSegmentRequest extends jspb.Message { getCommand(): proto_feature_command_pb.DeleteSegmentCommand | undefined; setCommand(value?: proto_feature_command_pb.DeleteSegmentCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteSegmentRequest.AsObject; @@ -1608,7 +1608,7 @@ export namespace DeleteSegmentRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.DeleteSegmentCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1650,8 +1650,8 @@ export class UpdateSegmentRequest extends jspb.Message { index?: number ): proto_feature_command_pb.Command; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateSegmentRequest.AsObject; @@ -1678,7 +1678,7 @@ export namespace UpdateSegmentRequest { export type AsObject = { id: string; commandsList: Array; - environmentNamespace: string; + environmentId: string; }; } @@ -1717,8 +1717,8 @@ export class AddSegmentUserRequest extends jspb.Message { getCommand(): proto_feature_command_pb.AddSegmentUserCommand | undefined; setCommand(value?: proto_feature_command_pb.AddSegmentUserCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): AddSegmentUserRequest.AsObject; @@ -1745,7 +1745,7 @@ export namespace AddSegmentUserRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.AddSegmentUserCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1784,8 +1784,8 @@ export class DeleteSegmentUserRequest extends jspb.Message { getCommand(): proto_feature_command_pb.DeleteSegmentUserCommand | undefined; setCommand(value?: proto_feature_command_pb.DeleteSegmentUserCommand): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteSegmentUserRequest.AsObject; @@ -1812,7 +1812,7 @@ export namespace DeleteSegmentUserRequest { export type AsObject = { id: string; command?: proto_feature_command_pb.DeleteSegmentUserCommand.AsObject; - environmentNamespace: string; + environmentId: string; }; } @@ -1854,8 +1854,8 @@ export class GetSegmentUserRequest extends jspb.Message { value: proto_feature_segment_pb.SegmentUser.StateMap[keyof proto_feature_segment_pb.SegmentUser.StateMap] ): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetSegmentUserRequest.AsObject; @@ -1883,7 +1883,7 @@ export namespace GetSegmentUserRequest { segmentId: string; userId: string; state: proto_feature_segment_pb.SegmentUser.StateMap[keyof proto_feature_segment_pb.SegmentUser.StateMap]; - environmentNamespace: string; + environmentId: string; }; } @@ -1938,8 +1938,8 @@ export class ListSegmentUsersRequest extends jspb.Message { getUserId(): string; setUserId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListSegmentUsersRequest.AsObject; @@ -1969,7 +1969,7 @@ export namespace ListSegmentUsersRequest { segmentId: string; state?: google_protobuf_wrappers_pb.Int32Value.AsObject; userId: string; - environmentNamespace: string; + environmentId: string; }; } @@ -2014,9 +2014,6 @@ export namespace ListSegmentUsersResponse { } export class BulkUploadSegmentUsersRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getSegmentId(): string; setSegmentId(value: string): void; @@ -2029,6 +2026,9 @@ export class BulkUploadSegmentUsersRequest extends jspb.Message { value?: proto_feature_command_pb.BulkUploadSegmentUsersCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): BulkUploadSegmentUsersRequest.AsObject; static toObject( @@ -2052,9 +2052,9 @@ export class BulkUploadSegmentUsersRequest extends jspb.Message { export namespace BulkUploadSegmentUsersRequest { export type AsObject = { - environmentNamespace: string; segmentId: string; command?: proto_feature_command_pb.BulkUploadSegmentUsersCommand.AsObject; + environmentId: string; }; } @@ -2085,9 +2085,6 @@ export namespace BulkUploadSegmentUsersResponse { } export class BulkDownloadSegmentUsersRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getSegmentId(): string; setSegmentId(value: string): void; @@ -2096,6 +2093,9 @@ export class BulkDownloadSegmentUsersRequest extends jspb.Message { value: proto_feature_segment_pb.SegmentUser.StateMap[keyof proto_feature_segment_pb.SegmentUser.StateMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): BulkDownloadSegmentUsersRequest.AsObject; static toObject( @@ -2119,9 +2119,9 @@ export class BulkDownloadSegmentUsersRequest extends jspb.Message { export namespace BulkDownloadSegmentUsersRequest { export type AsObject = { - environmentNamespace: string; segmentId: string; state: proto_feature_segment_pb.SegmentUser.StateMap[keyof proto_feature_segment_pb.SegmentUser.StateMap]; + environmentId: string; }; } @@ -2166,15 +2166,15 @@ export class EvaluateFeaturesRequest extends jspb.Message { getUser(): proto_user_user_pb.User | undefined; setUser(value?: proto_user_user_pb.User): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getTag(): string; setTag(value: string): void; getFeatureId(): string; setFeatureId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EvaluateFeaturesRequest.AsObject; static toObject( @@ -2199,9 +2199,9 @@ export class EvaluateFeaturesRequest extends jspb.Message { export namespace EvaluateFeaturesRequest { export type AsObject = { user?: proto_user_user_pb.User.AsObject; - environmentNamespace: string; tag: string; featureId: string; + environmentId: string; }; } @@ -2239,9 +2239,6 @@ export namespace EvaluateFeaturesResponse { } export class ListTagsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -2261,6 +2258,9 @@ export class ListTagsRequest extends jspb.Message { getSearchKeyword(): string; setSearchKeyword(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListTagsRequest.AsObject; static toObject( @@ -2284,12 +2284,12 @@ export class ListTagsRequest extends jspb.Message { export namespace ListTagsRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; orderBy: ListTagsRequest.OrderByMap[keyof ListTagsRequest.OrderByMap]; orderDirection: ListTagsRequest.OrderDirectionMap[keyof ListTagsRequest.OrderDirectionMap]; searchKeyword: string; + environmentId: string; }; export interface OrderByMap { @@ -2354,9 +2354,6 @@ export namespace ListTagsResponse { } export class CreateFlagTriggerRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasCreateFlagTriggerCommand(): boolean; clearCreateFlagTriggerCommand(): void; getCreateFlagTriggerCommand(): @@ -2366,6 +2363,9 @@ export class CreateFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.CreateFlagTriggerCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateFlagTriggerRequest.AsObject; static toObject( @@ -2389,8 +2389,8 @@ export class CreateFlagTriggerRequest extends jspb.Message { export namespace CreateFlagTriggerRequest { export type AsObject = { - environmentNamespace: string; createFlagTriggerCommand?: proto_feature_command_pb.CreateFlagTriggerCommand.AsObject; + environmentId: string; }; } @@ -2435,9 +2435,6 @@ export class DeleteFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasDeleteFlagTriggerCommand(): boolean; clearDeleteFlagTriggerCommand(): void; getDeleteFlagTriggerCommand(): @@ -2447,6 +2444,9 @@ export class DeleteFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.DeleteFlagTriggerCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteFlagTriggerRequest.AsObject; static toObject( @@ -2471,8 +2471,8 @@ export class DeleteFlagTriggerRequest extends jspb.Message { export namespace DeleteFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; deleteFlagTriggerCommand?: proto_feature_command_pb.DeleteFlagTriggerCommand.AsObject; + environmentId: string; }; } @@ -2506,9 +2506,6 @@ export class UpdateFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasChangeFlagTriggerDescriptionCommand(): boolean; clearChangeFlagTriggerDescriptionCommand(): void; getChangeFlagTriggerDescriptionCommand(): @@ -2518,6 +2515,9 @@ export class UpdateFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.ChangeFlagTriggerDescriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateFlagTriggerRequest.AsObject; static toObject( @@ -2542,8 +2542,8 @@ export class UpdateFlagTriggerRequest extends jspb.Message { export namespace UpdateFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; changeFlagTriggerDescriptionCommand?: proto_feature_command_pb.ChangeFlagTriggerDescriptionCommand.AsObject; + environmentId: string; }; } @@ -2577,9 +2577,6 @@ export class EnableFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasEnableFlagTriggerCommand(): boolean; clearEnableFlagTriggerCommand(): void; getEnableFlagTriggerCommand(): @@ -2589,6 +2586,9 @@ export class EnableFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.EnableFlagTriggerCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EnableFlagTriggerRequest.AsObject; static toObject( @@ -2613,8 +2613,8 @@ export class EnableFlagTriggerRequest extends jspb.Message { export namespace EnableFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; enableFlagTriggerCommand?: proto_feature_command_pb.EnableFlagTriggerCommand.AsObject; + environmentId: string; }; } @@ -2648,9 +2648,6 @@ export class DisableFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasDisableFlagTriggerCommand(): boolean; clearDisableFlagTriggerCommand(): void; getDisableFlagTriggerCommand(): @@ -2660,6 +2657,9 @@ export class DisableFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.DisableFlagTriggerCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DisableFlagTriggerRequest.AsObject; static toObject( @@ -2684,8 +2684,8 @@ export class DisableFlagTriggerRequest extends jspb.Message { export namespace DisableFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; disableFlagTriggerCommand?: proto_feature_command_pb.DisableFlagTriggerCommand.AsObject; + environmentId: string; }; } @@ -2719,9 +2719,6 @@ export class ResetFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasResetFlagTriggerCommand(): boolean; clearResetFlagTriggerCommand(): void; getResetFlagTriggerCommand(): @@ -2731,6 +2728,9 @@ export class ResetFlagTriggerRequest extends jspb.Message { value?: proto_feature_command_pb.ResetFlagTriggerCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ResetFlagTriggerRequest.AsObject; static toObject( @@ -2755,8 +2755,8 @@ export class ResetFlagTriggerRequest extends jspb.Message { export namespace ResetFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; resetFlagTriggerCommand?: proto_feature_command_pb.ResetFlagTriggerCommand.AsObject; + environmentId: string; }; } @@ -2801,8 +2801,8 @@ export class GetFlagTriggerRequest extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetFlagTriggerRequest.AsObject; @@ -2828,7 +2828,7 @@ export class GetFlagTriggerRequest extends jspb.Message { export namespace GetFlagTriggerRequest { export type AsObject = { id: string; - environmentNamespace: string; + environmentId: string; }; } @@ -2873,9 +2873,6 @@ export class ListFlagTriggersRequest extends jspb.Message { getFeatureId(): string; setFeatureId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getCursor(): string; setCursor(value: string): void; @@ -2892,6 +2889,9 @@ export class ListFlagTriggersRequest extends jspb.Message { value: ListFlagTriggersRequest.OrderDirectionMap[keyof ListFlagTriggersRequest.OrderDirectionMap] ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListFlagTriggersRequest.AsObject; static toObject( @@ -2916,11 +2916,11 @@ export class ListFlagTriggersRequest extends jspb.Message { export namespace ListFlagTriggersRequest { export type AsObject = { featureId: string; - environmentNamespace: string; cursor: string; pageSize: number; orderBy: ListFlagTriggersRequest.OrderByMap[keyof ListFlagTriggersRequest.OrderByMap]; orderDirection: ListFlagTriggersRequest.OrderDirectionMap[keyof ListFlagTriggersRequest.OrderDirectionMap]; + environmentId: string; }; export interface OrderByMap { diff --git a/ui/web-v2/src/proto/feature/service_pb.js b/ui/web-v2/src/proto/feature/service_pb.js index ccbf4ddbe0..aa385ee9ca 100644 --- a/ui/web-v2/src/proto/feature/service_pb.js +++ b/ui/web-v2/src/proto/feature/service_pb.js @@ -2217,7 +2217,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -2260,9 +2260,9 @@ proto.bucketeer.feature.GetFeatureRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -2302,9 +2302,9 @@ proto.bucketeer.feature.GetFeatureRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -2325,13 +2325,13 @@ proto.bucketeer.feature.GetFeatureRequest.prototype.setId = function (value) { }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.feature.GetFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.GetFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -2339,9 +2339,9 @@ proto.bucketeer.feature.GetFeatureRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.GetFeatureRequest} returns this */ -proto.bucketeer.feature.GetFeatureRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.GetFeatureRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2557,9 +2557,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), idsList: - (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -2600,14 +2600,14 @@ proto.bucketeer.feature.GetFeaturesRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.addIds(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -2642,36 +2642,16 @@ proto.bucketeer.feature.GetFeaturesRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getIdsList(); if (f.length > 0) { writer.writeRepeatedString(2, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.feature.GetFeaturesRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.GetFeaturesRequest} returns this - */ -proto.bucketeer.feature.GetFeaturesRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * repeated string ids = 2; * @return {!Array} @@ -2711,6 +2691,26 @@ proto.bucketeer.feature.GetFeaturesRequest.prototype.clearIdsList = return this.setIdsList([]); }; +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.feature.GetFeaturesRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.GetFeaturesRequest} returns this + */ +proto.bucketeer.feature.GetFeaturesRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -2953,7 +2953,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 6, ''), maintainer: jspb.Message.getFieldWithDefault(msg, 7, ''), enabled: (f = msg.getEnabled()) && @@ -2967,7 +2966,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), hasPrerequisites: (f = msg.getHasPrerequisites()) && - google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 13, '') }; if (includeInstance) { @@ -3034,10 +3034,6 @@ proto.bucketeer.feature.ListFeaturesRequest.deserializeBinaryFromReader = ); msg.setOrderDirection(value); break; - case 6: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 7: var value = /** @type {string} */ (reader.readString()); msg.setMaintainer(value); @@ -3078,6 +3074,10 @@ proto.bucketeer.feature.ListFeaturesRequest.deserializeBinaryFromReader = ); msg.setHasPrerequisites(value); break; + case 13: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -3132,10 +3132,6 @@ proto.bucketeer.feature.ListFeaturesRequest.serializeBinaryToWriter = function ( if (f !== 0.0) { writer.writeEnum(5, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(6, f); - } f = message.getMaintainer(); if (f.length > 0) { writer.writeString(7, f); @@ -3176,6 +3172,10 @@ proto.bucketeer.feature.ListFeaturesRequest.serializeBinaryToWriter = function ( google_protobuf_wrappers_pb.BoolValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(13, f); + } }; /** @@ -3317,26 +3317,6 @@ proto.bucketeer.feature.ListFeaturesRequest.prototype.setOrderDirection = return jspb.Message.setProto3EnumField(this, 5, value); }; -/** - * optional string environment_namespace = 6; - * @return {string} - */ -proto.bucketeer.feature.ListFeaturesRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 6, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.ListFeaturesRequest} returns this - */ -proto.bucketeer.feature.ListFeaturesRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 6, value); - }; - /** * optional string maintainer = 7; * @return {string} @@ -3542,6 +3522,26 @@ proto.bucketeer.feature.ListFeaturesRequest.prototype.hasHasPrerequisites = return jspb.Message.getField(this, 12) != null; }; +/** + * optional string environment_id = 13; + * @return {string} + */ +proto.bucketeer.feature.ListFeaturesRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 13, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.ListFeaturesRequest} returns this + */ +proto.bucketeer.feature.ListFeaturesRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 13, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -3833,7 +3833,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { cursor: jspb.Message.getFieldWithDefault(msg, 2, ''), tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -3885,9 +3885,9 @@ proto.bucketeer.feature.ListEnabledFeaturesRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.addTags(value); break; - case 4: + case 5: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -3933,9 +3933,9 @@ proto.bucketeer.feature.ListEnabledFeaturesRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeRepeatedString(3, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(4, f); + writer.writeString(5, f); } }; @@ -4017,13 +4017,13 @@ proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.clearTagsList = }; /** - * optional string environment_namespace = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -4031,9 +4031,9 @@ proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.getEnvironmentNames * @param {string} value * @return {!proto.bucketeer.feature.ListEnabledFeaturesRequest} returns this */ -proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.ListEnabledFeaturesRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; /** @@ -4294,7 +4294,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -4344,9 +4344,9 @@ proto.bucketeer.feature.CreateFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -4388,9 +4388,9 @@ proto.bucketeer.feature.CreateFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.CreateFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -4438,13 +4438,13 @@ proto.bucketeer.feature.CreateFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.feature.CreateFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.CreateFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -4452,9 +4452,9 @@ proto.bucketeer.feature.CreateFeatureRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.CreateFeatureRequest} returns this */ -proto.bucketeer.feature.CreateFeatureRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.CreateFeatureRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -5741,8 +5741,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -5796,14 +5796,14 @@ proto.bucketeer.feature.EnableFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5848,14 +5848,14 @@ proto.bucketeer.feature.EnableFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.EnableFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -5920,13 +5920,13 @@ proto.bucketeer.feature.EnableFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.EnableFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.EnableFeatureRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -5934,19 +5934,20 @@ proto.bucketeer.feature.EnableFeatureRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.EnableFeatureRequest} returns this */ -proto.bucketeer.feature.EnableFeatureRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; +proto.bucketeer.feature.EnableFeatureRequest.prototype.setComment = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.EnableFeatureRequest.prototype.getComment = +proto.bucketeer.feature.EnableFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -5954,11 +5955,10 @@ proto.bucketeer.feature.EnableFeatureRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.EnableFeatureRequest} returns this */ -proto.bucketeer.feature.EnableFeatureRequest.prototype.setComment = function ( - value -) { - return jspb.Message.setProto3StringField(this, 4, value); -}; +proto.bucketeer.feature.EnableFeatureRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -6114,8 +6114,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -6169,14 +6169,14 @@ proto.bucketeer.feature.DisableFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6221,14 +6221,14 @@ proto.bucketeer.feature.DisableFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.DisableFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -6293,13 +6293,13 @@ proto.bucketeer.feature.DisableFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.DisableFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.DisableFeatureRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -6307,19 +6307,20 @@ proto.bucketeer.feature.DisableFeatureRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.feature.DisableFeatureRequest} returns this */ -proto.bucketeer.feature.DisableFeatureRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; +proto.bucketeer.feature.DisableFeatureRequest.prototype.setComment = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.DisableFeatureRequest.prototype.getComment = +proto.bucketeer.feature.DisableFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -6327,11 +6328,10 @@ proto.bucketeer.feature.DisableFeatureRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.DisableFeatureRequest} returns this */ -proto.bucketeer.feature.DisableFeatureRequest.prototype.setComment = function ( - value -) { - return jspb.Message.setProto3StringField(this, 4, value); -}; +proto.bucketeer.feature.DisableFeatureRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -6487,8 +6487,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -6542,14 +6542,14 @@ proto.bucketeer.feature.ArchiveFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6594,14 +6594,14 @@ proto.bucketeer.feature.ArchiveFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.ArchiveFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -6666,13 +6666,13 @@ proto.bucketeer.feature.ArchiveFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -6680,19 +6680,20 @@ proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.feature.ArchiveFeatureRequest} returns this */ -proto.bucketeer.feature.ArchiveFeatureRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; +proto.bucketeer.feature.ArchiveFeatureRequest.prototype.setComment = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getComment = +proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -6700,11 +6701,10 @@ proto.bucketeer.feature.ArchiveFeatureRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.ArchiveFeatureRequest} returns this */ -proto.bucketeer.feature.ArchiveFeatureRequest.prototype.setComment = function ( - value -) { - return jspb.Message.setProto3StringField(this, 4, value); -}; +proto.bucketeer.feature.ArchiveFeatureRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -6859,8 +6859,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -6914,14 +6914,14 @@ proto.bucketeer.feature.UnarchiveFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6966,14 +6966,14 @@ proto.bucketeer.feature.UnarchiveFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.UnarchiveFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -7037,13 +7037,13 @@ proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -7051,19 +7051,19 @@ proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getEnvironmentNamespac * @param {string} value * @return {!proto.bucketeer.feature.UnarchiveFeatureRequest} returns this */ -proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.setComment = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getComment = +proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -7071,9 +7071,9 @@ proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.UnarchiveFeatureRequest} returns this */ -proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.setComment = +proto.bucketeer.feature.UnarchiveFeatureRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -7229,8 +7229,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -7284,14 +7284,14 @@ proto.bucketeer.feature.DeleteFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -7336,14 +7336,14 @@ proto.bucketeer.feature.DeleteFeatureRequest.serializeBinaryToWriter = proto_feature_command_pb.DeleteFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -7408,13 +7408,13 @@ proto.bucketeer.feature.DeleteFeatureRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.DeleteFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.DeleteFeatureRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -7422,19 +7422,20 @@ proto.bucketeer.feature.DeleteFeatureRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.DeleteFeatureRequest} returns this */ -proto.bucketeer.feature.DeleteFeatureRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; +proto.bucketeer.feature.DeleteFeatureRequest.prototype.setComment = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.DeleteFeatureRequest.prototype.getComment = +proto.bucketeer.feature.DeleteFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -7442,11 +7443,10 @@ proto.bucketeer.feature.DeleteFeatureRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.DeleteFeatureRequest} returns this */ -proto.bucketeer.feature.DeleteFeatureRequest.prototype.setComment = function ( - value -) { - return jspb.Message.setProto3StringField(this, 4, value); -}; +proto.bucketeer.feature.DeleteFeatureRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -7624,8 +7624,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_feature_command_pb.RemoveTagCommand.toObject, includeInstance ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 6, ''), - comment: jspb.Message.getFieldWithDefault(msg, 7, '') + comment: jspb.Message.getFieldWithDefault(msg, 7, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 8, '') }; if (includeInstance) { @@ -7704,14 +7704,14 @@ proto.bucketeer.feature.UpdateFeatureDetailsRequest.deserializeBinaryFromReader ); msg.addRemoveTagCommands(value); break; - case 6: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 7: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -7781,14 +7781,14 @@ proto.bucketeer.feature.UpdateFeatureDetailsRequest.serializeBinaryToWriter = proto_feature_command_pb.RemoveTagCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(6, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(7, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(8, f); + } }; /** @@ -7995,13 +7995,13 @@ proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.clearRemoveTagComm }; /** - * optional string environment_namespace = 6; + * optional string comment = 7; * @return {string} */ -proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 6, '') + jspb.Message.getFieldWithDefault(this, 7, '') ); }; @@ -8009,19 +8009,19 @@ proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getEnvironmentName * @param {string} value * @return {!proto.bucketeer.feature.UpdateFeatureDetailsRequest} returns this */ -proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.setComment = function (value) { - return jspb.Message.setProto3StringField(this, 6, value); + return jspb.Message.setProto3StringField(this, 7, value); }; /** - * optional string comment = 7; + * optional string environment_id = 8; * @return {string} */ -proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getComment = +proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 7, '') + jspb.Message.getFieldWithDefault(this, 8, '') ); }; @@ -8029,9 +8029,9 @@ proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.UpdateFeatureDetailsRequest} returns this */ -proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.setComment = +proto.bucketeer.feature.UpdateFeatureDetailsRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 7, value); + return jspb.Message.setProto3StringField(this, 8, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -8191,8 +8191,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_feature_command_pb.Command.toObject, includeInstance ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), - comment: jspb.Message.getFieldWithDefault(msg, 4, '') + comment: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -8244,14 +8244,14 @@ proto.bucketeer.feature.UpdateFeatureVariationsRequest.deserializeBinaryFromRead ); msg.addCommands(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -8296,14 +8296,14 @@ proto.bucketeer.feature.UpdateFeatureVariationsRequest.serializeBinaryToWriter = proto_feature_command_pb.Command.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -8376,13 +8376,13 @@ proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.clearCommandsLi }; /** - * optional string environment_namespace = 3; + * optional string comment = 4; * @return {string} */ -proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getComment = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -8390,19 +8390,19 @@ proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getEnvironmentN * @param {string} value * @return {!proto.bucketeer.feature.UpdateFeatureVariationsRequest} returns this */ -proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.setComment = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; /** - * optional string comment = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getComment = +proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -8410,9 +8410,9 @@ proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.getComment = * @param {string} value * @return {!proto.bucketeer.feature.UpdateFeatureVariationsRequest} returns this */ -proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.setComment = +proto.bucketeer.feature.UpdateFeatureVariationsRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -8572,9 +8572,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_feature_command_pb.Command.toObject, includeInstance ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), comment: jspb.Message.getFieldWithDefault(msg, 4, ''), - from: jspb.Message.getFieldWithDefault(msg, 5, 0) + from: jspb.Message.getFieldWithDefault(msg, 5, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -8626,10 +8626,6 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.deserializeBinaryFromReade ); msg.addCommands(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setComment(value); @@ -8641,6 +8637,10 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.deserializeBinaryFromReade ); msg.setFrom(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -8685,10 +8685,6 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.serializeBinaryToWriter = proto_feature_command_pb.Command.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getComment(); if (f.length > 0) { writer.writeString(4, f); @@ -8697,6 +8693,10 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.serializeBinaryToWriter = if (f !== 0.0) { writer.writeEnum(5, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; /** @@ -8777,26 +8777,6 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.clearCommandsLis return this.setCommandsList([]); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.UpdateFeatureTargetingRequest} returns this - */ -proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional string comment = 4; * @return {string} @@ -8837,6 +8817,26 @@ proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.setFrom = return jspb.Message.setProto3EnumField(this, 5, value); }; +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.UpdateFeatureTargetingRequest} returns this + */ +proto.bucketeer.feature.UpdateFeatureTargetingRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 6, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -8989,7 +8989,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -9043,9 +9043,9 @@ proto.bucketeer.feature.CloneFeatureRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -9093,9 +9093,9 @@ proto.bucketeer.feature.CloneFeatureRequest.serializeBinaryToWriter = function ( proto_feature_command_pb.CloneFeatureCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -9157,13 +9157,13 @@ proto.bucketeer.feature.CloneFeatureRequest.prototype.hasCommand = function () { }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.CloneFeatureRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.CloneFeatureRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -9171,9 +9171,9 @@ proto.bucketeer.feature.CloneFeatureRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.CloneFeatureRequest} returns this */ -proto.bucketeer.feature.CloneFeatureRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.CloneFeatureRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -9329,7 +9329,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -9379,9 +9379,9 @@ proto.bucketeer.feature.CreateSegmentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 2: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -9423,9 +9423,9 @@ proto.bucketeer.feature.CreateSegmentRequest.serializeBinaryToWriter = proto_feature_command_pb.CreateSegmentCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(4, f); } }; @@ -9473,13 +9473,13 @@ proto.bucketeer.feature.CreateSegmentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.CreateSegmentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.CreateSegmentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -9487,9 +9487,9 @@ proto.bucketeer.feature.CreateSegmentRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.CreateSegmentRequest} returns this */ -proto.bucketeer.feature.CreateSegmentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.CreateSegmentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -9699,7 +9699,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -9742,9 +9742,9 @@ proto.bucketeer.feature.GetSegmentRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -9784,9 +9784,9 @@ proto.bucketeer.feature.GetSegmentRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -9807,13 +9807,13 @@ proto.bucketeer.feature.GetSegmentRequest.prototype.setId = function (value) { }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.feature.GetSegmentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.GetSegmentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -9821,9 +9821,9 @@ proto.bucketeer.feature.GetSegmentRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.GetSegmentRequest} returns this */ -proto.bucketeer.feature.GetSegmentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.GetSegmentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -10034,7 +10034,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { obj = { pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), cursor: jspb.Message.getFieldWithDefault(msg, 2, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), @@ -10043,7 +10042,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f), isInUseStatus: (f = msg.getIsInUseStatus()) && - google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 9, '') }; if (includeInstance) { @@ -10092,10 +10092,6 @@ proto.bucketeer.feature.ListSegmentsRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); break; - case 3: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 4: var value = /** @type {!proto.bucketeer.feature.ListSegmentsRequest.OrderBy} */ ( @@ -10130,6 +10126,10 @@ proto.bucketeer.feature.ListSegmentsRequest.deserializeBinaryFromReader = ); msg.setIsInUseStatus(value); break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -10172,10 +10172,6 @@ proto.bucketeer.feature.ListSegmentsRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(2, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(3, f); - } f = message.getOrderBy(); if (f !== 0.0) { writer.writeEnum(4, f); @@ -10204,6 +10200,10 @@ proto.bucketeer.feature.ListSegmentsRequest.serializeBinaryToWriter = function ( google_protobuf_wrappers_pb.BoolValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(9, f); + } }; /** @@ -10261,26 +10261,6 @@ proto.bucketeer.feature.ListSegmentsRequest.prototype.setCursor = function ( return jspb.Message.setProto3StringField(this, 2, value); }; -/** - * optional string environment_namespace = 3; - * @return {string} - */ -proto.bucketeer.feature.ListSegmentsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.ListSegmentsRequest} returns this - */ -proto.bucketeer.feature.ListSegmentsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 3, value); - }; - /** * optional OrderBy order_by = 4; * @return {!proto.bucketeer.feature.ListSegmentsRequest.OrderBy} @@ -10424,6 +10404,26 @@ proto.bucketeer.feature.ListSegmentsRequest.prototype.hasIsInUseStatus = return jspb.Message.getField(this, 8) != null; }; +/** + * optional string environment_id = 9; + * @return {string} + */ +proto.bucketeer.feature.ListSegmentsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 9, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.ListSegmentsRequest} returns this + */ +proto.bucketeer.feature.ListSegmentsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 9, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -10712,7 +10712,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -10766,9 +10766,9 @@ proto.bucketeer.feature.DeleteSegmentRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -10814,9 +10814,9 @@ proto.bucketeer.feature.DeleteSegmentRequest.serializeBinaryToWriter = proto_feature_command_pb.DeleteSegmentCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -10882,13 +10882,13 @@ proto.bucketeer.feature.DeleteSegmentRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.DeleteSegmentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.DeleteSegmentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -10896,9 +10896,9 @@ proto.bucketeer.feature.DeleteSegmentRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.DeleteSegmentRequest} returns this */ -proto.bucketeer.feature.DeleteSegmentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.DeleteSegmentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -11061,7 +11061,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_feature_command_pb.Command.toObject, includeInstance ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -11114,9 +11114,9 @@ proto.bucketeer.feature.UpdateSegmentRequest.deserializeBinaryFromReader = ); msg.addCommands(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -11162,9 +11162,9 @@ proto.bucketeer.feature.UpdateSegmentRequest.serializeBinaryToWriter = proto_feature_command_pb.Command.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -11238,13 +11238,13 @@ proto.bucketeer.feature.UpdateSegmentRequest.prototype.clearCommandsList = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.UpdateSegmentRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.UpdateSegmentRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -11252,9 +11252,9 @@ proto.bucketeer.feature.UpdateSegmentRequest.prototype.getEnvironmentNamespace = * @param {string} value * @return {!proto.bucketeer.feature.UpdateSegmentRequest} returns this */ -proto.bucketeer.feature.UpdateSegmentRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.UpdateSegmentRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -11411,7 +11411,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -11465,9 +11465,9 @@ proto.bucketeer.feature.AddSegmentUserRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -11513,9 +11513,9 @@ proto.bucketeer.feature.AddSegmentUserRequest.serializeBinaryToWriter = proto_feature_command_pb.AddSegmentUserCommand.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -11581,13 +11581,13 @@ proto.bucketeer.feature.AddSegmentUserRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.AddSegmentUserRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.AddSegmentUserRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -11595,9 +11595,9 @@ proto.bucketeer.feature.AddSegmentUserRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.feature.AddSegmentUserRequest} returns this */ -proto.bucketeer.feature.AddSegmentUserRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.AddSegmentUserRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -11753,7 +11753,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 3, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -11807,9 +11807,9 @@ proto.bucketeer.feature.DeleteSegmentUserRequest.deserializeBinaryFromReader = ); msg.setCommand(value); break; - case 3: + case 4: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -11856,9 +11856,9 @@ proto.bucketeer.feature.DeleteSegmentUserRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(3, f); + writer.writeString(4, f); } }; @@ -11923,13 +11923,13 @@ proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.hasCommand = }; /** - * optional string environment_namespace = 3; + * optional string environment_id = 4; * @return {string} */ -proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 3, '') + jspb.Message.getFieldWithDefault(this, 4, '') ); }; @@ -11937,9 +11937,9 @@ proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.getEnvironmentNamespa * @param {string} value * @return {!proto.bucketeer.feature.DeleteSegmentUserRequest} returns this */ -proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.DeleteSegmentUserRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 3, value); + return jspb.Message.setProto3StringField(this, 4, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -12091,7 +12091,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { segmentId: jspb.Message.getFieldWithDefault(msg, 1, ''), userId: jspb.Message.getFieldWithDefault(msg, 2, ''), state: jspb.Message.getFieldWithDefault(msg, 3, 0), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 4, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -12147,9 +12147,9 @@ proto.bucketeer.feature.GetSegmentUserRequest.deserializeBinaryFromReader = ); msg.setState(value); break; - case 4: + case 5: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -12195,9 +12195,9 @@ proto.bucketeer.feature.GetSegmentUserRequest.serializeBinaryToWriter = if (f !== 0.0) { writer.writeEnum(3, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(4, f); + writer.writeString(5, f); } }; @@ -12263,13 +12263,13 @@ proto.bucketeer.feature.GetSegmentUserRequest.prototype.setState = function ( }; /** - * optional string environment_namespace = 4; + * optional string environment_id = 5; * @return {string} */ -proto.bucketeer.feature.GetSegmentUserRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.GetSegmentUserRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 4, '') + jspb.Message.getFieldWithDefault(this, 5, '') ); }; @@ -12277,9 +12277,9 @@ proto.bucketeer.feature.GetSegmentUserRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.feature.GetSegmentUserRequest} returns this */ -proto.bucketeer.feature.GetSegmentUserRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.GetSegmentUserRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 4, value); + return jspb.Message.setProto3StringField(this, 5, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -12492,7 +12492,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { (f = msg.getState()) && google_protobuf_wrappers_pb.Int32Value.toObject(includeInstance, f), userId: jspb.Message.getFieldWithDefault(msg, 5, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 6, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -12557,9 +12557,9 @@ proto.bucketeer.feature.ListSegmentUsersRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setUserId(value); break; - case 6: + case 7: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -12617,9 +12617,9 @@ proto.bucketeer.feature.ListSegmentUsersRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(5, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(6, f); + writer.writeString(7, f); } }; @@ -12747,13 +12747,13 @@ proto.bucketeer.feature.ListSegmentUsersRequest.prototype.setUserId = function ( }; /** - * optional string environment_namespace = 6; + * optional string environment_id = 7; * @return {string} */ -proto.bucketeer.feature.ListSegmentUsersRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.ListSegmentUsersRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 6, '') + jspb.Message.getFieldWithDefault(this, 7, '') ); }; @@ -12761,9 +12761,9 @@ proto.bucketeer.feature.ListSegmentUsersRequest.prototype.getEnvironmentNamespac * @param {string} value * @return {!proto.bucketeer.feature.ListSegmentUsersRequest} returns this */ -proto.bucketeer.feature.ListSegmentUsersRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.ListSegmentUsersRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 6, value); + return jspb.Message.setProto3StringField(this, 7, value); }; /** @@ -13020,14 +13020,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), segmentId: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_feature_command_pb.BulkUploadSegmentUsersCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -13067,10 +13067,6 @@ proto.bucketeer.feature.BulkUploadSegmentUsersRequest.deserializeBinaryFromReade } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setSegmentId(value); @@ -13085,6 +13081,10 @@ proto.bucketeer.feature.BulkUploadSegmentUsersRequest.deserializeBinaryFromReade ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -13117,10 +13117,6 @@ proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.serializeBinary proto.bucketeer.feature.BulkUploadSegmentUsersRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getSegmentId(); if (f.length > 0) { writer.writeString(2, f); @@ -13134,26 +13130,10 @@ proto.bucketeer.feature.BulkUploadSegmentUsersRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.BulkUploadSegmentUsersRequest} returns this - */ -proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -13218,6 +13198,26 @@ proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.BulkUploadSegmentUsersRequest} returns this + */ +proto.bucketeer.feature.BulkUploadSegmentUsersRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -13362,9 +13362,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), segmentId: jspb.Message.getFieldWithDefault(msg, 2, ''), - state: jspb.Message.getFieldWithDefault(msg, 3, 0) + state: jspb.Message.getFieldWithDefault(msg, 3, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -13404,10 +13404,6 @@ proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setSegmentId(value); @@ -13419,6 +13415,10 @@ proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.deserializeBinaryFromRea ); msg.setState(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -13451,10 +13451,6 @@ proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.serializeBinar proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getSegmentId(); if (f.length > 0) { writer.writeString(2, f); @@ -13463,26 +13459,10 @@ proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.serializeBinaryToWriter if (f !== 0.0) { writer.writeEnum(3, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.BulkDownloadSegmentUsersRequest} returns this - */ -proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -13525,6 +13505,26 @@ proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.setState = return jspb.Message.setProto3EnumField(this, 3, value); }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.BulkDownloadSegmentUsersRequest} returns this + */ +proto.bucketeer.feature.BulkDownloadSegmentUsersRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -13724,9 +13724,9 @@ if (jspb.Message.GENERATE_TO_OBJECT) { user: (f = msg.getUser()) && proto_user_user_pb.User.toObject(includeInstance, f), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), tag: jspb.Message.getFieldWithDefault(msg, 3, ''), - featureId: jspb.Message.getFieldWithDefault(msg, 4, '') + featureId: jspb.Message.getFieldWithDefault(msg, 4, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -13775,10 +13775,6 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.deserializeBinaryFromReader = ); msg.setUser(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = /** @type {string} */ (reader.readString()); msg.setTag(value); @@ -13787,6 +13783,10 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -13827,10 +13827,6 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.serializeBinaryToWriter = proto_user_user_pb.User.serializeBinaryToWriter ); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getTag(); if (f.length > 0) { writer.writeString(3, f); @@ -13839,6 +13835,10 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(4, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -13880,26 +13880,6 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.hasUser = return jspb.Message.getField(this, 1) != null; }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.EvaluateFeaturesRequest} returns this - */ -proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional string tag = 3; * @return {string} @@ -13938,6 +13918,26 @@ proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.setFeatureId = return jspb.Message.setProto3StringField(this, 4, value); }; +/** + * optional string environment_id = 5; + * @return {string} + */ +proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 5, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.EvaluateFeaturesRequest} returns this + */ +proto.bucketeer.feature.EvaluateFeaturesRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -14150,12 +14150,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), - searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, '') + searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -14196,10 +14196,6 @@ proto.bucketeer.feature.ListTagsRequest.deserializeBinaryFromReader = function ( } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -14226,6 +14222,10 @@ proto.bucketeer.feature.ListTagsRequest.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setSearchKeyword(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -14260,10 +14260,6 @@ proto.bucketeer.feature.ListTagsRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -14284,6 +14280,10 @@ proto.bucketeer.feature.ListTagsRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(6, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -14304,26 +14304,6 @@ proto.bucketeer.feature.ListTagsRequest.OrderDirection = { DESC: 1 }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.feature.ListTagsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.ListTagsRequest} returns this - */ -proto.bucketeer.feature.ListTagsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional int64 page_size = 2; * @return {number} @@ -14420,6 +14400,27 @@ proto.bucketeer.feature.ListTagsRequest.prototype.setSearchKeyword = function ( return jspb.Message.setProto3StringField(this, 6, value); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.feature.ListTagsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.ListTagsRequest} returns this + */ +proto.bucketeer.feature.ListTagsRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 7, value); +}; + /** * List of repeated fields within this message type. * @private {!Array} @@ -14695,13 +14696,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), createFlagTriggerCommand: (f = msg.getCreateFlagTriggerCommand()) && proto_feature_command_pb.CreateFlagTriggerCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -14742,10 +14743,6 @@ proto.bucketeer.feature.CreateFlagTriggerRequest.deserializeBinaryFromReader = } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto_feature_command_pb.CreateFlagTriggerCommand(); reader.readMessage( @@ -14755,6 +14752,10 @@ proto.bucketeer.feature.CreateFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setCreateFlagTriggerCommand(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -14787,10 +14788,6 @@ proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.serializeBinary = proto.bucketeer.feature.CreateFlagTriggerRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getCreateFlagTriggerCommand(); if (f != null) { writer.writeMessage( @@ -14800,26 +14797,10 @@ proto.bucketeer.feature.CreateFlagTriggerRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.CreateFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** @@ -14864,17 +14845,37 @@ proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.hasCreateFlagTriggerC return jspb.Message.getField(this, 2) != null; }; -if (jspb.Message.GENERATE_TO_OBJECT) { - /** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.CreateFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.CreateFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + +if (jspb.Message.GENERATE_TO_OBJECT) { + /** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration * @return {!Object} */ proto.bucketeer.feature.CreateFlagTriggerResponse.prototype.toObject = @@ -15106,13 +15107,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), deleteFlagTriggerCommand: (f = msg.getDeleteFlagTriggerCommand()) && proto_feature_command_pb.DeleteFlagTriggerCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -15157,10 +15158,6 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = new proto_feature_command_pb.DeleteFlagTriggerCommand(); reader.readMessage( @@ -15170,6 +15167,10 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setDeleteFlagTriggerCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -15206,10 +15207,6 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getDeleteFlagTriggerCommand(); if (f != null) { writer.writeMessage( @@ -15219,6 +15216,10 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -15239,26 +15240,6 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.DeleteFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional DeleteFlagTriggerCommand delete_flag_trigger_command = 3; * @return {?proto.bucketeer.feature.DeleteFlagTriggerCommand} @@ -15301,6 +15282,26 @@ proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.hasDeleteFlagTriggerC return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.DeleteFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.DeleteFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -15447,13 +15448,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), changeFlagTriggerDescriptionCommand: (f = msg.getChangeFlagTriggerDescriptionCommand()) && proto_feature_command_pb.ChangeFlagTriggerDescriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -15498,10 +15499,6 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = new proto_feature_command_pb.ChangeFlagTriggerDescriptionCommand(); @@ -15512,6 +15509,10 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setChangeFlagTriggerDescriptionCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -15548,10 +15549,6 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getChangeFlagTriggerDescriptionCommand(); if (f != null) { writer.writeMessage( @@ -15561,6 +15558,10 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -15581,26 +15582,6 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.UpdateFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional ChangeFlagTriggerDescriptionCommand change_flag_trigger_description_command = 3; * @return {?proto.bucketeer.feature.ChangeFlagTriggerDescriptionCommand} @@ -15643,6 +15624,26 @@ proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.hasChangeFlagTriggerD return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.UpdateFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.UpdateFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -15789,13 +15790,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), enableFlagTriggerCommand: (f = msg.getEnableFlagTriggerCommand()) && proto_feature_command_pb.EnableFlagTriggerCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -15840,10 +15841,6 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = new proto_feature_command_pb.EnableFlagTriggerCommand(); reader.readMessage( @@ -15853,6 +15850,10 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setEnableFlagTriggerCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -15889,10 +15890,6 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getEnableFlagTriggerCommand(); if (f != null) { writer.writeMessage( @@ -15902,6 +15899,10 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -15922,26 +15923,6 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.EnableFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional EnableFlagTriggerCommand enable_flag_trigger_command = 3; * @return {?proto.bucketeer.feature.EnableFlagTriggerCommand} @@ -15984,6 +15965,26 @@ proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.hasEnableFlagTriggerC return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.EnableFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.EnableFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -16130,13 +16131,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), disableFlagTriggerCommand: (f = msg.getDisableFlagTriggerCommand()) && proto_feature_command_pb.DisableFlagTriggerCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -16181,10 +16182,6 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = new proto_feature_command_pb.DisableFlagTriggerCommand(); reader.readMessage( @@ -16194,6 +16191,10 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setDisableFlagTriggerCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -16230,10 +16231,6 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getDisableFlagTriggerCommand(); if (f != null) { writer.writeMessage( @@ -16243,6 +16240,10 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -16266,26 +16267,6 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.DisableFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional DisableFlagTriggerCommand disable_flag_trigger_command = 3; * @return {?proto.bucketeer.feature.DisableFlagTriggerCommand} @@ -16328,6 +16309,26 @@ proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.hasDisableFlagTrigge return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.DisableFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.DisableFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -16473,13 +16474,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), resetFlagTriggerCommand: (f = msg.getResetFlagTriggerCommand()) && proto_feature_command_pb.ResetFlagTriggerCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -16524,10 +16525,6 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = new proto_feature_command_pb.ResetFlagTriggerCommand(); reader.readMessage( @@ -16537,6 +16534,10 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.deserializeBinaryFromReader = ); msg.setResetFlagTriggerCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -16573,10 +16574,6 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getResetFlagTriggerCommand(); if (f != null) { writer.writeMessage( @@ -16585,6 +16582,10 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.serializeBinaryToWriter = proto_feature_command_pb.ResetFlagTriggerCommand.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -16605,26 +16606,6 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.setId = function ( return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.ResetFlagTriggerRequest} returns this - */ -proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional ResetFlagTriggerCommand reset_flag_trigger_command = 3; * @return {?proto.bucketeer.feature.ResetFlagTriggerCommand} @@ -16667,6 +16648,26 @@ proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.hasResetFlagTriggerCom return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.ResetFlagTriggerRequest} returns this + */ +proto.bucketeer.feature.ResetFlagTriggerRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -16910,7 +16911,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, '') + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -16955,9 +16956,9 @@ proto.bucketeer.feature.GetFlagTriggerRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: + case 3: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; default: reader.skipField(); @@ -16995,9 +16996,9 @@ proto.bucketeer.feature.GetFlagTriggerRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { - writer.writeString(2, f); + writer.writeString(3, f); } }; @@ -17020,13 +17021,13 @@ proto.bucketeer.feature.GetFlagTriggerRequest.prototype.setId = function ( }; /** - * optional string environment_namespace = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.feature.GetFlagTriggerRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.feature.GetFlagTriggerRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -17034,9 +17035,9 @@ proto.bucketeer.feature.GetFlagTriggerRequest.prototype.getEnvironmentNamespace * @param {string} value * @return {!proto.bucketeer.feature.GetFlagTriggerRequest} returns this */ -proto.bucketeer.feature.GetFlagTriggerRequest.prototype.setEnvironmentNamespace = +proto.bucketeer.feature.GetFlagTriggerRequest.prototype.setEnvironmentId = function (value) { - return jspb.Message.setProto3StringField(this, 2, value); + return jspb.Message.setProto3StringField(this, 3, value); }; if (jspb.Message.GENERATE_TO_OBJECT) { @@ -17279,11 +17280,11 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { featureId: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 4, 0), orderBy: jspb.Message.getFieldWithDefault(msg, 5, 0), - orderDirection: jspb.Message.getFieldWithDefault(msg, 6, 0) + orderDirection: jspb.Message.getFieldWithDefault(msg, 6, 0), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -17328,10 +17329,6 @@ proto.bucketeer.feature.ListFlagTriggersRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.setFeatureId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = /** @type {string} */ (reader.readString()); msg.setCursor(value); @@ -17354,6 +17351,10 @@ proto.bucketeer.feature.ListFlagTriggersRequest.deserializeBinaryFromReader = ); msg.setOrderDirection(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -17390,10 +17391,6 @@ proto.bucketeer.feature.ListFlagTriggersRequest.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getCursor(); if (f.length > 0) { writer.writeString(3, f); @@ -17410,6 +17407,10 @@ proto.bucketeer.feature.ListFlagTriggersRequest.serializeBinaryToWriter = if (f !== 0.0) { writer.writeEnum(6, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -17449,26 +17450,6 @@ proto.bucketeer.feature.ListFlagTriggersRequest.prototype.setFeatureId = return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.feature.ListFlagTriggersRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.feature.ListFlagTriggersRequest} returns this - */ -proto.bucketeer.feature.ListFlagTriggersRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional string cursor = 3; * @return {string} @@ -17548,6 +17529,26 @@ proto.bucketeer.feature.ListFlagTriggersRequest.prototype.setOrderDirection = return jspb.Message.setProto3EnumField(this, 6, value); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.feature.ListFlagTriggersRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.feature.ListFlagTriggersRequest} returns this + */ +proto.bucketeer.feature.ListFlagTriggersRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 7, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} diff --git a/ui/web-v2/src/proto/notification/sender/notification_event_pb.d.ts b/ui/web-v2/src/proto/notification/sender/notification_event_pb.d.ts index 3edd1a421e..505430a2f7 100644 --- a/ui/web-v2/src/proto/notification/sender/notification_event_pb.d.ts +++ b/ui/web-v2/src/proto/notification/sender/notification_event_pb.d.ts @@ -9,9 +9,6 @@ export class NotificationEvent extends jspb.Message { getId(): string; setId(value: string): void; - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getSourceType(): proto_notification_subscription_pb.Subscription.SourceTypeMap[keyof proto_notification_subscription_pb.Subscription.SourceTypeMap]; setSourceType( value: proto_notification_subscription_pb.Subscription.SourceTypeMap[keyof proto_notification_subscription_pb.Subscription.SourceTypeMap] @@ -29,6 +26,9 @@ export class NotificationEvent extends jspb.Message { getIsAdminEvent(): boolean; setIsAdminEvent(value: boolean): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): NotificationEvent.AsObject; static toObject( @@ -53,9 +53,9 @@ export class NotificationEvent extends jspb.Message { export namespace NotificationEvent { export type AsObject = { id: string; - environmentNamespace: string; sourceType: proto_notification_subscription_pb.Subscription.SourceTypeMap[keyof proto_notification_subscription_pb.Subscription.SourceTypeMap]; notification?: proto_notification_sender_notification_pb.Notification.AsObject; isAdminEvent: boolean; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/notification/sender/notification_event_pb.js b/ui/web-v2/src/proto/notification/sender/notification_event_pb.js index e36e24c903..3350eaf2e2 100644 --- a/ui/web-v2/src/proto/notification/sender/notification_event_pb.js +++ b/ui/web-v2/src/proto/notification/sender/notification_event_pb.js @@ -95,7 +95,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { var f, obj = { id: jspb.Message.getFieldWithDefault(msg, 1, ''), - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 2, ''), sourceType: jspb.Message.getFieldWithDefault(msg, 3, 0), notification: (f = msg.getNotification()) && @@ -103,7 +102,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { includeInstance, f ), - isAdminEvent: jspb.Message.getBooleanFieldWithDefault(msg, 5, false) + isAdminEvent: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -147,10 +147,6 @@ proto.bucketeer.notification.sender.NotificationEvent.deserializeBinaryFromReade var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 3: var value = /** @type {!proto.bucketeer.notification.Subscription.SourceType} */ ( @@ -172,6 +168,10 @@ proto.bucketeer.notification.sender.NotificationEvent.deserializeBinaryFromReade var value = /** @type {boolean} */ (reader.readBool()); msg.setIsAdminEvent(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -208,10 +208,6 @@ proto.bucketeer.notification.sender.NotificationEvent.serializeBinaryToWriter = if (f.length > 0) { writer.writeString(1, f); } - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(2, f); - } f = message.getSourceType(); if (f !== 0.0) { writer.writeEnum(3, f); @@ -229,6 +225,10 @@ proto.bucketeer.notification.sender.NotificationEvent.serializeBinaryToWriter = if (f) { writer.writeBool(5, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; /** @@ -251,26 +251,6 @@ proto.bucketeer.notification.sender.NotificationEvent.prototype.setId = return jspb.Message.setProto3StringField(this, 1, value); }; -/** - * optional string environment_namespace = 2; - * @return {string} - */ -proto.bucketeer.notification.sender.NotificationEvent.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.sender.NotificationEvent} returns this - */ -proto.bucketeer.notification.sender.NotificationEvent.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 2, value); - }; - /** * optional bucketeer.notification.Subscription.SourceType source_type = 3; * @return {!proto.bucketeer.notification.Subscription.SourceType} @@ -353,4 +333,24 @@ proto.bucketeer.notification.sender.NotificationEvent.prototype.setIsAdminEvent return jspb.Message.setProto3BooleanField(this, 5, value); }; +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.notification.sender.NotificationEvent.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.sender.NotificationEvent} returns this + */ +proto.bucketeer.notification.sender.NotificationEvent.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 6, value); + }; + goog.object.extend(exports, proto.bucketeer.notification.sender); diff --git a/ui/web-v2/src/proto/notification/service_pb.d.ts b/ui/web-v2/src/proto/notification/service_pb.d.ts index 28dfff9e82..37f48974a1 100644 --- a/ui/web-v2/src/proto/notification/service_pb.d.ts +++ b/ui/web-v2/src/proto/notification/service_pb.d.ts @@ -666,12 +666,12 @@ export namespace UpdateAdminSubscriptionResponse { } export class GetSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetSubscriptionRequest.AsObject; static toObject( @@ -695,8 +695,8 @@ export class GetSubscriptionRequest extends jspb.Message { export namespace GetSubscriptionRequest { export type AsObject = { - environmentNamespace: string; id: string; + environmentId: string; }; } @@ -738,9 +738,6 @@ export namespace GetSubscriptionResponse { } export class ListSubscriptionsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -779,6 +776,9 @@ export class ListSubscriptionsRequest extends jspb.Message { getDisabled(): google_protobuf_wrappers_pb.BoolValue | undefined; setDisabled(value?: google_protobuf_wrappers_pb.BoolValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListSubscriptionsRequest.AsObject; static toObject( @@ -802,7 +802,6 @@ export class ListSubscriptionsRequest extends jspb.Message { export namespace ListSubscriptionsRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; sourceTypesList: Array< @@ -812,6 +811,7 @@ export namespace ListSubscriptionsRequest { orderDirection: ListSubscriptionsRequest.OrderDirectionMap[keyof ListSubscriptionsRequest.OrderDirectionMap]; searchKeyword: string; disabled?: google_protobuf_wrappers_pb.BoolValue.AsObject; + environmentId: string; }; export interface OrderByMap { @@ -878,9 +878,6 @@ export namespace ListSubscriptionsResponse { } export class ListEnabledSubscriptionsRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -901,6 +898,9 @@ export class ListEnabledSubscriptionsRequest extends jspb.Message { index?: number ): proto_notification_subscription_pb.Subscription.SourceTypeMap[keyof proto_notification_subscription_pb.Subscription.SourceTypeMap]; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListEnabledSubscriptionsRequest.AsObject; static toObject( @@ -924,12 +924,12 @@ export class ListEnabledSubscriptionsRequest extends jspb.Message { export namespace ListEnabledSubscriptionsRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; sourceTypesList: Array< proto_notification_subscription_pb.Subscription.SourceTypeMap[keyof proto_notification_subscription_pb.Subscription.SourceTypeMap] >; + environmentId: string; }; } @@ -978,9 +978,6 @@ export namespace ListEnabledSubscriptionsResponse { } export class CreateSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasCommand(): boolean; clearCommand(): void; getCommand(): @@ -990,6 +987,9 @@ export class CreateSubscriptionRequest extends jspb.Message { value?: proto_notification_command_pb.CreateSubscriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreateSubscriptionRequest.AsObject; static toObject( @@ -1013,8 +1013,8 @@ export class CreateSubscriptionRequest extends jspb.Message { export namespace CreateSubscriptionRequest { export type AsObject = { - environmentNamespace: string; command?: proto_notification_command_pb.CreateSubscriptionCommand.AsObject; + environmentId: string; }; } @@ -1045,9 +1045,6 @@ export namespace CreateSubscriptionResponse { } export class DeleteSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -1060,6 +1057,9 @@ export class DeleteSubscriptionRequest extends jspb.Message { value?: proto_notification_command_pb.DeleteSubscriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeleteSubscriptionRequest.AsObject; static toObject( @@ -1083,9 +1083,9 @@ export class DeleteSubscriptionRequest extends jspb.Message { export namespace DeleteSubscriptionRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_notification_command_pb.DeleteSubscriptionCommand.AsObject; + environmentId: string; }; } @@ -1116,9 +1116,6 @@ export namespace DeleteSubscriptionResponse { } export class EnableSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -1131,6 +1128,9 @@ export class EnableSubscriptionRequest extends jspb.Message { value?: proto_notification_command_pb.EnableSubscriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): EnableSubscriptionRequest.AsObject; static toObject( @@ -1154,9 +1154,9 @@ export class EnableSubscriptionRequest extends jspb.Message { export namespace EnableSubscriptionRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_notification_command_pb.EnableSubscriptionCommand.AsObject; + environmentId: string; }; } @@ -1187,9 +1187,6 @@ export namespace EnableSubscriptionResponse { } export class DisableSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -1202,6 +1199,9 @@ export class DisableSubscriptionRequest extends jspb.Message { value?: proto_notification_command_pb.DisableSubscriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DisableSubscriptionRequest.AsObject; static toObject( @@ -1225,9 +1225,9 @@ export class DisableSubscriptionRequest extends jspb.Message { export namespace DisableSubscriptionRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_notification_command_pb.DisableSubscriptionCommand.AsObject; + environmentId: string; }; } @@ -1258,9 +1258,6 @@ export namespace DisableSubscriptionResponse { } export class UpdateSubscriptionRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -1291,6 +1288,9 @@ export class UpdateSubscriptionRequest extends jspb.Message { value?: proto_notification_command_pb.RenameSubscriptionCommand ): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdateSubscriptionRequest.AsObject; static toObject( @@ -1314,11 +1314,11 @@ export class UpdateSubscriptionRequest extends jspb.Message { export namespace UpdateSubscriptionRequest { export type AsObject = { - environmentNamespace: string; id: string; addSourceTypesCommand?: proto_notification_command_pb.AddSourceTypesCommand.AsObject; deleteSourceTypesCommand?: proto_notification_command_pb.DeleteSourceTypesCommand.AsObject; renameSubscriptionCommand?: proto_notification_command_pb.RenameSubscriptionCommand.AsObject; + environmentId: string; }; } diff --git a/ui/web-v2/src/proto/notification/service_pb.js b/ui/web-v2/src/proto/notification/service_pb.js index 9c6e17784e..58e2ef5818 100644 --- a/ui/web-v2/src/proto/notification/service_pb.js +++ b/ui/web-v2/src/proto/notification/service_pb.js @@ -4194,8 +4194,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), - id: jspb.Message.getFieldWithDefault(msg, 2, '') + id: jspb.Message.getFieldWithDefault(msg, 2, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -4235,14 +4235,14 @@ proto.bucketeer.notification.GetSubscriptionRequest.deserializeBinaryFromReader } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -4275,24 +4275,24 @@ proto.bucketeer.notification.GetSubscriptionRequest.prototype.serializeBinary = proto.bucketeer.notification.GetSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** - * optional string environment_namespace = 1; + * optional string id = 2; * @return {string} */ -proto.bucketeer.notification.GetSubscriptionRequest.prototype.getEnvironmentNamespace = +proto.bucketeer.notification.GetSubscriptionRequest.prototype.getId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') + jspb.Message.getFieldWithDefault(this, 2, '') ); }; @@ -4300,19 +4300,20 @@ proto.bucketeer.notification.GetSubscriptionRequest.prototype.getEnvironmentName * @param {string} value * @return {!proto.bucketeer.notification.GetSubscriptionRequest} returns this */ -proto.bucketeer.notification.GetSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; +proto.bucketeer.notification.GetSubscriptionRequest.prototype.setId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 2, value); +}; /** - * optional string id = 2; + * optional string environment_id = 3; * @return {string} */ -proto.bucketeer.notification.GetSubscriptionRequest.prototype.getId = +proto.bucketeer.notification.GetSubscriptionRequest.prototype.getEnvironmentId = function () { return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 2, '') + jspb.Message.getFieldWithDefault(this, 3, '') ); }; @@ -4320,11 +4321,10 @@ proto.bucketeer.notification.GetSubscriptionRequest.prototype.getId = * @param {string} value * @return {!proto.bucketeer.notification.GetSubscriptionRequest} returns this */ -proto.bucketeer.notification.GetSubscriptionRequest.prototype.setId = function ( - value -) { - return jspb.Message.setProto3StringField(this, 2, value); -}; +proto.bucketeer.notification.GetSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; if (jspb.Message.GENERATE_TO_OBJECT) { /** @@ -4543,7 +4543,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), sourceTypesList: @@ -4553,7 +4552,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { searchKeyword: jspb.Message.getFieldWithDefault(msg, 7, ''), disabled: (f = msg.getDisabled()) && - google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.BoolValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 9, '') }; if (includeInstance) { @@ -4593,10 +4593,6 @@ proto.bucketeer.notification.ListSubscriptionsRequest.deserializeBinaryFromReade } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -4642,6 +4638,10 @@ proto.bucketeer.notification.ListSubscriptionsRequest.deserializeBinaryFromReade ); msg.setDisabled(value); break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -4674,10 +4674,6 @@ proto.bucketeer.notification.ListSubscriptionsRequest.prototype.serializeBinary proto.bucketeer.notification.ListSubscriptionsRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -4710,6 +4706,10 @@ proto.bucketeer.notification.ListSubscriptionsRequest.serializeBinaryToWriter = google_protobuf_wrappers_pb.BoolValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(9, f); + } }; /** @@ -4730,26 +4730,6 @@ proto.bucketeer.notification.ListSubscriptionsRequest.OrderDirection = { DESC: 1 }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.ListSubscriptionsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.ListSubscriptionsRequest} returns this - */ -proto.bucketeer.notification.ListSubscriptionsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional int64 page_size = 2; * @return {number} @@ -4929,6 +4909,26 @@ proto.bucketeer.notification.ListSubscriptionsRequest.prototype.hasDisabled = return jspb.Message.getField(this, 8) != null; }; +/** + * optional string environment_id = 9; + * @return {string} + */ +proto.bucketeer.notification.ListSubscriptionsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 9, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.ListSubscriptionsRequest} returns this + */ +proto.bucketeer.notification.ListSubscriptionsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 9, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -5215,11 +5215,11 @@ if (jspb.Message.GENERATE_TO_OBJECT) { function (includeInstance, msg) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), sourceTypesList: - (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f + (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f, + environmentId: jspb.Message.getFieldWithDefault(msg, 5, '') }; if (includeInstance) { @@ -5260,10 +5260,6 @@ proto.bucketeer.notification.ListEnabledSubscriptionsRequest.deserializeBinaryFr } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -5283,6 +5279,10 @@ proto.bucketeer.notification.ListEnabledSubscriptionsRequest.deserializeBinaryFr msg.addSourceTypes(values[i]); } break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5315,10 +5315,6 @@ proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.serialize proto.bucketeer.notification.ListEnabledSubscriptionsRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -5331,26 +5327,10 @@ proto.bucketeer.notification.ListEnabledSubscriptionsRequest.serializeBinaryToWr if (f.length > 0) { writer.writePackedEnum(4, f); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.ListEnabledSubscriptionsRequest} returns this - */ -proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(5, f); + } }; /** @@ -5430,6 +5410,26 @@ proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.clearSour return this.setSourceTypesList([]); }; +/** + * optional string environment_id = 5; + * @return {string} + */ +proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 5, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.ListEnabledSubscriptionsRequest} returns this + */ +proto.bucketeer.notification.ListEnabledSubscriptionsRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 5, value); + }; + /** * List of repeated fields within this message type. * @private {!Array} @@ -5682,13 +5682,13 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), command: (f = msg.getCommand()) && proto_notification_command_pb.CreateSubscriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 3, '') }; if (includeInstance) { @@ -5728,10 +5728,6 @@ proto.bucketeer.notification.CreateSubscriptionRequest.deserializeBinaryFromRead } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto_notification_command_pb.CreateSubscriptionCommand(); @@ -5742,6 +5738,10 @@ proto.bucketeer.notification.CreateSubscriptionRequest.deserializeBinaryFromRead ); msg.setCommand(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -5774,10 +5774,6 @@ proto.bucketeer.notification.CreateSubscriptionRequest.prototype.serializeBinary proto.bucketeer.notification.CreateSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getCommand(); if (f != null) { writer.writeMessage( @@ -5787,26 +5783,10 @@ proto.bucketeer.notification.CreateSubscriptionRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.CreateSubscriptionRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.CreateSubscriptionRequest} returns this - */ -proto.bucketeer.notification.CreateSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(3, f); + } }; /** @@ -5851,6 +5831,26 @@ proto.bucketeer.notification.CreateSubscriptionRequest.prototype.hasCommand = return jspb.Message.getField(this, 2) != null; }; +/** + * optional string environment_id = 3; + * @return {string} + */ +proto.bucketeer.notification.CreateSubscriptionRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 3, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.CreateSubscriptionRequest} returns this + */ +proto.bucketeer.notification.CreateSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 3, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -5995,14 +5995,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_notification_command_pb.DeleteSubscriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6042,10 +6042,6 @@ proto.bucketeer.notification.DeleteSubscriptionRequest.deserializeBinaryFromRead } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -6060,6 +6056,10 @@ proto.bucketeer.notification.DeleteSubscriptionRequest.deserializeBinaryFromRead ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6092,10 +6092,6 @@ proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.serializeBinary proto.bucketeer.notification.DeleteSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -6109,26 +6105,10 @@ proto.bucketeer.notification.DeleteSubscriptionRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.DeleteSubscriptionRequest} returns this - */ -proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -6193,6 +6173,26 @@ proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.DeleteSubscriptionRequest} returns this + */ +proto.bucketeer.notification.DeleteSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -6337,14 +6337,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_notification_command_pb.EnableSubscriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6384,10 +6384,6 @@ proto.bucketeer.notification.EnableSubscriptionRequest.deserializeBinaryFromRead } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -6402,6 +6398,10 @@ proto.bucketeer.notification.EnableSubscriptionRequest.deserializeBinaryFromRead ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6434,10 +6434,6 @@ proto.bucketeer.notification.EnableSubscriptionRequest.prototype.serializeBinary proto.bucketeer.notification.EnableSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -6451,26 +6447,10 @@ proto.bucketeer.notification.EnableSubscriptionRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.EnableSubscriptionRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.EnableSubscriptionRequest} returns this - */ -proto.bucketeer.notification.EnableSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -6535,6 +6515,26 @@ proto.bucketeer.notification.EnableSubscriptionRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.notification.EnableSubscriptionRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.EnableSubscriptionRequest} returns this + */ +proto.bucketeer.notification.EnableSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -6679,14 +6679,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && proto_notification_command_pb.DisableSubscriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -6726,10 +6726,6 @@ proto.bucketeer.notification.DisableSubscriptionRequest.deserializeBinaryFromRea } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -6744,6 +6740,10 @@ proto.bucketeer.notification.DisableSubscriptionRequest.deserializeBinaryFromRea ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -6776,10 +6776,6 @@ proto.bucketeer.notification.DisableSubscriptionRequest.prototype.serializeBinar proto.bucketeer.notification.DisableSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -6793,26 +6789,10 @@ proto.bucketeer.notification.DisableSubscriptionRequest.serializeBinaryToWriter .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.DisableSubscriptionRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.DisableSubscriptionRequest} returns this - */ -proto.bucketeer.notification.DisableSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; /** @@ -6877,6 +6857,26 @@ proto.bucketeer.notification.DisableSubscriptionRequest.prototype.hasCommand = return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.notification.DisableSubscriptionRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.DisableSubscriptionRequest} returns this + */ +proto.bucketeer.notification.DisableSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 4, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -7021,7 +7021,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), addSourceTypesCommand: (f = msg.getAddSourceTypesCommand()) && @@ -7040,7 +7039,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { proto_notification_command_pb.RenameSubscriptionCommand.toObject( includeInstance, f - ) + ), + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -7080,10 +7080,6 @@ proto.bucketeer.notification.UpdateSubscriptionRequest.deserializeBinaryFromRead } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -7117,6 +7113,10 @@ proto.bucketeer.notification.UpdateSubscriptionRequest.deserializeBinaryFromRead ); msg.setRenameSubscriptionCommand(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -7149,10 +7149,6 @@ proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.serializeBinary proto.bucketeer.notification.UpdateSubscriptionRequest.serializeBinaryToWriter = function (message, writer) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -7184,26 +7180,10 @@ proto.bucketeer.notification.UpdateSubscriptionRequest.serializeBinaryToWriter = .serializeBinaryToWriter ); } - }; - -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.notification.UpdateSubscriptionRequest} returns this - */ -proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; /** @@ -7352,6 +7332,26 @@ proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.hasRenameSubscr return jspb.Message.getField(this, 5) != null; }; +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.notification.UpdateSubscriptionRequest} returns this + */ +proto.bucketeer.notification.UpdateSubscriptionRequest.prototype.setEnvironmentId = + function (value) { + return jspb.Message.setProto3StringField(this, 6, value); + }; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/ui/web-v2/src/proto/push/service_pb.d.ts b/ui/web-v2/src/proto/push/service_pb.d.ts index bd851b92ea..e5e7e5b67d 100644 --- a/ui/web-v2/src/proto/push/service_pb.d.ts +++ b/ui/web-v2/src/proto/push/service_pb.d.ts @@ -7,9 +7,6 @@ import * as proto_push_push_pb from '../../proto/push/push_pb'; import * as proto_push_command_pb from '../../proto/push/command_pb'; export class CreatePushRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - hasCommand(): boolean; clearCommand(): void; getCommand(): proto_push_command_pb.CreatePushCommand | undefined; @@ -28,6 +25,9 @@ export class CreatePushRequest extends jspb.Message { getFcmServiceAccount_asB64(): string; setFcmServiceAccount(value: Uint8Array | string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CreatePushRequest.AsObject; static toObject( @@ -51,11 +51,11 @@ export class CreatePushRequest extends jspb.Message { export namespace CreatePushRequest { export type AsObject = { - environmentNamespace: string; command?: proto_push_command_pb.CreatePushCommand.AsObject; tagsList: Array; name: string; fcmServiceAccount: Uint8Array | string; + environmentId: string; }; } @@ -93,9 +93,6 @@ export namespace CreatePushResponse { } export class ListPushesRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getPageSize(): number; setPageSize(value: number): void; @@ -115,6 +112,9 @@ export class ListPushesRequest extends jspb.Message { getSearchKeyword(): string; setSearchKeyword(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ListPushesRequest.AsObject; static toObject( @@ -138,12 +138,12 @@ export class ListPushesRequest extends jspb.Message { export namespace ListPushesRequest { export type AsObject = { - environmentNamespace: string; pageSize: number; cursor: string; orderBy: ListPushesRequest.OrderByMap[keyof ListPushesRequest.OrderByMap]; orderDirection: ListPushesRequest.OrderDirectionMap[keyof ListPushesRequest.OrderDirectionMap]; searchKeyword: string; + environmentId: string; }; export interface OrderByMap { @@ -208,9 +208,6 @@ export namespace ListPushesResponse { } export class DeletePushRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -219,6 +216,9 @@ export class DeletePushRequest extends jspb.Message { getCommand(): proto_push_command_pb.DeletePushCommand | undefined; setCommand(value?: proto_push_command_pb.DeletePushCommand): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): DeletePushRequest.AsObject; static toObject( @@ -242,9 +242,9 @@ export class DeletePushRequest extends jspb.Message { export namespace DeletePushRequest { export type AsObject = { - environmentNamespace: string; id: string; command?: proto_push_command_pb.DeletePushCommand.AsObject; + environmentId: string; }; } @@ -275,9 +275,6 @@ export namespace DeletePushResponse { } export class UpdatePushRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; - getId(): string; setId(value: string): void; @@ -310,6 +307,9 @@ export class UpdatePushRequest extends jspb.Message { getName(): google_protobuf_wrappers_pb.StringValue | undefined; setName(value?: google_protobuf_wrappers_pb.StringValue): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): UpdatePushRequest.AsObject; static toObject( @@ -333,13 +333,13 @@ export class UpdatePushRequest extends jspb.Message { export namespace UpdatePushRequest { export type AsObject = { - environmentNamespace: string; id: string; addPushTagsCommand?: proto_push_command_pb.AddPushTagsCommand.AsObject; deletePushTagsCommand?: proto_push_command_pb.DeletePushTagsCommand.AsObject; renamePushCommand?: proto_push_command_pb.RenamePushCommand.AsObject; tagsList: Array; name?: google_protobuf_wrappers_pb.StringValue.AsObject; + environmentId: string; }; } @@ -377,8 +377,8 @@ export namespace UpdatePushResponse { } export class GetPushRequest extends jspb.Message { - getEnvironmentNamespace(): string; - setEnvironmentNamespace(value: string): void; + getEnvironmentId(): string; + setEnvironmentId(value: string): void; getId(): string; setId(value: string): void; @@ -406,7 +406,7 @@ export class GetPushRequest extends jspb.Message { export namespace GetPushRequest { export type AsObject = { - environmentNamespace: string; + environmentId: string; id: string; }; } diff --git a/ui/web-v2/src/proto/push/service_pb.js b/ui/web-v2/src/proto/push/service_pb.js index 7191ad07ce..69b7a310c0 100644 --- a/ui/web-v2/src/proto/push/service_pb.js +++ b/ui/web-v2/src/proto/push/service_pb.js @@ -335,14 +335,14 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), command: (f = msg.getCommand()) && proto_push_command_pb.CreatePushCommand.toObject(includeInstance, f), tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, name: jspb.Message.getFieldWithDefault(msg, 4, ''), - fcmServiceAccount: msg.getFcmServiceAccount_asB64() + fcmServiceAccount: msg.getFcmServiceAccount_asB64(), + environmentId: jspb.Message.getFieldWithDefault(msg, 6, '') }; if (includeInstance) { @@ -383,10 +383,6 @@ proto.bucketeer.push.CreatePushRequest.deserializeBinaryFromReader = function ( } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = new proto_push_command_pb.CreatePushCommand(); reader.readMessage( @@ -407,6 +403,10 @@ proto.bucketeer.push.CreatePushRequest.deserializeBinaryFromReader = function ( var value = /** @type {!Uint8Array} */ (reader.readBytes()); msg.setFcmServiceAccount(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -437,10 +437,6 @@ proto.bucketeer.push.CreatePushRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getCommand(); if (f != null) { writer.writeMessage( @@ -461,28 +457,12 @@ proto.bucketeer.push.CreatePushRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeBytes(5, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(6, f); + } }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.push.CreatePushRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.push.CreatePushRequest} returns this - */ -proto.bucketeer.push.CreatePushRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional CreatePushCommand command = 2; * @return {?proto.bucketeer.push.CreatePushCommand} @@ -621,6 +601,27 @@ proto.bucketeer.push.CreatePushRequest.prototype.setFcmServiceAccount = return jspb.Message.setProto3BytesField(this, 5, value); }; +/** + * optional string environment_id = 6; + * @return {string} + */ +proto.bucketeer.push.CreatePushRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 6, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.push.CreatePushRequest} returns this + */ +proto.bucketeer.push.CreatePushRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 6, value); +}; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -820,12 +821,12 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), cursor: jspb.Message.getFieldWithDefault(msg, 3, ''), orderBy: jspb.Message.getFieldWithDefault(msg, 4, 0), orderDirection: jspb.Message.getFieldWithDefault(msg, 5, 0), - searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, '') + searchKeyword: jspb.Message.getFieldWithDefault(msg, 6, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 7, '') }; if (includeInstance) { @@ -866,10 +867,6 @@ proto.bucketeer.push.ListPushesRequest.deserializeBinaryFromReader = function ( } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {number} */ (reader.readInt64()); msg.setPageSize(value); @@ -896,6 +893,10 @@ proto.bucketeer.push.ListPushesRequest.deserializeBinaryFromReader = function ( var value = /** @type {string} */ (reader.readString()); msg.setSearchKeyword(value); break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -926,10 +927,6 @@ proto.bucketeer.push.ListPushesRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt64(2, f); @@ -950,6 +947,10 @@ proto.bucketeer.push.ListPushesRequest.serializeBinaryToWriter = function ( if (f.length > 0) { writer.writeString(6, f); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(7, f); + } }; /** @@ -970,26 +971,6 @@ proto.bucketeer.push.ListPushesRequest.OrderDirection = { DESC: 1 }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.push.ListPushesRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.push.ListPushesRequest} returns this - */ -proto.bucketeer.push.ListPushesRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional int64 page_size = 2; * @return {number} @@ -1084,6 +1065,27 @@ proto.bucketeer.push.ListPushesRequest.prototype.setSearchKeyword = function ( return jspb.Message.setProto3StringField(this, 6, value); }; +/** + * optional string environment_id = 7; + * @return {string} + */ +proto.bucketeer.push.ListPushesRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 7, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.push.ListPushesRequest} returns this + */ +proto.bucketeer.push.ListPushesRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 7, value); +}; + /** * List of repeated fields within this message type. * @private {!Array} @@ -1361,11 +1363,11 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), command: (f = msg.getCommand()) && - proto_push_command_pb.DeletePushCommand.toObject(includeInstance, f) + proto_push_command_pb.DeletePushCommand.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 4, '') }; if (includeInstance) { @@ -1406,10 +1408,6 @@ proto.bucketeer.push.DeletePushRequest.deserializeBinaryFromReader = function ( } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -1422,6 +1420,10 @@ proto.bucketeer.push.DeletePushRequest.deserializeBinaryFromReader = function ( ); msg.setCommand(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1452,10 +1454,6 @@ proto.bucketeer.push.DeletePushRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -1468,28 +1466,12 @@ proto.bucketeer.push.DeletePushRequest.serializeBinaryToWriter = function ( proto_push_command_pb.DeletePushCommand.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(4, f); + } }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.push.DeletePushRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.push.DeletePushRequest} returns this - */ -proto.bucketeer.push.DeletePushRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional string id = 2; * @return {string} @@ -1544,6 +1526,27 @@ proto.bucketeer.push.DeletePushRequest.prototype.hasCommand = function () { return jspb.Message.getField(this, 3) != null; }; +/** + * optional string environment_id = 4; + * @return {string} + */ +proto.bucketeer.push.DeletePushRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 4, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.push.DeletePushRequest} returns this + */ +proto.bucketeer.push.DeletePushRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -1700,7 +1703,6 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, ''), addPushTagsCommand: (f = msg.getAddPushTagsCommand()) && @@ -1718,7 +1720,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, name: (f = msg.getName()) && - google_protobuf_wrappers_pb.StringValue.toObject(includeInstance, f) + google_protobuf_wrappers_pb.StringValue.toObject(includeInstance, f), + environmentId: jspb.Message.getFieldWithDefault(msg, 8, '') }; if (includeInstance) { @@ -1759,10 +1762,6 @@ proto.bucketeer.push.UpdatePushRequest.deserializeBinaryFromReader = function ( } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); - break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setId(value); @@ -1804,6 +1803,10 @@ proto.bucketeer.push.UpdatePushRequest.deserializeBinaryFromReader = function ( ); msg.setName(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setEnvironmentId(value); + break; default: reader.skipField(); break; @@ -1834,10 +1837,6 @@ proto.bucketeer.push.UpdatePushRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); - if (f.length > 0) { - writer.writeString(1, f); - } f = message.getId(); if (f.length > 0) { writer.writeString(2, f); @@ -1878,28 +1877,12 @@ proto.bucketeer.push.UpdatePushRequest.serializeBinaryToWriter = function ( google_protobuf_wrappers_pb.StringValue.serializeBinaryToWriter ); } + f = message.getEnvironmentId(); + if (f.length > 0) { + writer.writeString(8, f); + } }; -/** - * optional string environment_namespace = 1; - * @return {string} - */ -proto.bucketeer.push.UpdatePushRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; - -/** - * @param {string} value - * @return {!proto.bucketeer.push.UpdatePushRequest} returns this - */ -proto.bucketeer.push.UpdatePushRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; - /** * optional string id = 2; * @return {string} @@ -2118,6 +2101,27 @@ proto.bucketeer.push.UpdatePushRequest.prototype.hasName = function () { return jspb.Message.getField(this, 7) != null; }; +/** + * optional string environment_id = 8; + * @return {string} + */ +proto.bucketeer.push.UpdatePushRequest.prototype.getEnvironmentId = + function () { + return /** @type {string} */ ( + jspb.Message.getFieldWithDefault(this, 8, '') + ); + }; + +/** + * @param {string} value + * @return {!proto.bucketeer.push.UpdatePushRequest} returns this + */ +proto.bucketeer.push.UpdatePushRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 8, value); +}; + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -2317,7 +2321,7 @@ if (jspb.Message.GENERATE_TO_OBJECT) { ) { var f, obj = { - environmentNamespace: jspb.Message.getFieldWithDefault(msg, 1, ''), + environmentId: jspb.Message.getFieldWithDefault(msg, 1, ''), id: jspb.Message.getFieldWithDefault(msg, 2, '') }; @@ -2361,7 +2365,7 @@ proto.bucketeer.push.GetPushRequest.deserializeBinaryFromReader = function ( switch (field) { case 1: var value = /** @type {string} */ (reader.readString()); - msg.setEnvironmentNamespace(value); + msg.setEnvironmentId(value); break; case 2: var value = /** @type {string} */ (reader.readString()); @@ -2397,7 +2401,7 @@ proto.bucketeer.push.GetPushRequest.serializeBinaryToWriter = function ( writer ) { var f = undefined; - f = message.getEnvironmentNamespace(); + f = message.getEnvironmentId(); if (f.length > 0) { writer.writeString(1, f); } @@ -2408,24 +2412,22 @@ proto.bucketeer.push.GetPushRequest.serializeBinaryToWriter = function ( }; /** - * optional string environment_namespace = 1; + * optional string environment_id = 1; * @return {string} */ -proto.bucketeer.push.GetPushRequest.prototype.getEnvironmentNamespace = - function () { - return /** @type {string} */ ( - jspb.Message.getFieldWithDefault(this, 1, '') - ); - }; +proto.bucketeer.push.GetPushRequest.prototype.getEnvironmentId = function () { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, '')); +}; /** * @param {string} value * @return {!proto.bucketeer.push.GetPushRequest} returns this */ -proto.bucketeer.push.GetPushRequest.prototype.setEnvironmentNamespace = - function (value) { - return jspb.Message.setProto3StringField(this, 1, value); - }; +proto.bucketeer.push.GetPushRequest.prototype.setEnvironmentId = function ( + value +) { + return jspb.Message.setProto3StringField(this, 1, value); +}; /** * optional string id = 2;